MongoDB Mongoose 最大距离的单位

8
在我的应用程序中,我试图使用:
RentModel.find({prop_location: {$near: [msg.lat, msg.lng], $maxDistance: 500}}, function(err, docs){}
在数据库中只有一个值,其经纬度为旧金山。
当maxDistance不存在时,它可以完美地从任何地方找到位置。
当我将maxDistance添加为5并正好在相同位置(具有相同的纬度和经度)进行搜索时,它无法找到该位置。
如果是50,则与第2点相同。
如果是500,则我甚至可以从伦敦找到该位置。
问题出在哪里?
距离单位是什么?
我想找出5公里内的所有内容。db.executeCommand能否解决我的问题?需要进一步核实。
提前致谢。

你能否发布一下你的地理标记模型架构? - chovy
2个回答

10

最终我找到了解决我的问题的答案。理论上,经度是 x 轴,纬度是 y 轴。但我们习惯于使用纬度-经度,而不是经度-纬度...所以我之前搜索的方式是错误的。

$near : [msg.lat, msg.lng]

当我将其更改为 $near : [msg.lng, msg.lat] 后,即使是5公里,它也开始正常工作... 因此顺序是问题所在。


这将会给你距离,假设地球是平的。 - astroanu

7

您需要将maxdistance值除以111.12(一个经度大约是111.12公里),以将度半径转换为公里距离。

因此,您可以尝试这样做

 RentModel.find({prop_location : { $near : [msg.lat, msg.lng], $maxDistance : 500/111.2}})

但是在球形查询中,相同的操作方式不同,您需要将度半径除以地球半径6371,以使用公里值。


这是很有用的信息。谢谢。那么对于5公里,我需要把5除以111.12,即5/111.12。如果我不把5除以111.12,这将表示我正在搜索555.6公里范围内的内容(5 x 111.12),为什么这样不行,你有什么想法吗?我正在使用“2d”索引。 - user644745
你的意思是它不起作用吗?你有555公里距离的相关数据吗? - RameshVel
当然,我在1公里范围内有相关数据。但正如我所提到的,如果最大距离是5或50,它就无法找到。但如果是500,它可以找到。此外,我尝试将其除以111.12,这一次“find”没有返回任何结果。对你来说它能工作吗? - user644745
你的回答中指定经度和纬度的顺序是错误的。应该是[msg.lng,msg.lat]。 - astroanu

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