정리용

[geocoding] 네이버 API를 이용한 주소 위경도로 변환 본문

프로젝트

[geocoding] 네이버 API를 이용한 주소 위경도로 변환

무룡룡 2022. 2. 14. 22:24

0. 

 

인증키의 발급과 openAPI 사용의 번거러움이 있으나

 

파이썬 라이브러리인 Geopy 보다 훨씬 정확한 위치를 구분이 가능하다.

 

geopy 는 번지 수준의 변환을 보여주나

 

NAVER API는 건축물 수준의 보다 세밀한 좌표로 변환이 가능하다

 

 

 

 

 

1. 인증키 발급

 

(1) 먼저 네이버 클라우드 콘ㄷ솔에 접속하여 로그인을 한다

https://console.ncloud.com/dashboard

 

 

 

 

 

(2) Products & Servies 페이지에 있는 AI / NAVER API 을 클릭한다

 

 

 

 

 

 

 

(3) Application 이름을 임의로 작성하고 gecoding을 체크한다.

 

좌표를 도로명으로 역변환해주는 reverse gecoding 도 함깨 체크하는 것을 추천

 

앞서 설명했듯 이 두개는 무료의 범위가 상당히 넓다.

 

 

 

 

 

 

 

(3) 발급 완료 

 

인증 정보 박스를 클릭하여 client IDclient Secret 를 확인한다.

 

 

 

 

 

 

 

 

 

 

2. 코드

주석(#) 마다 blank 의 구분
 
# API 함수 정의
import urllib.request
def search_map(search_text):
    client_id = id #클라이언트 ID값
    client_secret = secret #클라이언트 Secret값
    encText = urllib.parse.quote(search_text) 
    request = urllib.request.Request(url)
    request.add_header('X-NCP-APIGW-API-KEY-ID', client_id)
    request.add_header('X-NCP-APIGW-API-KEY', client_secret)
    response = urllib.request.urlopen(request)
    rescode = response.getcode()
    if(rescode==200):
        response_body = response.read()
        return response_body.decode('utf-8')
    else:
        print("Error Code:" + rescode)
 
# csv 불러오기
import pandas as pd
df = pd.read_csv('/content/drive/MyDrive/csv/건축물대장정보.csv')

# 결측치 제거
df.dropna(subset=['newPlatPlc'], inplace=True)
df.shape
 
# 주소 컬럼을 리스트로 변환
lst = df['newPlatPlc'].tolist()
lst
 
# 반복문으로 좌표 list 생성
x_lst = []
y_lst = []
for i in range (len(lst)):
  user = search_map(lst[i])
  user=json.loads(user)
  try : 
    x_lst.append(user['addresses'][0]['x'])
    y_lst.append(user['addresses'][0]['y'])
  except# 주소 오류로 변환이 불가능한 경우
    x_lst.append('0')
    y_lst.append('0')
  print(i ,'/' , len(lst))
 
 
# 생성한 list를 dataframe 컬럼으로 추가
df['x'] = x_lst
df['y'] = y_lst
 
#
 
 
 
이후 to_csv 를 이용해 csv로 저장
Comments