Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬에서 Google 지오코딩 API로 장소의 위도·경도 좌표 구하는 방법

특정 장소의 지리적 좌표, 즉 위도(latitude)경도(longitude)를 알아내고 싶다면 Google Maps 지오코딩(Geocoding) API를 활용하면 됩니다. 지오코딩은 'Dehradun(델라두운)'처럼 사람이 읽을 수 있는 주소 문자열을 위도·경도 값으로 변환해 주는 기술로, 위치 기반 서비스를 개발할 때 가장 기본이 되는 기능입니다.

사전 준비 사항

장소의 좌표를 조회하려면 먼저 Google 지오코딩 API 키가 필요합니다. 아래 공식 문서에서 발급받을 수 있으며, 사용량에 따라 무료 할당량 내에서 이용할 수 있습니다.

https://developers.google.com/maps/documentation/geocoding/get-api-key

API 키 외에 파이썬 환경에서는 다음 두 가지 모듈을 사용합니다.

  • requests — Google 서버에 HTTP 요청을 보내 좌표 데이터를 받아옵니다.
  • json — 응답으로 받은 JSON 데이터를 파이썬 딕셔너리 객체로 변환합니다.

전체 소스 코드

# 필요한 라이브러리 임포트
import requests
import json

# 장소 이름 입력 받기
place = input("장소 이름을 입력하세요: ")

# Google Maps API 키를 변수에 저장
apiKey = 'YOUR_API_KEY'

# Google 지오코딩 API URL을 변수에 저장
url = 'https://maps.googleapis.com/maps/api/geocode/json?'

# requests 모듈의 get 메서드를 호출하고 응답 객체를 저장
r = requests.get(url + 'address=' + place + '&key=' + apiKey)

# 응답 객체에서 JSON 형식의 결과 추출
res = r.json()

# 결과 출력
print(res)

코드 동작 원리

  1. 사용자로부터 장소 이름을 입력받습니다.
  2. 입력된 장소 이름과 API 키를 지오코딩 API URL 뒤에 붙여 GET 요청을 전송합니다.
  3. 응답 객체의 .json() 메서드를 호출해 JSON 데이터를 파이썬 딕셔너리로 변환합니다.
  4. 변환된 전체 결과를 화면에 출력합니다.

실행 결과

장소 이름을 입력하세요: Dehradun
{'results': [{'address_components': [{'long_name': 'Dehradun', 'short_name': 'Dehradun', 'types': ['locality', 'political']}, {'long_name': 'Dehradun', 'short_name': 'Dehradun', 'types': ['administrative_area_level_2', 'political']}, {'long_name': 'Uttarakhand', 'short_name': 'UK', 'types': ['administrative_area_level_1', 'political']}, {'long_name': 'India', 'short_name': 'IN', 'types': ['country', 'political']}], 'formatted_address': 'Dehradun, Uttarakhand, India', 'geometry': {'bounds': {'northeast': {'lat': 30.4041936, 'lng': 78.1089305}, 'southwest': {'lat': 30.2466633, 'lng': 77.92533879999999}}, 'location': {'lat': 30.3164945, 'lng': 78.03219179999999}, 'location_type': 'APPROXIMATE', 'viewport': {'northeast': {'lat': 30.4041936, 'lng': 78.1089305}, 'southwest': {'lat': 30.2466633, 'lng': 77.92533879999999}}}, 'place_id': 'ChIJr4jIVsMpCTkRmYdRMsBiNUw', 'types': ['locality', 'political']}], 'status': 'OK'}

주요 응답 필드 살펴보기

  • formatted_address — 사람이 읽기 쉬운 형태의 전체 주소입니다.
  • geometry.location — 우리가 찾던 핵심 값인 위도(lat)와 경도(lng)가 담겨 있습니다.
  • place_id — 해당 장소를 고유하게 식별하는 Google의 ID입니다.
  • status — 요청 처리 상태를 나타내며, 성공 시 'OK'가 반환됩니다.

응답 전체가 아니라 위도와 경도만 깔끔하게 추출하고 싶다면 아래처럼 딕셔너리 경로를 지정하면 됩니다.

lat = res['results'][0]['geometry']['location']['lat']
lng = res['results'][0]['geometry']['location']['lng']
print(f'위도: {lat}, 경도: {lng}')

# 출력 예시
# 위도: 30.3164945, 경도: 78.03219179999999

참고로 Google Maps Platform은 API 키 발급 시 결제 계정 연동이 필요하며, 월간 무료 크레딧 범위 내에서는 비용 없이 사용할 수 있습니다. 또한 API 키가 외부에 노출되지 않도록 환경 변수 등으로 안전하게 관리하는 것이 좋습니다.