MongoDb无法使用Polygon和MultiPolygon在集合上创建2dsphere索引

时间:2015-07-08 13:40:45

标签: mongodb geometry polygon geojson 2dsphere

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

该集合包含具有Polygon几何的文档作为具有MultiPolygon几何的文档。当Mongo到达具有MultiPolygon几何体的文档时,它会立即抛出#16755错误(格式错误的几何体)。 根据GeoJSONlint.com

,GeoJSON是正确的

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

我如何处理此问题?

失败的文件看起来像这样:(为了便于阅读,我省略了几点。两个多边形仍在关闭......)

{
    "type" : "MultiPolygon",
    "coordinates" : [ 
        [ 
            [ 
                [ 
                    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
                ]
            ]
        ]
    ]
}

1 个答案:

答案 0 :(得分:3)

花了一段时间找到一个可用的“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
        ]
    ]]
}

所以这就是它的一部分,但当然看看它看起来很有帮助:

Polygon1

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

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

因此,您当前的“MultiPolygon”定义定义了“两个”“多边形”对象,但这里所期望的是“三个”,交叉对象在交叉点被分成“两个”对象。 只要您符合这些约束条件,那么您的“索引”将起作用,您可以使用所有正常的地理空间操作查询这些对象。