2016-03-11 69 views
2

我需要在Mapbox Android SDK地圖上繪製帶有孔洞的GeoJSON聚合物Mapbox Android - 如何繪製帶孔洞的GeoJSON多邊形

作爲GeoJSON spec說,

對於類型「多邊形」中,「座標」構件必須是座標陣列線性環的陣列。對於帶多個環的多邊形,首先必須是外部環,其他必須是內部環或孔。

在Leaflet,Mapbox JS和Mapbox GL JS中,加載GeoJSONs是由庫本身處理的。正如在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

我一直在嘗試通過添加外環所有點,然後內環,一個接一個地增加所有點。使用JSFiddle提供的簡單geoJSON它可以起作用,它會造成一個漏洞。但隨着我更復雜的geoJSON整個渲染被打破(形狀看起來不像應該)。

之後,我嘗試爲geoJSON的每個環構建一個單獨的聚合物。當然,形狀很好,但沒有洞,但堆疊的多邊形而不是它們。

我一直在尋找PolygonOptions構造函數的其他選項,但只能發送點數。我想繪製所有的多晶硅,然後減少形狀,但我found no such feature

Here is my GeoJSON。它在mapbox JS上畫得很好。我想知道我的GeoJSON是否有問題,但我不這麼認爲,因爲它在geojson.io上畫得很好。也許我錯過了一些關於geoJSON或mapbox的東西。我沒有找到任何有關這方面的文件。我正在考慮切換到谷歌地圖,但這意味着重新啓動整個項目。

有什麼想法?

+0

我可能是錯的,但Mapbox將「Polygon」定義爲「幾何註釋是閉合的座標循環」,根據API參考,無法向Polygons添加孔洞... – antonio

+3

帶內部孔的多邊形尚未實現。有這個功能請求https://github.com/mapbox/mapbox-gl-native/issues/1729 – Tobrun

+0

這就是我認爲..謝謝 – Rayjax

回答

1

經過非常長的一步一步的過程,我現在能夠從GeoJson數據顯示多邊形中的空洞。

我使用該版本mapbox的:

compile("com.mapbox.mapboxsdk:mapbox-android-sdk:[email protected]") 

我用GeoJsonSource組合Mapbox(FillLayer)的層系統。下面是幾行代碼,以幫助:

//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],[1 00.0,0.0]],[[100.2,0.2],[100.8,0.2],[100.8,0.8],[100.2,0.8],[100.2,0.2]]]}}