Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

使用球面几何形状计算距离

警告

对于球面查询,请使用 2dsphere索引结果。

使用2d索引进行球面查询可能会导致不正确的结果,例如使用2d索引进行环绕极点的球面查询。

2d索引支持计算欧几里得平面(平面)上距离的查询。 该索引还支持以下使用球面几何计算距离的查询运算符和命令:

注意

虽然2d索引支持使用球面距离的基本查询,但如果数据主要是经度和纬度,请考虑改用2dsphere索引。

  • $nearSphere

  • $centerSphere

  • $near

  • 具有 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 ] } } } )

注意

重要

如果指定纬度和经度坐标,则先列出经度,然后列出纬度

  • 有效经度值介于 -180180 之间,两者均包括在内。

  • 有效纬度值介于 -9090 之间,两者均包括在内。

后退

2d 索引内部机制