无Web访问的反向地理编码

时间:2009-09-15 04:42:18

标签: python gps geocoding reverse-geocoding

我正在开发一个应用程序,其中一个要求是我能够基于GPS数据执行实时反向地理编码操作。特别是,我必须能够确定纬度,经度对映射的状态/省,并检测我们何时从一个州/省迁移到另一个州/省。

到目前为止,我有几个想法,但想知道是否有人对以下任何一个有任何想法:

  • 以有效的方式解决此问题的最佳方法是什么?
  • 在哪里找到一个好地方,以及北美州/省边界的适当格式是什么

作为首发,以下是我的两个主要想法:

  1. 将北美分成网格,网格中的每个矩形映射到特定的州。根据纬度和经度(反之亦然)对此表进行查找(快速增长,您想要的更精确)。
  2. 为每个状态定义多边形并进行某种计算以确定纬度/经度对位于哪个多边形中。我不确定如何解决这个问题。 HTML图像映射是作为定义州/省界限的一种方式。
  3. 我正在python中为感兴趣的人或那些可能有他们想建议的好库的人工作。

    要明确......我没有网络访问权限,因此在运行时不能使用现有的反向地理编码服务

6 个答案:

答案 0 :(得分:6)

我建议使用您的第一个想法的变体:使用spatial index。空间索引是从矩形构建的数据结构,将lat / long映射到有效载荷。在这种情况下,您可能会将矩形映射到州 - 省对。 R-tree可能是个不错的选择。这是一个R-tree python package。您可以通过比较连续搜索的结果来检测漫游。

答案 1 :(得分:5)

我为各个国家/地区创建了一个离线反向地理编码模块:https://bitbucket.org/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'}]

我将看看是否可以为状态添加数据。

答案 2 :(得分:4)

我将不再从头开始实施您自己的解决方案。这是一项相当大的工作,已经有工具可以做到这一点。如果您正在寻找开源方法(阅读:免费),请查看此博客文章:Using PostGIS to Reverse Geocode

答案 3 :(得分:1)

如果您可以将状态边界保持为多边形(例如,通过OpenStreetMap),则确定当前状态只是一个多边形点测试。

如果您需要地址数据,离线解决方案将使用Microsoft Mappoint。

答案 4 :(得分:1)

您可以从open street map获取整个美国的数据。然后,您可以将所需的数据(例如城市或州位置)提取到最适合您应用的格式。请注意,虽然数据质量良好,但不能保证完全准确,因此如果您需要完全准确,则可能需要查看其他地方。

答案 5 :(得分:0)

我有一个包含所有这些数据和一些访问工具的数据库。我用人口普查老虎的数据制作了我的。我想它基本上是我的数据库导出到sqlite和一些代码翻译。