2

我正在尝试添加2dsphere索引并遇到格式错误的几何问题(使用带有 2dsphere 索引版本 2 的 MongoDB 2.6)

该集合包含具有Polygon几何的文档作为具有几何的文档MultiPolygon。Mongo 在到达具有几何图形的文档时会立即引发 #16755 错误(格式错误的几何图形)MultiPolygon根据 GeoJSONlint.com,GeoJSON 是正确的

设置索引时是否允许混合几何类型?

我该如何应对这个问题?

失败的文档如下所示:(为了便于阅读,我省略了几点。两个多边形仍在关闭......)

{
    “类型”:“多多边形”,
    “坐标”:[
        [
            [
                [
                    4.8730935147694279,
                    51.4125385138567450
                ],
                [
                    4.8731073690744831,
                    51.4124188435040280
                ],
                [
                    4.8719363156445858,
                    51.4121631573312000
                ],
                [
                    4.8720931816264326,
                    51.4120192196300750
                ],
                [
                    4.8730935147694279,
                    51.4125385138567450
                ]
            ]
        ],
        [
            [
                [
                    4.9354151466562142,
                    51.4320525317730240
                ],
                [
                    4.9341804433318899,
                    51.4319519241268350
                ],
                [
                    4.9341480860178217,
                    51.4323138673607550
                ],
                [
                    4.9341289343773811,
                    51.4329459213489240
                ],
                [
                    4.9341142802746933,
                    51.4334292461250870
                ],
                [
                    4.9354151466562142,
                    51.4320525317730240
                ]
            ]
        ]
    ]
}
4

1 回答 1

4

我花了一段时间才找到一个可用的“tuit”,但这里的答案真的很简单。看来这里的问题在于“MultiPolygon”定义中的第一个“Polygon”对象。

只是提取:

{
    "type": "Polygon",
    "coordinates": [[
        [ 
            4.9354151466562142, 
            51.4320525317730240
        ], 
        [ 
            4.9341804433318899, 
            51.4319519241268350
        ], 
        [ 
            4.9341480860178217, 
            51.4323138673607550
        ], 
        [ 
            4.9341289343773811, 
            51.4329459213489240
        ], 
        [ 
            4.9341142802746933, 
            51.4334292461250870
        ], 
        [ 
            4.9354151466562142, 
            51.4320525317730240
        ]
    ]]
}

这就是一部分,但当然它有助于查看它的样子:

多边形1

所以伟大的“哎呀!” 这里是“多边形”本身相交以形成“两个”不同的区域。现在 MongoDB 和其他支持 GIS 的引擎“不喜欢那样”,并期望“多边形”至少具有一致的外部边界。有一个“内环”很好,但由于这将两个区域分开,因此该形状被视为无效存储。

对此的明确解决方法是检查您的数据并找到任何此类“相交”边界。然后在存储它们时将它们分成单独的“Polygon”对象定义(在“MultiPolygon”的数组中也可以)。

因此,您当前的“MultiPolygon”定义定义了“两个”“Polygon”对象,但这里预期的是“三个”,相交对象在相交点被分解为“两个”对象。只要您符合这些限制条件,您的“索引”就会起作用,您可以使用所有正常的地理空间操作查询这些对象。

于 2015-07-10T11:06:16.207 回答