【问题标题】:Mongodb geospatial index vs GoogleMaps Directions ServiceMongodb地理空间索引与GoogleMaps Directions Service
【发布时间】:2012-09-05 17:12:41
【问题描述】:



我最近参与了一个关于基于位置的服务的小型项目,我的目的是在请求乘客(支持 GPS 的 Android 手机)的给定半径内找到最近的出租车(安装了 GPS)。我想使用 MongoDB 的地理空间索引,但事实证明,地理空间索引适用于经纬度,它们计算两点之间的 位移,而不是 距离。就我而言,搜索仅限于一个城市内,我不得不使用 GoogleMaps Directions Service,因为它会显示在路上的距离、预计花费的时间等。

这是否意味着地理空间索引只有在位移足够大时才有意义,因此距离和位移基本上相同?

【问题讨论】:

    标签: google-maps mongodb google-maps-api-3 geospatial


    【解决方案1】:

    地理空间索引的目标是根据多维空间上的位置进行快速数据检索。如果您在 MongoDB 数据库中有出租车位置数据,您可以使用地理空间索引快速选择一组更可能是最近的出租车,但您仍然必须计算道路上的距离(和最终是行驶时间)在道路网络上使用算法。

    例如,您知道如果最近的(直线上)出租车距离您 20 公里(通过道路测量),那么您知道半径 20 公里以外的任何出租车肯定会比(在路上)更远你找到的第一个,所以你对它们不感兴趣。 然后你可以使用MongoDB空间索引来获取半径20公里内的所有出租车,然后你可以找到它们之间的距离最短。

    【讨论】:

    • 同意,然后使用 Google Maps API 距离矩阵来查找数据子集之间的距离。
    • @pqnet 感谢您的回复,但是 21 公里排量的驾驶室实际上可能比 20 公里排量的驾驶室更靠近道路(想象一条直路 21 公里,弯曲道路 20 公里)..和MongoDB 不会知道这个..这正是我的问题 :(
    • 弯曲的道路不能短于笔直的道路。这是一个基本的三角形属性。
    • 至少在欧几里得空间上:因为你在一个准球面上,你可能需要计算大地线(或至少它的下限),但你仍然可以确定从 A 到 B 的直线比从 A 到 B 的任何路径更短或相等。
    • 比较行车路线以找到“最近的汽车”并不是严格意义上的地理空间查询,它是对多个因素的评估,包括:行车距离、行程时间和交通流量限制。使用快速地理搜索来缩小候选人范围以提供给Distance Matrix 将是一个好方法(@ManoMarks 指出的好 API!)。
    猜你喜欢
    • 2016-02-12
    • 2011-10-23
    • 2014-01-04
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 2016-10-02
    • 2016-09-14
    相关资源
    最近更新 更多