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