티스토리 뷰

728x90
반응형

[1] 개념

 

- 지오코딩 (Geocoding) 

 

주소 (ex. '1600 Amphitheatre Parkway, Mountain View, CA') 를

지리적 좌표 (위도 37.423021, 경도 -122.083739) 로 변환하는 것을 말합니다. 

 

- 역지오코딩 (Reverse geocoding)

 

지리적 좌표 (위도 37.423021, 경도 -122.083739) 를

사람이 읽을 수 있는 주소 (ex. '1600 Amphitheatre Parkway, Mountain View, CA') 로 변환하는 것을 말합니다. 

 

 

저는 reverse geocoding을 테스트해보고 싶어서

구글맵 api를 사용해보겠습니다. 

 

[2] 문서보기 

 

깃헙에 들어가서 사용법을 봐줍니다.

github.com/googlemaps/google-maps-services-python 

 

 

API Key가 있어야하네요..!! 

 

 

[3] API Key 발급받기

 

문서에서 하라는 대로 해줄게요

 

 

 

우선 Google Cloud console 에 들어가서 새 프로젝트를 만들어줍니다.

(프로젝트 이름은 나중에 환경설정에서 바꿀 수 있어서 일단 이렇게 해줌)

 

 

 

Maps API Library page 에가서 

Geocoding API 를 선택해줍니다.

 

 

그럼 가격, 문서 등 정보가 있는 페이지가 나오는데 사용버튼을 눌러주세요

 

 

 

 

그리고 햄버거 버튼 > API 및 서비스 > 사용자 인증 정보 들어와서

 

 

사용자 인증정보 만들기 > API 키 누르면 

 

 

이렇게 하나가 발급됩니다!

 

근데 경고로 이렇게 나오고 있는데요 

 

 

지금은 제한 > 없음 체크해놓은 상태여서 그런데 

 

 

 

제한 > 특정항목 을 선택하면 경고 사라집니다...!! (저는 테스트하고 나중에 설정해주려구요)

 

 

그리고

console.cloud.google.com/project/_/billing/enable 에 들어가서 

카드등록을 해줍니다. 

 

안하면 API 요청할때 request_denied 에러 납니다ㅠㅠ 

 

 

 

신용카드를 요청하는 이유는 자동 가입을 방지하기 위해서 이고

유료계정으로 직접 업그레이드 해야 요금청구가 된다고 하니 안심하고 해주면 됩니다

 

카드 등록하면 무료체험판이 시작되는데

90일 300달러 크레딧을 제공한다고 합니다 (참고: Google Cloud 무료 프로그램)

 

 

[4] API 테스트 해보기

 

이제 API Key를 발급받았으니까 테스트를 해볼게요.

 

 

4.1 가상환경 & 프로젝트 만들기

 

파이참을 이용해서 만들어줄게요-!

가상환경이름은 map_env

프로젝트 이름은 map-api  
(map_api 라고 해줄까 고민하다가 보통 중간 하이픈으로 장고 플젝 많이 해주는 것 같아서 해줌. 검색해봐야겠음) 

 

라고 만들어줍니다.

 

 

 

4.2 가상환경에 구글맵 패키지 설치

 

 

위에서 만든 가상환경을 활성화시켜준다음

conda activate map_env

 

문서에 나와있는 대로 

goggle map 패키지를 설치해주면 됩니다.

pip install -U googlemaps

 

 

4.3 테스트 코드 작성 

 

구글맵에서 어린이대공원을 검색해서 위도, 경도 (37.54794204380073, 127.07460710236217) 를 넣어줬어요

import googlemaps

gmaps = googlemaps.Client(key='발급 받은 API Key')
reverse_geocode_result = gmaps.reverse_geocode((37.54794204380073, 127.07460710236217))
print(reverse_geocode_result)

 

그럼 결과가 영어로 나오는데 

소스코드를 보니까 (github.com/googlemaps/google-maps-services-python/blob/master/googlemaps/geocoding.py)

 

language 설정을 해줄 수 있네요..! 

 

 

 

developers.google.com/maps/faq#geocoder_countries 문서를 보면 

Supported Languages에 한국어도 있습니다 

 

 

 

다시 요청해볼게요

import googlemaps

gmaps = googlemaps.Client(key='발급 받은 API Key')
reverse_geocode_result = gmaps.reverse_geocode((37.54794204380073, 127.07460710236217), language='ko')
print(reverse_geocode_result)

 

해당 위도, 경도에 해당하는 주소들 후보 11개가 내려오네요

 

 

 

저 11개 후보는 어떻게 정해지는 걸까요?! 

바로 지오코딩 오버뷰에서 파란 박스 안에 들어오는 주소들 입니다. 

 

 

구글맵에 등록되어있는 특정 장소의 위도, 경도로 요청해도 

해당 장소 하나만 주는게 아니라 

항상 파란박스 친 후보들 리스트를 주더라구요...!!  (요청한 위도,경도에 가장 가까운 순서로 리스트를 꾸려서 내려주는 것 같아요) 

 

 

 

 

참고로 구글맵에서 위도, 경도를 알아내려면 

지도에 찍히는 마커을 컨트롤 누른채로 클릭하면 됩니다-!

 

 

 

그럼 geocode를 요청해서 얻은 위도, 경도로 요청해보면 어떨까요?!? 

import googlemaps

gmaps = googlemaps.Client(key='발급받은 API Key')
geocode_result = gmaps.geocode(('카츠성수'), language='ko')
print(geocode_result)

 

하나의 응답이 내려오는데, 여기의 위도/경도로 테스트해볼게요 

 

 

 

그래도 파란박스에 해당하는 후보들로 내려줍니다..!

 

 

 

 

Reference

developers.google.com/maps/documentation/geocoding/overview

 

Overview  |  Geocoding API  |  Google Developers

Geocoding converts addresses into geographic coordinates to be placed on a map. Reverse Geocoding finds an address based on geographic coordinates or place IDs.

developers.google.com

 

반응형
댓글