![](/img/trans.png)
[英]How to highlight a LineString (or Polygon) in Mapbox Android from a GeoJSON or the mapboxId
[英]Mapbox Android - How to draw GeoJSON polygon with holes
我需要在 Mapbox Android SDK 地图上绘制一个带有孔的GeoJSON 多边形。
正如GeoJSON 规范所说,
对于“Polygon”类型,“coordinates”成员必须是 LinearRing 坐标数组的数组。 对于具有多个环的多边形,第一个必须是外环,任何其他环必须是内环或孔。
在 Leaflet、Mapbox JS 和 Mapbox GL JS 中,加载 GeoJSONs 由库本身处理。 正如在这个 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 的东西。 我没有找到任何关于此的文档。 我正在考虑改用谷歌地图,但这意味着从头开始重新启动整个项目。
任何的想法 ?
经过很长的一步一步的过程,我现在可以从 GeoJson 数据中显示多边形中的孔。
我正在使用这个版本的 mapbox :
compile("com.mapbox.mapboxsdk:mapbox-android-sdk:5.0.1@aar")
我使用 Mapbox (FillLayer) 的图层系统与 GeoJsonSource 相结合。 这里有几行代码可以提供帮助:
//first create a feature
Feature polygon = Feature.fromJson("{\"type\":\"Feature\",\"properties\":{\"name\":\"Home Zone\"},\"geometry\":{\"type\":\"Polygon\",\"coordinates\":[[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]],[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]],[[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]]]}}");
//Then create a Feature Collection from it
FeatureCollection collection = FeatureCollection.fromFeatures(new Feature[]{polygon});
//Finally you just need to use the collection to update your layer Source.
GeoJsonSource geoJsonSource = map.getSourceAs("yourSourceId");
geoJsonSource.setGeoJson(collection);
作为示例,您可以在此处查看 GeoJson: http ://geojson.io/
GeoJson 格式: https ://geojson.org/geojson-spec.html#id4
纯文本中的 GeoJson(马来西亚有洞的巨大正方形):{"type":"Feature","properties":{"name":"Home Zone"},"geometry":{"type":"Polygon" ,"坐标":[[[102.0, 2.0], [103.0, 2.0], [103.0, 3.0], [102.0, 3.0], [102.0, 2.0]],[[100.0, 0.0], [101.0], [101.0], , [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]],[[100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.2], [100.2], [100.2, 0.2] ]]}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.