21. Elenco di risposte
21.1. Results For Un’introduzione sull’interfaccia utente
21.1.1. Introduzione (Parte 1)
Fate riferimento all’immagine che mostra il layout dell’interfaccia e verificate di ricordare i nomi e le funzioni degli elementi dello schermo.
21.1.2. Introduzione (Parte 2)
Salva come…
Zoom al layer
Inverti selezione
Visualizzazione on/off
Misura linea
21.2. Results For Aggiungere i primi layer
21.2.1. Preparazione
Nell’area principale della finestra di dialogo dovreste vedere molte forme con colori diversi. Ogni forma appartiene a un livello che potete identificare dal suo colore nel pannello di sinistra (i vostri colori potrebbero essere diversi da quelli sotto):
21.2.2. Caricamento dati
La tua mappa dovrebbe avere sette layer:
protected_areas
places
rivers
roads
landuse
buildings (presi da
training_data.gpkg
) ewater (presi da
exercise_data/shapefile
).
21.3. Results For Simbologia
21.3.1. Colori
Verifica che i colori siano cambiati come ti aspettavi.
È sufficiente scegliere il layer water nella legenda e poi cliccare il pulsante Apri il pannello Stile Layer. Cambia il colore con uno coerente con i layer acqua (water).
Nota
Se desiderate lavorare su un solo livello alla volta e non volete che gli altri livelli vi distraggano, potete nascondere un livello facendo clic sulla casella di controllo accanto al suo nome nell’elenco dei livelli. Se la casella è vuota, il livello è nascosto.
21.3.2. Struttura simbolo
La vostra mappa ora dovrebbe apparire come questa:
Se sei un utente di livello principiante, puoi fermarti qui.
Usate il metodo sopra per cambiare i colori e gli stili per tutti i livelli rimanenti.
Provate a usare colori naturali per gli oggetti. Ad esempio, una strada non dovrebbe essere rossa o blu, ma può essere grigia o nera.
Sentiti libero di sperimentare con differenti impostazioni di Stile riempimento e Stile tratto per i poligoni.
21.3.3. Layer simbolo
Personalizza il layer buildings come preferisci, ma ricorda che deve essere facile vedere livelli separati sulla mappa.
Ecco un esempio:
21.3.4. Livelli simbolo
Per fare il simbolo richiesto, hai bisogno di tre livelli:
Il simbolo del livello più basso è una linea grigia, larga e uniforme. Sopra di essa c’è una linea gialla stretta e uniforme e infine una linea nera più sottile e uniforme.
Se il tuo simbolo somiglia a quello sopra ma non è il risultato voluto:
Controllo che i livelli del tuo simbolo appaiano come questi:
Ora la tua mappa dovrebbe apparire come questa:
21.3.5. Livelli simbolo
Regola i livelli del tuo simbolo con questi valori:
Prova con diversi valori per avere risultati differenti.
Apri la tua mappa originale prima di continuare con il prossimo esercizio.
21.4. Simboli contorno
Qui ci sono degli esempi di struttura simbolo:
21.4.1. Simbologia tramite generatore geometria
Clicca sul pulsante per aggiungere un altro livello simbolo.
Muovi il nuovo simbolo in fondo alla lista cliccando sul pulsante .
Scegli un colore adatto per riempire i poligoni acqua (water).
Clicca su Simbolo del generatore di geometria e cambia i cerchio con un’altra forma di tua preferenza.
Per avere risultati più utili prova sperimentando altre opzioni.
21.5. Results For Attributi dati dei vattori
21.5.1. Esplorare gli attributi dati dei vettori
Nel layer rivers ci dovrebbero essere 9 campi:
Seleziona il layer nel pannello Layer.
Clicca col tasto destro e scegli Apri tabella attributi, oppure premi il pulsante sulla Barra strumenti degli attributi.
Conta il numero di colonne.
Suggerimento
Un metodo più veloce potrebbe essere fai doppio clic sul layer rivers, apri la scheda , dove puoi trovare una lista numerata dei campi della tabella.
Le informazioni riguarda le città sono disponibili nel layer places. Apri la tabella attributi come hai fatto per il layer rivers: ci sono due elementi il cui attributo place è impostato su
town
: Swellendam e Buffeljagsrivier. Se vuoi, puoi aggiungere un commento sugli altri campi da questi due elementi.Il campo
name
è quello più utile per essere visualizzato come etichetta. Perché tutti i suoi valori sono univoci per ogni oggetto ed è poco probabile che contenga valori NULL. Se i tuoi dati contengono dei valori NULL, non preoccuparti dato che la maggior parte dei tuoi luoghi hanno dei nomi.
21.6. Results For Etichette
21.6.1. Personalizzazione delle etichette (Parte 1)
La tua mappa dovrebbe ora mostrare i simboli e le etichette dovrebbero avere un offset di 2mm. Lo stile di simboli ed etichette dovrebbe permettere ad entrambi di essere chiaramente visibili sulla mappa.
21.6.2. Personalizzazione delle etichette (Parte 2)
Una possibile soluzione porta a questo risultato:
Per arrivare a questo risultato:
Usa una dimensione del carattere di
10
Usa una distanza di posizionamento intorno al punto di
1.5 mm
Usa una dimensione del simbolo di
3.0 mm
In aggiunta, questo esempio usa l’opzione A capo con il carattere:
Inserisci uno
spazio
in questo campo e clicca Applica per ottenere lo stesso effetto. Nel nostro caso, alcuni nomi di luoghi sono molto lunghi, ottenendo nomi su più righe che non sono molto intuitivi. Puoi trovare questa impostazione più adatta per la tua mappa.
21.6.3. Usare impostazioni definite dai dati
Rimanendo nella modalità modifica, imposta il valore
FONT_SIZE
al valore che preferisci. L’esempio usa16
per le città,14
per i sobborghi,12
per le località, e10
per le frazioni.Ricorda di salvare le modifiche ed esci dalla modalità modifica
Ritorna alle opzioni di formattazione Testo per il layer
places
e selezionaFONT_SIZE
alla voce Tipo di campo del menu a scomparsa sovrascrittura definita dai dati:Con i valori sopra indicati, il risultato dovrebbe essere questo:
21.7. Results For Classificazione
21.7.1. Affinare la classificazione
Le impostazioni usate potrebbero non essere le stesse, ma con i valori guilabel:Classi = 6
e Modo = Natural Breaks (Jenks) (e naturalmente usando gli stessi colori) la mappa apparirà come questa:
21.8. Results For Creare un nuovo vettore dati
21.8.1. Digitalizzazione
La simbologia non ha importanza, ma i risultati dovrebbero apparire più o meno come questi:
21.8.2. Topologia: strumento aggiungi buco
La forma esatta non importa, ma dovresti ottenere un buco in mezzo all’elemento, come questo:
Annulla la modifica prima di continuare con l’esercizio per il prossimo strumento.
21.8.3. Topologia: strumento aggiungi parte
Prima seleziona Bontebok National Park:
Ora aggiungi la parte nuova:
Annulla la modifica prima di continuare con l’esercizio per il prossimo strumento.
21.8.4. Fondi elementi
Usa lo strumento Fondi elementi selezionati
Usa l’elemento con OGC_FID pari a 1 come origine degli attributi (clicca sulla sua riga nel dialogo, poi clicca il pulsante Prendi gli attributi dall’elemento selezionato)
Nota
Se stai usando un insieme di dati diverso, è molto probabile che l” OGC_FID del poligono originale non sia 1
. Scegli semplicemente la feature che ha una OGC_FID.
Nota
Usando lo strumento Fondi gli attributi degli elementi selezionati (merge) manterrà distinte le geometrie, ma darà gli stessi attributi.
21.8.5. Moduli
Per TYPE, c’è ovviamente un quantità limitata di tipi che una strada può avere, e se controlli la tabella attributi per questo layer, vedrai che sono predefiniti.
Imposta il widget in Mappa Valori e clicca su Carica Dati dal Vettore.
Seleziona roads dalla lista a scomparsa Vettore e highway per le opzioni Valore e Descrizione:
Clicca OK tre volte.
Se usi lo strumento Informazioni su una strada mentre la modalità modifica è attiva, il dialogo che appare dovrebbe essere come questo:
21.9. Results For Analisi vettoriale
21.9.1. Distanza dalle scuole
Il tuo dialogo buffer dovrebbe apparire come questo:
La Distanza buffer è 1 chilometro.
Il valore di Segmenti per approssimare è impostato a 20. È facoltativo, ma raccomandato, perché fa in modo che i buffer di uscita appaiano più arrotondati. Confronta questo:
Con questo:
La prima immagine mostra il buffer con il valore Segmenti per approssimare a 5 e la seconda con il valore pari a 20. Nel nostro esempio, la differenza è minima, ma puoi vedere che i bordi dei buffer sono più arrotondati con il valore maggiore.
21.9.2. Distanza dai ristoranti
Per creare il layer houses_restaurants_500m, useremo un procedimento in due passi:
In primo luogo, creare un buffer di 500m intorno ai ristoranti e aggiungere il layer alla mappa:
Successivamente, estrarre gli edifici all’interno di tale area buffer:
La tua mappa dovrebbe mostrare ora solamente gli edifici che si trovano entro 50 metri da una strada, 1 km da una scuola e 500 metri da un ristorante:
21.10. Results For Analisi di reti
21.11. Percorso più veloce
Apri
e compila il dialogo come questo:Assicurati che Tipo di percorso da calcolare sia Più veloce
.
Clicca su Esegui e chiudi il dialogo.
Ora apri la tabella attributi del layer di uscita. Il campo cost contiene il tempo di viaggio tra i due punti (come frazioni di ore):
21.12. Results For Analisi Raster
21.12.1. Calcolare l’esposizione
Imposta il dialogo Esposizione come questo:
Il tuo risultato:
21.12.2. Calcolo della pendenza (meno di 2 e 5 gradi)
Imposta la tua finestra di dialogo Calcolatore Raster con:
la seguente espresione:
slope@1 <= 2
il layer
slope
come :guilabel: Layer di riferimento
Per la versione a 5 gradi, sostituisci il
2
nell’espressione e nel nome del file con5
.
I tuoi risultati:
2 gradi:
5 gradi:
21.13. Results For Completamento dell’analisi
21.13.1. Raster al Vettore
Apri il Costrutore di interrogazioni cliccando con il tasto destro sul layer all_terrain nel pannello Layer, e selezionando la scheda .
Poi costruisci la query
"suitable" = 1
.Cliccare su OK per escludere tutti i poligoni che non soddisfano la condizione.
Se mostrate sopra il raster originale, le aree dovrebbero sovrapporsi perfettamente:
Puoi salvare questo layer cliccando con il tasto destro sul layer all_terrain nel pannello Layer e scegliendo Salva come…, poi continua come da istruzioni.
21.13.2. Sto analizzando i risultati
Potreste notare che alcuni degli edifici nel vostro layer new_solution
sono stati «tagliati» dallo strumento Intersezione. Questo mostra che solo una parte dell’edificio - e quindi solo una parte della proprietà - si trova su un terreno adatto. Possiamo quindi togliere in modo ragionevole questi edifici dal nostro dataset.
21.13.3. Sto perfezionando l’analisi
Al momento, la vostra analisi dovrebbe avere questo aspetto:
Si prenda in considerazione un’area circolare, continua per 100 metri in tutte le direzioni.
Se il raggio è superiore a 100 metri, sottraendo 100 metri dalla sua dimensione (da tutte le direzioni), una parte di esso verrà lasciato al centro.
Pertanto, puoi eseguire un buffer interno di 100 metri sul tuo layer vettoriale esistente suitable_terrain. Nel risultato in uscita della funzione buffer, qualsiasi cosa rimanga del layer originale rappresenterà le aree in cui c’è terreno oltre 100 metri.
Come dimostrazione:
Vai a :menuselection: Vettore –> Strumenti di Geoprocessing –> Buffer per aprire la finestra di dialogo Buffer.
Impostalo come questo:
Usa il layer suitable_terrain con
10
segmenti e una distanza del buffer di-100
. (La distanza è automaticamente in metri perché la tua mappa sta usando un SR proiettato).Salva il risultato in uscita in
exercise_data/residential_development/
comesuitable_terrain_continuous100m.shp
.Se necessario, sposta il nuovo layer sopra il tuo layer originale suitable_terrain.
I vostri risultati saranno simili a questo:
Ora usa lo strumento Select by Location ( ).
Impostalo come questo:
Seleziona gli elementi in new_solution che intersecano gli elementi in suitable_terrain_continuous100m.shp.
Questo è il risultato:
Gli edifici gialli sono selezionati. Anche se alcuni degli edifici cadono in parte al di fuori del nuovo layer suitable_terrain_continuous100m, essi stanno dentro il layer originale suitable_terrain e quindi soddisfano tutti i nostri requisiti.
Salva la selezione in
exercise_data/residential_development/
comefinal_answer.shp
.
21.14. Results For WMS
21.14.1. Aggiungere un altro Layer WMS
La tua mappa dovrebbe assomigliare a questa (potrebbe essere necessario riordinare i layer):
21.14.2. Aggiungere un Nuovo Server WMS
Usa lo stesso approccio di prima per aggiungere il nuovo server e il layer appropriato come ospitato su tale server:
Se ingrandisci l’area Swellendam, noterai che questo insieme di dati ha una bassa risoluzione:
Pertanto, è meglio non usare questi dati per la mappa attuale. I dati Blue Marble sono più adatti a scale globali o nazionali.
21.14.3. Cercare un Server WMS
Puoi notare che molti server WMS non sono sempre disponibili. A volte questo è temporaneo, a volte è permanente. Un esempio di un server WMS che ha funzionato al momento di scrivere è il World Mineral Deposits WMS in http://apps1.gdr.nrcan.gc.ca/cgi-bin/worldmin_en-ca_ows. Non richiede costi o ha vincoli di accesso, ed è globale. Pertanto, soddisfa i requisiti. Tenete a mente, tuttavia, che questo è solo un esempio. Ci sono molti altri server WMS tra cui scegliere.
21.15. Results For GRASS Integration
21.15.1. Aggiungere Layer a un Mapset
Puoi aggiungere layers (sia vettoriali che raster) in un Mapset di GRASS trascinandoli nel Browser (vedi Follow Along: Load data using the QGIS Browser) o usando il comando v.in.gdal.qgis
per i vettori e r.in.gdal.qgis
per i raster.
21.15.2. Riclassificare layer raster
Per scoprire il valore massimo del raster utilizza lo strumento r.info: nella console vedrai che il valore massimo è 1699.
Ora sei pronto a scrivere le regole. Apri un editor di testo e aggiungi le seguenti regole:
0 thru 1000 = 1
1000 thru 1400 = 2
1400 thru 1699 = 3
salva il file come file my_rules.txt
e chiudi l’editor di testo.
Esegui lo strumento r.reclass, scegli il layer g_dem e carica il file contenente le regole che hai appena salvato.
Clicca su Esegui e poi su Visualizza Output. Puoi cambiare i colori e il risultato finale dovrebbe essere come nella seguente figura:
21.16. Results For Concetti sui Database
21.16.1. Proprietà Tabella Address
Per la nostra tabella degli indirizzi teorica, potremmo voler memorizzare le seguenti proprietà:
House Number
Street Name
Suburb Name
City Name
Postcode
Country
Quando creiamo la tabella per rappresentare un oggetto indirizzo, creiamo colonne per rappresentare ciascuna di queste proprietà e le nominiamo con nomi appropriati per l’SQL e possibilmente abbreviati:
house_number
street_name
suburb
city
postcode
country
21.16.2. Normalizzare la Tabella People
Il problema principale della tabella people è che c’è un solo campo indirizzo che contiene l’intero indirizzo di una persona. Pensando alla nostra tabella teorica address, che abbiamo visto prima in questa lezione, sappiamo che un indirizzo è composto da molte proprietà diverse. Memorizzando tutte queste proprietà in un solo campo, rendiamo molto più difficile aggiornare e interrogare i nostri dati. Abbiamo quindi bisogno di dividere il campo indirizzo nelle varie proprietà. Questo ci darebbe una tabella che ha la seguente struttura:
id | name | house_no | street_name | city | phone_no
--+---------------+----------+----------------+------------+-----------------
1 | Tim Sutton | 3 | Buirski Plein | Swellendam | 071 123 123
2 | Horst Duester | 4 | Avenue du Roix | Geneva | 072 121 122
Nota
Nella prossima sezione, imparerai le relazioni a Chiave Esterna che potrebbero essere usate in questo esempio per migliorare ulteriormente la struttura del nostro database.
21.16.3. Ulteriore Normalizzazione della Tabella People
La nostra tabella people attualmente ha questo aspetto:
id | name | house_no | street_id | phone_no
---+--------------+----------+-----------+-------------
1 | Horst Duster | 4 | 1 | 072 121 122
La colonna street_id rappresenta una relazione «uno a molti» tra l’oggetto people e il corrispondente oggetto street, che si trova nella tabella streets.
Un modo per normalizzare ulteriormente la tabella è quello di dividere il campo nome in first_name e last_name:
id | first_name | last_name | house_no | street_id | phone_no
---+------------+------------+----------+-----------+------------
1 | Horst | Duster | 4 | 1 | 072 121 122
Possiamo anche creare tabelle separate per il nome della città e del paese, collegandole alla nostra tabella people tramite relazioni “uno a molti”:
id | first_name | last_name | house_no | street_id | town_id | country_id
---+------------+-----------+----------+-----------+---------+------------
1 | Horst | Duster | 4 | 1 | 2 | 1
Un diagramma ER per rappresentare questo sarebbe così:
21.16.4. Creare una Tabella People
L’SQL da usare per creare correttamente la tabella people è:
create table people (id serial not null primary key,
name varchar(50),
house_no int not null,
street_id int not null,
phone_no varchar null );
Lo schema per la tabella ( inserisci \d people) è come questo:
Table "public.people"
Column | Type | Modifiers
-----------+-----------------------+-------------------------------------
id | integer | not null default
| | nextval('people_id_seq'::regclass)
name | character varying(50) |
house_no | integer | not null
street_id | integer | not null
phone_no | character varying |
Indexes:
"people_pkey" PRIMARY KEY, btree (id)
Nota
A scopo illustrativo, abbiamo volutamente omesso il vincolo fkey.
21.16.5. Il Comando DROP
La ragione per cui il comando DROP non funzionerebbe in questo caso è perché la tabella people ha un vincolo di Chiave Esterna alla tabella streets. Questo significa che l’eliminazione (o la cancellazione) della tabella streets lascerebbe la tabella people con riferimenti a dati streets inesistenti.
Nota
È possibile “forzare” l’eliminazione della tabella streets usando il comando CASCADE, ma questo eliminerebbe anche la people e qualsiasi altra tabella che ha una relazione con la tabella streets. Usate tale comando con cautela!
21.16.6. Inserire una nuova Street
Il comando SQL che dovresti usare assomiglia a questo (puoi sostituire il nome della strada con un nome di tua scelta):
insert into streets (name) values ('Low Road');
21.16.7. Aggiungere una Nuova Persona con una Relazione a Chiave Esterna
Ecco l’istruzione SQL corretta:
insert into streets (name) values('Main Road');
insert into people (name,house_no, street_id, phone_no)
values ('Joe Smith',55,2,'072 882 33 21');
Se guardi di nuovo la tabella delle strade (usando un’istruzione select come prima), vedrai che il id per la voce Main Road è 2.
Ecco perché potremmo semplicemente inserire il numero 2 qui sopra. Anche se non vediamo Main Road scritto completamente nella voce di cui sopra, il database sarà in grado di associarlo al valore street_id di 2.
Nota
Se hai già aggiunto un nuovo elemento street, potresti scoprire che il nuovo Main Road ha un ID di 3 e non di 2.
21.16.8. Ottenere i nomi delle strade
Ecco l’istruzione SQL corretta che dovresti usare:
select count(people.name), streets.name
from people, streets
where people.street_id=streets.id
group by streets.name;
Risultato:
count | name
------+-------------
1 | Low Street
2 | High street
1 | Main Road
(3 rows)
Nota
Noterai che abbiamo anteposto i nomi dei campi ai nomi delle tabelle (per esempio people.name e streets.name). Questo deve essere fatto ogni volta che il nome del campo è ambiguo (cioè non è univoco in tutte le tabelle del database).
21.17. Results For Query Spaziali
21.17.1. Le unità usate nelle interrogazioni spaziali
Le unità usate dalla query di esempio sono i gradi, perché il SR che il layer sta usando è WGS 84. Questo è un SR geografico, il che significa che le sue unità sono in gradi. Un SR proiettato, come le proiezioni UTM, è in metri.
Ricorda che quando scrivi una query, devi sapere in quali unità si trova il SR del layer. Questo ti permetterà di scrivere una query che possa restituire i risultati che ti aspetti.
21.17.2. Creare Indice Spaziale
CREATE INDEX cities_geo_idx
ON cities
USING gist (the_geom);
21.18. Costruzione di geometria
21.18.1. Creazione di stringhe di linee
alter table streets add column the_geom geometry;
alter table streets add constraint streets_geom_point_chk check
(st_geometrytype(the_geom) = 'ST_LineString'::text OR the_geom IS NULL);
insert into geometry_columns values ('','public','streets','the_geom',2,4326,
'LINESTRING');
create index streets_geo_idx
on streets
using gist
(the_geom);
21.18.2. Collegamenti Tabelle
delete from people;
alter table people add column city_id int not null references cities(id);
(acquisizione delle città in QGIS)
insert into people (name,house_no, street_id, phone_no, city_id, the_geom)
values ('Faulty Towers',
34,
3,
'072 812 31 28',
1,
'SRID=4326;POINT(33 33)');
insert into people (name,house_no, street_id, phone_no, city_id, the_geom)
values ('IP Knightly',
32,
1,
'071 812 31 28',
1,F
'SRID=4326;POINT(32 -34)');
insert into people (name,house_no, street_id, phone_no, city_id, the_geom)
values ('Rusty Bedsprings',
39,
1,
'071 822 31 28',
1,
'SRID=4326;POINT(34 -34)');
Se stai ricevendo il seguente messaggio di errore:
ERROR: insert or update on table "people" violates foreign key constraint
"people_city_id_fkey"
DETAIL: Key (city_id)=(1) is not present in table "cities".
allora significa che mentre sperimentavi la creazione di poligoni per la tabella delle città, devi averne cancellato alcuni e ricominciato da capo. Verifica le voci nella tua tabella delle città e usa qualsiasi id che esiste.
21.19. Results For Simple Feature Model
21.19.1. Popolare le Tabelle
create table cities (id serial not null primary key,
name varchar(50),
the_geom geometry not null);
alter table cities
add constraint cities_geom_point_chk
check (st_geometrytype(the_geom) = 'ST_Polygon'::text );
21.19.2. Popolare la Geometry_Columns della Tabella
insert into geometry_columns values
('','public','cities','the_geom',2,4326,'POLYGON');
21.19.3. Aggiungere una Geometria
select people.name,
streets.name as street_name,
st_astext(people.the_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 permette l’aggiunta di valori nulli nel database.