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

时间:2015-05-30 09:35:36

标签: node.js mongodb geospatial

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

我在我的收藏中使用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应该找到它们但是我必须使R大约4000,这是相当奇怪的。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

  • 使用$center,圆半径以与坐标相同的单位表示;它对 flat 几何体最有用。
  • 使用$centerSphere,圆半径以弧度表示;它对球形几何图形特别有用。

正如MongoDB文档"Calculate Distance Using Spherical Geometry"中所述,您的转换函数R / 6378100将以弧度为单位转换半径,并且可以与$centerSphere - 而不是$center一起使用。

请注意,您希望坚持使用$center,您必须将米转换为decimal degrees,并且该关系不是线性的。从an answer by @whuber on GIS开始,在赤道处,估计“y方向的111,111米(111.111 km)是1度(纬度),x方向的111,111 * cos(纬度)米是1度(经度)“

相关问题