🖥️ IT, 컴퓨터/🐍 Python

[Python] 브이월드 API 이용해 지오코딩하기 ★★★★

김 홍시 2024. 5. 26. 01:34
반응형

 

0. 이전 지오코딩 글 

 

이전 지오코딩 관련 글은 아래 참고.

내가 시도해본 여러 지오코딩 방법 중 가장 간편한 것 같아서 업로드해본다.   

 

 

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%80%EC%98%A4%EC%BD%94%EB%94%A9%ED%95%98%EA%B8%B0-%EC%A3%BC%EC%86%8C%EB%A5%BC-%EA%B2%BD%EC%9C%84%EB%8F%84%EB%A1%9C-%EB%B3%80%ED%99%98 

 

[R] 카카오맵 API를 사용해 지오코딩하기 (주소를 경위도로 변환)

오늘은 R로 카카오맵 API를 사용해 지오코딩하는 방법을 기록해봅니다. 준비물 : (1) 장소명, 주소가 기록된 csv파일 (2) 카카오맵 API의 개인 KEY (3) RStudio 원하는 결과 : csv파일의 주소 정보를 카카오

kimhongsi.tistory.com

https://kimhongsi.tistory.com/entry/Python-%EA%B5%AC%EA%B8%80%EB%A7%B5-API%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4-%EC%A7%80%EC%98%A4%EC%BD%94%EB%94%A9%ED%95%98%EA%B8%B0-%EC%A3%BC%EC%86%8C%EB%A5%BC-%EA%B2%BD%EC%9C%84%EB%8F%84%EB%A1%9C-%EB%B3%80%ED%99%98

 

[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

 

https://kimhongsi.tistory.com/entry/Python-%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%80%EC%98%A4%EC%BD%94%EB%94%A9%ED%95%98%EA%B8%B0-%EC%A3%BC%EC%86%8C%EB%A5%BC-%EA%B2%BD%EC%9C%84%EB%8F%84%EB%A1%9C-%EB%B3%80%ED%99%98

 

[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

 

https://kimhongsi.tistory.com/entry/%EC%A7%80%EC%98%A4%EC%BD%94%EB%94%A9-%ED%88%B4-Biz-gis%EB%A1%9C-%EC%A7%80%EC%98%A4%EC%BD%94%EB%94%A9%ED%95%98%EA%B8%B0

 

지오코딩 툴 (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')

 

import 요청 import pandas as pd # CSV 파일 로드 file_path = "표_경로.csv" data = pd.read_csv(file_path, 인코딩='utf-8') # 주어진 주소에 대한 좌표를 가져오는 함수 def get_coordinates(address) : apiurl = "https://api.vworld.kr/req/address?" params = { "service": "address", "request": "getcoord", "crs": "epsg:4326", "address": 주소, "format": "json", "type": "road" , "key": "APIkey" } response = request.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 # '주소' 열에 함수를 적용합니다. 그리고 결과를 저장합니다 data[['Longitude', 'Latitude']] = data['주소'].apply(lambda addr: pd.Series(get_coordinates(addr))) # 업데이트된 데이터프레임을 표시합니다 data.head() # 업데이트된 데이터프레임을 새 CSV 파일로 저장합니다. data.to_csv('지오코딩_결과.csv', index=False, 인코딩='utf-8-sig')
 
반응형