在MongoDB中使用千米半径查询位置?

6

我有一个名为“restaurants”的集合,我已将其格式化为geoJSON,并尝试以下方式查询:

db.restaurants.find({ location:
   { $geoWithin:
      { $centerSphere: [ [ -73.93414657, 40.82302903 ], 5 / 3963.2 ] } } })

我之前提到了5/3963.2英里的半径计算.. 但是我需要以公里为单位的半径距离,例如{ $centerSphere: [ [ -73.93414657, 40.82302903 ], 5] }

我需要以公里为单位来指定半径

如何实现呢?

1个回答

11

MongoDB希望值以弧度为单位提供。

将距离转换为弧度,只需将距离值除以球体(地球)的半径即可,其中:

3963.2是地球半径的英里表示。

6378.1是地球半径的公里表示。

db.restaurants.find({ location:
   { $geoWithin:
      { $centerSphere: [ [ -73.93414657, 40.82302903 ], 5 / 6378.1 ] } } })

1
所以 5/6378.1 表示 5 公里,而 0.5/6378.1 表示 500 米。我的理解是正确的。 - Balakumar B
谢谢您,@Sergiu Zaharie。 - Balakumar B
2
哦,是的,神奇的地球半径数字。拿破仑式的“千米”定义为赤道到极点距离的万分之一或90度。 (独裁者喜欢保持简单。)因此,每个度数为111.111公里。这是每弧度6366.2公里。在温带纬度下,实际数字更接近111.318,因此每弧度为6378.1公里。(尽管独裁度数不顾及地球并非完美的球体。)当您使用GPS距离时,会存在不准确性。在投掷马蹄铁和GPS游戏中,“接近”是有效的。 - O. Jones
这是不准确的,地球的半径是6,371公里。 - zeus
@O.Jones 数学计算没问题,但Mongo的文档中说:“圆的半径是用坐标系使用的单位度量的。”而给定的坐标系是以度为单位的,所以半径不应该被除以111.111吗? - Rinaldi Segecin
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接