您好我无法在半径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,这是相当奇怪的。有什么想法吗?
答案 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度(经度)“。