在MongoDB中以半径(以米为单位)的查询点

您好,我无法获取在经度和纬度坐标X和Y范围内半径R(米)内的所有文件

我在我的collections中使用了2D遗留索引

db.users.createIndex({'location': '2d'}); 

我正在尝试以下内容:

 var users = db.collection('users'); users.find( { location: { $geoWithin { $center [ [ Y, X ], R / 6378100 ] } } }); 

我非常确定这是[Y,X]经度,然后是纬度。 6378100是根据谷歌的地球半径。 我有点应该是相距<50米,所以R = 50应该find他们,但我必须使R约4000,这是相当奇怪的。 有任何想法吗?

  • $center ,圆弧半径用与你的坐标相同的单位来表示; 这对于平面几何来说是最有用的。
  • 使用$centerSphere ,圆弧半径以弧度表示 ; 它对球面几何特别有用。

正如在MongoDB文档“使用球面几何计算距离”中所解释的,您的转换函数R / 6378100将以弧度转换您的半径,并且适用于$centerSphere而不是$center


请注意,你想坚持$center ,你必须将米转换成十进制度 ,并且这种关系不是线性的。 从地理信息系统的@whuber的回答可以看出 ,在赤道上 , y方向上的111,111米(111.111公里)是1度(纬度),x方向上的111,111 * cos(纬度)米是1度经度)“