MongoDB是否通过$ geoWithin支持GIS地理围栏?

问题描述 投票:1回答:2

我想拥有一个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功能集是否可以使用地理围栏或类似功能?如果是这样,怎么办?

mongodb geocoding geospatial
2个回答
0
投票

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

取决于集合中文档的数量,可能无法提供足够的性能。


0
投票

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

文档示例:

{     "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
        ]
      }
    } 
  }                         
});
© www.soinside.com 2019 - 2024. All rights reserved.