如何在Mongoid / MongoDB中为查询中的$选择单位

时间:2015-03-18 04:10:00

标签: ruby mongodb geolocation mongoid

以下是我的查询,

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] } } })

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

这是一个非常有趣的问题!我也一直在努力解决这个问题!很多谷歌搜索,但答案只在MongoDB documentation中。

从这里你可以了解到:

  

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

     

转换:

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

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

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

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

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

希望有所帮助!

祝你好运!