Shp2pgsql

Da Wikipedia, l'enciclopedia libera.

Torna a HOWTOs e procedure tipo

Il comando shp2pgsql serve per caricare i dati di un file shape in una tabella di PostgreSQL/PostGIS.


Contents

In ambiente Windows

Il file eseguibile corrispondente al comando shp2pgsql (shp2pgsql.exe) si trova nella cartella bin:

C:\Programmi\PostgreSQL\8.1\bin
Nota bene: la cartella 8.1 ha il nome corrispondente al numero della versione di PostgreSQL, per cui a versione diversa corrisponde nome di cartella diverso (per es.: 8.0); analogamente, se Windows è stato installato in lingua inglese, il nome Programmi sarà sostituito dal nome Programs; inoltre bisogna considerare che questo percorso viene creato durante l'installazione, se le impostazioni predefinite non sono state modificate.

La funzione shp2pgsql deve essere avviata dal prompt dei comandi dopo aver raggiunto la cartella in cui si trova.

Sintassi

shp2pgsql [<opzioni>] <shapefile> [<schema>.]<tabella>

Opzioni

-s <srid> Definisce il campo SRID. Se non è specificato, viene automaticamente definito -1.
(-d|a|c|p) Queste sono opzioni che si escludono reciprocamente:
-d Cancella la tabella, quindi la ricrea e la popola con i dati del file shape corrente.
-a Accoda il file shape nella tabella corrente, che deve essere esattamente la stessa tabella dello schema.
-c Crea una nuova tabella e la popola (questa è l'azione predefinita se non viene specificata alcuna opzione).
-p Modalità di preparazione, viene solamente creata la tabella.
-g <geometry_column> Specifica il nome della colonna delle geometrie (usato principalmente in modalità di accodamento).
-D Usa il formato dei dump di postgresql (se non viene specificato nulla vengono impostate le istruzioni di inserimento sql).
-k Keep postgresql identifiers case.
-i Usa il tipo int4 per tutti i campi del file dbf con numeri interi.
-I Create a GiST index on the geometry column.
-w Usa il formato wkt (for postgis-0.x support - drops M - drifts coordinates).
-S (Dalla versione 1.1.5) generare geometrie *S*ingole anziche' multiple (linee e polygons).

Esempi

Il comando shp2pgsql permette di generare un file di testo con le query di inserimento delle geometrie e dei dati, che potremo poi caricare successivamente nel database con psql:

c:\Programmi\PostgreSQL\8.1\bin> shp2pgsql –s 42102 bc_pubs.shp bc_pubs > bc_pubs.sql 
c:\Programmi\PostgreSQL\8.1\bin> psql –f bc_pubs.sql postgis
BEGIN
INSERT 215525 1
. . . . . .
COMMIT

Oppure è possibile convogliare i risultati direttamente nel database.

c:\Programmi\PostgreSQL\8.1\bin> shp2pgsql –s 42102 bc_roads.shp bc_roads | psql postgis 
c:\Programmi\PostgreSQL\8.1\bin> shp2pgsql –s 42102 bc_hospitals.shp bc_hospitals | psql postgis 
c:\Programmi\PostgreSQL\8.1\bin> shp2pgsql –s 42102 bc_municipality.shp bc_municipality | psql postgis 
c:\Programmi\PostgreSQL\8.1\bin> shp2pgsql –s 42102 bc_voting_areas.shp bc_voting_areas | psql postgis


Altro esempio di sintassi verificata e funzionante su windows:

1 aprire prompt dei comandi:

2 si ridirige lo standard output su di un file .sql

c:\Programmi\PostgreSQL\8.1\bin> shp2pgsql c:\cartella\shape.shp mia_tabella mio_database > mia_tabella.sql

3 il file .sql creato deve essere elaborato da psql:

c:\Programmi\PostgreSQL\8.1\bin> psql -d mio_database -f mia_tabella.sql

In questo modo abbiamo creato una tabella in postgresql con i dati che erano presenti nello shape file; il risultato e' visibile aprendo AdminIII o attraverso PhpPgAdmin.

In ambiente *nix (GNU/Linux e vari tipi di Unix)

Il comando è:

shp2pgsql -s -1 path/shape_da_importare.shp nometabella nomedatabase > path/file/da/creare/shape_da_importare.sql

viene creato un file di testo con i comandi per la costruzione della tabella e il popolamento della stessa che poi va fatto importare in Postgres/PostGIS.

-1 si usa quando non si è a conoscenza dello srid, altrimenti va sostituito con lo srid corretto

psql -h nomehost -U nomeutente -d nomedatabase -f /path/file/da/creare/shape_da_importare.sql

E' inoltre possibile esportare shapefile tramite il comando:

pgsql2shp -f path/file.shp -u nomeutente -h host nomedatabase nometabella -P password

Ricordarsi di aggiungere -g nomecampogeografico se ci sono più campi geografici (se è uno solo non serve).

E' possibile anche esportare solo alcuni record inserendo una query:

pgsql2shp -h host -u utente -P password -f path/file.shp nomedatabase "select * from nometabella where colonna='testo'"

Vedi anche


Torna a HOWTOs e procedure tipo

Personal tools