MongoDB MultiPolygon 的地理空间查询
MongoDB Geospacial Query on MultiPolygon
我一直在通读 mongo 关于地理空间查询的文档,并且对单一多边形类型运行良好,但在使用 MultiPolygon 时遇到了问题。我想做的基本上是这样的:
给定一个 MultiPolygon 轮廓排除区域:
{
"type" : "MultiPolygon",
"coordinates" : [
[
[
[
-117.873730659485,
33.6152089844919
],
[
-117.873065471649,
33.615048159758
],
[
-117.873044013977,
33.614690770386
],
[
-117.873666286469,
33.6146729008785
],
[
-117.873730659485,
33.6152089844919
]
]
]
]
}
我只是希望能够传入一个Point
,看看是否排除。我试过 $geoIntersects
只是想看看它是否甚至可以确定是否包含 Point
,但这不起作用。最后,我想检查一个点是否 not 包含在排除列表中,但是没有额外的 $not
运算符查询更简单......这就是我'一直在努力:
var geoPoint = {type: 'Point', coordinates: [-117.8731230, 33.6150696]};
db.myCollection.aggregate([
{$match: {'exclusionsPolygons': {$geoIntersects: {$geometry: geoPoint}}}}
]);
请注意,如果我对 Polygon
类型的 GeoJSON
做完全相同的事情,那么它工作得很好:
给定这个多边形:
{
"type" : "Polygon",
"coordinates" : [
[
[
-117.8711744,
33.6129677
],
[
-117.8751744,
33.6129677
],
[
-117.874444839148,
33.6162171973226
],
[
-117.87287399259,
33.6172714730352
],
[
-117.871410434393,
33.6165209730032
],
[
-117.8711744,
33.6129677
]
]
]
}
此查询仅能找到并 returns 其奇异多边形包含点的项目:
var geoPoint = {type: 'Point', coordinates: [-117.8731230, 33.6150696]};
db.myCollection.aggregate([
{$match: {'singularPolygon': {$geoIntersects: {$geometry: geoPoint}}}}
]);
经过一些修修补补,结果集是对的,我错了...
我正在使用地图上的感兴趣区域来获取地址以尝试查询。一个这样的地方,我想,在一个排除多边形中:
但是,一旦我将多边形变大,结果集就开始像我预期的那样返回...所以,我重置了多边形并仔细检查了地图内容,发现如果我进一步放大该区域由于包含多个感兴趣区域,感兴趣的区域实际上被排除在多边形之外:
糟糕 - 我的错 :)
我一直在通读 mongo 关于地理空间查询的文档,并且对单一多边形类型运行良好,但在使用 MultiPolygon 时遇到了问题。我想做的基本上是这样的:
给定一个 MultiPolygon 轮廓排除区域:
{
"type" : "MultiPolygon",
"coordinates" : [
[
[
[
-117.873730659485,
33.6152089844919
],
[
-117.873065471649,
33.615048159758
],
[
-117.873044013977,
33.614690770386
],
[
-117.873666286469,
33.6146729008785
],
[
-117.873730659485,
33.6152089844919
]
]
]
]
}
我只是希望能够传入一个Point
,看看是否排除。我试过 $geoIntersects
只是想看看它是否甚至可以确定是否包含 Point
,但这不起作用。最后,我想检查一个点是否 not 包含在排除列表中,但是没有额外的 $not
运算符查询更简单......这就是我'一直在努力:
var geoPoint = {type: 'Point', coordinates: [-117.8731230, 33.6150696]};
db.myCollection.aggregate([
{$match: {'exclusionsPolygons': {$geoIntersects: {$geometry: geoPoint}}}}
]);
请注意,如果我对 Polygon
类型的 GeoJSON
做完全相同的事情,那么它工作得很好:
给定这个多边形:
{
"type" : "Polygon",
"coordinates" : [
[
[
-117.8711744,
33.6129677
],
[
-117.8751744,
33.6129677
],
[
-117.874444839148,
33.6162171973226
],
[
-117.87287399259,
33.6172714730352
],
[
-117.871410434393,
33.6165209730032
],
[
-117.8711744,
33.6129677
]
]
]
}
此查询仅能找到并 returns 其奇异多边形包含点的项目:
var geoPoint = {type: 'Point', coordinates: [-117.8731230, 33.6150696]};
db.myCollection.aggregate([
{$match: {'singularPolygon': {$geoIntersects: {$geometry: geoPoint}}}}
]);
经过一些修修补补,结果集是对的,我错了...
我正在使用地图上的感兴趣区域来获取地址以尝试查询。一个这样的地方,我想,在一个排除多边形中:
但是,一旦我将多边形变大,结果集就开始像我预期的那样返回...所以,我重置了多边形并仔细检查了地图内容,发现如果我进一步放大该区域由于包含多个感兴趣区域,感兴趣的区域实际上被排除在多边形之外:
糟糕 - 我的错 :)