【问题标题】:Units to use for maxdistance and MongoDB?用于 maxdistance 和 MongoDB 的单位?
【发布时间】:2011-12-11 20:53:56
【问题描述】:

我正在尝试了解 MongoDB 和地理空间搜索。 基本上我想要的是让用户能够查询文档(图像) 在距用户当前位置的设定距离内拍摄。因此,我的用户正在搜索从他站立的位置 1 公里内拍摄的所有图像,我尝试使用 以下示例,但我不知道将什么设置为 maxdistance 值。

db.places.find({ loc : { $near : [50,50] , $maxDistance : 5 }})

所以我的问题是,如果我正在搜索文档,我应该将什么设置为 maxdistance 半径1公里以内?

我完全被困在这里了。

【问题讨论】:

    标签: mongodb geospatial


    【解决方案1】:

    为了使用 mongodb $near 查询与 km 边界,您需要将半径值转换为 km。默认情况下,mongodb $near 接受$maxDistanceradius

    使用 km 时将距离转换为 111.12(1 度约为 111.12 公里),或使用度时保持距离不变

    你的问题

    如果我在一个 1公里半径?

    你可以用这个

       db.places.find( { loc : { $near : [50,50] , $maxDistance : 1/111.12 } } )
    

    我已经回答了如何使用mongo geospatial features here in detail。你可以去看看

    【讨论】:

    • 酷,谢谢! $near 和 $nearSphere 有什么区别?
    • $near 假定了一个理想的平坦地球模型,这意味着纬度 (y) 和经度 (x) 的弧度在任何地方都表示相同的距离。因此,您必须将半径转换为 ​​111 或 69 才能获得结果。但是 $nearSphere 您需要将半径转换为(6371 公里或 3959 英里)才能使其工作......您可以阅读更多关于here跨度>
    • 可以查询分数吗?
    • 这里的单位在文档中提到。花了一段时间才找到这个...docs.mongodb.org/manual/reference/operator/maxDistance感谢您的转换,@RameshVel!更准确的转换在这里:chemical-ecology.net/java/lat-long.htm 显示 111.11999965975954 公里/度(我在米级工作,所以准确性很重要)。
    • 我应该补充一点,当您远离赤道时,经度的值会有所不同。有道理...
    【解决方案2】:

    从 MongoDB 2.4 版本开始,您可以直接以米为单位将半径指定为 $maxDistance 的值,如下所示:

    db.<collection>.find({loc: {$near : 
                                   {$geometry : 
                                       {
                                        type: 'Point', 
                                        coordinates: [<longitude> , <latitude>]       
                                       }
                                   }, 
                                   $maxDistance: 10*100 
                               }
                         }); 
    

    【讨论】:

    • 这取决于索引。如果索引是2d,这将不起作用,因为二维索引采用“弧度格式”。另一方面,如果索引是 2dsphere 你是正确的。 :-) 文档:docs.mongodb.com/manual/reference/operator/query/near/…
    • 这里,最大距离是米还是公​​里?
    【解决方案3】:

    在最近的版本中,我使用的是 Spring 和 Mongo 4.0.5。重要的是索引类型和位置数据类型。我正在使用 2dsphere,org.springframework.data.mongodb.core.geo.GeoJsonPoint 稍后它会生成相应的 mongo 查询,其中几何距离以米为单位。

    { "location" : { "$nearSphere" : { "$geometry" : { "type" : "Point", "coordinates" : [18.341772, 43.834183] }, "$maxDistance" : 331.0 } 
    

    【讨论】:

      猜你喜欢
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多