Python/2.7 information

지도 모듈 (구글맵, folium 등등.)

qkqhxla1 2015. 12. 24. 04:38

페이스북에서 http://blog.rtwilson.com/my-top-5-new-python-modules-of-2015/ 에 관한 정보를 봤다. 다른것도 나중에 언젠가 유용할것 같긴 한데 아직은 별로 쓸일이 없어서 따로 정리는 안해둠. 여기서 지도 모듈에 유용할것 같은 folium을 찾았고, 전에 쓰려다가 어려워서 묻어두었던 구글맵까지 같이 정리함.



1. 구글맵.

공식 홈페이지 : https://pypi.python.org/pypi/googlemaps/


geocode 키 얻기 : https://developers.google.com/maps/


geocode를 이용해서 위치찾기(지금보니 별 쓸모는 없음. 그냥 참고.) : http://www.google.com/maps/api/geocode/json?latlng=49.2823149,-123.1148571&language=ko


1) 공식 홈페이지에서 모듈을 설치한다.

2) 위의 'geocode 키 얻기' 링크에서 중간에 Google Maps Geocoding API 를 찾아서 클릭한다.

3) GET A KEY 를 누르고 프로젝트 하나 새로 만들고 어쩌구저쩌구 해서 키를 하나 얻는다. 

import googlemaps
gmaps = googlemaps.Client(key=본인 키값)
geo = gmaps.geocode('Vancouver Burrard Station')
print geo

기본 예제인데 이걸 실행시키면 중간에 {u'location': {u'lat': 49.2856399, u'lng': -123.1201878} 이런 값이 보이는데 위도와 경도값으로, 이걸 이용해서 내가 위에 gmaps.geocode에 입력한 'Vancouver Burrard Station'의 위도와 경도 값을 알수 있다. 그런데 위도와 경도값을 이용해서 구글맵에 표시하는 기능을 찾을 수가 없어서.. 중단했었다. 그런데 오늘 찾은 folium모듈로 거기가 어디인지 표시할수 있다.


추가.

단순히 위도와 경도를 얻으려면 저 복잡한거보다 https://pypi.python.org/pypi/geocoder 

geocoder라는 모듈이 이미 있다.



2. folium 모듈.

https://pypi.python.org/pypi/folium

실행하려면

Jinja2

Pandas (Map Data Binding only)

Numpy (Map Data Binding only)

Vincent (Map Data Binding only)

가 필요하다. 없으면 코드 중간에 에러발생. 아래 코드는 공식 홈페이지의 괜찮은 코드를 가져와서 살짝 변형하고 위도와 경도의 위치만 위에서 구글맵으로 찾은 49.2856399와 -123.1201878로 변경시켜서 실행한 결과이다.

# -*- encoding: cp949 -*-
import folium
lat_long = [49.2856399, -123.1201878]
map_2 = folium.Map(location=lat_long, 
                   zoom_start=13)
map_2.circle_marker(location=lat_long, radius=500,
                    popup='downtown', line_color='#3186cc',
                    fill_color='#3186cc')
map_2.create_map(path='downtown.html')

프로젝트 폴더 안에 downtown.html이라는 html이 새로 하나 만들어지고 실행시키면 아래처럼 보인다.



한글도 된다. (위의 코드 두개를 적절하게 붙임.)

# -*- encoding: cp949 -*-
import folium
import googlemaps

find_loc = u'서울역' #찾을 위치. 한글이므로 유니코드의 u를 붙여줘야한다.
gmaps = googlemaps.Client(key=본인 키)
geo = gmaps.geocode(find_loc)
lat_long = [geo[0]['geometry']['location']['lat'],geo[0]['geometry']['location']['lng']]

map_2 = folium.Map(location=lat_long, 
                   zoom_start=13)
map_2.circle_marker(location=lat_long, radius=500,
                    popup=find_loc, line_color='#3186cc',
                    fill_color='#3186cc')
map_2.create_map(path=find_loc+'.html')

서울역.html이 만들어지며 열어보면


잘 나오는것 같긴 하다.(글씨체가 북한 글씨체 같다..) 생각해본 주의점은 영어로 검색시 같은 이름의 동네가 여러군대 있을 경우를 대비해서 되도록 자세하게 주소를 쓸것 등이다.


현업에서는 어떻게 편하게 지도를 찾을까 궁금하다.