일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- clustering
- geopandas
- 괄호 문제
- NLP
- Chat-GPT
- Selenium
- 파이썬
- convert to shp
- 알고리즘
- 웹페이지
- 크롤링
- 혁신성장부문
- kmeans
- python buildpacks
- 해시태그
- 백준
- Crawling
- Python
- to shp
- string to list
- colab runtime
- geoDataFrame
- 플라스크
- 셀레니움
- 2164 카드2
- Merge Repositories
- plotly dash
- 인스타그램
- 코랩 런타임
- flask
Archives
- Today
- Total
코딩코딩코딩
Python Geocoding (Googlemaps API) 주소-좌표 변환 본문
지오코딩: 주소를 좌표로 변환
역지오코딩: 좌표를 주소로 변환
구글 클라우드 플랫폼에 가입한 후 api key를 먼저 받아야 함.
- 가입 시 구글에서 자동 가입을 방지하기 위해서 카드 등록을 요청하는데, 자동 연장이 되지 않으니 우선 등록하고 api key를 받으면 됨
api key를 받고나면 파이썬에서 구글맵스 라이브러리를 import 해야 함
!pip install googlemaps
================================================================
import pandas as pd
import googlemaps
googlemaps_key = "발급 받은 API Key"
gmaps = googlemaps.Client(key=googlemaps_key)
데이터는 서울 열린데이터 광장의 서울시 중학교 데이터를 이용
https://data.seoul.go.kr/dataList/OA-20556/S/1/datasetView.do
1. 주소를 좌표로 변환
DataFrame 이름: school
행당중학교
주소: 서울특별시 성동구 왕십리로 189
gmaps.geocode(school['도로명주소'][0])
>>>
[{'address_components': [{'long_name': '189',
'short_name': '189',
'types': ['premise']},
{'long_name': 'Wangsimni-ro',
'short_name': 'Wangsimni-ro',
'types': ['political', 'sublocality', 'sublocality_level_4']},
{'long_name': 'Sageun-dong',
'short_name': 'Sageun-dong',
'types': ['political', 'sublocality', 'sublocality_level_2']},
{'long_name': 'Seongdong-gu',
'short_name': 'Seongdong-gu',
'types': ['political', 'sublocality', 'sublocality_level_1']},
{'long_name': 'Seoul',
'short_name': 'Seoul',
'types': ['administrative_area_level_1', 'political']},
{'long_name': 'South Korea',
'short_name': 'KR',
'types': ['country', 'political']},
{'long_name': '133-070',
'short_name': '133-070',
'types': ['postal_code']}],
'formatted_address': '189 Wangsimni-ro, Sageun-dong, Seongdong-gu, Seoul, South Korea',
'geometry': {'location': {'lat': 37.5544241, 'lng': 127.041886},
'location_type': 'ROOFTOP',
'viewport': {'northeast': {'lat': 37.55577308029149,
'lng': 127.0432349802915},
'southwest': {'lat': 37.5530751197085, 'lng': 127.0405370197085}}},
'place_id': 'ChIJCbGBWaCkfDURtED-muKLvBo',
'plus_code': {'compound_code': 'H23R+QQ Seoul, South Korea',
'global_code': '8Q99H23R+QQ'},
'types': ['street_address']}]
결과가 리스트의 첫 번째 원소로 전부 들어가 있기 때문에 list[0] 으로 잡아서 좌표를 찾아낼 것
geo_location = gmaps.geocode(school['도로명주소'][0])[0].get('geometry')
lat = geo_location['location']['lat']
lng = geo_location['location']['lng']
print(lat, lng)
>>>
(37.5544241, 127.041886)
데이터프레임 열 전체를 수행하려면 for문 사용
lat, lng = [], []
for i, location in enumerate(school.도로명주소):
try:
geo_location = gmaps.geocode(location)[0].get('geometry')
lat.append(geo_location['location']['lat'])
lng.append(geo_location['location']['lng'])
except:
print(f"{i}번째 {(school.iloc[i, 3])}의 좌표를 찾을 수 없음")
lat.append(i)
lng.append(i)
이후 원래의 데이터프레임에 새로운 컬럼으로 붙여주면 됨.
2. 좌표를 주소로 변환하고 싶으면
reverse_geocode_result = gmaps.reverse_geocode((37.54794204380073, 127.07460710236217), language='ko')
위 for문 try 내부에 있는 geocode를 reverse_geocode로 바꿔주면 되고, 한국어 지원됨 (language='ko')
'파이썬 > GeoData' 카테고리의 다른 글
geopandas 좌표 변환 (5179 to 4326) (0) | 2021.12.30 |
---|---|
Convert the Geo DataFrame (csv) to shp file (0) | 2021.04.16 |
pip install geopandas, conda install geopandas, (파이썬 wheel(whl) 설치) (7) | 2021.02.16 |
Comments