Chapter 2. Installazione PostGIS

Table of Contents

Questo capitolo elenca i passi necessari all'installazione di PostGIS.

2.1. Versione sintetica

Per compilare, assumendo di avere tutte le dipendenze nel percorso di ricerca:

tar -xvzf postgis-3.6.0dev.tar.gz
cd postgis-3.6.0dev
./configure
make
make install

Una volta installato PostGIS, bisogna abilitarlo (Section 3.3, “Creazione di database spaziali”) o aggiornarlo (Section 3.4, “Aggiornamento dei database spaziali”) individualmente nei database in cui si vuole usare.

2.2. Compilazione e installazione da sorgente

[Note]

Ormai molti sistemi operativi contengono pacchetti precompilati per PostgreSQL/PostGIS. In molti casi la compilazione è necessaria solamente se volete l'ultimissima versione o se siete uno dei manutentori dei pacchetti.

Questa sezione include istruzioni generali per la compilazione; se si sta compilando per Windows o altri sistemi operativi, si può trovare un aiuto più dettagliato in Guide di compilazione fornite dagli utenti di PostGIS e PostGIS Dev Wiki.

I pacchetti precostruiti per vari sistemi operativi sono elencati in Pacchetti precostruiti PostGIS

Se siete utenti di Windows, potete ottenere le build stabili tramite Stackbuilder o il sito di download di PostGIS Windows Abbiamo anche c build sperimentali di Windows molto all'avanguardia che vengono create di solito una o due volte alla settimana o ogni volta che succede qualcosa di interessante. È possibile utilizzarle per sperimentare le versioni in corso di PostGIS

Il modulo PostGIS è un'estensione del server backend PostgreSQL. Come tale, PostGIS 3.6.0dev richiede l'accesso completo alle intestazioni del server PostgreSQL per essere compilato. Può essere compilato con le versioni di PostgreSQL 12 - 17. Le versioni precedenti di PostgreSQL non sono supportate.

Se non avete ancora installato PostgreSQL, consultate le guide all'installazione di PostgreSQL. https://www.postgresql.org .

[Note]

Per le funzionalità legate a GEOS, quando installate PostgreSQL è possibile che dobbiate esplicitamente linkare PostgreSQL con la libreria C++ standard:

LDFLAGS=-lstdc++ ./configure [YOUR OPTIONS HERE]

Questa è una soluzione alla buona per l'interazione con finte eccezioni C++ con gli strumenti di sviluppo più datati. Se riscontrate problemi anomali (chiusura inattesa del server o casi simili), provate questo trucco. Ciò richiederà ovviamente di ricompilare PostgreSQL da zero.

I passaggi seguenti ripercorrono la procedura per configurare e compilare il sorgente di PostGIS. Sono scritti per utenti Linux e non funzioneranno su Windows o Mac.

2.2.1. Reperire il codice sorgente

Recuperare l'archivio sorgente di PostGIS dal sito web dei download https://postgis.net/stuff/postgis-3.6.0dev.tar.gz

wget https://postgis.net/stuff/postgis-3.6.0dev.tar.gz
tar -xvzf postgis-3.6.0dev.tar.gz
cd postgis-3.6.0dev

Questo passaggio creerà una cartella denominata postgis-3.6.0dev nella cartella di lavoro attuale.

In alternativa, potete ottenere una copia del sorgente dalla repository git https://git.osgeo.org/gitea/postgis/postgis/ .

git clone https://git.osgeo.org/gitea/postgis/postgis.git postgis
cd postgis
sh autogen.sh
    

Passare alla cartella postgis appena creata per continuare l'installazione.

./configure

2.2.2. Requisiti di installazione

PostGIS necessita dei seguenti requisiti per la compilazione e l'utilizzo:

Necessari

  • PostgreSQL 12 - 17. È necessaria un'installazione completa di PostgreSQL (comprese le intestazioni del server). PostgreSQL è disponibile presso https://www.postgresql.org .

    Per una matrice di supporto completa di PostgreSQL / PostGIS e per la matrice di supporto di PostGIS/GEOS, consultare https://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS

  • Compilatore GNU C (gcc). Per la compilazione possono essere utilizzati anche altri compilatori ANSI C, ma abbiamo riscontrato molti meno problemi nella compilazione con gcc.

  • GNU Make (gmake or make). Per molti sistem, GNU make è la versione di default di make. Potete controllare la versione tramite il comando make -v. Altre versioni di make potrebbero non elaborare il Makefile di PostGIS in modo corretto.

  • Libreria di riproiezione Proj. È necessario Proj 6.1 o superiore. La libreria Proj viene utilizzata per fornire il supporto alla riproiezione delle coordinate all'interno di PostGIS. Proj è disponibile per il download da https://proj.org/ .

  • GEOS geometry library, version 3.8.0 or greater, but GEOS 3.12+ is required to take full advantage of all the new functions and features. GEOS is available for download from https://libgeos.org .

  • LibXML2, versione 2.5.x o superiore. LibXML2 è attualmente utilizzato in alcune funzioni di importazione (ST_GeomFromGML e ST_GeomFromKML). LibXML2 è disponibile per il download da https://gitlab.gnome.org/GNOME/libxml2/-/releases.

  • JSON-C, versione 0.9 o superiore. JSON-C viene attualmente utilizzato per importare GeoJSON tramite la funzione ST_GeomFromGeoJson. JSON-C è disponibile per il download da https://github.com/json-c/json-c/releases/.

  • GDAL, version 3+ is preferred. This is required for raster support. https://gdal.org/download.html.

  • Se si compila con PostgreSQL+JIT, e' necessaria una versione di LLVM >=6 https://trac.osgeo.org/postgis/ticket/4125.

Opzionali

  • GDAL (pseudo-opzionale) solo se non si vuole il raster si può omettere. Assicurarsi inoltre di abilitare i driver che si desidera utilizzare come descritto in Section 3.2, “Configurare il supporto raster”.

  • GTK (è necessario GTK+2.0, 2.8+) serve per compilare il loader shp2pgsql-gui shape. http://www.gtk.org/ .

  • SFCGAL, 1.4.1 or higher is required and 1.5.0+ is needed to be able to use all functionality. SFCGAL can be used to provide additional 2D and 3D advanced analysis functions to PostGIS cf Chapter 8, SFCGAL Functions Reference. And also allow to use SFCGAL rather than GEOS for some 2D functions provided by both backends (like ST_Intersection or ST_Area, for instance). A PostgreSQL configuration variable postgis.backend allow end user to control which backend he want to use if SFCGAL is installed (GEOS by default). Nota: SFCGAL 1.2 require at least CGAL 4.3 and Boost 1.54 (cf: https://sfcgal.org) https://gitlab.com/sfcgal/SFCGAL/.

  • Per costruire Section 12.1, “Standardizzatore di indirizzi” è necessario anche PCRE http://www.pcre.org (che generalmente è già installato sui sistemi nix). Section 12.1, “Standardizzatore di indirizzi” sarà costruito automaticamente se rileva una libreria PCRE o se si passa un --with-pcre-dir=/path/to/pcre valido durante la configurazione.

  • Per abilitare ST_AsMVT sono necessari la libreria protobuf-c 1.1.0 o superiore (per l'uso) e il compilatore protoc-c (per la costruzione). Inoltre, è necessario pkg-config per verificare la versione minima corretta di protobuf-c. Vedere protobuf-c. Per impostazione predefinita, Postgis utilizza Wagyu per convalidare più velocemente i poligoni MVT, che richiede un compilatore c++11. Utilizzerà CXXFLAGS e lo stesso compilatore dell'installazione di PostgreSQL. Per disabilitare questa funzione e utilizzare invece GEOS, utilizzare l'opzione --without-wagyu durante la fase di configurazione.

  • CUnit (CUnit). Serve per i collaudi di regressione. http://cunit.sourceforge.net/

  • DocBook (xsltproc) è necessario per creare la documentazione. Docbook è disponibile sul sito http://www.docbook.org/ .

  • DBLatex (dblatex) è necessario per creare la documentazione in formato PDF. DBLatex è disponibile dal sito http://dblatex.sourceforge.net/ .

  • ImageMagick (convert) viene utilizzato per generare le immagini utilizzate nella documentazione. ImageMagick è disponibile sul sito http://www.imagemagick.org/ .

2.2.3. Configurazione della compilazione

Come in molte installazioni Linux, il primo passo consiste nel generare il Makefile che sarà poi utilizzato che compilare il codice sorgente. Per questo si esegue lo script da shell

./configure

Se non si specificano parametri aggiuntivi, questo comando cercherà di individuare automaticamente le componenti e le librerie necessarie per compilare il codice sorgente PostGIS sul vostro sistema. Benché questa sia la modalità di utilizzo più comune per ./configure, lo script accetta vari parametri per coloro che tengono le librerie e i programmi necessari in percorsi non standard.

La lista seguente riporta solamente i parametri usati più di frequente. Per una lista completa, utilizzate i parametri --help o --help=short.

--with-library-minor-version

A partire da PostGIS 3.0, i file di libreria generati per impostazione predefinita non avranno più la versione minore come parte del nome del file. Questo significa che tutte le librerie di PostGIS 3 finiranno con postgis-3. Questo è stato fatto per rendere più semplice l'aggiornamento di pg_upgrade, con l'inconveniente di poter installare una sola versione di PostGIS 3 nel proprio server. Per ottenere il vecchio comportamento dei file che includono la versione minore: per esempio postgis-3.0 aggiungere questo switch alla dichiarazione configure.

--prefix=PREFIX

Questa è la posizione in cui verranno installati gli eseguibili del caricatore PostGIS e le librerie condivise. Per impostazione predefinita, questo percorso è lo stesso dell'installazione di PostgreSQL rilevata.

[Caution]

Attualmente questo parametro non funzione, dato che il pacchetto si installerà solamente nella cartella di installazione di PostgreSQL. Potete visitare la pagina http://trac.osgeo.org/postgis/ticket/635 per seguire l'evoluzione di questo bug.

--with-pgconfig=FILE

PostgreSQL fornisce una utility chiamata pg_config per consentire a estensioni quali PostGIS di individuare la cartella di installazione di PostgreSQL. Utilizzate questo parametro (--with-pgconfig=/path/to/pg_config) per specificare manualmente una particolare installazione di PostgreSQL per la quale PostGIS sarà compilato.

--with-gdalconfig=FILE

GDAL è una libreria necessaria per il supporto raster. Utilizzare il comando gdal-config per consentire all'installazione di individuare la cartella di installazione di GDAL, oppure utilizzare il parametro --with-gdalconfig=/path/to/gdal-config per indicare manualmente specifica installazione di GDAL con cui compilare PostGIS.

--with-geosconfig=FILE

GEOS, una libreria necessaria per gestire le geometrie, fornisce una utility chiamata geos-config per consentire alla procedura di installazione di individuare la cartella di installazione di GEOS. E' possibile utilizzare questo parametro (--with-geosconfig=/path/to/geos-config) per indicare manualmente una specifica installazione di GEO da utilizzare per la compilazione.

--with-xml2config=FILE

LibXML è la libreria necessaria per eseguire processi GeomFromKML/GML. Normalmente si trova se è installata libxml, ma se non lo è o se si vuole utilizzare una versione specifica, è necessario indicare a PostGIS uno specifico file xml2-config confi per consentire alle installazioni software di individuare la directory di installazione di LibXML. Usare questo parametro (>--with-xml2config=/path/to/xml2-config) per specificare manualmente una particolare installazione di LibXML su cui PostGIS si baserà.

--with-projdir=DIR

Proj4 è una libreria di riproiezione richiesta da PostGIS. Utilizzate questo parametro (--with-projdir=/path/to/projdir) per indicare manualmente una specifica cartella di installazione di Proj4 per la compilazione di PostGIS.

--with-libiconv=DIR

Cartella di installazione di iconv.

--with-jsondir=DIR

JSON-C è una libreria JSON con licenza MIR utilizzata da PostGIS per supportare ST_GeomFromJSON. Utilizzare questo parametro (--with-jsondir=/path/to/jsondir) per indicare manualmente una specifica cartella di installazione che PostGIS userà per la compilazione.

--with-pcredir=DIR

PCRE è una libreria di espressioni regolari compatibile con Perl con licenza BSD, richiesta dall'estensione address_standardizer. Usare questo parametro (--with-pcredir=/path/to/pcredir) per specificare manualmente una particolare directory di installazione di PCRE che PostGIS compilerà.

--with-gui

Compilare l'interfaccia grafica per l'importazione di dati (richiede GTK+2.0). Questo passaggio creerà shp2pgsql-gui, interfaccia grafica per shp2pgsql.

--without-raster

Compilazione senza supporto raster.

--without-topology

Disabilita il supporto per la topologia. Non esiste una libreria corrispondente, poiché tutta la logica necessaria per la topologia si trova nella libreria postgis-3.6.0dev.

--with-gettext=no

Normalmente PostGIS cercherà di rilevare il supporto per gettext e di utilizzarlo nella compilazione. Tuttavia, se risocontrate problemi di compatibilità che determinano interruzioni del loader, potete disabilitare il supporto con questo comando. Potete fare riferimento al ticket http://trac.osgeo.org/postgis/ticket/748 per un esempio di un caso risolto utilizzando questa particolare configurazione. NOTA: disattivanto questa opzione non vi perdete molto, dato che è utilizzata per il supporto internazionale o per le etichette nel loader, che non sono ancora ben documentate e in forma sperimentale.

--with-sfcgal=PATH

Per impostazione predefinita, PostGIS non si installa con il supporto di sfcgal senza questo interruttore. PATH è un argomento opzionale che consente di specificare un PATH alternativo a sfcgal-config.

--without-phony-revision

Disabilita l'aggiornamento di postgis_revision.h per adattarlo all'HEAD corrente del repository git.

[Note]

Se avete ottenuto PostGIS dalla code repository , il primo passo consiste nell'eseguire lo script

./autogen.sh

Questo script genererà lo script configure, che a sua volta viente utilizzato per personalizzare l'installazione di PostGIS.

Se invece avete ottenuto PostGIS come file tar, non sarà necessario eseguire ./autogen.sh, dato che configure sarà già stato generato.

2.2.4. Compilazione

Una volta creato il Makefile, compilare PostGIS è semplice come eseguire

make

L'ultima linea dei messaggi in uscita dovrebbe essere "PostGIS was built successfully. Ready to install."

A partire da PostGIS v1.4.0, tutte le funzioni hanno commenti generati dalla documentazione. Se si desidera installare questi commenti nei database spaziali in un secondo momento, eseguire il comando che richiede docbook. Il file postgis_comments.sql e gli altri file di commento del pacchetto raster_comments.sql, topology_comments.sql sono anch'essi contenuti nella distribuzione tar.gz nella cartella doc, quindi non è necessario creare commenti se si installa dal tar. I commenti sono inclusi anche nell'installazione di CREATE EXTENSION.

make comments

Introdotto in PostGIS 2.0. Questa opzione genera degli opuscoli riassuntivi in formato HTML, utili come riferimento speditivo o per distribuzione agli studenti. Richiede xsltproc e genererà 4 file della cartella doc: topology_cheatsheet.html, tiger_geocoder_cheatsheet.html, raster_cheatsheet.html, postgis_cheatsheet.html

Ne potete scaricare alcuni già pronti sia in formato HTML che PDF dalla pagina PostGIS / PostgreSQL Study Guides

make cheatsheets

2.2.5. Compilazione e installazione delle estensioni PostGIS

Le estensioni di PostGIS vengono compilate e installate automaticamente se state utilizzando PostgreSQL 9.1+.

Se state compilando a partire dalla repository del sorgente, dovete prima compilare le descrizioni delle funzioni. Queste vengono create se avete docbook installato. Potete anche eseguire la compilazione manualmente tramite il comando:

make comments

Creare i file dei commenti non è necessario se state compilando a partire dal file tar, dato che questi file sono inclusi nel file tar stesso.

Le estensioni dovrebbero essere create automaticamente come parte del processo di installazione di make. Se necessario, si possono creare dalle cartelle delle estensioni o copiare i file se servono su un altro server.

cd extensions
cd postgis
make clean
make
export PGUSER=postgres #overwrite psql variables
make check #to test before install
make install
# to test extensions
make check RUNTESTFLAGS=--extension
[Note]

make check usa psql per eseguire i test e come tale può usare variabili d'ambiente psql. Quelle comuni utili da sovrascrivere sono PGUSER, PGPORT e PGHOST. Fare riferimento a variabili d'ambiente psql

I file di estensione saranno sempre gli stessi per la stessa versione di PostGIS e PostgreSQL, indipendentemente dal sistema operativo, quindi è possibile copiare i file di estensione da un sistema operativo all'altro, purché i binari di PostGIS siano già installati sui server.

Se volete installare le estensioni manualmente su un server separato, diverso da quello di sviluppo, dovete copiare i seguenti file dalla cartella delle estensioni nella cartella PostgreSQL / share / extension della vostra installazione PostgreSQL, così come i file binari per la versione normale di PostGIS, se questi già non sono presenti sul server.

  • Questi sono i file di controllo che indicano informazioni come la versione dell'estensione da installare, se non specificata. postgis.control, postgis_topology.control.

  • Tutti i file nella cartella /sql di ciascuna estensione. Da notare che quesi devono essere copiati nella cartella principale delle estensioni di PostgreSQL, share/extension extensions/postgis/sql/*.sql, extensions/postgis_topology/sql/*.sql

Una volta fatto ciò, si dovrebbe vedere postgis, postgis_topology come estensioni disponibili in PgAdmin -> estensioni.

Se state utilizzando psql, potete verificare l'avvenuta installazione delle estensioni tramite questa query:

SELECT name, default_version,installed_version
FROM pg_available_extensions WHERE name LIKE 'postgis%' or name LIKE 'address%';

             name             | default_version | installed_version
------------------------------+-----------------+-------------------
 address_standardizer         | 3.6.0dev         | 3.6.0dev
 address_standardizer_data_us | 3.6.0dev         | 3.6.0dev
 postgis                      | 3.6.0dev         | 3.6.0dev
 postgis_raster               | 3.6.0dev         | 3.6.0dev
 postgis_sfcgal               | 3.6.0dev         |
 postgis_tiger_geocoder       | 3.6.0dev         | 3.6.0dev
 postgis_topology             | 3.6.0dev         |
(6 rows)

Se avete le estensioni installate nel database che state interrogando, vedrete questo fatto menzionato nella colonna installed_version. Se non vengono riportari record nel risultato, significa che non avete alcuna estensione installata sul server. PgAdmin III 1.14+ fornirà inoltre questa informazione nella sezione extensions dell'albero di navigazione del database e consentirà anche l'aggiornamento o la disinstallazione tramite clic del tasto destro del mouse.

Se le estensioni sono disponibili, potete installare l'estensione postgis nel database da voi scelto utilizzando l'interfaccia pgAdmin per le estensioni o eseguendo i seguenti comandi SQL:

CREATE EXTENSION postgis;
CREATE EXTENSION postgis_raster;
CREATE EXTENSION postgis_sfcgal;
CREATE EXTENSION fuzzystrmatch; --needed for postgis_tiger_geocoder
--optional used by postgis_tiger_geocoder, or can be used standalone
CREATE EXTENSION address_standardizer;
CREATE EXTENSION address_standardizer_data_us;
CREATE EXTENSION postgis_tiger_geocoder;
CREATE EXTENSION postgis_topology;

In psql è possibile vedere quali versioni sono installate e anche quali schemi sono installati.

\connect mygisdb
\x
\dx postgis*
List of installed extensions
-[ RECORD 1 ]-------------------------------------------------
Name        | postgis
Version     | 3.6.0dev
Schema      | public
Description | PostGIS geometry, geography, and raster spat..
-[ RECORD 2 ]-------------------------------------------------
Name        | postgis_raster
Version     | 3.0.0dev
Schema      | public
Description | PostGIS raster types and functions
-[ RECORD 3 ]-------------------------------------------------
Name        | postgis_tiger_geocoder
Version     | 3.6.0dev
Schema      | tiger
Description | PostGIS tiger geocoder and reverse geocoder
-[ RECORD 4 ]-------------------------------------------------
Name        | postgis_topology
Version     | 3.6.0dev
Schema      | topology
Description | PostGIS topology spatial types and functions
[Warning]

Per le tabelle delle estensioni spatial_ref_sys, layer e topology non è possibile eseguire un backup esplicito. Il backup può essere eseguito solo quando viene fatto il backup delle corrispondenti estensioni postgis o postgis_topology, il che pare avvenga solamente quando eseguite un backup dell'intero database. Alla versione 2.0.1, quando viene eseguito il backup del database, gli unici oggetti di cui viene fatta copia sono i record srid non facenti parte di PostGIS. Pertanto non modificare gli SRID facenti parte dell'installazione, aspettandovi poi di trovare le vostre modiche nel backup. Se ci sono problemi, aprite un ticket. Neanche delle strutture delle tabelle delle estensioni viene eseguito un backup, dato che sono create con CREATE EXTENSION, e si presume che siano le stesse per una data versione dell'estensione. Questo comportamento è inserito nell'attuale modello delle estensioni, per cui non c'è molto che l'utente può fare.

Se avete installato 3.6.0dev, senza usare il nostro meraviglioso sistema di estensioni, potete cambiarlo in un sistema basato sulle estensioni eseguendo i comandi seguenti per impacchettare le funzioni nelle rispettive estensioni. L'installazione con `unpackaged` è stata rimossa in PostgreSQL 13, quindi si consiglia di passare a una compilazione con estensione prima di aggiornare a PostgreSQL 13.

CREATE EXTENSION postgis FROM unpackaged;
CREATE EXTENSION postgis_raster FROM unpackaged;
CREATE EXTENSION postgis_topology FROM unpackaged;
CREATE EXTENSION postgis_tiger_geocoder FROM unpackaged;

2.2.6. Test

Se volete eseguire un test sul PostGIS compilato, eseguite

make check

Il comando di cui sopra eseguirà vari controlli e collaudi di regressione, utilizzando la libreria generata per un database PostgreSQL effettivo.

[Note]

Se avete configurato PostGIS utilizzando percorsi non standard per PostgreSQL, GEOS o Proj, potreste dover aggiungere il percorso di queste librerie nella variabile di ambiente LD_LIBRARY_PATH.

[Caution]

Attualmente il comando make check fa riferimento alle variabili di ambiente PATH e PGPORT nello svolgimento dei controlli - e non utilizza la versione PostgreSQL che può essere stata specificata nella configurazione con il parametro --with-pgconfig. Perciò assicuratevi che la vostra variabile PATH corrisponda all'installazione di PostgreSQL rilevata durante al configurazione, o preparatevi ad affrontare una serie di grattacapi.

Se il test è positivo, l'uscita conterrà il risultato di molti test la schermata dovrebbe essere simile alla seguente (molte linee sono omesse):

CUnit - A unit testing framework for C - Version 2.1-3
     http://cunit.sourceforge.net/

        .
        .
        .

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites     44     44    n/a      0        0
               tests    300    300    300      0        0
             asserts   4215   4215   4215      0      n/a
Elapsed time =    0.229 seconds

        .
        .
        .

Running tests

        .
        .
        .

Run tests: 134
Failed: 0


-- if you build with SFCGAL

        .
        .
        .

Running tests

        .
        .
        .

Run tests: 13
Failed: 0

-- if you built with raster support

        .
        .
        .

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites     12     12    n/a      0        0
               tests     65     65     65      0        0
             asserts  45896  45896  45896      0      n/a


        .
        .
        .

Running tests

        .
        .
        .

Run tests: 101
Failed: 0

-- topology regress

.
.
.

Running tests

        .
        .
        .

Run tests: 51
Failed: 0

-- if you built --with-gui, you should see this too

     CUnit - A unit testing framework for C - Version 2.1-2
     http://cunit.sourceforge.net/

        .
        .
        .

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites      2      2    n/a      0        0
               tests      4      4      4      0        0
             asserts      4      4      4      0      n/a

Le estensioni postgis_tiger_geocoder e address_standardizer attualmente supportano solo l'installcheck standard di PostgreSQL. Per testarle, usare il seguente comando. Nota: il make install non è necessario se si è già eseguito il make install nella cartella principale del codice di PostGIS.

Per address_standardizer:

cd extensions/address_standardizer
make install
make installcheck
          

L'output dovrebbe essere simile a:

============== dropping database "contrib_regression" ==============
DROP DATABASE
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== running regression test queries        ==============
test test-init-extensions     ... ok
test test-parseaddress        ... ok
test test-standardize_address_1 ... ok
test test-standardize_address_2 ... ok

=====================
 All 4 tests passed.
=====================

Per il geocoder tiger, assicurarsi di avere le estensioni postgis e fuzzystrmatch disponibili nella propria istanza PostgreSQL. I test di address_standardizer verranno eseguiti anche se si è costruito postgis con il supporto di address_standardizer:

cd extensions/postgis_tiger_geocoder
make install
make installcheck
          

L'output dovrebbe essere simile a:

============== dropping database "contrib_regression" ==============
DROP DATABASE
============== creating database "contrib_regression" ==============
CREATE DATABASE
ALTER DATABASE
============== installing fuzzystrmatch               ==============
CREATE EXTENSION
============== installing postgis                     ==============
CREATE EXTENSION
============== installing postgis_tiger_geocoder      ==============
CREATE EXTENSION
============== installing address_standardizer        ==============
CREATE EXTENSION
============== running regression test queries        ==============
test test-normalize_address   ... ok
test test-pagc_normalize_address ... ok

=====================
All 2 tests passed.
=====================

2.2.7. Installazione

Per installare PostGIS, digitate

make install

Questo comando copierà i file per l'installazione di PostGIS nelle cartelle appropriate, specificate tramite il parametro di configurazione --prefix. In particolare:

  • I file binari del loader e del dumper vengono installati in [prefix]/bin.

  • I file SQL, quali postgis.sql, vengono installati in [prefix]/share/contrib.

  • Le librerie PostGIS vengono installate in [prefix]/lib.

Se avete eseguito il comando make comments per generare i file postgis_comments.sql e raster_comments.sql, installate i file SQL eseguendo

make comments-install

[Note]

postgis_comments.sql, raster_comments.sql, e topology_comments.sql sono separati dai tipici obiettivi per il build e per l'installazione, dato che hanno una ulteriore dipendenza da xsltproc.

2.3. Installazione e utilizzo dello standardizzatore di indirizzi

L'estensione address_standardizer era un pacchetto separato che doveva essere scaricato separatamente. A partire da PostGIS 2.2, è ora inclusa nel pacchetto. Per ulteriori informazioni su address_standardize, su cosa fa e su come configurarlo per le proprie esigenze, fare riferimento a Section 12.1, “Standardizzatore di indirizzi”.

Questo standardizzatore può essere usato in combinazione con l'estensione del geocodificatore PostGIS packaged tiger, in sostituzione di Normalize_Address, di cui si è parlato. Per utilizzarlo come sostituto, fare riferimento a Section 2.4.2, “Utilizzo dell'estensione Address Standardizer con il geocoder Tiger”. È anche possibile utilizzarlo come elemento costitutivo per il proprio geocoder o per standardizzare gli indirizzi per facilitarne il confronto.

Lo standardizzatore di indirizzi si basa su PCRE, che di solito è già installato su molti sistemi Nix, ma si può scaricare l'ultimo all'indirizzo: http://www.pcre.org. Se durante Section 2.2.3, “Configurazione della compilazione” viene trovato PCRE, l'estensione address standardizer verrà automaticamente compilata. Se invece si vuole usare un'installazione personalizzata di pcre, passare a configurare --with-pcredir=/path/to/pcre, dove /path/to/pcre è la cartella principale per le directory include e lib di pcre.

Per gli utenti di Windows, il bundle PostGIS 2.1+ è già confezionato con address_standardizer, quindi non è necessario compilare e si può passare direttamente al passo CREATE EXTENSION.

Una volta effettuata l'installazione, è possibile collegarsi al database ed eseguire l'SQL:

CREATE EXTENSION address_standardizer;

Il seguente test non richiede regole, gaz o tabelle lex

SELECT num, street, city, state, zip
 FROM parse_address('1 Devonshire Place PH301, Boston, MA 02109');

L'uscita dovrebbe essere

num |         street         |  city  | state |  zip
-----+------------------------+--------+-------+-------
 1   | Devonshire Place PH301 | Boston | MA    | 02109

2.4. Installazione, aggiornamento di Tiger Geocoder e caricamento dei dati

Extra come Tiger geocoder potrebbero non essere presenti nella distribuzione di PostGIS. Se manca l'estensione tiger geocoder o se si desidera una versione più recente di quella in dotazione, utilizzare i file share/extension/postgis_tiger_geocoder.* dai pacchetti della sezione Windows Unreleased Versions per la propria versione di PostgreSQL. Sebbene questi pacchetti siano per Windows, i file di estensione postgis_tiger_geocoder funzionano su qualsiasi sistema operativo, poiché l'estensione è solo SQL/plpgsql.

2.4.1. Tiger Geocoder Abilitazione del database PostGIS

  1. Queste indicazioni presuppongono che l'installazione di PostgreSQL abbia già installato l'estensione postgis_tiger_geocoder.

  2. Collegarsi al database tramite psql o pgAdmin o un altro strumento ed eseguire i seguenti comandi SQL. Si noti che se si sta installando in un database che ha già postgis, non è necessario eseguire il primo passo. Se l'estensione fuzzystrmatch è già installata, non è necessario eseguire nemmeno il secondo passaggio.

    CREATE EXTENSION postgis;
    CREATE EXTENSION fuzzystrmatch;
    CREATE EXTENSION postgis_tiger_geocoder;
    --this one is optional if you want to use the rules based standardizer (pagc_normalize_address)
    CREATE EXTENSION address_standardizer;

    Se avete già installato l'estensione postgis_tiger_geocoder e volete solo aggiornare all'ultima versione:

    ALTER EXTENSION postgis UPDATE;
    ALTER EXTENSION postgis_tiger_geocoder UPDATE;

    Se sono state apportate voci o modifiche personalizzate a tiger.loader_platform e tiger.loader_variables, potrebbe essere necessario aggiornarle.

  3. Per confermare che l'installazione funziona correttamente, eseguire questo sql nel database:

    SELECT na.address, na.streetname,na.streettypeabbrev, na.zip
            FROM normalize_address('1 Devonshire Place, Boston, MA 02109') AS na;

    Che dovrebbe produrre

    address | streetname | streettypeabbrev |  zip
    ---------+------------+------------------+-------
               1 | Devonshire | Pl               | 02109
  4. Creare un nuovo record nella tabella tiger.loader_platform con i percorsi degli eseguibili e del server.

    Quindi, per esempio, per creare un profilo chiamato debbie che segue la convenzione sh. Si dovrebbe fare:

    INSERT INTO tiger.loader_platform(os, declare_sect, pgbin, wget, unzip_command, psql, path_sep,
                       loader, environ_set_command, county_process_command)
    SELECT 'debbie', declare_sect, pgbin, wget, unzip_command, psql, path_sep,
               loader, environ_set_command, county_process_command
      FROM tiger.loader_platform
      WHERE os = 'sh';

    Quindi modificare i percorsi nella colonna declare_sect in modo da adattarli ai percorsi di pg, unzip, shp2pgsql, psql, ecc. di Debbie.

    Se non si modifica la tabella loader_platform, essa conterrà solo le posizioni comuni degli elementi e si dovrà modificare lo script generato dopo che è stato generato.

  5. A partire da PostGIS 2.4.1, la fase di caricamento dell'area di tabulazione del codice Zip a 5 cifre zcta5 è stata rivista per caricare i dati zcta5 correnti e fa parte di Loader_Generate_Nation_Script quando è abilitata. È disattivato per impostazione predefinita perché richiede molto tempo per essere caricato (da 20 a 60 minuti), occupa molto spazio su disco e non viene usato spesso.

    Per attivarla, procedere come segue:

    UPDATE tiger.loader_lookuptables SET load = true WHERE table_name = 'zcta520';

    Se presente, la funzione Geocode può utilizzarla se viene aggiunto un filtro di delimitazione per limitare gli zip a quel confine. La funzione Reverse_Geocode lo utilizza se l'indirizzo restituito manca di un CAP, cosa che spesso accade con la geocodifica inversa delle autostrade.

  6. Creare una cartella chiamata gisdata nella root del server o sul pc locale se si dispone di una connessione di rete veloce al server. In questa cartella verranno scaricati ed elaborati i file tigre. Se non si è soddisfatti di avere la cartella nella radice del server o semplicemente si vuole cambiare la cartella di staging, modificare il campo staging_fold nella tabella tiger.loader_variables.

  7. Creare una cartella denominata temp nella cartella gisdata o dove è stata designata la cartella staging_fold. Questa sarà la cartella in cui il caricatore estrarrà i dati della tigre scaricati.

  8. Eseguire quindi la funzione Loader_Generate_Nation_Script SQL assicurandosi di utilizzare il nome del profilo personalizzato e copiare lo script in un file .sh o .bat. Quindi, per esempio, per costruire il carico della nazione:

    psql -c "SELECT Loader_Generate_Nation_Script('debbie')" -d geocoder -tA > /gisdata/nation_script_load.sh
  9. Eseguire gli script da riga di comando generati per il caricamento della nazione.

    cd /gisdata
    sh nation_script_load.sh
  10. Dopo aver eseguito lo script nazionale, si dovrebbero avere tre tabelle nello schema tiger_data e dovrebbero essere riempite di dati. Per confermarlo, eseguire le seguenti query da psql o pgAdmin

    SELECT count(*) FROM tiger_data.county_all;
    count
    -------
      3235
    (1 row)
    SELECT count(*) FROM tiger_data.state_all;
    count
    -------
        56
    (1 row)
    

    This will only have data if you marked zcta5 to be loaded

    SELECT count(*) FROM tiger_data.zcta5_all;
    count
    -------
      33931
    (1 row)
    
  11. Per impostazione predefinita, le tabelle corrispondenti a bg, tract, tabblock20 non vengono caricate. Queste tabelle non sono utilizzate dal geocodificatore, ma sono usate da molti per le statistiche sulla popolazione. Se si desidera caricarle come parte dei carichi di stato, eseguire la seguente istruzione per abilitarle.

    UPDATE tiger.loader_lookuptables SET load = true WHERE load = false AND lookup_name IN('tract', 'bg', 'tabblock20');

    In alternativa, è possibile caricare solo queste tabelle dopo aver caricato i dati di stato utilizzando il metodo Loader_Generate_Census_Script

  12. Per ogni stato per cui si desidera caricare i dati, generare uno script di stato Loader_Generate_Script.

    [Warning]

    NON generare lo script dello stato prima di aver caricato i dati della nazione, perché lo script dello stato utilizza l'elenco delle contee caricato dallo script della nazione.

  13. psql -c "SELECT Loader_Generate_Script(ARRAY['MA'], 'debbie')" -d geocoder -tA > /gisdata/ma_load.sh
  14. Eseguire gli script da riga di comando generati.

    cd /gisdata
    sh ma_load.sh
  15. Una volta terminato il caricamento di tutti i dati o in un punto di arresto, è buona norma analizzare tutte le tabelle delle tigri per aggiornare le statistiche (includere le statistiche ereditate)

    SELECT install_missing_indexes();
    vacuum (analyze, verbose) tiger.addr;
    vacuum (analyze, verbose) tiger.edges;
    vacuum (analyze, verbose) tiger.faces;
    vacuum (analyze, verbose) tiger.featnames;
    vacuum (analyze, verbose) tiger.place;
    vacuum (analyze, verbose) tiger.cousub;
    vacuum (analyze, verbose) tiger.county;
    vacuum (analyze, verbose) tiger.state;
    vacuum (analyze, verbose) tiger.zcta5;
    vacuum (analyze, verbose) tiger.zip_lookup_base;
    vacuum (analyze, verbose) tiger.zip_state;
    vacuum (analyze, verbose) tiger.zip_state_loc;

2.4.2. Utilizzo dell'estensione Address Standardizer con il geocoder Tiger

Una delle tante lamentele degli utenti è la funzione di normalizzazione degli indirizzi Normalize_Address che normalizza un indirizzo per la preparazione prima della geocodifica. Il normalizzatore è tutt'altro che perfetto e cercare di correggere le sue imperfezioni richiede una grande quantità di risorse. Per questo motivo ci siamo integrati con un altro progetto che ha un motore di normalizzazione degli indirizzi molto migliore. Per usare questo nuovo address_standardizer, si deve compilare l'estensione come descritto in Section 2.3, “Installazione e utilizzo dello standardizzatore di indirizzi” e installarla come estensione nel database.

Una volta installata questa estensione nello stesso database in cui è stato installato postgis_tiger_geocoder, è possibile utilizzare Pagc_Normalize_Address al posto di Normalize_Address. Questa estensione è agnostica rispetto a tiger, quindi può essere utilizzata con altre fonti di dati come gli indirizzi internazionali. L'estensione tiger geocoder viene fornita con le sue versioni personalizzate di rules table ( tiger.pagc_rules), gaz table (tiger.pagc_gaz) e lex table (tiger.pagc_lex). Queste possono essere aggiunte e aggiornate per migliorare l'esperienza di standardizzazione in base alle proprie esigenze.

2.4.3. Strumenti necessari per il caricamento dei dati Tiger

Il processo di caricamento scarica i dati per ciascuno stato richiesto dal sito del censimento, estrare i file, e li carica nelle rispettive tabelle. La tabella di ogni stato eredita le proprietà dalle tabelle definite nello schema tiger, per cui è sufficiente eseguire le interrogazioni su queste tabelle per accedere a tutti i dati. E' altresì possibile cancellare le tabelle per un dato stato tramite lo script Drop_State_Tables_Generate_Script, qualora aveste necessità di ricaricare uno stato o se questo non vi serve più.

Per caricare i dati avrete bisogno dei seguenti strumenti:

  • Uno strumento per decomprimere i file zip dal sito web dei censimenti.

    Per sistemi tipo Unix: l'eseguibile unzip è di soiito già installato.

    Per Windows, 7-zip è uno strumento libero di compressione/decompressione, che può essere scaricato dal sito http://www.7-zip.org/

  • Il programam da riga di comando shp2pgsql, che viene installato di base quando nistallate PostGIS.

  • wget è uno strumento per la copia di file da web, solitamente installato nella maggior parte dei sistemi Unix/Linux.

    Se siete su Windows, potete reperire i file binari precompilati da http://gnuwin32.sourceforge.net/packages/wget.htm

Se si effettua l'aggiornamento da tiger_2010, è necessario generare ed eseguire prima Drop_Nation_Tables_Generate_Script. Prima di caricare i dati degli stati, è necessario caricare i dati dell'intera nazione, cosa che si fa con Loader_Generate_Nation_Script. Loader_Generate_Nation_Script è un'operazione che va eseguita una sola volta per l'aggiornamento (dai dati del censimento di tiger dell'anno precedente) e per le nuove installazioni.

Per caricare i dati degli stati, fare riferimento a Loader_Generate_Script per generare uno script di caricamento dei dati per la propria piattaforma per gli stati desiderati. Si noti che è possibile installare questi script in modo frammentario. Non è necessario caricare tutti gli stati desiderati in una volta sola. È possibile caricarli man mano che se ne ha bisogno.

Dopo aver caricato i dati per gli stati cui siete interessati, assicuratevi di eseguire:

SELECT install_missing_indexes();

come descritto in Install_Missing_Indexes.

Per vedere se le cose funzionano come dovrebbero, provate a eseguire la geocodifica di un indirizzo nel vostro stato utilizzando Geocode

2.4.4. Aggiornamento dell'installazione e dei dati di Tiger Geocoder

Per prima cosa aggiornare l'estensione postgis_tiger_geocoder come segue:

ALTER EXTENSION postgis_tiger_geocoder UPDATE;

Poi cancellate tutte le tabelle delle nazioni e caricate quelle nuove. Potete generare uno script per la cancellazione con il codice SQL illustrato in Drop_Nation_Tables_Generate_Script

SELECT drop_nation_tables_generate_script();

Eseguite i comandi SQL DROP che vengono generati.

Generate uno script per il caricamento di uno stato con l'istruzione SELECT come illustrato in Loader_Generate_Nation_Script

Per Windows

SELECT loader_generate_nation_script('windows'); 

Per unix/linux

SELECT loader_generate_nation_script('sh');

Fare riferimento a Section 2.4.1, “Tiger Geocoder Abilitazione del database PostGIS” per le istruzioni su come eseguire lo script di generazione. Questa operazione deve essere eseguita una sola volta.

[Note]

È possibile avere un mix di tabelle di stato di anni diversi e aggiornare ogni stato separatamente. Prima di aggiornare uno stato, è necessario eliminare le tabelle di stato dell'anno precedente per quello stato utilizzando Drop_State_Tables_Generate_Script.

2.5. Problemi comuni durante l'installazione

Quando l'installazione o l'aggiornamento non vanno come previsto, diverse cose vanno controllate.

  1. Controllate di aver installato PostgreSQL 12 o più recente, e che state compilando con il sorgente PostgreSQL nella versione corrispondente alla versione di PostgreSQL che sta girando. Si possono verificare casi di confusione quando la vostra distribuzione (Linux) ha PostgreSQL già installao, o quando avete installato PostgreSQL in precedenza e ve ne siete dimenticati. PostGIS funzionerà solo con PostgreSQL 12 o più recente, e si potrebbero ricevere messaggi di errore strani o inattesi se utilizzate una versione più vecchia. Per verificare quale versione di PostgreSQL sta girando, collegatevi al database utilizzando psql ed eseguite la seguente query:

    SELECT version();

    Se state utilizzando una distribuzione basata su RPM, potete verificare la presenza di pacchetti preinstallati utilizzando il comando rpm con la seguente sintassi: rpm -qa | grep postgresql

  2. Se l'aggiornamento non funziona, assicuratevi di eseguire il ripristino in un database che abbia già PostGIS installato.

    SELECT postgis_full_version();

Verificare anche che configure abbia rilevato correttamente la posizione e la versione di PostgreSQL, della libreria Proj e della libreria GEOS.

  1. L'uscita da configure viene utilizzata per generare il file postgis_config.h. Controllate che le variabili POSTGIS_PGSQL_VERSION, POSTGIS_PROJ_VERSION e POSTGIS_GEOS_VERSION siano assegnate correttamente.