MongoDB是否支持使用$ geoWithin进行GIS地理围栏?

时间:2013-05-17 03:03:26

标签: mongodb geocoding geospatial

我想拥有一个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功能集有关吗?如果是这样,它会怎么做?

2 个答案:

答案 0 :(得分:0)

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

根据收藏中的文件数量,可能会或可能不会提供足够的效果。

答案 1 :(得分:0)

MongoDB完全支持地理围栏或查找几何与给定几何(点,多边形)相交的文档。下面的查询是一个示例。 geometry中的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
        ]
      }
    } 
  }                         
});