在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度经度)“ 。