我正在尝试添加2dsphere
索引并遇到格式错误的几何问题(使用带有2dsphere索引版本2的MongoDB 2.6)
该集合包含具有Polygon
几何的文档作为具有MultiPolygon
几何的文档。当Mongo到达具有MultiPolygon
几何体的文档时,它会立即抛出#16755错误(格式错误的几何体)。 根据GeoJSONlint.com
设置索引时是否允许混合几何类型?
我如何处理此问题?
失败的文件看起来像这样:(为了便于阅读,我省略了几点。两个多边形仍在关闭......)
{ "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 ] ] ] ] }
答案 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
]
]]
}
所以这就是它的一部分,但当然看看它看起来很有帮助:
那么伟大的“OOPS!”这里是“多边形”本身相交以形成“两个”不同区域。现在,MongoDB和其他支持GIS的引擎“不喜欢这样”并期望具有至少一致外边界的“多边形”。有一个“内环”很好,但由于这分开了两个区域,因此该形状被认为无法存储。
对此的明确解决方法是检查您的数据并找到任何此类“相交”边界。然后在存储它们时将它们分成单独的“Polygon”对象定义(在“MultiPolygon”的数组中也很好)。
因此,您当前的“MultiPolygon”定义定义了“两个”“多边形”对象,但这里所期望的是“三个”,交叉对象在交叉点被分成“两个”对象。 只要您符合这些约束条件,那么您的“索引”将起作用,您可以使用所有正常的地理空间操作查询这些对象。