티스토리 뷰
우리는 구글 지오코딩 API를 활용해서 장소(ex_'강남', '해운대해수욕장', 황상동)를 보내면 위도와 경도를 받는 코드를 만들어 보자. 기본적으로 구글 클라우드를 가입한다. 그리고 프로젝트를 생성 후에 인증키를 받아둔다. 이 부분은 여기를 보고 오자. 여러 구글링을 통해 위의 단계를 마쳤다면 이제 아래의 방법을 따라오자.
우리는 구글 클라우드 플랫폼을 이용하여 간단히 장소를 적으면 위도, 경도를 받는 프로그램을 만들어 볼 것이다. 물론 ip로 받는 방법도 있다. ip로 위도와 경도를 아는 방법은 아래의 url을 참고하자.
첫번째
구글 클라우드 플랫폼을 사용하기 위해서는 API를 먼저 등록해야한다. 구글 클라우드 플랫폼에서 Geocoding API를 등록하러 가보자.
Geocoding API 를 검색하고 사용을 눌러주자. 그 후에 대시보드에 들어가서 스크롤을 내려 확인을 해보면 아래와 같이 Geocoding API가 확인이 될 것이다.
두번째
구글 클라우드 플랫폼에는 Geocoding API를 등록했으니, 이제 python의 라이브러리에 설치를 해주자.
$ pip install -U googlemaps
명령어를 활용하여 cmd나 gitbash나 상태창에 입력하여 설치하자.
세번째
바로 코드를 보자.
import googlemaps
import pandas as pd
my_key = "--구글클라우드플랫폼의 사용자인증정보에 있는 key를 복사해 넣어주자--(보안 필수)"
maps = googlemaps.Client(key=my_key) # my key값 입력
lat = [] #위도
lng = [] #경도
# 위치를 찾을 장소나 주소를 넣어준다.
places = ["강남", "황상동", "해운대해수욕장"]
i=0
for place in places:
i = i + 1
try:
print("%d번 인덱스에서 %s의 위치를 찾고있습니다"%(i, place))
geo_location = maps.geocode(place)[0].get('geometry')
lat.append(geo_location['location']['lat'])
lng.append(geo_location['location']['lng'])
except:
lat.append('')
lng.append('')
print("%d번 인덱스 위치를 찾는데 실패했습니다."%(i))
# 데이터프레임만들어 출력하기
df = pd.DataFrame({'위도':lat, '경도':lng}, index=places)
print(df)
'''
# output
1번 인덱스에서 강남의 위치를 찾고있습니다
2번 인덱스에서 황상동의 위치를 찾고있습니다
3번 인덱스에서 해운대해수욕장의 위치를 찾고있습니다
위도 경도
강남 37.517236 127.047325
황상동 36.114955 128.440733
해운대해수욕장 35.158698 129.160384
'''
굉장히 빠르고 쉽게 반환이 된다. 만약 데이터프레임이 헷갈린다면 판다스 기초를 한번 읽고 오도록 하자. 간단하니 유용하게 사용하기 바란다.
네번째
좀 더 자세한 내용은 아래의 공식문서를 참고하자.
developers.google.com/maps/documentation/geocoding/overview?hl=ko
사실 KEY 확인 됐는지 확인하기 위해서는 아래의 내용을 참고해 보자.
YOUR_API_KEY 부분에 자신이 받은 키를 넣어서 주소창에 쳤을 때 아래와 같이 나온다면 KEY는 정상적인 것이고 JSON형태로 출력값을 받는다는 것을 알 수있다.
{
"results" : [
{
"address_components" : [
{
"long_name" : "1600",
"short_name" : "1600",
"types" : [ "street_number" ]
},
{
"long_name" : "Amphitheatre Parkway",
"short_name" : "Amphitheatre Pkwy",
"types" : [ "route" ]
},
{
"long_name" : "Mountain View",
"short_name" : "Mountain View",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Santa Clara County",
"short_name" : "Santa Clara County",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "California",
"short_name" : "CA",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "United States",
"short_name" : "US",
"types" : [ "country", "political" ]
},
{
"long_name" : "94043",
"short_name" : "94043",
"types" : [ "postal_code" ]
}
],
"formatted_address" : "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
"geometry" : {
"location" : {
"lat" : 37.4267861,
"lng" : -122.0806032
},
"location_type" : "ROOFTOP",
"viewport" : {
"northeast" : {
"lat" : 37.4281350802915,
"lng" : -122.0792542197085
},
"southwest" : {
"lat" : 37.4254371197085,
"lng" : -122.0819521802915
}
}
},
"place_id" : "ChIJtYuu0V25j4ARwu5e4wwRYgE",
"plus_code" : {
"compound_code" : "CWC8+R3 Mountain View, California, United States",
"global_code" : "849VCWC8+R3"
},
"types" : [ "street_address" ]
}
],
"status" : "OK"
}
만약 주소창이 아닌 python으로 딕셔너리로 위의 내용을 받고 싶다면, 주소창에 넣을 내용을 아래와 같이 작성해 보자.
import requests
a = requests.get('https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=__키를넣는곳__')
b = a.json()
print(b)
json()을 활용하여 적용해주면 문자열이 아닌 딕셔너리로 확인이 가능하다.
'인공지능(Artificial Intelligence) > python' 카테고리의 다른 글
[python] urllib 핵심 기초 정리 (0) | 2021.01.18 |
---|---|
[pandas] exel 파일 만들기 (0) | 2021.01.17 |
[pandas] HTML(웹) 불러오기 (0) | 2021.01.14 |
[pandas] JSON 파일 열기 (0) | 2021.01.13 |
[pandas] Excel 파일 열기 (0) | 2021.01.12 |
- Total
- Today
- Yesterday
- DFS
- pandas
- typescript
- useHistory 안됨
- django
- Express
- 자료구조
- next.config.js
- useState
- Deque
- vuejs
- error:0308010C:digital envelope routines::unsupported
- react
- Python
- 클라우데라
- nodejs
- mongoDB
- login
- Queue
- TensorFlow
- 자연어처리
- Vue
- logout
- nextjs autoFocus
- JavaScript
- read_csv
- react autoFocus
- UserCreationForm
- NextJS
- BFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |