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

We will assume the use of PostGIS version 2.1 or newer in this exercise. The installation and database configuration are different for older versions, but the rest of this material in this module will still work. Consult the documentation for your platform for help with installation and database configuration.

16.1.1. Installa su Ubuntu

Installi facilmente PostGIS con apt

$ sudo apt install postgresql
$ sudo apt install postgis

In realtà, è molto semplice

Nota

The exact versions that will be installed depend on which version of Ubuntu you are using and which repositories you have configured. After installing you can check the version by issuing a select PostGIS_full_version(); query with psql or another tool.

To install a specific version (eg, PostgreSQL version 13 and PostGIS 3), you can use the following commands.

$ 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

Installing on Windows can be done from binary packages using a normal Windows installation dialogs.

First Visit the download page. Then follow this guide.

Puoi trovare più informazioni sul sito PostGIS.

16.1.3. Installa su altre piattaforme

The PostGIS website download has information about installing on other platforms including macOS and on other Linux distributions

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

Depending on your version, you could find more instructions on how to spatially enable a database at 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.