1

我正在 python 中创建一个 appEngine 应用程序,它需要对数据存储数据执行有效的地理空间查询。一个示例用例是,我需要在当前用户的 10 英里半径范围内找到前 20 个帖子。在对我的选择进行了一些研究后,我发现目前实现此类功能的两种最佳方法是:

  • 使用 Python 的 GeoModel 库索引 geoHashed 地理点数据
  • 使用 Google 较新的 SearchAPI 创建/删除结构化数据文档

从高层次的角度来看,索引 geohashes 并直接对它们执行查询比必须为每个地理空间查询创建和删除文档成本更低,速度更快,但是我也读到 geohashing 可能非常不准确赤道或沿散列算法创建的“断层线”。我很少看到详细对比最佳方法的帖子,我认为堆栈是进行这种对话的好地方,所以我的问题如下:

  • 有没有人实现过类似的功能并且对这两种方法都有过积极的经验?
  • 哪种方法更便宜?
  • 哪个是更快的选择?
  • 我还有另一个重要的方法吗?

提前致谢。

4

2 回答 2

1

Geohashing 完全不必是不准确的。这一切都在实施细节中。我的意思是您也可以检查相邻的地理单元以处理边界情况,并确保包括赤道另一侧的邻居。

如果您的用例按照您的建议在半径范围内查找其他实体,我肯定会推荐使用 Search API。它们具有为该用途量身定制的距离函数。

搜索 API 查询比 Datastore 查询更昂贵,是的,但是如果您权衡计算时间以在您的实例中进行这些计算,并且可能会遍历每个 geohash 的所有实体以确保距离实际上小于所需的半径,那么我会说 Search API 是赢家。并且不要忘记实施时间。

于 2016-03-20T06:30:31.583 回答
-1

你可以看看这篇文章,它可能是另一个很好的选择。

我在我的应用程序中使用了它,它非常适合我在提供的 radius 中找到我的应用程序用户的要求。

于 2016-03-19T06:25:53.323 回答