실행환경은 jupyter notebook
사전 준비로 Google Maps Platform API Key를 발급받아야 한다.
pip install folium - 지도화면을 띄어주는 package
pip install googlemaps - 구글맵 api 사용을 위한 package를 설치
먼저 사용할 folium 과 googlemaps 를 import 한다.
구글맵 API사용을 위한 API key를 세팅해준다.
gmaps = googlemaps.Client(key='발급받은 API Key ')
key 값이 틀리면 아래 에러를 내뱉는다.
ValueError: Invalid API key provided.
search=input()
지역 검색을 위한 입력창을 만들어주고 search에 저장
그리고 Google maps platform API에서 제공하는 Geocoding API 가 사용된다.

geocode_result = gmaps.geocode((search), language='ko')
(주소 또는 장소 ID)의 정보를 리스트로 뽑아 geocode_result에 저장해 주는 부분이다.
사용자에게 입력받은 장소가 저장된 search를 넣어 주었다.
뒤에 옵션으로 language='ko'를 넣어주었는데 이 부분이 없으면 주소 정보가 한글이 아닌 영문 주소로 나온다.
에펠탑을 검색하여
geocoe_result를 출력해보면 아래와 같이 다양한 정보가 담겨있다.
[{'address_components': [{'long_name': '5', 'short_name': '5', 'types': ['street_number']}, {'long_name': 'Avenue Anatole France', 'short_name': 'Av. Anatole France', 'types': ['route']}, {'long_name': 'Paris', 'short_name': 'Paris', 'types': ['locality', 'political']}, {'long_name': 'Département de Paris', 'short_name': 'Département de Paris', 'types': ['administrative_area_level_2', 'political']}, {'long_name': 'Île-de-France', 'short_name': 'IDF', 'types': ['administrative_area_level_1', 'political']}, {'long_name': '프랑스', 'short_name': 'FR', 'types': ['country', 'political']}, {'long_name': '75007', 'short_name': '75007', 'types': ['postal_code']}], 'formatted_address': 'Champ de Mars, 5 Av. Anatole France, 75007 Paris, 프랑스', 'geometry': {'location': {'lat': 48.85837009999999, 'lng': 2.2944813}, 'location_type': 'ROOFTOP', 'viewport': {'northeast': {'lat': 48.85974613029151, 'lng': 2.295661530291502}, 'southwest': {'lat': 48.85704816970851, 'lng': 2.292963569708498}}}, 'partial_match': True, 'place_id': 'ChIJLU7jZClu5kcR4PcOOO6p3I0', 'plus_code': {'compound_code': 'V75V+8Q 프랑스 파리', 'global_code': '8FW4V75V+8Q'}, 'types': ['establishment', 'point_of_interest', 'tourist_attraction']}]
우리에게 필요한 위도와 경도, 그리고 주소를 빼내기 위하여
리스트의 위도 정보를 latitude에 저장
latitude = geocode_result [0]["geometry"]["location"]["lat"]
리스트의 경도 정보를 longitude에 저장
longitude = geocode_result [0]["geometry"]["location"]["lng"]
리스트의 주소 정보를 formatted_address에 저장
formatted_address = geocode_result [0]["formatted_address"]
저장된 정보를 출력
print(latitude)
print(longitude)
print(formatted_address)
folium으로 지도를 띄우기 위하여
지도에 보일 위치와 줌 정보를 입력하고 저장 (숫자가 클수록 확대되어 보인다)
location=[위도, 경도], zoom_start='18')
정보들을 map에 저장
map=folium.Map(location=[latitude, longitude], zoom_start=18)
검색 위치에 마커를 표시하여 준다.
folium.Marker([latitude, longitude], popup=search, icon=folium.Icon(icon='info-sign', color='red')). add_to(map)
마커 표시할 위치 folium.Marker([위도, 경도],
옵션으로 마커를 클릭 시 보일 팝업 popup = search 입력한 장소를 팝업으로 나타냄
마커의 아이콘 모양 icon=folium.Icon(icon='info-sign', color='red')
icon=thumbs-up, color='black'
icon 종류 여기 가면 많음 https://getbootstrap.com/docs/3.3/components/
마커의 정보들을 위에서 저장한 map에 추가
. add_to(map)
맵을 띄운다.
map
전체 코드
import folium
import googlemaps
#key값 세팅
gmaps = googlemaps.Client(key='발급받은 API Key')
#지역 검색창
search=input()
geocode_result = gmaps.geocode((search), language='ko')
#print(geocode_result)
#지역의 위도, 경도값, 주소
latitude = geocode_result[0]["geometry"]["location"]["lat"] # 리스트에서 위도 추출
longitude = geocode_result[0]["geometry"]["location"]["lng"] # 리스트에서 경도 추출
formatted_address = geocode_result[0]["formatted_address"] # 리스트에서 주소 추출
print(latitude)
print(longitude)
print(formatted_address)
#folium으로 지도를 띄우고 해당 위치에 마커를 표시
map=folium.Map(location=[latitude, longitude], zoom_start=18)
folium.Marker([latitude, longitude],popup=search, icon=folium.Icon(icon='thumbs-up',color='black')).add_to(map)
map
에펠탑을 검색해 보았다.

결과
에펠탑
48.85837009999999
2.2944813
Champ de Mars, 5 Av. Anatole France, 75007 Paris, 프랑스

외국 주소는 한글로 검색해도 한글이 아니다.
이거 왜 했는지 모르겠는데 했다...