Outdated version of the documentation. Find the latest one here.

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

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

16.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 Poligono (e aggregazioni multioggetto).

Per maggiori informazioni, guarda Simple Feature OGC per SQL <http://www.opengeospatial.org/standards/sfs> _ standard.

16.2.3. Aggiungi un campo geometria alla tavola

Aggiungi un campo punto alla nostra tabella people

alter table people add column the_geom geometry;

16.2.4. Aggiungi un vincolo in base al tipo di geometria

Nota che il tipo di campo di geometry non specifica implicitamente il 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.

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

16.2.6. Compila la tabella geometry_columns

A questo punto dovresti aggiungere i dati nella tabella :kbd:’geometry_columns`

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

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

Nota

Se : kbd:INSERT causa un errore, esegui prima questa interrogazione:

 select * from geometry_columns;

If the column :kbd:`f_table_name` contains the value :kbd:`people`, then
this table has already been registered and you don't need to do anything
more.

Il valore: kbd:2 si riferisce al numero di dimensioni; in questo caso, due: x e y.

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

16.2.6.1. Prova

Aggiung un’appropriata geometry_columns per il tuo vettore new cities

Controlla i risultati

16.2.7. Aggiungi una riga alla tabella usando SQL

Ora che la tabella e geo-abilitata, puoi compilare le geometri in essa

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:

mActionAddPostgisLayer

Queesto aprirà la finestra di dialogo:

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

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

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

16.2.8. In Conclusion

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

16.2.9. What’s Next?

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