21. Elenco di risposte

21.1. Results For Un’introduzione sull’interfaccia utente

21.1.1. basic 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.

Torna al testo

21.1.2. basic Introduzione (Parte 2)

  1. Salva come…

  2. Zoom al layer

  3. Inverti selezione

  4. Visualizzazione on/off

  5. Misura linea

Torna al testo

21.2. Results For Aggiungere i primi layer

21.2.1. basic 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):

../../../_images/basic_map.png

Torna al testo

21.2.2. basic Caricamento dati

La tua mappa dovrebbe avere sette layer:

  • protected_areas

  • places

  • rivers

  • roads

  • landuse

  • buildings (presi da training_data.gpkg) e

  • water (presi da exercise_data/shapefile).

Torna al testo

21.3. Results For Simbologia

21.3.1. basic Colori

  • Verifica che i colori siano cambiati come ti aspettavi.

  • È sufficiente scegliere il layer water nella legenda e poi cliccare il pulsante symbology Apri il pannello Stile Layer. Cambia il colore con uno coerente con i layer acqua (water).

../../../_images/answer_water_blue.png

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.

Torna al testo

21.3.2. basic Struttura simbolo

La vostra mappa ora dovrebbe apparire come questa:

../../../_images/answer_symbology1.png

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.

../../../_images/answer_symbology2.png

Torna al testo

21.3.3. moderate Layer simbolo

Personalizza il layer buildings come preferisci, ma ricorda che deve essere facile vedere livelli separati sulla mappa.

Ecco un esempio:

../../../_images/answer_buildings_symbology.png

Torna al testo

21.3.4. moderate Livelli simbolo

Per fare il simbolo richiesto, hai bisogno di tre livelli:

../../../_images/answer_road_symbology.png

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:

  1. Controllo che i livelli del tuo simbolo appaiano come questi:

    ../../../_images/answer_road_symbol_levels.png
  2. Ora la tua mappa dovrebbe apparire come questa:

    ../../../_images/target_road_symbology.png

Torna al testo

21.3.5. hard Livelli simbolo

  1. Regola i livelli del tuo simbolo con questi valori:

    ../../../_images/answer_road_symbol_layers.png
  2. Prova con diversi valori per avere risultati differenti.

  3. Apri la tua mappa originale prima di continuare con il prossimo esercizio.

Torna al testo

21.4. moderate Simboli contorno

Qui ci sono degli esempi di struttura simbolo:

../../../_images/answer_marker_line.png
../../../_images/answer_marker_line2.png

Torna al testo

21.4.1. hard Simbologia tramite generatore geometria

  • Clicca sul pulsante signPlus per aggiungere un altro livello simbolo.

  • Muovi il nuovo simbolo in fondo alla lista cliccando sul pulsante arrowDown.

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

Torna al testo

21.5. Results For Attributi dati dei vattori

21.5.1. basic Esplorare gli attributi dati dei vettori

  • Nel layer rivers ci dovrebbero essere 9 campi:

    1. Seleziona il layer nel pannello Layer.

    2. Clicca col tasto destro e scegli Apri tabella attributi, oppure premi il pulsante sulla Barra strumenti degli attributi.

    3. Conta il numero di colonne.

    Suggerimento

    Un metodo più veloce potrebbe essere fai doppio clic sul layer rivers, apri la scheda Proprietà layer ► Campi, 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.

Torna al testo

21.6. Results For Etichette

21.6.1. moderate 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.

../../../_images/customised_labels_one.png

Torna al testo

21.6.2. moderate Personalizzazione delle etichette (Parte 2)

Una possibile soluzione porta a questo risultato:

../../../_images/possible_outcome_map.png

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:

    ../../../_images/wrap_character_settings.png
  • 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.

Torna al testo

21.6.3. hard Usare impostazioni definite dai dati

  1. Rimanendo nella modalità modifica, imposta il valore FONT_SIZE al valore che preferisci. L’esempio usa 16 per le città, 14 per i sobborghi, 12 per le località, e 10 per le frazioni.

  2. Ricorda di salvare le modifiche ed esci dalla modalità modifica

  3. Ritorna alle opzioni di formattazione Testo per il layer places e seleziona FONT_SIZE alla voce Tipo di campo del menu a scomparsa dataDefined sovrascrittura definita dai dati:

    ../../../_images/font_size_override.png

    Con i valori sopra indicati, il risultato dovrebbe essere questo:

    ../../../_images/font_override_results.png

Torna al testo

21.7. Results For Classificazione

21.7.1. moderate 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:

../../../_images/gradient_map_new_mode.png

Torna al testo

21.8. Results For Creare un nuovo vettore dati

21.8.1. basic Digitalizzazione

La simbologia non ha importanza, ma i risultati dovrebbero apparire più o meno come questi:

../../../_images/routes_layer_result.png

Torna al testo

21.8.2. moderate Topologia: strumento aggiungi buco

La forma esatta non importa, ma dovresti ottenere un buco in mezzo all’elemento, come questo:

../../../_images/ring_tool_result.png
  • Annulla la modifica prima di continuare con l’esercizio per il prossimo strumento.

Torna al testo

21.8.3. moderate Topologia: strumento aggiungi parte

  • Prima seleziona Bontebok National Park:

../../../_images/park_selected.png
  • Ora aggiungi la parte nuova:

../../../_images/new_park_area.png
  • Annulla la modifica prima di continuare con l’esercizio per il prossimo strumento.

Torna al testo

21.8.4. hard 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.

../../../_images/merge_feature_dialog.png

Nota

Usando lo strumento Fondi gli attributi degli elementi selezionati (merge) manterrà distinte le geometrie, ma darà gli stessi attributi.

Torna al testo

21.8.5. moderate 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:

    ../../../_images/value_map_settings.png
  • 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:

    ../../../_images/highway_as_value_map.png

Torna al testo

21.9. Results For Analisi vettoriale

21.9.1. basic Distanza dalle scuole

  • Il tuo dialogo buffer dovrebbe apparire come questo:

    ../../../_images/schools_buffer_setup.png

    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:

    ../../../_images/schools_buffer_5.png

    Con questo:

    ../../../_images/schools_buffer_6.png

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.

Torna al testo

21.9.2. basic 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:

    ../../../_images/restaurants_buffer.png
    ../../../_images/restaurants_buffer_result.png
  • Successivamente, estrarre gli edifici all’interno di tale area buffer:

    ../../../_images/select_within_restaurants.png

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:

../../../_images/restaurant_buffer_result.png

Torna al testo

21.10. Results For Analisi di reti

21.11. moderate Percorso più veloce

Apri Analisi di reti ► Percorso più breve (da punto a punto) e compila il dialogo come questo:

../../../_images/fastest_path_result.png

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):

../../../_images/fastest_path_attribute.png

Torna al testo

21.12. Results For Analisi Raster

21.12.1. basic Calcolare l’esposizione

  • Imposta il dialogo Esposizione come questo:

    ../../../_images/answer_dem_aspect.png

Il tuo risultato:

../../../_images/answer_aspect_result.png

Torna al testo

21.12.2. moderate 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

    ../../../_images/answer_raster_calculator_slope.png
  • Per la versione a 5 gradi, sostituisci il 2 nell’espressione e nel nome del file con 5.

I tuoi risultati:

  • 2 gradi:

    ../../../_images/answer_2degree_result.png
  • 5 gradi:

    ../../../_images/answer_5degree_result.png

Torna al testo

21.13. Results For Completamento dell’analisi

21.13.1. moderate Raster al Vettore

  1. Apri il Costrutore di interrogazioni cliccando con il tasto destro sul layer all_terrain nel pannello Layer, e selezionando la scheda Proprietà ► Sorgente.

  2. Poi costruisci la query "suitable" = 1.

  3. Cliccare su OK per escludere tutti i poligoni che non soddisfano la condizione.

    Se mostrate sopra il raster originale, le aree dovrebbero sovrapporsi perfettamente:

    ../../../_images/polygonize_raster.png
  4. 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.

Torna al testo

21.13.2. moderate 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.

Torna al testo

21.13.3. moderate Sto perfezionando l’analisi

Al momento, la vostra analisi dovrebbe avere questo aspetto:

../../../_images/new_solution_example.png

Si prenda in considerazione un’area circolare, continua per 100 metri in tutte le direzioni.

../../../_images/circle_100.png

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.

../../../_images/circle_with_remainder.png

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:

  1. Vai a :menuselection: Vettore –> Strumenti di Geoprocessing –> Buffer per aprire la finestra di dialogo Buffer.

  2. Impostalo come questo:

    ../../../_images/suitable_terrain_buffer.png
  3. 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).

  4. Salva il risultato in uscita in exercise_data/residential_development/ come suitable_terrain_continuous100m.shp.

  5. Se necessario, sposta il nuovo layer sopra il tuo layer originale suitable_terrain.

    I vostri risultati saranno simili a questo:

    ../../../_images/suitable_buffer_results.png
  6. Ora usa lo strumento Select by Location (Vettore ► Strumenti di Ricerca ► Selezione per posizione).

  7. Impostalo come questo:

    ../../../_images/select_by_location.png
  8. Seleziona gli elementi in new_solution che intersecano gli elementi in suitable_terrain_continuous100m.shp.

    Questo è il risultato:

    ../../../_images/buffer_select_result.png

    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.

  9. Salva la selezione in exercise_data/residential_development/ come final_answer.shp.

Back to text

21.14. Results For WMS

21.14.1. basic Aggiungere un altro Layer WMS

La tua mappa dovrebbe assomigliare a questa (potrebbe essere necessario riordinare i layer):

../../../_images/geology_layer_result.png

Back to text

21.14.2. moderate 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:

    ../../../_images/add_ogc_server.png
    ../../../_images/add_bluemarble_layer.png
  • Se ingrandisci l’area Swellendam, noterai che questo insieme di dati ha una bassa risoluzione:

../../../_images/low_resolution_dataset.png

Pertanto, è meglio non usare questi dati per la mappa attuale. I dati Blue Marble sono più adatti a scale globali o nazionali.

Back to text

21.14.3. moderate 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.

Back to text

21.15. Results For GRASS Integration

21.15.1. basic 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.

Back to text

21.15.2. moderate 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:

../../../_images/grass_reclass.png

Back to text

21.16. Results For Concetti sui Database

21.16.1. basic 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

Back to text

21.16.2. basic 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.

Back to text

21.16.3. moderate 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ì:

../../../_images/er-people-normalised-example.png

Back to text

21.16.4. moderate 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.

Back to text

21.16.5. basic 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!

Back to text

21.16.6. basic 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');

Back to text

21.16.7. moderate 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.

Back to text

21.16.8. moderate 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).

Back to text

21.17. Results For Query Spaziali

21.17.1. basic 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.

Back to text

21.17.2. basic Creare Indice Spaziale

CREATE INDEX cities_geo_idx
  ON cities
  USING gist (the_geom);

Back to text

21.18. Costruzione di geometria

21.18.1. moderate 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);

Back to text

21.18.2. moderate 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.

Back to text

21.19. Results For Simple Feature Model

21.19.1. moderate 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 );

Back to text

21.19.2. moderate Popolare la Geometry_Columns della Tabella

insert into geometry_columns values
      ('','public','cities','the_geom',2,4326,'POLYGON');

Back to text

21.19.3. hard 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.

Back to text