2017-09-05 107 views
0

我有一個具有多個多邊形的GeoJson文件。 就是這樣。外部信封到一組多邊形

enter image description here

我用單張呈現此GeoJSON的一個網站。
我想繪製一個包圍所有多邊形的polygo的輪廓。像這樣的東西。 enter image description here

GeoJSON的格式,我使用:

{ 
"features": [ 
    { 
    "geometry": { 
     "coordinates": [ 
     [ 
      [ 
      1074.426, 
      -1136.986 
      ], 
      [ 
      1088.241, 
      -1123.171 
      ] 
     ] 
     ], 
     "type": "Polygon" 
    }, 
    "properties": { 
     "number": "2009", 
     "type": "", 
     "spaceid": null, 
     "alias": null, 
     "roomkey": "5/2009" 
    }, 
    "type": "Feature" 
    } 
], 
"bbox": [ 
    2445.578, 
    2445.578 
], 
"crs": { 
    "properties": { 
    "name": "urn:ogc:def:crs:OGC:1.3:CRS84" 
    }, 
    "type": "name" 
}, 
"type": "FeatureCollection" 

}

任何指針會有所幫助:)謝謝

+0

你希望包圍份額邊的多邊形?如果不是,凸包是您的主要選擇(如其他答案中所述)。如果您的多邊形共享邊,則有可能的解決方案可以根據不共享的邊(以及組合的多邊形的外部邊界)組合外部多邊形(和內部環)。 –

回答

1

您尋找 「凸包」:

在數學中,集合X的凸包或凸包在歐氏平面或歐幾里得空間中的點(或更一般地,在通過雷亞爾仿射空間)是最小的凸集,其中包含十

參考:https://en.wikipedia.org/wiki/Convex_hull

你可以這樣做用Turf.js convex方法:

獲取Feature或FeatureCollection並返回一個凸包多邊形。

參考:http://turfjs.org/docs/#convex

例子:

var map = new L.Map('leaflet', {center: [0, 0], zoom: 0}); 
 

 
var collection = turf.featureCollection([ 
 
    turf.polygon([[[-80,-80],[-40,-80],[-40,-40],[-80,-40],[-80,-80]]]), 
 
    turf.polygon([[[80,80],[40,80],[40,40],[80,40],[80,80]]]) 
 
]); 
 

 
new L.GeoJSON(collection, {color: 'red'}).addTo(map); 
 

 
var polygon = turf.convex(collection); 
 

 
new L.GeoJSON(polygon, {color: 'black', 'fill': false }).addTo(map);
body { 
 
    margin: 0; 
 
} 
 

 
html, body, #leaflet { 
 
    height: 100%; 
 
}
<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
    <title>Leaflet 1.2.0</title> 
 
    <meta charset="utf-8" /> 
 
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 
 
    <link type="text/css" rel="stylesheet" href="//unpkg.com/[email protected]/dist/leaflet.css" /> 
 
    </head> 
 
    <body> 
 
    <div id="leaflet"></div> 
 
    <script type="application/javascript" src="//unpkg.com/[email protected]/dist/leaflet.js"></script> 
 
    <script type="application/javascript" src="//npmcdn.com/@turf/turf/turf.min.js"></script> 
 
</script> 
 
    </body> 
 
</html>

+0

但凸包錯過了內點。如果你考慮一個L形的角落..前兩點將被選中如果你看到這個圖像https://raw.githubusercontent.com/AndriiHeonia/hull/master/readme-imgs/1.png我不想要那些空的空間。邊界必須沿着邊緣運行。 –