MongoDB中的地理位置查询

Posted

技术标签:

【中文标题】MongoDB中的地理位置查询【英文标题】:GeoLocation query in mongo db 【发布时间】:2018-09-28 18:21:46 【问题描述】:

如何使用 mongo 集合中的 mongodb 查询获取经度和纬度 基于距离和某些坐标。


    "_id" : ObjectId("5a559b13ae201d0c05cb6f6a"),
    "id" : "99623",
    "city" : "Wasilla",
    "cnty" : "Matanuska Susitna",
    "cntyFips" : null,
    "st" : "AK",
    "stName" : "Alaska",
    "areaCode" : "907",
    "lat" : 61.5816,
    "long" : -149.4393,
    "rgn" : "West",
    "__v" : 0 

在本文档中,“lat”代表纬度,“long”代表经度。

所以基本上我必须根据当前的 id lat 和 long 获取所有 id,这些 id 在特定的英里距离范围内。

【问题讨论】:

【参考方案1】:

我们需要更多关于您正在查询的文档结构的信息,但这里是 Mongo 文档here 中提供的查询的简单示例。 值得注意的是,您需要对定义为 GeoJSON 点的位置数据使用 2dsphere 索引才能使其生效。

 
   $nearSphere: 
      $geometry: 
         type : "Point",
         coordinates : [ <longitude>, <latitude> ]
      ,
      $minDistance: <distance in meters>,
      $maxDistance: <distance in meters>
   
 

【讨论】:

我有一个文档,其中包含纬度和经度以及 id 作为邮政编码。 “_id”:ObjectId(“5a559b13ae201d0c05cb6f6a”),“id”:“99623”,“city”:“Wasilla”,“cnty”:“Matanuska Susitna”,“cntyFips”:null,“st”:“AK” , "stName" : "Alaska", "areaCode" : "907", "lat" : 61.5816, "long" : -149.4393, "rgn" : "West", "__v" : 0 在本文档中 lat 用于纬度和经度是经度。所以基本上我必须根据当前 id lat 和 long 获取所有 id,这些 id 在特定的英里距离范围内。 是否可以更新您的数据结构,或者您是否被锁定在格式中?您可以编写一个复杂的查询来获取信息,但最好、最快地将数据坐标转换为 GeoJSON 格式。 thnx @Genthe 我以 GeoJSON 格式管理我的文档结构。 所以现在一切都为您工作,还是您还需要帮助? 太好了。很高兴你被分类了。【参考方案2】:

Mongo 支持GeoJSON,它应该允许您轻松地对这些类型的数据执行基本查询。示例包括针对您的特定用例的 $geoWithin

【讨论】:

以上是关于MongoDB中的地理位置查询的主要内容,如果未能解决你的问题,请参考以下文章

Spring-data MongoDB地理查询

使用 java 的 MongoDb $near 查询没有给出正确的位置

具有稀疏复合索引的 MongoDB $near 地理空间查询错误 13311

具有稀疏复合索引的 MongoDB $near 地理空间查询错误 13311

MongoDB中是不是有类似反向地理空间查询的东西?

mongoDb地理空间索引和查询