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)

  • Set your Raster calculator dialog up with:

    • the following expression: slope@1 <= 2

    • the slope layer as the Reference layer(s)

    ../../../_images/answer_raster_calculator_slope.png
  • For the 5 degree version, replace the 2 in the expression and file name with 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. Open the Query Builder by right-clicking on the all_terrain layer in the Layers panel, and selecting the Properties ► Source tab.

  2. Then build the 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. You can save this layer by right-clicking on the all_terrain layer in the Layers panel and choosing Save As…, then continue as per the instructions.

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

Therefore, you can run an interior buffer of 100 meters on your existing suitable_terrain vector layer. In the output of the buffer function, whatever remains of the original layer will represent areas where there is suitable terrain for 100 meters beyond.

Come dimostrazione:

  1. Go to Vector ► Geoprocessing Tools ► Buffer(s) to open the Buffer(s) dialog.

  2. Impostalo come questo:

    ../../../_images/suitable_terrain_buffer.png
  3. Use the suitable_terrain layer with 10 segments and a buffer distance of -100. (The distance is automatically in meters because your map is using a projected CRS.)

  4. Save the output in exercise_data/residential_development/ as suitable_terrain_continuous100m.shp.

  5. If necessary, move the new layer above your original suitable_terrain layer.

    I vostri risultati saranno simili a questo:

    ../../../_images/suitable_buffer_results.png
  6. Now use the Select by Location tool (Vector ► Research Tools ► Select by location).

  7. Set up like this:

    ../../../_images/select_by_location.png
  8. Select features in new_solution that intersect features in suitable_terrain_continuous100m.shp.

    This is the result:

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

    The yellow buildings are selected. Although some of the buildings fall partly outside the new suitable_terrain_continuous100m layer, they lie well within the original suitable_terrain layer and therefore meet all of our requirements.

  9. Save the selection under exercise_data/residential_development/ as final_answer.shp.

Back to text

21.14. Results For WMS

21.14.1. basic Adding Another WMS Layer

Your map should look like this (you may need to re-order the layers):

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

Back to text

21.14.2. moderate Adding a New WMS Server

  • Use the same approach as before to add the new server and the appropriate layer as hosted on that server:

    ../../../_images/add_ogc_server.png
    ../../../_images/add_bluemarble_layer.png
  • If you zoom into the Swellendam area, you’ll notice that this dataset has a low resolution:

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

Therefore, it’s better not to use this data for the current map. The Blue Marble data is more suitable at global or national scales.

Back to text

21.14.3. moderate Finding a WMS Server

You may notice that many WMS servers are not always available. Sometimes this is temporary, sometimes it is permanent. An example of a WMS server that worked at the time of writing is the World Mineral Deposits WMS at http://apps1.gdr.nrcan.gc.ca/cgi-bin/worldmin_en-ca_ows. It does not require fees or have access constraints, and it is global. Therefore, it does satisfy the requirements. Keep in mind, however, that this is merely an example. There are many other WMS servers to choose from.

Back to text

21.15. Results For GRASS Integration

21.15.1. basic Add Layers to Mapset

You can add layers (both vector and raster) into a GRASS Mapset by drag and drop them in the Browser (see Follow Along: Load data using the QGIS Browser) or by using the v.in.gdal.qgis for vector and r.in.gdal.qgis for raster layers.

Back to text

21.15.2. moderate Reclassify raster layer

To discover the maximum value of the raster run the r.info tool: in the console you will see that the maximum value is 1699.

You are now ready to write the rules. Open a text editor and add the following rules:

0 thru 1000 = 1
1000 thru 1400 = 2
1400 thru 1699 = 3

save the file as a my_rules.txt file and close the text editor.

Run the r.reclass tool, choose the g_dem layer and load the file containing the rules you just have saved.

Click on Run and then on View Output. You can change the colors and the final result should look like the following picture:

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

Back to text

21.16. Results For Database Concepts

21.16.1. basic Address Table Properties

For our theoretical address table, we might want to store the following properties:

House Number
Street Name
Suburb Name
City Name
Postcode
Country

When creating the table to represent an address object, we would create columns to represent each of these properties and we would name them with SQL-compliant and possibly shortened names:

house_number
street_name
suburb
city
postcode
country

Back to text

21.16.2. basic Normalising the People Table

The major problem with the people table is that there is a single address field which contains a person’s entire address. Thinking about our theoretical address table earlier in this lesson, we know that an address is made up of many different properties. By storing all these properties in one field, we make it much harder to update and query our data. We therefore need to split the address field into the various properties. This would give us a table which has the following structure:

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

In the next section, you will learn about Foreign Key relationships which could be used in this example to further improve our database’s structure.

Back to text

21.16.3. moderate Further Normalisation of the People Table

Our people table currently looks like this:

id |     name     | house_no | street_id |  phone_no
---+--------------+----------+-----------+-------------
 1 | Horst Duster |        4 |         1 | 072 121 122

The street_id column represents a “one to many” relationship between the people object and the related street object, which is in the streets table.

One way to further normalise the table is to split the name field into first_name and last_name:

id | first_name | last_name  | house_no | street_id |  phone_no
---+------------+------------+----------+-----------+------------
 1 |    Horst   |   Duster   |     4    |     1     | 072 121 122

We can also create separate tables for the town or city name and country, linking them to our people table via “one to many” relationships:

id | first_name | last_name | house_no | street_id | town_id | country_id
---+------------+-----------+----------+-----------+---------+------------
 1 |    Horst   |   Duster  |     4    |     1     |    2    |     1

An ER Diagram to represent this would look like this:

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

Back to text

21.16.4. moderate Create a People Table

The SQL required to create the correct people table is:

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

The schema for the table (enter \d people) looks like this:

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

For illustration purposes, we have purposely omitted the fkey constraint.

Back to text

21.16.5. basic The DROP Command

The reason the DROP command would not work in this case is because the people table has a Foreign Key constraint to the streets table. This means that dropping (or deleting) the streets table would leave the people table with references to non-existent streets data.

Nota

It is possible to “force” the streets table to be deleted by using the CASCADE command, but this would also delete the people and any other table which had a relationship to the streets table. Use with caution!

Back to text

21.16.6. basic Insert a New Street

The SQL command you should use looks like this (you can replace the street name with a name of your choice):

insert into streets (name) values ('Low Road');

Back to text

21.16.7. moderate Add a New Person With Foreign Key Relationship

Here is the correct SQL statement:

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');

If you look at the streets table again (using a select statement as before), you’ll see that the id for the Main Road entry is 2.

That’s why we could merely enter the number 2 above. Even though we’re not seeing Main Road written out fully in the entry above, the database will be able to associate that with the street_id value of 2.

Nota

If you have already added a new street object, you might find that the new Main Road has an ID of 3 not 2.

Back to text

21.16.8. moderate Return Street Names

Here is the correct SQL statement you should use:

select count(people.name), streets.name
from people, streets
where people.street_id=streets.id
group by streets.name;

Result:

count |    name
------+-------------
    1 | Low Street
    2 | High street
    1 | Main Road
(3 rows)

Nota

You will notice that we have prefixed field names with table names (e.g. people.name and streets.name). This needs to be done whenever the field name is ambiguous (i.e. not unique across all tables in the database).

Back to text

21.17. Results For Spatial Queries

21.17.1. basic The Units Used in Spatial Queries

The units being used by the example query are degrees, because the CRS that the layer is using is WGS 84. This is a Geographic CRS, which means that its units are in degrees. A Projected CRS, like the UTM projections, is in meters.

Remember that when you write a query, you need to know which units the layer’s CRS is in. This will allow you to write a query that will return the results that you expect.

Back to text

21.17.2. basic Creating a Spatial Index

CREATE INDEX cities_geo_idx
  ON cities
  USING gist (the_geom);

Back to text

21.18. Results For Geometry Construction

21.18.1. moderate Creating Linestrings

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 Linking Tables

delete from people;
alter table people add column city_id int not null references cities(id);

(capture cities 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)');

If you’re getting the following error message:

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

then it means that while experimenting with creating polygons for the cities table, you must have deleted some of them and started over. Just check the entries in your cities table and use any id which exists.

Back to text

21.19. Results For Simple Feature Model

21.19.1. moderate Populating Tables

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 Populate the Geometry_Columns Table

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

Back to text

21.19.3. hard Adding Geometry

select people.name,
       streets.name as street_name,
       st_astext(people.the_geom) as geometry
from   streets, people
where  people.street_id=streets.id;

Result:

     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)

As you can see, our constraint allows nulls to be added into the database.

Back to text