17.2. Lesson: Simple Feature Model

Come memorizziamo e rappresentiamo delle entità geografiche in un database? In questa lezione tratteremo di uno dei possibili approcci, il Simple Feature Model definito da OGC.

Obiettivo di questa lezione: Imparare cosa è il modello SFS e come usarlo.

17.2.1. Cos’è OGC

Open Geospatial Consortium (OGC) è un’organizzazione internazionale no-profit, basata sul consenso volontario, che si occupa di definire specifiche tecniche per i servizi geospaziali e di localizzazione (location based). OGC è formato da oltre 370 membri (governi, industria privata, università) con l’obiettivo di sviluppare ed implementare standard per il contenuto, i servizi e l’interscambio di dati geografici (GIS - Sistema informativo geografico) che siano “aperti ed estensibili”. Le specifiche definite da OGC sono pubbliche (PAS) e disponibili gratuitamente. - Wikipedia

17.2.2. Cos’è il modello SFS

Il Simple Feature per SQL (SFS) Model è un modo non-topologico per l’uso di dati geospaziali in un database e definisce le funzioni per l’accesso, il funzionamento e la costruzione di questi dati.

../../../_images/ogc_sfs.png

Il modello definisce dati geospaziali provenienti da Vettori di punti, linee e poligoni (e aggregazioni multioggetto).

For further information, have a look at the OGC Simple Feature for SQL standard.

17.2.3. Aggiungi un campo geometria alla tavola

Aggiungi un campo punto alla tabella people:

alter table people add column the_geom geometry;

17.2.4. Aggiungi un vincolo in base al tipo di geometria

Noterai che il tipo di campo della geometria non specifica in modo implicito quale tipo di geometria per il campo - per questo abbiamo bisogno di un vincolo:

alter table people
add constraint people_geom_point_chk
    check(st_geometrytype(the_geom) = 'ST_Point'::text
          OR the_geom IS NULL);

Questo aggiunge un vincolo alla tabella in modo che accetterà solo una geometria punto o un valore nullo.

17.2.5. Prova

Crea una nuova tabella denominata cities e inserisci alcune colonne appropriate, tra cui un campo geometry per poligoni (i confini della città). Assicurarti che esiste un vincolo per rispettare geometrie poligoni.

Controlla i risultati

17.2.6. Compila la tabella geometry_columns

A questo punto dovresti aggiungere nella tabella geometry_columns:

insert into geometry_columns values
  ('','public','people','the_geom',2,4326,'POINT');

Perché? geometry_columns viene utilizzato da alcune applicazioni per sapere quali tabelle del database contengono dati geometrici.

Nota

Se la precedente istruzione INSERT causa un errore, esegui prima questa interrogazione:

select * from geometry_columns;

Se la colonna f_table_name contiene il valore people, allora questa tabella è già stata registrata e non è necessario fare altro.

The value 2 refers to the number of dimensions; in this case, two: x and y.

Il valore 4326 si riferisce alla proiezione che stai utilizzando; in questo caso, WGS 84, riferita con il numero 4326 (vedere la precedente discussione sul EPSG).

17.2.6.1. Prova

Aggiung un’appropriata geometry_columns per il tuo vettore new cities

Controlla i risultati

17.2.7. Aggiungi una riga alla tabella usando SQL

Ora che le tabelle sono spazialmente abilitate, puoi archiviare le geometrie in esse:

insert into people (name,house_no, street_id, phone_no, the_geom)
        values ('Fault Towers',
                 34,
                 3,
                 '072 812 31 28',
                 'SRID=4326;POINT(33 -33)');

Nota

Nei nuovi dati inseriti, dovrai specificare la proiezione (SRID) che desideri utilizzare. Questo è perché hai inserito la geometria del nuovo punto utilizzando una stringa di testo semplice ma che non aggiunge automaticamente le informazioni di proiezione corrette. Ovviamente, il nuovo punto deve utilizzare lo stesso SRID come i dati aggiunti, quindi devi specificarlo.

Se a questo punto staI utilizzando una interfaccia grafica, per esempio, specificando la proiezione per ciascun punto dovrebbe essere automatico. In altre parolenon ti preoccupererai di usare la proiezione corretta per ogni punto che desideri aggiungere, se lo hai già specificato.

Adesso apri QGIS e prova a vedere la tua tabella people. Puoi modificare/aggiungere/cancellare righe e interrogare il database per vedere come è cambiato.

Per caricare un layer PostGIS in QGIS usa l’opzione dal menu Layer ‣ Add PostGIS Layers oppure l’icona:

addPostgisLayer

Queesto aprirà la finestra di dialogo:

../../../_images/add_postgis_layer_dialog.png

Scegli New per aprire questa finestra:

../../../_images/new_postgis_connection.png

Quindi definisci una nuova connessione, per esempio:

Name: myPG
Service:
Host: localhost
Port: 5432
Database: address
User:
Password:

Per vedere se QGIS ha trovato il database address e che il tuo username e password sono corretti, scegli Test Connect. Se funziona scegli Save Username e Save Password. Quindi scegli OK per creare questa connessione.

Torna alla finestra Add PostGIS Layers , scegli Connect e aggiungi i layer al tuo progetto.

17.2.7.1. Try Yourself moderate

Formulate un’interrogaazione che mostre il nome di una persona, la strada e la posizione (da the-geom coloumn) come testo

Verifica i risultati

17.2.8. In Conclusion

hai visto come aggiungere oggetti spaziali database e visualizzarli nel GIS.

17.2.9. What’s Next?

Nel prossimo vedrai come importare ed esportare i dati da e per il database.