繁体   English   中英

Mapbox Android - 如何绘制带有孔的 GeoJSON 多边形

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM