반응형
지오코딩(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
코드
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
또 어차피 미세먼지 근접 관측소를 위해서 카카오맵 tm좌표 변환계api를 이용할 것이기 때문에 통일성 있게 카카오맵 api를 사용하기로 했다.
카카오맵 api json에서 데이터를 호출하는 코드
si = addrData['documents'][0]['address']['region_2depth_name'];
addr = addrData['documents'][0]['address']['region_3depth_name'];
중간에 [0]을 안 썼더니 에러가 떠서 한참 헤맸다...;
반응형
'앱 프로그래밍 > Flutter' 카테고리의 다른 글
플러터로 기상청 날씨 앱 만들기 일지 5. 기상청 API 데이터 연동 오류 수정(HTTP service에러는 해결 불가능...) (2) | 2022.01.14 |
---|---|
플러터로 기상청 날씨 앱 만들기 일지 4. 데이터 연동2(에어코리아 API) (0) | 2022.01.09 |
플러터 API key 숨기기 (0) | 2022.01.09 |
플러터로 기상청 날씨 앱 만들기 일지 2. 데이터 연동(기상청 API) (0) | 2022.01.05 |
플러터로 기상청 날씨 앱 만들기 일지 1. UI 디자인 (0) | 2022.01.02 |
[오류해결] unhandled exception: user denied permissions to access the device's location. (7) | 2021.12.28 |