我需要在 Mapbox Android SDK 地图上绘制一个带有孔的 GeoJSON 多边形。
正如GeoJSON 规范所说,
对于“Polygon”类型,“coordinates”成员必须是 LinearRing 坐标数组的数组。对于具有多个环的多边形,第一个必须是外环,其他必须是内环或孔。
在 Leaflet、Mapbox JS 和 Mapbox GL JS 中,加载 GeoJSON 由库本身处理。正如在这个 fiddle中可以看到的,lib 考虑了内环,因此正确地绘制了孔。
[ //Outer ring
[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]
],
[ //Inner ring (hole)
[100.35, 0.35], [100.65, 0.35], [100.65, 0.65], [100.35, 0.65], [100.35, 0.35]
]
当我查看有关绘制多边形的 Android 文档时,没有任何关于孔的信息。他们给出的例子只是对所有点进行循环并用它构建一个 PolyOptions:在 Mapbox Android 中绘制多边形。
我一直在尝试通过添加外环的所有点来构建一个 polyOptions,然后是内环,一个接一个。使用来自 JSFiddle 的简单 geoJSON 它可以工作,但它会造成一个漏洞。但是对于我更复杂的geoJSON,整个渲染都被破坏了(形状看起来不像它应该的样子)。
之后,我尝试为geoJSON的每个环构建一个单独的多边形。当然形状很好,但是没有孔,而是用堆叠的多边形代替了它们。
我一直在寻找PolygonOptions构造函数的其他选项,但只能发送点。我想画所有的多边形,然后减去形状,但我发现没有这样的功能。
这是我的 GeoJSON。它在 mapbox JS 上画得很好。我想知道我的 GeoJSON 是否有问题,但我不这么认为,因为它在 geojson.io 上画得很好。也许我错过了关于 geoJSON 或 mapbox 的一些东西。我没有找到任何有关此的文档。我正在考虑切换到谷歌地图,但这意味着从头开始重新启动整个项目。
任何想法 ?