파이썬으로 위도,경도 찾기(geocoder, geocoding API, 구글 스프레드시트)

Chanzae·2022년 10월 29일
1

Python

목록 보기
1/2

지오코딩(geocoding)은 주소를 지리적좌표(위도,경도)로 변환하는 작업이다.
반대로, 지리적 좌표를 주소로 변환하는 작업은 역지오코딩 이라고 한다.

지오코딩을 하는 방법이 다양한데, 그 중 내가 써본 방법들을 소개해보려한다.

  1. 구글 스프레드 시트 geocode로 변환
  2. 파이썬 geopy 라이브러리
  3. 구글 geocoding API



1. 구글 스프레드 시트

방법은 매우 간단하다. csv나 excel파일을 구글 스프레드 시트로 열어서 부가기능을 사용하면 된다.

예제로 쉐이크쉑 주소를 위도,경도로 변환해보자!
1. 구글 스프레드 시트에 데이터를 불러온다.

2.위에 확장 프로그램 탭을 열어 부가기능을 설치 -> geocode by awesome을 설치한다.

  1. 설치된 geocode by awesome -> Start Geocoding 을 클릭해 프로그램을 실행시킨다.
  2. 주소 데이터가 담긴 컬럼을 선택하고 아래 Geocode! 버튼을 클릭하면 알아서 latitude, longitude 컬럼이 생성되면서 위,경도 변환이 이루어진다.

✔ 마우스 클릭만 몇 번이면 되는 간단한 방법이지만 데이터 양이 적을 때만 사용하는 것을 추천한다. 구글 런타임 제한이 있어서 일일 사용량을 초과하면 "ScriptError: Service invoked too many times for one day: geocode."라고 에러 문구가 뜨면서 작업이 실행되지 않는다. 이 경우 24시간 지나서 사용가능하다.(colab 런타임 제한이랑 비슷한듯?)



2. 파이썬 geopy 라이브러리

파이썬 내에서 작업하기 때문에 사실 코딩을 할 줄 아는 사람이라면 이 방법이 제일 간편할 수 있다.

# 라이브러리 설치
!pip install geopy 

# import 라이브러리
from geopy.geocoders import Nominatim

#예제 데이터 : df_shake
#컬럼 정보 : name, branch, addr

# 위도, 경도 반환하는 함수
def geocoding(address):
    try:
        geo_local = Nominatim(user_agent='South Korea')  #지역설정
        location = geo_local.geocode(address)
        geo = [location.latitude, location.longitude]
        return geo

    except:
        return [0,0]

# 실행
for idx,addr in enumerate(tqdm(df_shake.addr)):
    df_shake.loc[idx,'latitude'] = geocoding(addr)[0]
    df_shake.loc[idx,'longitude'] = geocoding(addr)[1]

주소 데이터를 입력하면 좌표값을 얻을 수 있습니다.

geopy는 Open Street Map 기반으로 서비스하기 때문에 구글map이 제공하는 위도,경도가 조금 다르다. 그래서 구글 스프레드 시트로 했을 때 나오는 위,경도와 구글 geocoding API로 변환한 위,경도와 값이 다르게 나온다.



3. 구글 geocoding API

구글 클라우드 플랫폼에서 API키를 받아 파이썬에서 지오코딩을 하는 방법이다. (구글 스프레드의 geocode와 결과값이 같다.)

  1. API키를 발급받기 위해 Google Cloud Platform에 접속한다. 이때 처음 사용하는 경우 결제정보,프로젝트 등을 입력해야한다.

  2. 좌측에 메뉴 탭을 열어 API및 서비스 -> 라이브러리로 이동한다.

  3. 화면 중간에 나오는 검색창에 'geocoding api'를 검색한다.
    3-1. Geocoding API 클릭
    3-2. 사용 버튼 클릭해서 활성화 시킵니다. (저는 이미 사용중이라 사용버튼이 아니라 관리 버튼이 나오네요)

  4. API키를 받기 위해 좌측 메뉴 탭을 열어 API 및 서비스 -> 사용자 인증 정보로 이동합니다.

5.사용자 인증 정보에 들어가면 API키에 Maps API Key가 발급된 것을 확인할 수 있습니다. 키 표시를 클릭하여 키를 받습니다.

+) 이때 사용자 인증 정보에 아무것도 뜨지 않는다면 사용자 인증 보안설정을 먼저 해야한다. 그래도 아무 정보도 뜨지 않는다면 로그아웃하고 재접속해보시길 바랍니다.
+) 키 제한사항을 '없음'으로 설정할 경우 ⚠<- 경고표시가 계속 나타납니다. 경고 무시하고 사용해도 되지만 상황에 맞게 제한사항 설정해서 사용하시면 될 것 같아요.

  1. 이제 API키를 받았으면 파이썬으로 넘어갑니다.
# 라이브러리 설치
!pip install googlemaps

# import 라이브러리
import googlemaps
import pandas as pd
from tqdm import tqdm

#예제 데이터 : df_shake
#컬럼 정보 : name, branch, addr

# API키 입력
mykey = "insert your key"
maps = googlemaps.Client(key=mykey)  # my key값 입력

# 위도,경도 변환하는 함수 생성
def trans_geo(addr):
    try:
        geo_location = maps.geocode(addr)[0].get('geometry')
        lat = geo_location['location']['lat']
        lng =  geo_location['location']['lng']
        return [lat,lng]
    except:
        return [0,0]

# 실행
for idx, addr in enumerate(tqdm(df_shake.addr)):
    df_shake.loc[idx,'latitude'] = trans_geo(addr)[0]
    df_shake.loc[idx,'longitude'] = trans_geo(addr)[1]
    

✔ API키 발급과정이 귀찮긴 하지만 geopy라이브러리보다 이 방법으로 위,경도 변환하는게 더 정확한 것 같다.



여러가지 방법을 사용하다보면 사용하는 툴에 따라 위도,경도 값이 다르다는 것을 확인할 수 있다. 따라서 입력한 데이터에 맞게 결과가 정확하게 출력되었는지 확인하는 작업이 필요할 것 같다.

0개의 댓글