使用球面几何形状计算距离
警告
对于球面查询,请使用 2dsphere
索引结果。
使用2d
索引进行球面查询可能会导致不正确的结果,例如使用2d
索引进行环绕极点的球面查询。
2d
索引支持计算欧几里得平面(平面)上距离的查询。 该索引还支持以下使用球面几何计算距离的查询运算符和命令:
注意
虽然2d
索引支持使用球面距离的基本查询,但如果数据主要是经度和纬度,请考虑改用2dsphere
索引。
具有
spherical: true
选项的$geoNear
管道阶段
重要
上述操作使用弧度表示距离。 其他球面查询运算符则不然,例如$geoWithin
。
为了使球面查询运算符正常运行,必须将距离转换为弧度,然后将弧度转换为应用程序使用的距离单位。
要转换:
弧度距离:将距离除以球体(例如地球)的半径,其单位与距离测量值相同。
弧度转距离:将弧度测量值乘以球体(例如地球)半径(采用要转换距离的单位制)。
地球赤道半径约为3,963.2
英里或6,378.1
公里。
以下查询将返回以[ -74, 40.74 ]
为圆心、半径为100
英里的圆内的places
集合中的文档:
db.places.find( { loc: { $geoWithin: { $centerSphere: [ [ -74, 40.74 ] , 100 / 3963.2 ] } } } )
注意
重要
如果指定纬度和经度坐标,则先列出经度,然后列出纬度。
有效经度值介于
-180
和180
之间,两者均包括在内。有效纬度值介于
-90
和90
之间,两者均包括在内。