geoNear 在 MongoDB 中提取不准确的结果

Posted

技术标签:

【中文标题】geoNear 在 MongoDB 中提取不准确的结果【英文标题】:geoNear pulling inacurate results in MongoDB 【发布时间】:2020-10-21 21:34:12 【问题描述】:

在我的数据库中有 cmets,每个评论都有每个国家的经纬度,但 MongoDB 给出的结果不准确,即我在查询中提供巴西 [经纬度] 作为输入

 db.posts.aggregate([  "$geoNear": 

         "near": [-69.7145414,-13.6574511 ],
         "spherical": true,
         "distanceField": "distance",
         "num":1000000,
        "query":"post_id":"5efc430e25a363375860e842",
     ,
     
        "$sort":"distance":1
      ])

我得到的结果是

    玻利维亚(距巴西 409.5 公里) 巴拉圭(距巴西 1293 公里) 秘鲁(距巴西 1645 公里) 圭亚那(距巴西 1188 公里)

你可以看到

结果 4 接近而不是结果 2,因此它应该在位置 2 这就是我得到不准确结果的原因。

使用本网站计算的距离: https://www.movable-type.co.uk/scripts/latlong.html

我使用的经纬度如下

"Bolivia" => [
    "latitude" => -16.0705819,
    "longitude" => -72.5931926
],
"Paraguay" => [
    "latitude" => -23.3601858,
    "longitude" => -62.9462413
],
"Peru" => [
    "latitude" => -9.1084506,
    "longitude" => -84.0750546
],
"Guyana" => [
    "latitude" => 4.9392707,
    "longitude" => -63.4541328
],
"Brazil" => [
    "latitude" => -13.6574511,
    "longitude" => -69.7145414
]

这些纬度/经度可通过此链接使用:https://www.google.com/maps/place/Brazil/@-13.6574511,-69.7145414,4z/data=!3m1!4b1!4m5!3m4!1s0x9c59c7ebcc28cf:0x295a1506f2293e63!8m2!3d-14.235004!4d-51.92528

【问题讨论】:

你认为 [-69.7145414,-13.6574511] 是巴西吗?这是秘鲁。 num 不是有效选项,请参阅docs.mongodb.com/manual/reference/operator/aggregation/geoNear 将输入数据添加到您的问题中,以显示您正在查询的距离(理想情况下可由其他人运行)。 @Werfried 它是巴西的长纬度...您可以从这里验证它google.com/maps/place/Brazil/@-13.6574511,-69.7145414,4z/… @D.SM 忘记 num.. 假设 num 不存在.. 结果仍然不准确 【参考方案1】:

我想我知道为什么我的距离/结果不准确,虽然这不是我问题的解决方案,但是现在我知道原因如果有人知道最佳原因或解决方案,那么我正在等待,谢谢

MongoDB 假设地球是完美的球体,并且使用的平均半径为 地球来计算两点之间的距离。但正如你所知,地球 不是球体,而是更多的椭球体,因此距离计算将 在 MongoDB 中并不完美但近似。然而,谷歌使用了一个非常 复杂的公式以获得更好的结果。他们确实有庞大的数据库 地球上不同位置的地球半径。

【讨论】:

以上是关于geoNear 在 MongoDB 中提取不准确的结果的主要内容,如果未能解决你的问题,请参考以下文章

java mongodb“geoNear”命令返回异常错误17304

GraphQL和MongoDB` $ geoNear`聚合

在 MongoDB 中使用 $geoNear 查找两点之间的距离时出错

通过 geoNear 获取子文档 - MongoDB

Mongodb geoNear 和组聚合

mongodb geoNear 使用记录