지도 관련 서비스를 제공하다보면 주소를 위도, 경도 좌표로 바꿔줘야 할 일이 종종 있습니다. vworld 오픈 API라는 사이트가 관련된 API를 제공합니다. vworld는 여러 종류의 API를 제공하는데 그 중에서 Geocoder API를 활용하면 주소를 경도, 위도 좌표로 변환하는 것이 가능합니다.
Geocoder API 사용법
1. 인증키 발급
이 API를 사용하시려면 먼저 인증키를 발급 받아야 합니다. 인증키 발급은 API 서비스를 이용할 때 필수적으로 있는 절차입니다. 저는 다음과 같이 양식을 채웠습니다.
"지도 인증키 받기" 버튼을 클릭하면 인증키가 발급됩니다. Geocoder API를 테스트 삼아 사용해보는 거라 아직 서비스 URL이 없어서 그냥 127.0.0.1 이렇게 입력했는데도 발급이 되더라고요.
2. requests 모듈 설치
requests 모듈은 API 서버에 무언가를 요청하거나 크롤링 할 때 자주 사용되는 모듈입니다.
pip install requests
3. 파이썬 코드 작성
도로명 주소를 경도, 위도 좌표로 변환해주는 파이썬 코드를 작성해보겠습니다. 발급 받은 인증키는 아무에게나 공유해선 안되기 때문에 "인증받은 키 입력"이라는 텍스트로 대체했으니, 그 부분에는 각자 발급 받은 인증키를 넣어주시면 됩니다.
import requests
# 사용예제 http://api.vworld.kr/req/address?service=address&request=getcoord&version=2.0&crs=epsg:4326&address=%ED%9A%A8%EB%A0%B9%EB%A1%9C72%EA%B8%B8%2060&refine=true&simple=false&format=json&type=road&key=[KEY]
url_front = "http://api.vworld.kr/req/address?"
url_params = "service=address&request=getcoord&version=2.0&crs=epsg:4326&refine=true&simple=false&format=json&type=road"
url_address = "&address="
url_key = "&key="
address = "서울특별시 종로구 청와대로 1" # 청와대 도로명 주소
auth_key = "인증받은 키 입력"
# url 완성
url = url_front + url_params + url_address + address + url_key + auth_key
print(url)
result = requests.get(url)
json_data = result.json()
print(json_data)
if json_data['response']['status'] == 'OK':
x = json_data['response']['result']['point']['x']
y = json_data['response']['result']['point']['y']
print("\n경도: ", x, "\n위도: ", y)
Geocoder API 2.0 레퍼런스에 있는 사용예제를 참고해서 url을 완성했습니다.
해당 url에 GET 요청을 보내서 응답을 받습니다. 그 부분에 해당하는 코드가 바로 아래 코드입니다.
result = requests.get(url)
참고로 GET 요청은 url에 요청하는 정보를 담아서 전달하는 방식입니다.
응답 결과가 status가 OK인 경우에 해당 도로명 주소의 경도(x), 위도(y) 좌표를 얻어서 콘솔에 출력해줍니다. 경도가 좌우, 위도가 상하에 대한 위치 정보라고 생각하시면 됩니다.
4. 실행 결과 확인
저는 최근에 민간에 개방된 청와대 주소를 넣어봤습니다. 청와대 주소는 "서울특별시 종로구 청와대로 1"이더라고요. 위 코드를 실행하면 다음과 같이 경도, 위도 좌표값을 얻을 수 있습니다.
관련 글
'Dev > python' 카테고리의 다른 글
[pandas] 데이터프레임 컬럼 내 고유값의 개수 구하기, value_counts() 메소드 (0) | 2022.07.19 |
---|---|
[pandas] 각 컬럼 데이터 중 NaN이 아닌 데이터의 개수를 보여주는 info() 메소드 (0) | 2022.07.18 |
[PySide6] config.ini 설정값 읽고 변경하는 방법 (0) | 2022.07.07 |
[folium] 파이썬으로 지도 위에 마커 표시하는 방법 (2) | 2022.07.06 |
[matplotlib] 그래프 x축, y축 눈금 위치 설정하는 방법, xticks, yticks (0) | 2022.07.04 |
[python] 날짜, 시간을 다루는 경우 datetime 모듈 대신 arrow 추천 (0) | 2022.07.03 |
[pandas] 데이터프레임 컬럼 자료형 변경하는 방법, astype (0) | 2022.07.03 |
[matplotlib] 리눅스 우분투 matplotlib 그래프 한글 깨짐 문제 해결법 (0) | 2022.07.02 |