이번 포스팅의 목표는 라떼판다 하드웨어의 현재 좌표를 즉각적으로, 지속적으로 알아내는 것과 사용자가 지정한 목적지의 좌표를 알아내는 것이다.
그리고 이에 대한 구현을 구글 맵 API, 즉 Geocode API와 Geolocation API를 사용해 구현해보고자 한다.
Google Maps Geolocation API는 구글 서비스의 이용자뿐 아니라 누구나 사용이 가능한 위치기반 서비스이다. WPS 위치 측위 방법을 지원하는 서비스로, 사용자가 확인 가능한 Wi-FI AP과 기지국의 정보를 기반으로 위치 정보를 제공한다. 실내와 같이 GPS 위성 신호를 통한 위치 획득이 어려울 때 비교적 정확한 위치를 제공한다는 장점이 있다.
API값은 구글 공식 클라우드 플랫폼을 통해 이미 받아온 상태이다.
import googlemaps
gmaps = googlemaps.Client(GOOGLE_API_KEY)
geocode_result = gmaps.geocode(('인천대공원'), language='ko') # 한국어 설정으로 인천대공원의 결과값을 받아온다.
latitude = geocode_result[0]["geometry"]["location"]["lat"] # 리스트에서 위도 추출
longitude = geocode_result[0]["geometry"]["location"]["lng"] # 리스트에서 경도 추출
print(latitude)
print(longitude)
위의 코드는 사용자가 목적지 (코드 내에서는 '인천대공원')를 입력하면 geocode API를 통해 좌표값을 얻어내는 코드이다.
코드를 입력해 결과값(geocode_result)을 얻어도 리스트 형태의 값에서 어떻게 좌표만을 따로 추출해오지? 하고 고민을 했었는데, 생각보다 간단한 형태로 구현할 수 있었다.
import requests
import googlemaps
import json
url = f'https://www.googleapis.com/geolocation/v1/geolocate?key={GOOGLE_API_KEY}'
data = {
'considerIp': True, # 현 IP로 데이터 추출
}
result = requests.post(url, data) # 해당 API에 요청을 보내며 데이터를 추출한다.
print(result.text)
result2 = json.loads(result.text)
lat = result2["location"]["lat"] # 현재 위치의 위도 추출
lng = result2["location"]["lng"] # 현재 위치의 경도 추출
gmaps = googlemaps.Client(GOOGLE_API_KEY)
reverse_geocode_result = gmaps.reverse_geocode((lat, lng),language='ko')
# 좌표값을 이용해 목적지를 알아내는 코드
print(reverse_geocode_result)
위도, 경도 추출은 앞에서 했던 코드와 비슷하고, reverse_geocode는 geocode 와 달리 목적지가 아닌 좌표를 입력한다는 특징이 있다.
결과에서 나오는 accuracy 는 정확도로, 지오코드 오버뷰에서 보면 파란색 네모 모양으로 나오는 모습을 볼 수 있는데,
이렇게, 파란색 박스안의 장소를 최대한 찾아주는 것으로 이해했으나, 어째서인지 생각보다 먼 공간의 목적지도 찍는 것으로 보아 정확성이 높지는 않아보인다.
또한, 현재 내 위치를 정확하게 찾아내는 것 같지도 않다.🤔
사진을 보면 알겠지만, 빨간색 동그라미가 쳐진 곳이 실제 내 위치인데, Geolocation API를 사용한 결과와 어느정도 차이가 있는 것으로 나타난다. 정확성 개선을 위해 어떤 것을 더 추가해야할지 고민해보아야 할듯 하다.