Ich sehe viele Fragen von Polygons
bis MultiPolygon
, aber gibt es einen einfachen Weg, um umgekehrt zu werden? Es wäre auch nützlich, die Attribute von zu beibehalten MultiPolygon
, um sie auf die neuen anzuwenden Polygons
.
Ich sehe viele Fragen von Polygons
bis MultiPolygon
, aber gibt es einen einfachen Weg, um umgekehrt zu werden? Es wäre auch nützlich, die Attribute von zu beibehalten MultiPolygon
, um sie auf die neuen anzuwenden Polygons
.
Antworten:
Wenn Sie ein einfaches Multipolygon wie das folgende haben,
mp=
{
"type": "MultiPolygon",
"coordinates": [
[
[
[-99.028, 46.985], [-99.028, 50.979],
[-82.062, 50.979], [-82.062, 47.002],
[-99.028, 46.985]
]
],
[
[
[-109.028, 36.985], [-109.028, 40.979],
[-102.062, 40.979], [-102.062, 37.002],
[-109.028, 36.985]
]
]
]
}
Anschließend können Sie mit Javascript / Nodejs mit forEach auf jedes einzelne Polygon zugreifen und mit JSON.stringify ein neues Polygon schreiben
mp.coordinates.forEach(function(coords){
var feat={'type':'Polygon','coordinates':coords};
console.log(JSON.stringify(feat));
}
);
Sie können auch direkt in einer Schleife darauf zugreifen, wenn Sie eine weniger funktionale Methode bevorzugen, die auf mp.coordinates.length indiziert ist, z.
for (var i=0;i<mp.coordinates.length;i++){
var feat={'type':'Polygon','coordinates':mp.coordinates[i]};
console.log(JSON.stringify(feat));
}
Wenn Sie es mit einer FeatureCollection zu tun haben, in der Sie möglicherweise ein Array von Features haben, die jeweils ein MultiPolygon enthalten, z.
mp = {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[[
[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0],
[100.0, 0.0]
]],
[[
[0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [0.0, 1.0],
[0.0, 0.0]
]]
]
},
"properties": {
"prop1": {
"this": "that"
},
"prop0": "value0"
}
}
]
}
Anschließend können Sie mit forEach zu jedem Feature gelangen und dann auf jedes Polygon in jedem Multipolygon zugreifen, indem Sie einfach das Array durchlaufen, da die erste Dimension des Koordinatenarrays der Index für jedes Polygon ist. Beachten Sie, dass Sie die Eigenschaften auch speichern und jedem neuen Polygon-Feature zuweisen können.
mp.features.forEach(function(feat){
var geom=feat.geometry;
var props=feat.properties;
if (geom.type === 'MultiPolygon'){
for (var i=0; i < geom.coordinates.length; i++){
var polygon = {
'type':'Polygon',
'coordinates':geom.coordinates[i],
'properties': props};
console.log(JSON.stringify(polygon));
}
}
});
Wenn Sie etwas Anspruchsvolleres wünschen, können Sie die OpenLayers.Format.GeoJSON- Klasse ändern .