[Gfoss] Postgres/Postgis: trasformare un layer Polygo in MultiPolygon

Ciao a tutti,

ho un layer in postgis di tipo Polygon, che ha una serie di geometrie in realtà appartenenti alla medesima entità, ma che sono disegnate separatamente in quanto il livello è di tipo Polygon.

E’ possibile trasformare da dentro postgres il layer da Polygon a Multipolygon? Successivamente andrei a prendere una ad una quelle geometrie che afferiscono ad una medesima entità, e le mergerei con lo strumento di Qgis “Unisci le geometrie selezionate”.

Ciao e grazie

Luca

Ciao Luca,

puoi usare direttamente gli operatori di aggregazione delle geometrie
insieme ad un group by sui campi che identificano l'oggetto a cui i
singoli poligoni appartengono per esempio:

select cod_provincia, st_multi(st_union(geom)) from comuni group by
cod_provincia.

La chiamata a ST_Multi() garantisce di ottenere sempre un multipolygon,
infatti se tutti i poligoni che combini sono adiacenti dovresti ottenere
un polygon.

Se invece non hai un codice che identifichi i gruppi di poligoni e vuoi
farlo a mano su dei multipoligoni, allora devi prima fare

update miolayer set geom = st_multi(geom)

Probabilmente devi disabilitare/modificare i constraint creati da
addgeometrycolumn(), tipicamente su un layer poligonale avrai

CONSTRAINT enforce_geotype_geom CHECK (geometrytype(geom) =
'MULTIPOLYGON'::text

in caso contrario l'update a MultiPolygon fallirebbe.

Sig

Il giorno mer, 01/06/2011 alle 10.00 +0200, Luca Mandolesi ha scritto:

Ciao a tutti,

ho un layer in postgis di tipo Polygon, che ha una serie di geometrie
in realtà appartenenti alla medesima entità, ma che sono disegnate
separatamente in quanto il livello è di tipo Polygon.

E' possibile trasformare da dentro postgres il layer da Polygon a
Multipolygon? Successivamente andrei a prendere una ad una quelle
geometrie che afferiscono ad una medesima entità, e le mergerei con lo
strumento di Qgis "Unisci le geometrie selezionate".

Grazie Luca

2011/6/1 Luca Sigfrido Percich <sigfrido@tiscali.it>

Ciao Luca,

puoi usare direttamente gli operatori di aggregazione delle geometrie
insieme ad un group by sui campi che identificano l’oggetto a cui i
singoli poligoni appartengono per esempio:

select cod_provincia, st_multi(st_union(geom)) from comuni group by
cod_provincia.

La chiamata a ST_Multi() garantisce di ottenere sempre un multipolygon,
infatti se tutti i poligoni che combini sono adiacenti dovresti ottenere
un polygon.

Diciamo che le regole le ho, ma gli errori umani di inserimento dati ancora di più, quindi devo ricontrollare per forza 450 entità ripetute una ad una (per la cronaco parlo di US archeologiche, strati che dovrebbero essere di tipo polygon, ma che per ragioni pratiche alla fine sono disegnate come Multipolygon).

Se invece non hai un codice che identifichi i gruppi di poligoni e vuoi
farlo a mano su dei multipoligoni, allora devi prima fare

update miolayer set geom = st_multi(geom)

Probabilmente devi disabilitare/modificare i constraint creati da
addgeometrycolumn(), tipicamente su un layer poligonale avrai

CONSTRAINT enforce_geotype_geom CHECK (geometrytype(geom) =
‘MULTIPOLYGON’::text

in caso contrario l’update a MultiPolygon fallirebbe.

Sig

Perfetto, grazie mille!