无网络访问的反向地理编码
我正在开发一个应用程序,其中一个要求是能够根据GPS数据进行实时的反向地理编码操作。具体来说,我需要能够确定某个经纬度对应的州或省,并且能够检测到我们何时从一个州或省移动到另一个州或省。
我目前有几个想法,但想知道是否有人对以下两个问题有好的建议:
- 处理这个问题的最佳方法是什么,以便高效地完成?
- 哪里可以找到北美州/省边界的合适格式?
作为一个开始,这里是我想到的两个主要想法:
- 将北美划分为一个网格,每个网格中的矩形对应一个特定的州或省。根据纬度和经度(或反过来)在这个表格中查找(这个表格会随着你想要的精确度增加而迅速增长)。
- 为每个州定义多边形,并进行某种计算,以确定某个经纬度对位于哪个多边形内。我不太确定该如何进行。HTML图像地图让我想到了定义州/省边界的一种方法。
我正在使用Python,如果有人有好的库推荐的话,欢迎分享。
需要说明的是……我没有网络访问权限,所以在运行时使用现有的反向地理编码服务不是一个选项。
7 个回答
4
我建议你不要自己从头开始做这个。这个工作量挺大的,而且已经有现成的工具可以使用。如果你想找一个开源的解决方案(也就是免费的),可以看看这篇博客文章: 使用PostGIS进行反向地理编码。
8
我创建了一个离线的反向地理编码模块,用于国家的查询: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'}]
我会看看能不能为各个州添加数据。
6
我建议你可以用你第一个想法的一个变种:使用一个 空间索引。空间索引是一种数据结构,它是由矩形构成的,用来把经纬度映射到具体的数据上。在这个情况下,你可能会把矩形映射到州和省的组合上。一个 R树 可能是个不错的选择。这儿有一个 R树的Python包。你可以通过比较连续搜索的结果来检测漫游情况。