【问题标题】:Does MongoDB support GIS geofencing with $geoWithin?MongoDB 是否支持 $geoWithin 的 GIS 地理围栏?
【发布时间】:2013-05-12 03:09:57
【问题描述】:

我想要一个 MongoDB 集合,每个文档都包含一个由纬度/经度点(在 GeoJSON 中)定义的地理空间多边形。然后,我想获取任何给定的经度/纬度点并检查它是否位于文档中定义的任何 MongoDB 多边形内。假设,这就是文档的样子。

{
  "type" : "congressional",
  "points" : [ 
       { "coords" : [ 
            -141.0205, 
            70.0187 ] 
        }, 

        ...

        { "coords" : [ 
            -141.0205, 
            70.0187 ] 
        }  
    ]
}

或者可能是这样:

{ loc :
   { type : "Polygon" ,
     coordinates : [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ]
} }

然后我会假设性地查询它(最有可能使用 Mongo 的 $geoWithin):

db.places.find( { loc : { $geoWithin : { $geometry : "EACH DOCUMENT IN COLLECTION"} } } )

地理围栏或类似的东西可以与当前的 MongoDB 功能集一起使用吗?如果有,怎么做?

【问题讨论】:

  • 我已经完全改写了这个问题并包含了一些假设的代码示例,以帮助澄清我的问题。如果您认为这个问题现在的格式易于理解并且清楚地代表了一个真实的问题,您是否考虑投票重新打开它。非常感谢!
  • +1 好问题 .. 你能解决这个问题吗?你使用的是什么开发语言?
  • 根据所有进一步的研究,我认为 MongoDB 并不真正支持地理围栏。同时,我选择将 Postgres SQL 与 PostGIS 一起使用。如果 MongoDB 曾经支持完整的地理围栏,我会切换回它。我希望这会有所帮助!
  • Mongo 可以做地理围栏,见答案。

标签: mongodb geocoding geospatial


【解决方案1】:

我相信您必须首先从集合中找到每个文档。然后对每个文档进行“$geoWithin”查询,传入 Polygon 以针对每种情况进行测试。

根据您的集合中的文档数量,这可能会或可能不会提供足够的性能。

【讨论】:

  • Mongo 为您完成这一切。见答案。
  • 注意我在 2013 年回答了这个问题。
  • 也许我理解错了,但是“我相信你必须先从集合中找到每个文档”不是必需的,但是让睡狗... ;)
【解决方案2】:

MongoDB 完全支持地理围栏或查找几何与给定几何(点、多边形)相交的文档。下面的查询是一个示例。 geometry of Collection 是包含几何的字段。

文档示例:

{     "geometry": {
            "type": "Polygon",
            "coordinates": [
               [
                  [
                     -74.001487,
                     40.692346
                  ],
                  [
                     -74.001755,
                     40.692057
                  ],
                  [
                     -74.000977,
                     40.691951
                  ],
                  [
                     -74.000827,
                     40.692297
                  ],
                  [
                     -74.001487,
                     40.692346
                  ]
               ]
            ]
         }
 }

JS查询:

//find quests bots that matches the users location
await Collection.find({     geometry:   
  { $geoIntersects: 
   { 
     {
      type: "Point",
      coordinates: [
        -73.99460599999999,
        40.7347229
        ]
      }
    } 
  }                         
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 2013-03-31
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    相关资源
    最近更新 更多