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

时间:2016-03-11 09:09:30

标签: android google-maps mapbox geojson mapbox-gl

我需要在Mapbox Android SDK地图上绘制 GeoJSON poly和孔

正如GeoJSON spec所说,

  

对于类型" Polygon","坐标" member必须是LinearRing坐标数组的数组。对于具有多个环的多边形,第一个必须是外环,而任何其他环必须是内环或孔。

在Leaflet,Mapbox JS和Mapbox GL JS中,加载GeoJSONs由库本身处理。正如在this 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:Polygon drawing in Mapbox Android

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

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

我一直在寻找PolygonOptions构造函数的其他选项,但除了可以发送点之外别无其他。我考虑绘制所有多边形,然后减去形状,但我found no such feature

Here is my GeoJSON。它在mapbox JS上很好用。我想知道我的GeoJSON是否有问题,但我不这么认为,因为它在geojson.io上绘制得很好。也许我错过了一些关于geoJSON或mapbox的东西。我没有找到任何关于这方面的文件。我正在考虑切换到谷歌地图,但这意味着从头开始重新启动整个项目。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

经过一个很长的一步一步的过程,我现在能够从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的纯文本(Malasya有洞的巨大广场): {"输入":"功能","属性":{"名称":"主页区"},& #34;几何":{"类型":"多边形","坐标":[[[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]]]}}