Python中的离线逆地理编码

6

我正在编写一个Python脚本,将纬度和经度传递给一个模块,并执行反向地理编码函数以返回该位置的地址。我一直在使用Google的PyGeoCoder来完成这项任务,但它需要访问互联网。我需要类似于PyGeoCoder的开源且完全离线的解决方案。

2个回答

11

我创建了一个模块来实现这一点:https://github.com/richardpenman/reverse_geocode

>>> 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'}]

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


1
你如何只搜索一个坐标?我尝试了 coordinates = (-37.81, 144.96) 然后 reverse_geocode.search(coordinates),但是我收到了一个错误信息:TypeError: 'int' object is not iterable - stackoverflowuser2010
你能否在结果中添加美国州名,例如德克萨斯州、佛罗里达州? - stackoverflowuser2010
"search"方法需要一个列表。可以使用“get”方法来获取单个数据点。 - hoju
3
这个库的新版本可以在 https://github.com/thampiman/reverse-geocoder 找到。 - Motin
@Motin,这个图书馆至少已经废弃了4年。原版仍在更新。 - undefined

6

您是否考虑过使用OpenStreetMap?您可以下载整个数据库(“星球”)或其中一个提取项,如果您只需要特定区域的数据。之后,您可以过滤出所有地址并使用生成的数据进行地理编码。有几个适用于OSM的搜索引擎可供选择,最受欢迎的是Nominatim。它在主网站上使用,可以进行地理编码和反向地理编码。因此,它可能是您任务的良好起点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接