본문 바로가기
앱 프로그래밍/Flutter

플러터로 기상청 날씨 앱 만들기 일지 3. 역지오코딩(위도, 경도 -> 주소 불러오기)

by 청량리 물냉면 2022. 1. 8.
반응형
지오코딩(Geocoding)은 고유명칭(주소나 산,호수의 이름등)을 가지고 위도와 경도의 좌표값를 얻는 것을 말한다. 이처럼 고유명칭이나 개별이름등을 가지고 검색하는것과는 달리 반대로 위도와 경도값으로부터 고유명칭을 얻는것은 리버스 지오코딩(reverse Geocoding)이 된다.

출처: 위키백과

 

역지오코딩 정보 찾느라 고생을 많이 했다. 역지오코딩 해주는 공공api는 없는지 찾아봤는데 없는 것 같다... v월드에 가입해서 역지오코딩 api를 이용해 봤는데 정보가 제대로 뜨지 않았다. 

그래서 결국 구글, 네이버, 카카오에서 제공하는 api를 사용하기로 했다.  

 

 

구글맵 api 역지오코딩 코드

//final String googleApiKey = FlutterConfig.get('google_map_api');

String geoAPI ='https://maps.googleapis.com/maps/api/geocode/json?latlng=$userLati,$userLongi&key=$googleApiKey&language=ko';

GeoNetwork geoNetwork = GeoNetwork(geoAPI);
//jason data
var doroData = await geoNetwork.getDoro();
var si = doroData['results'][1]['address_components'][2]['short_name'];
var addr = doroData['results'][1]['address_components'][1]['short_name'];
print(si);
print(addr);

 

 

카카오맵 api 역지오코딩

https://developers.kakao.com/docs/latest/ko/local/dev-guide

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

코드

var kakaoGeoUrl = Uri.parse('https://dapi.kakao.com/v2/local/geo/coord2address.json?x=$userLongi&y=$userLati&input_coord=WGS84');
var kakaoGeo = await http.get(kakaoGeoUrl, headers: {"Authorization": "KakaoAK $kakaoApiKey"});
//jason data
String addr = kakaoGeo.body;
var addrData = jsonDecode(addr);

 

카카오맵api 예시는 봐도 모르겠어서 구글링을 또 한참 하다가 위와 같은 코드를 작성했다. 

 

 

구글과 카카오맵 모두 정상적으로 동작했지만 구글은 한 번 restart할 때마다 api 호출 카운팅이 올라가니 과금이 두렵기도 했고... (구글 과금 정책 상 지오코딩 api호출 월간 40,000회 무료. 카카오는 일 30만건 무료인 걸로 알고 있다.)

 

출처: https://devtalk.kakao.com/t/api-30/115613

 

카카오 데브톡

카카오 데브톡. 카카오 플랫폼 서비스 관련 질문 및 답변을 올리는 개발자 커뮤니티 사이트입니다.

devtalk.kakao.com

 

또 어차피 미세먼지 근접 관측소를 위해서 카카오맵 tm좌표 변환계api를 이용할 것이기 때문에 통일성 있게 카카오맵 api를 사용하기로 했다. 

 

 

카카오맵 api json에서 데이터를 호출하는 코드

si = addrData['documents'][0]['address']['region_2depth_name'];
addr = addrData['documents'][0]['address']['region_3depth_name'];

중간에 [0]을 안 썼더니 에러가 떠서 한참 헤맸다...;

 

반응형