MultiPolygon上的MongoDB Geospacial查询

时间:2017-11-09 17:57:41

标签: mongodb geospatial

我一直在阅读mongo关于geospacial查询的文档,并且对于singl Polygon类型的东西工作得很好但是我遇到了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}}}}
]);

请注意,如果我使用GeoJSON类型Polygon执行相同的操作,那么它可以正常运行:

鉴于此单一多边形:

{
    "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
            ]
        ]
    ]
}

此查询仅用于查找并返回其奇异多边形包含该点的项目:

var geoPoint = {type: 'Point', coordinates: [-117.8731230, 33.6150696]};
db.myCollection.aggregate([
  {$match: {'singularPolygon': {$geoIntersects: {$geometry: geoPoint}}}}
]);

1 个答案:

答案 0 :(得分:0)

经过一些修修补补,结果表明结果是对的,我错了......

我正在使用地图上感兴趣的区域来获取要尝试查询的地址。我想,有一个这样的地方是一个排除多边形:

Exclusion Polygon

然而,一旦我将多边形设置得更大,结果集开始回归,因为我预期它...所以,我重置多边形并仔细检查地图内容,发现如果我进一步放大感兴趣的区域实际上是从多边形中排除的,因为包含了多个感兴趣的区域:

Exclusion Polygon - Zoomed

糟糕 - 我的坏:)