16.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

Assumiamo l’uso di PostGIS versione 2.1 o più recente in questo esercizio. L’installazione e la configurazione del database sono diverse per le versioni precedenti, ma il resto del materiale di questo modulo funzionerà comunque. Consulta la documentazione della tua piattaforma per aiuto con l’installazione e la configurazione del database.

16.1.1. Installa su Ubuntu

Installi facilmente PostGIS con apt

$ sudo apt install postgresql
$ sudo apt install postgis

In realtà, è molto semplice

Nota

Le versioni esatte che saranno installate dipendono dalla versione di Ubuntu che stai usando e dai repository che hai configurato. Dopo l’installazione puoi controllare la versione eseguendo una query select PostGIS_full_version(); con psql o un altro strumento.

Per installare una versione specifica (per esempio, PostgreSQL versione 13 e PostGIS 3), puoi usare i seguenti comandi.

$ sudo apt install wget ca-certificates
$ sudo lsb_release -a
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
$ sudo apt-get update
$ sudo apt install postgis postgresql-13-postgis-3

16.1.2. Installa su Windows

L’installazione su Windows può essere fatta da pacchetti binari usando una normale finestra di dialogo di installazione di Windows.

Prima visita la pagina di download <https://www.postgresql.org/download/>`_. Poi segui this guide.

Puoi trovare più informazioni sul sito PostGIS.

16.1.3. Installa su altre piattaforme

PostGIS website download ha informazioni sull’installazione su altre piattaforme, incluso macOS e su altre distribuzioni Linux.

16.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

A seconda della tua versione, potresti trovare altre istruzioni su come abilitare spazialmente un database su https://postgis.net/docs/postgis_administration.html#create_spatial_db.

16.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.

16.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).

16.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.

16.1.8. What’s Next?

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