使用Google API进行反向地理编码的Python代码

时间:2019-01-23 06:05:56

标签: python-2.7 google-maps reverse-geocoding

我在具有以下结构的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中给出了良好的结果 我也有一个Google API密钥。但是,到目前为止,我发现的参考文献几乎都像是一个项目,对于像我这样的初学者来说,这太过分了。 geopy代码很好,但是位置精度很差。请帮忙。

P.S 我也尝试过geocoder作为

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 :(得分:3)

您可以考虑从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

答案 1 :(得分:1)

您可以尝试使用Python客户端的谷歌地图服务库,可以在这里找到。

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

这是对的Google员工开发的谷歌地图API的Web服务请求包装库。代码快照如下

import { combineReducers } from "redux";
import { reducer as reduxForm } from "redux-form";

export default combineReducers({
  form: reduxForm
});

此代码返回地址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)) 类似的结果是,可以在地理编码工具看到:

https://google-developers.appspot.com/maps/documentation/utils/geocoder/#q%3D22.575734%252C88.404866

有关更多详细信息,请参阅github中的文档。

我希望这会有所帮助!