Python-код для обратного геокодирования с использованием Google API - PullRequest
0 голосов
/ 23 января 2019

Я получаю геоданные в файле json (geo.json), который имеет следующую структуру

 {"userId":"Geo-data","data":{"mocked":false,"timestamp":1548173963281,"coords":{"speed":0,"heading":0,"accuracy":20.20400047302246,"longitude":88.4048656,"altitude":0,"latitude":22.5757344}}}

Все, что мне нужно, - это распечатать информацию о месте, соответствующую вышеприведенным данным, и, если возможно, также показать ее в MAP. Я попробовал следующий код с geopy

from geopy.geocoders import Nominatim
geolocator = Nominatim()
location = geolocator.reverse("22.5757344, 88.4048656")
print(location.address)
print((location.latitude, location.longitude))

Но местоположение, которое я получаю, не очень точное. Тогда как те же координаты дают хорошие результаты в https://www.latlong.net/Show-Latitude-Longitude.html У меня также есть ключ API Google. Однако то, что я когда-либо нашел, похоже на сам проект и является излишним для такого начинающего, как я. Географический код был в порядке, но точность определения местоположения очень низкая. Пожалуйста, помогите.

P.S Я пробовал геокодер также как

import geocoder
g = geocoder.google([45.15, -75.14], method='reverse')
print(g.city)
print(g.state)
print(g.state_long)
print(g.country)
print(g.country_long)

Однако во всех случаях печатается «Нет».

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Вы можете попробовать библиотеку Python Client для Google Maps Services, которую можно найти по адресу

https://github.com/googlemaps/google-maps-services-python

Это библиотека-оболочка для запросов веб-службы API Карт Google, разработанная Googlers. Снимок кода выглядит следующим образом:

import googlemaps
gmaps = googlemaps.Client(key='Add Your Key here')

# Look up an address with reverse geocoding
reverse_geocode_result = gmaps.reverse_geocode((22.5757344, 88.4048656))

Этот код возвращает адрес R-1, GA Block, Sector III, Salt Lake City, Kolkata, West Bengal 700106, India, аналогичный результату, который вы видите в инструменте Geocoder:

https://google -developers.appspot.com / карты / документы / Utils / геокодер / # д% 3D22.575734% 252C88.404866

Для получения более подробной информации смотрите документацию в github.

Надеюсь, это поможет!

0 голосов
/ 30 января 2019

Можно подумать о переключении с OpenStreetMap Nominatim провайдера на Google Geocoding .Затем следующий пример возвращает адрес, который вы ожидаете:

from geopy.geocoders import GoogleV3

geolocator = GoogleV3(api_key=google_key)
locations = geolocator.reverse("22.5757344, 88.4048656")
if locations:
    print(locations[0].address)  # select first location

Результат

R-1, GA Block, Sector III, Salt Lake City, Kolkata, West Bengal 700106, India
...