17.1. Lesson: Configura PostGIS

L’impostazione delle funzioni PostGIS ti consentirà di accedere alle funzioni spaziali da PostgreSQL.

“obiettivo di questa lezione: Installare funzioni spaziali e dimostrarne gli effetti.

Nota

In questo esercizio assumeremo l’uso di PostGIS versione 2.1. L’installazione e la configurazione del database sono diverse per le versioni precedenti, ma il resto di questo materiale continuerà a funzionare. Consulta la documentazione della tua piattaforma per aiuto con l’installazione e la configurazione del database.

17.1.1. Installa su Ubuntu

Installi facilmente PostGIS con apt

$ sudo apt install postgis
$ sudo apt install postgresql-9.1-postgis

In realtà, è molto semplice

Nota

A seconda della versione di Ubuntu che stai utilizzando e dei repository che hai configurato, questi comandi installeranno PostGIS 1.5 o 2.x. Puoi sapere la versione installata con un’interrogazione select PostGIS_full_version(); con psql o un altro strumento.

Per installare l’ultima versione di PostGIS, puoi utilizzare i seguenti comandi.

$ sudo apt-add-repository ppa:sharpie/for-science
$ sudo apt-add-repository ppa:sharpie/postgis-nightly
$ sudo apt update
$ sudo apt install postgresql-9.1-postgis-nightly

17.1.2. Installa su Windows

L’installazione su Windows è un po” più complicata, ma non difficile. Nota che devi essere online per installare la struttura dati PostGis.

Prima visita la pagina per scaricare.

Poi segui questa guida.

Puoi trovare più informazioni sul sito PostGIS.

17.1.3. Installa su altre piattaforme

Il sito PostGIS per scaricare da informazioni su come installare su altre piattaforme comrese macOS e distribuzioni linux

17.1.4. Configura i database per usare PostGIS

Una volta installato PostGIS, avrai bisogno di configurare il database per utilizzare le estensioni. Se hai installato PostGIS versione> 2.0, basta eseguire il seguente comando con psql utilizzando il database degli indirizzi del nostro esercizio precedente.

$ psql -d address -c "CREATE EXTENSION postgis;"

Nota

Se usi PostGIS 1.5 e una versione di PostgreSQL inferiore a 9.1, dovrai seguire una serie di passaggi diversi per installare le estensioni postgis per il tuo database. Devi consultare la Documentazione PostGIS per le istruzioni su come farlo. Ci sono anche istruzioni nella versione precedente di questo manuale.

17.1.5. Guarda le funzioni PostGIS installate

Puoi pensare a PostGIS come a una raccolta di funzioni del database che estendono le funzionalità di base di PostgreSQL in modo che possa trattare con i dati spaziali. Con “trattare con”, intendi memorizzare, recuperare, interrogare e manipolare. Per fare questo, un certo numero di funzioni sono installate nel database.

Il database PostgreSQL address è ora abilitato ad operare come geospaziale, grazie a PostGIS. Approfondirai meglio nelle prossime sezioni, ma puoi avere un piccolo assaggio. Vuoi creare un punto dal testo. Per prima cosa usa il comando psql per trovare le funzioni relative al punto. Se non sei già connesso al database address, fallo ora. Quindi esegui:

\df *point*

Questo è il comando che cerchhi: st_pointfromtext. Per sfogliare l’elenco, usa la freccia giù, quindi premi Q per tornare alla shell di psql.

Prova a eseguire questo comando:

select st_pointfromtext('POINT(1 1)');

Risultato:

st_pointfromtext
--------------------------------------------
0101000000000000000000F03F000000000000F03F
(1 row)

Nota tre cose:

  • Definisci u punto nella posizione 1,1 (è assunto EPSG:4326) usando POINT(1 1),

  • Hai eseguito un’istruzione SQL, ma non su alcuna tabella, solo sui dati immessi dal prompt SQL,

  • The resulting row does not make much sense.

La riga risultante è nel formato OGC chiamato “Well Known Binary” (WKB). Vedrai questo formato in dettaglio nella prossima sezione.

Per ottenere i risultati come testo, puoi fare una rapida scansione attraverso l’elenco delle funzioni per qualcosa che restituisce il testo:

\df *text

La query che stai cercando ora è st_astext. Combinalo con l’interrogazione precedente:

select st_astext(st_pointfromtext('POINT(1 1)'));

Risultato:

 st_astext
------------
  POINT(1 1)
  (1 row)

Hai inserito la stringa POINT(1,1), l’hai trasformata in un punto usando st_pointfromtext(), e l’hai ritrasformata in un formato leggibile con st_astext(), che ti ha ritornato la stringa originale.

Un ultimo esempio prima di entrare nel dettaglio dell’utilizzo di PostGIS:

select st_astext(st_buffer(st_pointfromtext('POINT(1 1)'),1.0));

Cosa hai fatto? Hai creato un buffer di 1 grado attorno al punto e hai il risultato come testo.

17.1.6. Sistemi di riferimento spaziale

Oltre alle funzioni PostGIS, l’estensione contiene una raccolta di definizioni del sistema di riferimento spaziale (SRS) come definito dall’European Petroleum Survey Group (EPSG). Questi vengono utilizzati durante operazioni come le conversioni del sistema di riferimento di coordinate (CRS).

Puoi verificare queste definizioni SRS nel database così come sono memorizzate nelle normali tabelle del database.

Dapprima esamina lo schema della tabella immettendo il seguente comando nel terminale di psql:

\d spatial_ref_sys

Il risultato dovrebbe essere questo:

Table "public.spatial_ref_sys"
   Column   |          Type           | Modifiers
 -----------+-------------------------+-----------
  srid      | integer                 | not null
  auth_name | character varying(256)  |
  auth_srid | integer                 |
  srtext    | character varying(2048) |
  proj4text | character varying(2048) |
  Indexes:
"spatial_ref_sys_pkey" PRIMARY KEY, btree (srid)

Puoi utilizzare interrogazioni SQL predefinite (come hai appreso nelle sezioni introduttive), per visualizzare e manipolare questa tabella, anche se non è una buona idea aggiornare o eliminare qualsiasi record a meno che non si sappia cosa si sta facendo.

Un SRID a cui potresti essere interessato è EPSG: 4326 - il sistema di riferimento geografico / lat lon che utilizza l’ellissoide WGS 84. Dai un’occhiata a questo:

select * from spatial_ref_sys where srid=4326;

Risultato:

srid      | 4326
auth_name | EPSG
auth_srid | 4326
srtext    | GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS
84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,
0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,
AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
proj4text | +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs

Il srtext è la definizione della proiezione in well known text (pui riconoscerlo nei file .prj degli shapefile).

17.1.7. In Conclusion

Ora hai le funzioni PostGIS installate nella tua copia di PostgreSQL. Con questo sarai in grado di utilizzare le varie funzioni spaziali di PostGIS.

17.1.8. What’s Next?

Adesso imparerai come gli elementi spaziali sono rappresentate in un database.