Veo un montón de preguntas que van de Polygons
a MultiPolygon
, pero ¿hay alguna manera fácil de ir hacia el otro en torno manera? También sería útil preservar los atributos de la MultiPolygon
aplicación a la nueva Polygons
.
Veo un montón de preguntas que van de Polygons
a MultiPolygon
, pero ¿hay alguna manera fácil de ir hacia el otro en torno manera? También sería útil preservar los atributos de la MultiPolygon
aplicación a la nueva Polygons
.
Respuestas:
Si tiene un Multipolígono simple como el siguiente,
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]
]
]
]
}
luego, usando Javascript / Nodejs, puede acceder a cada Polígono constituyente usando forEach, y escribir un nuevo Polígono usando JSON.stringify
mp.coordinates.forEach(function(coords){
var feat={'type':'Polygon','coordinates':coords};
console.log(JSON.stringify(feat));
}
);
También puede acceder a ellos directamente en un bucle, si prefiere una forma menos funcional, indexada en mp.coordinates.length, por ejemplo,
for (var i=0;i<mp.coordinates.length;i++){
var feat={'type':'Polygon','coordinates':mp.coordinates[i]};
console.log(JSON.stringify(feat));
}
Si se trata de una FeatureCollection, donde podría tener una matriz de características, cada una con un MultiPolygon, por ejemplo,
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"
}
}
]
}
Luego, puede usar forEach para llegar a cada entidad y luego acceder a cada Polígono dentro de cada Multipolígono simplemente recorriendo la matriz, ya que la primera dimensión de la matriz de coordenadas es el índice en cada Polígono. Tenga en cuenta que también puede guardar las propiedades y asignarlas a cada nueva función Polígono.
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 desea algo más sofisticado, podría considerar modificar la clase OpenLayers.Format.GeoJSON .