Posts Tagged postgis
postgresql | elencare tutti i valori (non ripetuti) di un campo
Pubblicato da flaviorigolon in db-ing & geodb-ing il 12 febbraio 2009
La parola chiave DISTINCT esclude dai risultati le righe duplicate.
Es: vogliamo elencare tutti i valori che sono contenuti nel campo “nome_via” di una tabella contenente i nomi di tutte le strade. Può succedere che esistano strade “spezzate” in più tratti ed in un database geometrico (PostGIS) siano memorizzati più archi di strada con lo stesso nome. DISTINCT consente di elencare i valori non ripetuti:
nome_database=# SELECT DISTINCT nome_via FROM nome_tabella_strade;
Nel caso volessimo elencare i nomi delle strade così distinte indicando anche la lunghezza totale dei tratti che hanno lo stesso nome:
nome_database=#SELECT DISTINCT ON (nome) nome,sum(lunghezza) FROM nome_tabella_strade GROUP BY nome;
e se volessimo esportare l’output della query in un file CSV:
- nel prompt di psql indicare:
nome_database=# \o /percorso/alt/file/nome_file_output.csv
- poi lanciare la query:
nome_database=#SELECT DISTINCT ON (nome) nome,sum(lunghezza) FROM nome_tabella_strade GROUP BY nome;
- In questo modo otteniamo un file CSV con il risultato.
PostGIS | creare una colonna che contenga i centroidi del poligoni (di un layer poligonale)
Pubblicato da flaviorigolon in db-ing & geodb-ing, mapping il 11 febbraio 2009
Per prima cosa creare la colonna geometrica che conterrà le coordinate dei centroidi:
nome_database=# SELECT ADDGEOMETRYCOLUMN (‘public’,'nome_tabella’, ‘centroid’, ’3003′, ‘POINT’,2);
dove:
- public indica lo schema da usare nel database;
- centroid è il nome del campo da creare;
- 3003 è il codice EPSG del sistema di reiferimento da usare;
- 2 indica le dimensioni spaziali.
Poi calcolare i centroidi e popolare il nuovo campo (colonna) creato:
nome_database=# UPDATE nome_tabella SET centroid=centroid(the_geom);
Per creare una VIEW con i centroidi:
nome_database=# CREATE VIEW centroidi AS SELECT nome_campo1.tabella_poligoni, nome_campo2.tabella_poligoni,nome_campo_i.tabella_poligoni, centroid(the_geom) FROM tabella_poligoni;
unione di più geometrie con PostGIS
Pubblicato da flaviorigolon in db-ing & geodb-ing il 11 febbraio 2009
Metodo utilizzato nel caso si vogliano unire più oggetti di uno stesso strato PostGIS (stessa tabella PotgreSQL) che hanno valori uguali di un certo campo. Es. unire tutte le aste fluviali denominate “Adige”.
Ho seguito questo splendido post di Paolo Corti per completare la procedura.
La tabella unione deve essere create a priori inserendo, in seconda battuta, anche una colonna per memorizzare le informazioni geometriche (the_geom). Nel nostro caso:
SELECT AddGeometryColumn(”,’nome_tabella_unione’,'the_geom’,'-1′,’MULTILINESTRING’,2);
E’ importante impostare lo SRID a “-1″ altrimenti viene riportato un errore di constraints (enforce_srid); inoltre lo strato viene caricato in Qgis ma non viene visualizzato.
Infine popoliamo la nuova tabella unione con i dati:
INSERT INTO nome_tabella_unione (the_geom,nome_campo1) SELECT astext(multi(geomunion(the_geom))) AS the_geom,nome_campo1 FROM nome_tabella_originale GROUP BY nome_campo1;
importare strati PostGIS in GRASS
Pubblicato da flaviorigolon in db-ing & geodb-ing, mapping il 11 febbraio 2009
L’importazione di strati PostGIS avviene con il modulo “v.in.ogr”. Esempio:
v.in.ogr dsn=”PG:host=localhost dbname=nome_database user=nome_utente password=pwd” output=nome_layer_output layer=nome_layer_input -o








