240328 TIL - 공공데이터 포털 버스 API 돌아보기

DoDoBest

·

2024. 3. 29. 00:04

오늘도 이전 프로젝트 코드들을 다시 점검했으며, 주된 목표는 API 확인 및 로직 간소화였습니다.

 

초정밀 버스 구현을 위한 API 다시 확인해보기

 

이전에 카카오에서 제공하는 초정밀 버스를 서울시와 경기도 API를 이용해 구현하고자 했습니다.

경기도는 버스 좌표를 제공하지 않아 구현하지 못했지만, 서울시는 API를 통해 버스의 실시간 GPS 좌표를 제공하여 구현을 시도했습니다.

 

아래 영상은 당시 API를 이용해 서울시 버스의 실시간 좌표를 추적하며 테스트해본 것입니다.

 

 

API를 통해 위치를 업데이트할 때마다 버스 마커가 깜빡이도록 설정했습니다. 최소한 5초는 지나야 위치가 업데이트 되어, 갱신 주기를 5초로 설정했습니다.

 

당시에는 이 기능을 빼는 것으로 결정했습니다. 구로디지털단지 주변의 일부 버스는 30초 ~ 1분 주기로 위치가 업데이트 됐는데, 이러한 이유를 사용자에게 설명하면서까지 넣기에는 정보가 온전하지 않기 때문입니다.

 

 

원래 목표로 하던 버스의 움직임은 다음과 같습니다.

 

 

 

왜 서울시와 경기도는 안 되는 걸까요?

서울시와 경기도는 버스가 매우 많다보니, 다른 시와 같이 1초 단위로 GPS 정보를 보내려면 버스에 부착된 단말기도 변경해야 하며, 단말기가 보내주는 GPS 정보를 처리할 서버도 변경해야 한다고 합니다. 이것은 "사업"으로 진행해야 하는 규모이기에, 당장은 반영이 힘들다는 답변을 받았습니다.

2022년 11월에 문의 드렸을 때도 검토는 해보겠지만 힘들다는 답변을 받았고, 2023년 8~9월에 문의 드렸을 때(https://dodobest.tistory.com/16)도 검토는 해보겠지만 힘들다는 답변을 받았었습니다.

 

 

버스 API 개선하기

버스의 특정 노선 막차 시간이 아닌, 특정 정류소의 막차 시간을 구하기 위해서는 다수의 API를 활용해야 합니다.

 

먼저 번호를 통해 해당 번호를 포함한 버스의 노선 목록을 가져오고, 원하는 노선의 고유 번호를 알아냅니다.

그 다음으로 노선 고유 번호를 통해 버스가 정차하는 정류소 목록을 가져오고, 원하는 정류소의 막차 시간을 알아냅니다.

 

보통 정류소는 동일한 이름의 정류소가 마주보고 있거나, 같은 이름의 정류소가 인접한 곳에 위치합니다. 이런 경우에는 정류소의 GPS 좌표 값을 이용해 원하는 정류소를 판별해야 합니다.

 

 

 

기존에는 GPS 소숫점 다섯자리까지 확인하면 특정할 수 있었으나, 오늘 아래와 같이 다섯자리로도 판별되지 않는 인접한 정류소를 발견했습니다. 그래서 소숫점 여섯자리까지 확인하도록 코드를 변경했습니다.

 

 

 

또한 서울시를 경유한다고 해도, 경기도 소속 버스인 경우도 있으며, 일부 경기도 소속 버스는 서울시 버스 API에서 노선 정보가 조회되지 않습니다.

 

그래서 버스가 서울 소속인지, 경기도 소속인지 판별하는 작업의 선행이 필요합니다.

 

서울과 경기도의 노선 정보 조회를 한 번에 할 수 있는 API를 찾았다고 생각해서 오늘 테스트를 해봤는데, 일부 경기도 버스는 조회되지 않는 문제가 있었습니다.

 

그래서 결론!

경기도와 서울 노선을 한 번에 조회하여 코드 양을 줄이고자 했으나, 일부 데이터 누락으로 줄이지 못했습니다.

 

지하철은요~?

버스 API를 검증하는 데 하루를 보냈습니다. 그런데 지하철은 호선마다 회사가 다르고, API 제공 여부도 모두 다르기에, 모두 확인해보기에는 시간이 많이 걸릴 것 같고 된다는 보장도 없기에 기존 코드를 수정하지 않기로 결정했습니다. 아래의 정보는 2022년 12월 기준 API 제공 현황입니다.

 

현재 공공데이터 포털 API에서 제공하는 막차 시간은 서울교통공사 소속인 1~8호선입니다. 경의중앙선, 신분당선 등은 서울교통공사의 지하철이 아니기 때문에 해당 API에서 막차 시간을 확인할 수 없으며, 각 회사에서 공공데이터 포털에 API를 등록하지 않았기 때문에 막차 시간을 조회할 수 없습니다. 9호선도 서울교통공사 소속이지만 막차시간 API는 제공하지 않고 있습니다.

 

내일 할 일

API 관련 작업은 이쯤에서 마무리하고, 다음으로 Android 개발 부분 코드들을 개선할 예정입니다.