我想拥有一个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功能集是否可以使用地理围栏或类似功能?如果是这样,怎么办?
我相信您必须首先从集合中找到每个文档。然后对每个文档进行“ $ geoWithin”查询,并传入Polygon以针对每种情况进行测试。
取决于集合中文档的数量,可能无法提供足够的性能。
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
]
}
}
}
});