지도 기능 위주로 서비스를 파악하기 위해
아래의 몇가지를 중점적인 목표로 잡고 아래의 글들을 작성하였다.
현재 기획된 네비게이션 서비스 수준으로는 주행기록밖에 남기지 않기 때문에, 사용자들은 타 네비게이션 어플리케이션과 공존해서 사용할 수 밖에 없다고 생각한다.
기획상으로는 주행 중 타 어플리케이션(타 네비게이션 어플 포함)을 열면 안전 운전점수가 감소된다. 이 부분에 대한 구체적인 기획이 추가되어야 할 것 같다.
예상되는 필요 기능들은, 도로 정보 확인, 주행 기록, 타 어플리케이션 실행 확인, 주행 목록 확인, 백그라운드 실행 등의 기능이 필요하다.
기존에 개발된 프로젝트에서 사용한 지도 관련 패키지 목록이다.
권한 등의 간단한 패키지들은 생략했다.
1) flutter_map
2) flutter_background_geolocation pub.dev
기존 패키지들을 사용하는 것이 BEST 인가?
네비게이션 어플리케이션 개발을 위한 flutter 커뮤니티 추천 지도 패키지와 Native단에서 사용할 수 있는 인기 네비게이션 API글들을 참조하여 정리해보았다.
세계 지도를 동일한 사용 환경으로 제공하면서 많은 지도 기능들을 제공받으려면 GOOGLE MAP이 베스트이다.
flutter에서도 패키지로 제공해주는 구글 API부터 안전운행에서 필요한 정보들을 얼만큼 제공해주는지 위주로 분석해보았다.

...

위키에서 현시점 대한민국 구글 지도에서 제공하는 상세 기능 현황에 대해서 확인할 수 있다.
링크를 보면 확인할 수 있듯이, 국내에서는 많은 서비스들이 미지원되고 있다.
나중에 기능 추가 시에, 여기에 들어가서 지원 여부를 확인하면 될 것 같다.
우리가 가장 중요하게 필요하는 기능인 가장 가까운 도로의 제한 속도 API 사용법 에 대해서 확인할 수 있다. 제공되는 국가이기만 하면 간단하다. 해당 문서를 참조하여 추후 미제공 국가와 위치정보 제공 형식을 최대한 통일하려고 한다.

어떤 지도 API를 쓰더라도 국내 맵 API 가 아닌 이상, 국내 도로교통 정보를 받아올 수 없기 때문에 국토교통부가 제공하는 도로 정보를 데이터베이스화 시켜서 작업하는 방법에 대해 정리해보았다.
내부 데이터베이스는 그 어떤 것보다 속도가 빠르며, 서버 트래픽도 발생하지 않는다는 장점이 있지만, 주기적으로 정보를 업데이트 해줘야하는 단점이 존재한다.
개발 순서는 아래와 같다.
한국 도로교통정보에 한국의 도로 정보(노드 : 교차로 정보, 링크 : 도로 정보)를 지리데이터 형식인 SHAPEFILE 파일 형식과 api 형식으로 제공한다.
SHAPEFILE 파일 형식이란?
국토교통부에서 제공해주는 파일을 다운받아서 열어보면 같은 이름의 여러 확장자 형식들의 파일들이 나열되어 있는데 관련문서를 찾아서 읽어보니, 여러 확장자 파일이 하나로 합쳐져서 돌아가는 공간데이터라고 한다. 처음 알았다.
어플리케이션 내부 데이터베이스를 생성하고 사용하기 위해 SQLite 패키지를 사용할 예정이다. 우선 컴퓨터에서 데이터베이스를 만들고 테스트해보기 위해, PC SQLite 무료 프로그램인 DB Browser을 설치하여 테스트를 진행했다.
대략 1~2달 단위로 지리 정보가 갱신된다. 주기적으로 서버에 데이터베이스화 후, 단말기 내부 SQLite 데이터베이스에 정보를 업데이트 하는 작업이 필요하다.
사용자가 어플리케이션 실행 시, 서버 정보과 휴대폰 정보 비교 후, 다를 경우 최신 정보로 업데이트 하도록 SQLite 버전 관리 작업이 필요하다.
노드
https://www.data.go.kr/data/15057463/openapi.do?recommendDataYn=Y
링크
https://www.data.go.kr/data/15056674/openapi.do?recommendDataYn=Y
국내 API의 장점은 구글 맵에서 제공하지 않는 많은 데이터들을 사용자에게 제공해줄 수 있다. 제한 속도를 포함한 기본적인 국내 도로 교통 정보 뿐 아니라 빠른 길 추천 및 현재 길 막히는지 여부까지, 한번 개발해두면 쉽게 관리 및 확인할 수 있다.
flutter
kakao_flutter_sdk패키지
- 카카오에서 직접 제공하는 flutter 패키지 이지만, 네비게이션의 모든 기능을 포함한 sdk 형태가 아닌 네비게이션 앱을 실행시키는 단순한 API이다.
- 내 어플리케이션 내에서 Kakao 지도와 가까운 도로의 제한속도를 제공받고 싶은 경우, Kakao Navi sdk with UI를 사용하여 각 네이티브별로 개발을 진행해야 한다.
Android docs || iOS docs
TMAP API 연동 고려
- Road API를 사용하면 가까운 도로의 제한속도를 던져줌. 가능한 경우, Google MAP API와 연동해서 개발하거나(네이티브별 TMAP SDK 내장할 필요 없음/폴리라인 등의 기능은 구글맵 제공 사용), 각 네이티브별로 TMAP NAVI를 사용하여 개발해야 함.
flutter_map : 사용자 최적화하여 다양한 기능을 제공할 수 있도록 권한을 많이 주지만 그만큼 직접 구현해야할 내용이 많음 google_maps_flutter : 해당 라이브러리는 google map을 사용하여 사용자에게 다양한 기능을 제공할 수 있음. 지도 에니메이션 구축 등geolocator : 위치 정보를 받아오는 가장 많이 사용하는 패키지 flutter_background_geolocation : 꽤 많은 기능들이 추가된 위치정보 사용 패키지 현재 개발하는데 걸리는 시간과 비용을 고려할 때, 가장 베스트는 flutter 에서
google_maps_flutter와flutter_background_geolocation를 사용하며, 국내 도로교통정보는국내 노드링크 API를 사용하여 실시간 도로별 제한속도를 받아와서 처리하는 것이다.
비용이 부담스러울 때, Native에서 저렴하게 사용가능한 나름 괜찮은 지도 API들이 있다. 간단하게 홈페이지에서 둘러보았는데 카카오나 구글 맵보다 기본 제공 기능들은 당연히 부족하기 때문에 당연히 개발하는데 시간이 많이 걸리겠지만, 퀄리티가 나쁘지 않아서 기록으로 남겨둔다.
시간이 될 때, GPS 신호 정확도에 대한 글을 써보려고 한다.
지도 : 해외 Google map / 국내 kakao map
센서 :geolocatororflutter_background_geolocation둘 다 써보고 최종으로 어떤 걸 사용할지 결정하기
서버 :postgreSQL서버 사용 예정
결론
앱이 백그라운드에서 실행 중일 때 지속적인 위치 추적이 필요하거나 정기적인 위치 업데이트를 수신해야하기 때문에 Flutter Background Geolocation 패키지를 사용하기로 함.
각 국가별 제공되는 위치 기능표
https://developers.google.com/maps/coverage?hl=ko
현시점 대한민국 구글 지도에서 제공하는 상세 기능 현황
https://namu.wiki/w/구글%20지도/대한민국
구글을 대체할만한 저렴하나 Native 지도 API
https://nordicapis.com/5-powerful-alternatives-to-google-maps-api
https://www.mappr.co/google-places-api-alternatives
viewt https://viewt.ktdb.go.kr/cong/map/page.do
국가교통DB센터 https://www.ktdb.go.kr/www/index.do
vworld api 레퍼런스 https://www.vworld.kr/dev/v4dv_2ddataguide2_s003.do?svcIde=moctlink
네이버 지도 공식문서 https://api.ncloud-docs.com/docs/ai-naver-mapsdirections15-driving
감사합니다 잘 읽었습니다.