Vejo muitas perguntas passando de Polygons
para MultiPolygon
, mas existe alguma maneira fácil de fazer o contrário? Também seria útil preservar os atributos do MultiPolygon
para aplicar ao novo Polygons
.
Vejo muitas perguntas passando de Polygons
para MultiPolygon
, mas existe alguma maneira fácil de fazer o contrário? Também seria útil preservar os atributos do MultiPolygon
para aplicar ao novo Polygons
.
Respostas:
Se você possui um multipolígono simples como o abaixo,
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]
]
]
]
}
usando Javascript / Nodejs, você poderá acessar cada polígono constituinte usando forEach e escrever um novo polígono usando JSON.stringify
mp.coordinates.forEach(function(coords){
var feat={'type':'Polygon','coordinates':coords};
console.log(JSON.stringify(feat));
}
);
Você também pode acessá-los diretamente em um loop, se preferir uma maneira menos funcional, indexada em mp.coordinates.length, por exemplo,
for (var i=0;i<mp.coordinates.length;i++){
var feat={'type':'Polygon','coordinates':mp.coordinates[i]};
console.log(JSON.stringify(feat));
}
Se você está lidando com um FeatureCollection, no qual você pode ter uma matriz de recursos, cada um contendo um MultiPolygon, por exemplo,
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"
}
}
]
}
Em seguida, você pode usar forEach para acessar cada recurso e acessar cada polígono em cada multipolígono simplesmente fazendo um loop pela matriz, pois a primeira dimensão da matriz de coordenadas é o índice de cada polígono. Observe que você também pode salvar as propriedades e atribuí-las a cada novo recurso de 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));
}
}
});
Se você quiser algo mais sofisticado, poderá modificar a classe OpenLayers.Format.GeoJSON .