以下是我的查询,
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,这是正确的吗?
答案 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 。
希望有所帮助!
祝你好运!