【问题标题】:How to select units for $within query in Mongoid / MongoDB如何在 Mongoid / MongoDB 中为 $within 查询选择单位
【发布时间】:2015-03-18 04:09:59
【问题描述】:

以下是我的查询,

db.places.save({"location":[ 12.948430, 77.573868 ]})
db.places.save({"location":[ 12.947813, 77.573653 ]})
db.places.ensureIndex( { "location" : "2d" } )
db.places.find({ "location" : { $within : { $center : [[12.948430, 77.573868],0.00015] } } })

在上面的查询中如何选择单位,是米还是公​​里? 如果我现在想做米,我正在做 0.00015 半径为 15 米,这是正确的吗?

【问题讨论】:

    标签: ruby mongodb geolocation mongoid


    【解决方案1】:

    您既没有使用米也没有使用公里。二维索引意味着您说您的数据在二维坐标系内。 .00015 在您的情况下表示 0.00015 度。在平面 2d 平面上(或在坐标足够接近的 2dsphere 索引上,误差幅度无关紧要),您可以按照 this 转换为 km。

    如果您使用的实际坐标可能彼此之间有任何合理距离,我还建议您使用 2dsphere 索引而不是 2d 索引进行索引,因为如果 mongodb 认为世界,地球的曲率会搞砸它的计算是平的。

    【讨论】:

      【解决方案2】:

      这是一个非常有趣的问题!我也一直在为此苦苦挣扎!很多谷歌搜索,但答案就在 MongoDB documentation

      从这里你可以了解到:

      要使球形查询运算符正常工作,您必须将距离转换为弧度,并将弧度转换为应用程序使用的距离单位。

      转换:

      • 弧度的距离:将距离除以球体(例如地球)的半径,单位与距离测量值相同。
      • 弧度到距离:将弧度测量值乘以球体(例如地球)的半径,以单位制将距离转换为。

      地球的半径约为 3,959 英里或 6,371 公里。

      我们如何使用它?试试这个:

      db.places.find( { location: { $geoWithin: { $centerSphere: [ [ 12.948430, 77.573868 ] ,
                                                                 100 / 6371 ] } } } )
      

      请注意,我使用了这种技术,它适用于 MongoDB 2.6

      希望有帮助!

      祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-31
        • 1970-01-01
        • 2021-06-19
        • 2012-09-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多