🖥️ IT, 컴퓨터/🐍 Python

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

김 홍시 2022. 11. 26.
반응형

오늘은 아래의 이전 포스팅에 이어, 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%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://apis.map.kakao.com/

 

카카오맵 API 사이트

 

 

우측 상단 버튼

 

REST API 키 복사

 

 

코드

수정해야 할 부분 : csv좌표, 당신의_API_Key, 소재지전체주소

import requests
import pandas as pd

# CSV 파일 읽기
place = pd.read_csv("csv좌표.csv")

# API 키 설정
KAKAO_MAP_API_KEY = "당신의_API_Key"
result = pd.DataFrame()

# 주소 리스트 추출
address_list = place['소재지전체주소']

# 지오코딩 결과 저장할 빈 리스트 생성
geocode_results = []

# 지오코딩 API 호출 및 결과 처리
for address in address_list:
    res = requests.get(
        'https://dapi.kakao.com/v2/local/search/address.json',
        params={'query': address},
        headers={'Authorization': f'KakaoAK {KAKAO_MAP_API_KEY}'}
    )
    
    # JSON 데이터를 딕셔너리로 파싱
    coord = res.json()

    # 기본값 설정 (데이터가 없을 경우 None으로 유지)
    address_name, x, y = None, None, None

    # 'documents' 내에 정보가 있을 때만 처리
    if 'documents' in coord and coord['documents']:
        for doc in coord['documents']:
            try:
                # 'road_address'와 필요한 키들이 있는 경우에만 데이터 추가
                if doc.get('road_address') and all(key in doc['road_address'] for key in ['address_name', 'x', 'y']):
                    address_name = doc['road_address']['address_name']
                    x = doc['road_address']['x']
                    y = doc['road_address']['y']
                    break  # 첫 번째 결과만 사용
            except KeyError:
                print(f"필드가 누락된 항목을 건너뜁니다: {doc}")

    # 결과 리스트에 추가
    geocode_results.append({'address_name': address_name, 'x': x, 'y': y})

# 지오코딩 결과를 데이터프레임으로 변환
geocode_df = pd.DataFrame(geocode_results)

# 기존 place 데이터에 지오코딩 결과 열 추가
place_with_geocode = pd.concat([place, geocode_df], axis=1)

print("지오코딩 완료! place_with_geocode를 확인하세요.")

# 결과를 CSV 파일로 저장
place_with_geocode.to_csv("geocoding_result_with_original.csv", encoding="euc-kr", index=False)

 

 

 

결과

 

 

가장 우측에 주소, x좌표, y좌표가 생성됨 

 

일반적으로 지오코딩에 실패하는 경우는 주소 끝에 건물명과 호수가 붙어있는 경우이다. 

반응형

댓글