1

我想要一个 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's $geoWithin):

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

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

4

2 回答 2

0

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

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

于 2013-11-04T01:58:25.360 回答
0

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

文档示例:

{     "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
        ]
      }
    } 
  }                         
});
于 2019-12-27T23:30:28.080 回答