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.
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.
Soluzione
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
Soluzione
insert into geometry_columns values
('','public','cities','geom',2,4326,'POLYGON');
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 menu option or toolbar button:
Queesto aprirà la finestra di dialogo:
Scegli New per aprire questa finestra:
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
Soluzione
select people.name,
streets.name as street_name,
st_astext(people.geom) as geometry
from streets, people
where people.street_id=streets.id;
Risultato:
name | street_name | geometry
--------------+-------------+---------------
Roger Jones | High street |
Sally Norman | High street |
Jane Smith | Main Road |
Joe Bloggs | Low Street |
Fault Towers | Main Road | POINT(33 -33)
(5 rows)
Come puoi vedere, il nostro vincolo consente di aggiungere i nulli nel database.
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.
