Je vois beaucoup de questions allant de Polygons
à MultiPolygon
, mais y a-t-il un moyen facile de faire l'inverse? Il serait également utile de conserver les attributs du MultiPolygon
pour les appliquer au nouveau Polygons
.
Je vois beaucoup de questions allant de Polygons
à MultiPolygon
, mais y a-t-il un moyen facile de faire l'inverse? Il serait également utile de conserver les attributs du MultiPolygon
pour les appliquer au nouveau Polygons
.
Réponses:
Si vous avez un multipolygone simple tel que celui ci-dessous,
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]
]
]
]
}
puis en utilisant Javascript / Nodejs, vous pouvez accéder à chaque polygone constitutif en utilisant forEach, et écrire un nouveau polygone en utilisant JSON.stringify
mp.coordinates.forEach(function(coords){
var feat={'type':'Polygon','coordinates':coords};
console.log(JSON.stringify(feat));
}
);
Vous pouvez également y accéder directement dans une boucle, si vous préférez une méthode moins fonctionnelle, indexée sur mp.coordinates.length, par exemple,
for (var i=0;i<mp.coordinates.length;i++){
var feat={'type':'Polygon','coordinates':mp.coordinates[i]};
console.log(JSON.stringify(feat));
}
Si vous traitez avec une FeatureCollection, où vous pourriez avoir un tableau de fonctionnalités, chacune contenant un MultiPolygon, par exemple,
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"
}
}
]
}
Ensuite, vous pouvez utiliser forEach pour accéder à chaque entité, puis accéder à chaque polygone dans chaque multipolygone simplement en bouclant à travers le tableau, car la première dimension du tableau de coordonnées est l'index dans chaque polygone. Remarque, vous pouvez également enregistrer les propriétés et les affecter à chaque nouvelle fonction Polygone.
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));
}
}
});
Si vous voulez quelque chose de plus sophistiqué, vous pouvez envisager de modifier la classe OpenLayers.Format.GeoJSON .