文档菜单
文档首页
/
MongoDB 手册
/ / / /

将距离转换为用于球面运算的弧度

本页内容

  • 关于此任务
  • 过程
  • 示例
  • 将英里转换为弧度
  • 将千米转换为弧度

2D 索引支持某些查询运算符,这些运算符使用球面几何计算距离。球面查询运算符使用弧度来表示距离。为了使用2D索引的球面查询运算符,您必须将距离转换为弧度。

2D 索引支持以下球面查询运算符

使用2D索引查询球面数据可能会返回错误结果或错误。例如,2D索引不支持绕极点展开的球面查询。

如果您的数据以经纬度存储,并且您经常在球面上运行查询,请使用 2dsphere 索引 而不是2D索引。

指定经纬度坐标时,首先列出 经度,然后是 纬度

  • 有效的经度值在 -180180 之间,包括两端。

  • 有效的纬度值在 -9090 之间,包括两端。

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

地球的赤道半径约为3,963.2英里或6,378.1千米。

以下示例使用$centerSphere运算符执行查询。该$centerSphere运算符使用弧度来计算距离。

创建contacts集合

db.contacts.insertMany( [
{
name: "Evander Otylia",
phone: "202-555-0193",
address: [ 55.5, 42.3 ]
},
{
name: "Georgine Lestaw",
phone: "714-555-0107",
address: [ -74, 44.74 ]
}
] )

address字段包含旧版坐标对。

以下查询返回address字段位于以点[ -72, 44 ]为中心、半径为200英里的圆内的文档

db.contacts.find(
{
address:
{
$geoWithin:
{
$centerSphere:
[
[ -72, 44 ] ,
200 / 3963.2
]
}
}
}
)

输出

[
{
_id: ObjectId("647e565c6cdaf4dc323ec92d"),
name: 'Georgine Lestaw',
phone: '714-555-0107',
address: [ -74, 44.74 ]
}
]

在上述查询中,为了将200英里转换为弧度,将指定的英里数除以3963.2。

以下查询返回地址字段在以点 [ 55, 42 ] 为中心、半径为 500 公里的圆形区域内的文档。

db.contacts.find(
{
address:
{
$geoWithin:
{
$centerSphere:
[
[ 55, 42 ] ,
500 / 6378.1
]
}
}
}
)

输出

[
{
_id: ObjectId("647e565c6cdaf4dc323ec92c"),
name: 'Evander Otylia',
phone: '202-555-0193',
address: [ 55.5, 42.3 ]
}
]

在前面的查询中,将 500 公里转换为弧度,需要将指定的公里数除以 6378.1。

返回

内部结构

© . All rights reserved.