使用数据存储进行地理空间查询的 Geohashing 与 SearchAPI
Geohashing vs SearchAPI for geospatial querying using datastore
我正在 python 中创建一个 appEngine 应用程序,它需要对数据存储数据执行高效的地理空间查询。一个示例用例是,我需要找到当前用户 10 英里半径内的前 20 个帖子。在对我的选择进行了一些研究之后,我发现目前看来实现此类功能的两种最佳方法是:
- 使用 Python 的 GeoModel 库索引 geoHashed 地理点数据
- Creating/deleting 使用 Google 的更新 SearchAPI
的结构化数据文档
从高层次的角度来看,索引 geohashes 并直接对其执行查询比必须为每个地理空间查询创建和删除文档成本更低且速度更快,但是我也读到 geohashing 可以沿着赤道或散列算法创建的 'faultlines' 非常不准确。我很少看到详细对比最佳方法的帖子,我认为堆栈是进行此对话的好地方,所以我的问题如下:
- 有没有人实现过类似的功能并且对这两种方法都有积极的体验?
- 哪种方法更便宜?
- 哪个更快?
- 我是否遗漏了另一个重要的方法?
提前致谢。
你可以看看这个post,它可能是另一个很好的选择。
我已经在我的应用程序中使用了它,它非常适合我在提供的半径范围内找到我的应用程序用户的要求。
Geohashing 根本不需要不准确。一切都在实施细节中。我的意思是您也可以检查相邻的地理网格以处理边界情况,并确保包括赤道另一侧的邻居。
如果您的用例是按照您的建议在半径范围内查找其他实体,我肯定会推荐使用搜索 API。他们有一个为该用途量身定做的距离函数。
搜索 API 查询比数据存储查询更昂贵是的,但是如果您权衡计算时间以在您的实例中进行这些计算并且可能遍历每个 geohash 的所有实体以确保距离是实际上小于所需的半径,那么我会说搜索 API 是赢家。并且不要忘记实施时间。
我正在 python 中创建一个 appEngine 应用程序,它需要对数据存储数据执行高效的地理空间查询。一个示例用例是,我需要找到当前用户 10 英里半径内的前 20 个帖子。在对我的选择进行了一些研究之后,我发现目前看来实现此类功能的两种最佳方法是:
- 使用 Python 的 GeoModel 库索引 geoHashed 地理点数据
- Creating/deleting 使用 Google 的更新 SearchAPI 的结构化数据文档
从高层次的角度来看,索引 geohashes 并直接对其执行查询比必须为每个地理空间查询创建和删除文档成本更低且速度更快,但是我也读到 geohashing 可以沿着赤道或散列算法创建的 'faultlines' 非常不准确。我很少看到详细对比最佳方法的帖子,我认为堆栈是进行此对话的好地方,所以我的问题如下:
- 有没有人实现过类似的功能并且对这两种方法都有积极的体验?
- 哪种方法更便宜?
- 哪个更快?
- 我是否遗漏了另一个重要的方法?
提前致谢。
你可以看看这个post,它可能是另一个很好的选择。
我已经在我的应用程序中使用了它,它非常适合我在提供的半径范围内找到我的应用程序用户的要求。
Geohashing 根本不需要不准确。一切都在实施细节中。我的意思是您也可以检查相邻的地理网格以处理边界情况,并确保包括赤道另一侧的邻居。
如果您的用例是按照您的建议在半径范围内查找其他实体,我肯定会推荐使用搜索 API。他们有一个为该用途量身定做的距离函数。
搜索 API 查询比数据存储查询更昂贵是的,但是如果您权衡计算时间以在您的实例中进行这些计算并且可能遍历每个 geohash 的所有实体以确保距离是实际上小于所需的半径,那么我会说搜索 API 是赢家。并且不要忘记实施时间。