Importante

La traduzione è uno sforzo comunitario you can join. Questa pagina è attualmente tradotta al 82.00%.

16.2. Lezione: Modello Simple Feature

Come puoi memorizzare o rappresentare delle entità geografiche in un database? In questa lezione tratteremo di uno dei possibili approcci, il Modello delle entità di base 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 modelle delle entità di base per SQL (SFS) è 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.

16.2.3. Aggiungi un campo geometria alla tavola

Aggiungi un campo punto alla tabella people:

alter table people add column geom geometry;

16.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(geom) = 'ST_Point'::text
          OR 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 Tu:

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.

16.2.6. Compila la tabella geometry_columns

A questo punto dovresti aggiungere nella tabella geometry_columns:

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

Why? geometry_columns is used by certain applications to be aware of which tables in the database contain geometry data.

Nota

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

select * from geometry_columns;

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

Il valore 2 si riferisce al numero di dimensioni; in questo caso, due: X e Y.

The value 4326 refers to the projection we are using; in this case, WGS 84, which is referred to by the number 4326 (refer to the earlier discussion about the EPSG).

★☆☆ Prova Tu:

Add an appropriate geometry_columns entry for your new cities layer

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

Now is probably a good time to open QGIS and try to view your people table. Also, we should try editing / adding / deleting records and then performing select queries in the database to see how the data has changed.

To load a PostgreSQL layer in QGIS, use the Layer ► Add PostgreSQL Layers menu option or toolbar button:

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:

To see whether QGIS has found the address database and that your username and password are correct, click Test Connect. If it works, check the boxes next to Save Username and Save Password. Then click OK to create this connection.

Back in the Add PostgreSQL Layers dialog, click Connect and add layers to your project as usual.

★★☆ Prova Tu:

Formulare un’interrogazione che mostri il nome di una persona, la strada e la posizione (da the-geom coloumn) come semplice testo

16.2.8. In Conclusione

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

16.2.9. Cosa Segue?

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