Python中的离线反向地理编码

Python中的离线反向地理编码,python,geocoding,offline,Python,Geocoding,Offline,我正在编写一个Python脚本,它将纬度和经度传递给一个模块,并执行一个反向地理编码函数来返回该位置的地址。我一直在使用谷歌的PyGeoCoder来实现这一点,但它需要访问互联网。我需要的东西类似于PyGeoCoder,但开源和完全离线 您考虑过使用OpenStreetMap吗?如果您只需要特定区域,可以下载整个或其中一个。之后,您可以将所有数据输出并使用生成的数据进行地理编码。有几种OSM可用,最流行的是。它用于主网站,可以进行地理编码和反向地理编码。因此,这可能是您完成任务的一个良好起点。我

我正在编写一个Python脚本,它将纬度和经度传递给一个模块,并执行一个反向地理编码函数来返回该位置的地址。我一直在使用谷歌的PyGeoCoder来实现这一点,但它需要访问互联网。我需要的东西类似于PyGeoCoder,但开源和完全离线

您考虑过使用OpenStreetMap吗?如果您只需要特定区域,可以下载整个或其中一个。之后,您可以将所有数据输出并使用生成的数据进行地理编码。有几种OSM可用,最流行的是。它用于主网站,可以进行地理编码和反向地理编码。因此,这可能是您完成任务的一个良好起点。

我创建了一个模块来完成这一任务:


在内部,它使用geonames数据库中的位置和k-d树来查找最近的邻居。

如何仅搜索一个坐标?我尝试了
坐标=(-37.81144.96)
,然后
反向搜索地理编码。搜索(坐标)
,但我得到一个错误,错误是:
类型错误:'int'对象不可编辑
。你能不能在结果中添加美国各州,例如德克萨斯州、佛罗里达州?“搜索”方法需要一个列表。可以对单个数据点使用“获取”方法。此库的改进版本可在
>>> import reverse_geocode 
>>> coordinates = (-37.81, 144.96), (31.76, 35.21)
>>> reverse_geocode.search(coordinates)
[{'city': 'Melbourne', 'code': 'AU', 'country': 'Australia'},
 {'city': 'Jerusalem', 'code': 'IL', 'country': 'Israel'}]