gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:41:40 25 4
gpt4 key购买 nike

我需要在 Mapbox Android SDK map 上绘制一个带有孔的GeoJSON 多边形

作为GeoJSON spec说,

For type "Polygon", the "coordinates" member must be an array of LinearRing coordinate arrays. For Polygons with multiple rings, the first must be the exterior ring and any others must be interior rings or holes.

在 Leaflet、Mapbox JS 和 Mapbox GL JS 中,加载 GeoJSON 由库本身处理。在this fiddle中可以看出,该库考虑了内环,因此可以正确绘制孔。

      [ //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 :Polygon drawing in Mapbox Android .

我一直在尝试通过添加外环的所有点,然后是内环,一个接一个地构建一个 polyOptions。使用来自 JSFiddle 的简单 geoJSON 它可以工作,它会造成一个漏洞。但是对于我更复杂的 geoJSON,整个渲染都被破坏了(形状看起来不像它应该的样子)。

之后,我尝试为 geoJSON 的每个环构建一个单独的多边形。当然形状很好,但是没有孔,而是堆叠的多边形而不是它们。

我一直在寻找 PolygonOptions 的其他选择构造函数,但只能发送点。我考虑过绘制所有多边形然后减去形状,但我 found no such feature .

Here is my 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","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]]]}}

关于android - Mapbox Android - 如何绘制带孔的 GeoJSON 多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35936071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com