0. 이전 지오코딩 글
이전 지오코딩 관련 글은 아래 참고.
내가 시도해본 여러 지오코딩 방법 중 가장 간편한 것 같아서 업로드해본다.
[R] 카카오맵 API를 사용해 지오코딩하기 (주소를 경위도로 변환)
오늘은 R로 카카오맵 API를 사용해 지오코딩하는 방법을 기록해봅니다. 준비물 : (1) 장소명, 주소가 기록된 csv파일 (2) 카카오맵 API의 개인 KEY (3) RStudio 원하는 결과 : csv파일의 주소 정보를 카카오
kimhongsi.tistory.com
[Python] 구글맵 API를 사용해 지오코딩하기 (주소를 경위도로 변환)
오늘은 예전에 업로드한 R로 지오코딩하는 글에 이어, Python으로 지오코딩 하는 방법을 정리하려 한다. https://kimhongsi.tistory.com/entry/R-%EC%B9%B4%EC%B9%B4%EC%98%A4%EB%A7%B5-API%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4-%EC%
kimhongsi.tistory.com
[Python] 카카오맵 API를 사용해 지오코딩하기 (주소를 경위도로 변환)
오늘은 아래의 이전 포스팅에 이어, Python과 카카오맵 API를 활용하여 지오코딩하는 방법을 정리한다. https://kimhongsi.tistory.com/entry/R-%EC%B9%B4%EC%B9%B4%EC%98%A4%EB%A7%B5-API%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4-%EC%A7
kimhongsi.tistory.com
지오코딩 툴 (Biz-gis)로 지오코딩하기
지오코딩 지오코딩이란 주소만 가지고 경위도 좌표 등 구체적 수치로 변환하는 과정을 말한다. 지오코딩을 할 수 있는 방법에는 여러 가지가 있는데 http://www.biz-gis.com/index.php?mid=pds&category=5164&doc
kimhongsi.tistory.com
1. 브이월드 API 인증키 발급
https://www.vworld.kr/dev/v4dv_apikey_s001.do
브이월드
www.vworld.kr
위에 접속하여
인증키 발급 메뉴 들어와 동의 클릭
입력 후 인증키 받기 클릭
인증키 관리 메뉴에서 인증키복사
2. 지오코딩 API 코드 복사
https://www.vworld.kr/dev/v4dv_geocoderguide2_s001.do
브이월드 오픈API
API 버전 : Geocoder API 2.0 레퍼런스 Geocoder API 1.0 레퍼런스 이동 소개 주소를 좌표로 변환하는 서비스를 제공합니다. 요청URL을 전송하면 지오코딩 서비스를 사용하실 수 있으며 일일 지오코딩 요청
www.vworld.kr
에 들어와서
Python 부분 복사한다
아래는 참고용
3. 지오코딩 API 키 활용한 Python 코드 입력
1) 기본 Python 코드
import requests
apiurl = "https://api.vworld.kr/req/address?"
params = {
"service": "address",
"request": "getcoord",
"crs": "epsg:4326",
"address": "판교로 242",
"format": "json",
"type": "road",
"key": "[인증키]"
}
response = requests.get(apiurl, params=params)
if response.status_code == 200:
print(response.json())
- [인증키]를 지우고 자신의 인증키를 붙여넣는다."~~~" 의 형태가 되어야 함
- crs에는 좌표계를, address에는 도로명주소를 입력
그러면 아래와 같이 결과가 json 형태로 출력됨
2-1) 표로 정리하는 추가 Python 코드
import pandas as pd
data = response.json()
# Extracting data for table
service_info = data['response']['service']
input_info = data['response']['input']
refined_info = data['response']['refined']
refined_structure = refined_info['structure']
result_info = data['response']['result']
point_info = result_info['point']
# Creating DataFrame
df = pd.DataFrame([
['Service Name', service_info['name']],
['Service Version', service_info['version']],
['Operation', service_info['operation']],
['Time', service_info['time']],
['Status', data['response']['status']],
['Input Type', input_info['type']],
['Input Address', input_info['address']],
['Refined Text', refined_info['text']],
['Country', refined_structure['level0']],
['Province', refined_structure['level1']],
['City', refined_structure['level2']],
['District', refined_structure['level3']],
['Road Name', refined_structure['level4L']],
['Road Code', refined_structure['level4LC']],
['Neighborhood', refined_structure['level4A']],
['Neighborhood Code', refined_structure['level4AC']],
['Building Number', refined_structure['level5']],
['Detail', refined_structure['detail']],
['CRS', result_info['crs']],
['Longitude', point_info['x']],
['Latitude', point_info['y']]
], columns=['Key', 'Value'])
# Displaying DataFrame
print(df)
위의 코드를 이용하면 아래와 같이 보기 좋은 표가 나온다.
2-2) x/y좌표만 얻는 Python 코드
import pandas as pd
data = response.json()
# Extracting data for table
result_info = data['response']['result']
point_info = result_info['point']
# Creating DataFrame
df_xy = pd.DataFrame([
['Longitude', point_info['x']],
['Latitude', point_info['y']]
], columns=['Key', 'Value'])
# Displaying DataFrame
print(df_xy)
혹은 X/Y좌표만 얻고싶다면 위의 코드를 입력한다.
2-3) csv 표를 넣어서 X/Y 좌표 나오게 하는 Python 코드
수정해야 하는 부분 : 표_경로 / APIkey/'주소'의 열이름 확인
import requests
import pandas as pd
# Load the CSV file
file_path = "표_경로.csv"
data = pd.read_csv(file_path, encoding='utf-8')
# Function to get coordinates for a given address
def get_coordinates(address):
apiurl = "https://api.vworld.kr/req/address?"
params = {
"service": "address",
"request": "getcoord",
"crs": "epsg:4326",
"address": address,
"format": "json",
"type": "road",
"key": "APIkey"
}
response = requests.get(apiurl, params=params)
if response.status_code == 200:
data = response.json()
if data['response']['status'] == 'OK':
point_info = data['response']['result']['point']
return point_info['x'], point_info['y']
return None, None
# Apply the function to the '주소' column and store the results
data[['Longitude', 'Latitude']] = data['주소'].apply(lambda addr: pd.Series(get_coordinates(addr)))
# Display the updated dataframe
data.head()
# Save the updated dataframe to a new CSV file
data.to_csv('지오코딩_결과.csv', index=False, encoding='utf-8-sig')
'🖥️ IT, 컴퓨터 > 🐍 Python' 카테고리의 다른 글
[Python] Pandas DataFrame 열에 접근하는 두 가지 방법: 속성 접근과 딕셔너리 접근 (0) | 2024.06.11 |
---|---|
[Python] 파이썬 loc, iloc 차이 (0) | 2024.06.11 |
[Python] HTML에서 특정 클래스 뒤에 있는 텍스트만 추출하기 (BeautifulSoup) (0) | 2024.04.25 |
[Mecab] 일본어 형태소 분석하기 :: Mecab (0) | 2024.04.03 |
[Python] 파이썬 비동기 프로그래밍이란, asyncio 라이브러리 (0) | 2024.03.05 |
댓글