“文档” 菜单
文档首页
/
MongoDB Manual
/ / / /

将球面操作符的距离转换为弧度

在此页面上

  • 关于此任务
  • 步骤
  • 举例
  • 将英里转换为弧度
  • 将公里转换为弧度

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。

以下查询返回 address 字段位于以 [ 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。

后退

2d 索引内部机制

来年

地理空间索引限制