21. Feuille de réponses
21.1. Results For Un Aperçu de l’Interface
21.1.1. Aperçu (Partie 1)
Reportez-vous à l’image montrant l’agencement de l’interface et vérifiez que vous vous souvenez des noms et fonctions des éléments de l’écran.
21.1.2. Aperçu (Partie 2)
Sauvegarder sous
Zoom sur la couche
Inverser la sélection
Rendu on/off
Mesurer une longueur
21.2. Results For Ajout de votre première Couche
21.2.1. Préparation
Dans la zone principale de la boîte de dialogue, vous devriez voir de nombreuses formes avec des couleurs différentes. Chaque forme appartient à une couche que vous pouvez identifier par sa couleur dans le panneau de gauche (vos couleurs peuvent être différentes de celles ci-dessous) :
21.2.2. Chargement des données
Votre carte devrait avoir sept couches:
aires_protegees
places
rivers
roads
landuse
buildings (pris de
training_data.gpkg
) etwater (pris de
exercise_data/shapefile
).
21.3. Results For Style
21.3.1. Couleurs
Vérifiez que les couleurs changent telles que vous l’escomptez.
Il suffit de sélectionner la couche water dans la légende puis de cliquer sur le bouton Ouvrir le panneau de Style de Couche. Changer pour une couleur adaptée à la couche d’eau.
Note
Si vous souhaitez travailler sur une seule couche à la fois et ne pas être perturbé par d’autres couches, vous pouvez cacher le contenu de ces couches en cliquant sur la case à cocher à côté du nom dans la liste des couches. Si la case est vide, alors la couche ne sera pas affichée.
21.3.2. Structure des Symboles
Votre carte devrait maintenant ressembler à ça:
Si vous êtes un utilisateur débutant, vous pouvez vous arrêter ici.
Utilisez la méthode ci-dessus pour modifier les couleurs et les styles pour toutes les couches restantes.
Essayez d’utiliser des couleurs naturelles selon les objets. Par exemple, une route ne devrait pas être rouge ou bleue, mais peut être en gris ou en noir.
Faites vos propres essais avec les différents paramètres de Style de remplissage et Style de trait pour les polygones.
21.3.3. Couches de Symbole
Personnalisez votre couche buildings comme vous le voulez, mais souvenez-vous qu’il doit être facile de distinguer les différentes couches de la carte.
Voici un exemple:
21.3.4. Niveaux de symboles
Pour obtenir le symbole requis, vous avez besoin de trois couches de symbole:
La couche de symbole du bas est une large ligne grise continue. Au dessus de celle-ci, il y a une ligne jaune continue et légèrement plus fine et finalement une autre ligne noire continue plus fine.
Si vos couches de symboles ressemblent à celles ci-dessus mais que vous n’obtenez pas les résultats que vous voulez :
Vérifiez que vos niveaux de symboles ressemblent à quelque chose comme ça :
Maintenant, votre carte devrait ressembler à ça:
21.3.5. Niveaux de Symbole
Ajustez vos niveaux de symbole avec ces valeurs :
Essayez différentes valeurs afin d’obtenir différents résultats.
Ouvrez à nouveau votre carte originale avant d’aborder l’exercice suivant.
21.4. Marqueurs de contour
Voici des exemples de la structure des symboles:
21.4.1. Générateur de symboles géométriques
Cliquez sur le bouton pour ajouter un autre niveau de Symbole.
Déplacez le nouveau symbole en bas de la liste en cliquant sur le bouton .
Choisissez une couleur adaptée pour remplir les polygones d’eau.
Cliquez sur Marker de la symbologie du générateur de géométrie et changez le cercle avec une autre forme selon votre souhait.
Essayez d’expérimenter d’autres options pour obtenir des résultats plus utiles.
21.5. Attribut de données vectorielles
21.5.1. Exploration des attributs de données vectorielles
Il devrait y avoir 9 champs dans la couche rivières.
Sélectionnez la couche dans le panneau Couches.
Faîtes un clic droit et choisissez Ouvrir la table attributaire, ou appuyez sur le bouton sur la table attributaire.
Comptez le nombre de colonnes.
Astuce
Une approche plus rapide pourrait être de double-cliquer sur la couche rivers, d’ouvrir l’onglet , où vous trouverez une liste numérotée des champs de la table.
L’information sur les villes est disponible dans la couche places . Ouvrez la table attributaire comme vous l’avez fait pour la couche rivers : il y a deux entités dont l’attribut place est fixé à
town
: Swellendam et Buffeljagsrivier. Vous pouvez ajouter un commentaire sur les autres champs depuis ces deux enregistrements si vous le souhaitez.Le champ “nom” est le plus utile pour afficher les étiquettes. Ceci est dû au fait que toutes ses valeurs sont uniques à chacun des objets et peu susceptibles de contenir la valeur NULL. Si vos données contiennent des valeurs NULL, ne vous inquiétez pas pour le moment tant que la plupart de vos lieux ont des noms.
21.6. Results For Labels
21.6.1. Paramétrage des étiquettes (Partie 1)
Votre carte devrait maintenant montrer les points de repère et les étiquettes devraient être décalées de 2 mm. Le style des marqueurs et des étiquettes doit permettre aux deux d’être clairement visibles sur la carte :
21.6.2. Paramétrage des étiquettes (Partie 2)
Une solution possible aboutit à ce résultat final:
Pour arriver à ce résultat:
Utilisez une taille de police de « 10 ».
Utilisez une distance de placement de point autour de « 1,5 mm ».
Utilisez un marqueur d’une taille de « 3,0 mm ».
En outre, cet exemple utilise l’option Découper sur le caractère :
Entrez un « espace » dans ce champ et cliquez sur appliquer pour obtenir le même effet. Dans notre cas, certains des noms de lieux sont très longs, ce qui donne des noms à plusieurs lignes, ce qui n’est pas très convivial. Vous trouverez peut-être ce réglage plus approprié pour votre carte.
21.6.3. Utiliser les Valeurs définies par des données
Toujours en mode édition, réglez les valeurs de « FONT_SIZE » sur ce que vous préférez. L’exemple utilise « 16 » pour les villes, « 14 » pour les banlieues, « 12 » pour les localités, et « 10 » pour les hameaux.
N’oubliez pas de sauvegarder les modifications et de quitter le mode édition
Revenez aux options de formatage de Texte pour la couche
places
et sélectionnezFONT_SIZE
dans le champ Attribut de la liste déroulante de remplacement de la taille de police définie à partir d’un attribut :Vos résultats, en utilisant les valeurs ci-dessous, devraient être ceux-ci:
21.7. Results For Classification
21.7.1. Affiner la Classification
Les paramètres que vous avez utilisés ne sont peut-être pas les mêmes, mais avec les valeurs Classes = 6
et Mode = Natural Breaks (Jenks) (et en utilisant les mêmes couleurs, bien sûr), la carte ressemblera à ceci :
21.8. Results For Création d’un Nouveau Jeu de Données Vectorielles
21.8.1. Numérisation
Le style importe peu, mais les résultats devraient plus ou moins ressembler à celui-ci:
21.8.2. Topologie: Outil Ajouter un Anneau
La forme exacte importe peu, mais vous devriez obtenir un trou au centre de votre entité, comme sur celle-ci:
Annulez vos modifications avant d’entamer l’exercice du prochain outil.
21.8.3. Topologie: Outil Ajouter une Partie
Tout d’abord, sélectionner Bontebok National Park:
Maintenant, ajoutez votre nouvelle partie:
Annulez vos modifications avant d’entamer l’exercice du prochain outil.
21.8.4. Fusionner les entités
Utilisez l’outil Fusionner les entités sélectionnées en vous assurant d’avoir au préalable sélectionné les deux polygones que vous souhaitez fusionner.
Utilisez l’entité avec le OGC_FID de 1 comme la source de vos attributs (cliquez sur son entrée dans la boîte de dialogue, puis cliquez sur le bouton Prendre les attributs de l’entité sélectionnée) :
Note
Si vous utilisez un ensemble de données différent, il est fort probable que OGC_FID de votre polygone d’origine ne sera pas 1
. Choisissez simplement l’entité qui a un OGC_FID.
Note
Utiliser l’outil Fusionner les attributs des entités sélectionnées conservera les géométries distinctes mais leur affecte les mêmes attributs.
21.8.5. Formulaires
Pour le TYPE, il y a de toute évidence un nombre maximum de types de voies, et si vous regardez la table attributaire de cette couche, vous verrez qu’ils sont prédéfinis.
Mettez l’outil sur Valeur de carte et cliquez sur Charger les données depuis la couche.
Sélectionnez routes dans le menu déroulant Couche et autoroute pour les options Valeur et Description :
Cliquez trois fois sur OK.
Si vous utilisez maintenant l’outil Identifier sur une rue pendant que le mode d’édition est activé, la boîte de dialogue que vous obtenez ressemble à ceci :
21.9. Results For Analyse vectorielle
21.9.1. Distance des écoles secondaires
Votre boîte de dialogue du tampon devrait ressembler à cela :
La Distance tampon est 1 kilomètre.
La valeur de segment à approximer est fixée à 20. C’est optionnel, mais c’est recommandé, car cela rend les tampons de sortie plus lisses. Comparez ceci :
A cela :
La première image montre le tampon avec la valeur approximative segment à approximer fixée à 5 et la seconde montre la valeur fixée à 20. Dans notre exemple, la différence est subtile, mais vous pouvez voir que les bords du tampon sont plus lisses avec la valeur la plus élevée.
21.9.2. Distance des Restaurants
Pour créer la nouvelle couche houses_restaurants_500m, nous passons par un processus en deux étapes :
Premièrement, créez un tampon de 500m autour des restaurants et ajouter la couche à la carte.
Puis, extraire les bâtiments dans cette zone tampon :
Votre carte devrait maintenant montrer uniquement les bâtiments qui sont à 50m d’une route, 1km d’une école et 500m d’un restaurant :
21.10. Results For Analyse de réseau
21.11. Chemin le plus rapide
Ouvrez
et remplissez le dialogue comme :Assurez-vous que le type de chemin à calculer est « le plus rapide ».
Cliquez sur Run et fermez la boîte de dialogue.
Ouvrez maintenant la table d’attributs de la couche de sortie. Le champ coût contient le temps de parcours entre les deux points (en fraction d’heures) :
21.12. Results For Analyse Raster
21.12.1. Calculer l’aspect
Configurez votre dialogue Aspect comme suit :
Votre résultat:
21.12.2. Calcul de la pente (moins que 2 et 5 degrés)
Configurez votre boîte de dialogue Calculatrice Raster avec :
l’expression suivante :
slope@1 <= 2
la couche
slope
comme Couche(s) de référence
Pour la version à 5 degrés, remplacez le
2
dans l’expression et le nom du fichier par5
.
Vos résultats:
2 degrés :
5 degrés :
21.13. Results For Complément à l’Analyse
21.13.1. Raster vers Vecteur
Ouvrez le Constructeur requête en faisant un clic droit sur la couche all_terrain dans le panneau Couches, et en sélectionnant l’onglet .
Ensuite, construisez la requête
"suitable" = 1
.Cliquez sur OK pour filtrer tous les polygones où cette condition n’est pas respectée.
Lorsqu’on regarde sur le raster d’origine, les zones doivent se chevaucher parfaitement :
Vous pouvez sauvegarder cette couche en faisant un clic droit sur la couche all_terrain dans le panneau Couches et en choisissant Sauvegarder sous …, puis continuez selon les instructions.
21.13.2. Contrôler les résultats
Vous pouvez remarquer que certains des bâtiments de votre couche new_solution
ont été « découpés » par l’outil Intersection. Cela montre que seule une partie du bâtiment - et donc seulement une partie de la propriété - se trouve sur un terrain approprié. Nous pouvons donc raisonnablement éliminer ces bâtiments de notre ensemble de données.
21.13.3. Affiner l’analyse
A ce stade, votre analyse devrait ressembler à peu près à ceci:
Considérez une aire circulaire, continue sur 100 mètres dans toutes les directions.
Si elle dispose d’un rayon de plus de 100m, retirer 100m de sa taille (dans toutes les directions) résultera dans l’apparition d’une partie restant au milieu.
Vous pouvez donc lancer un tampon intérieur de 100m dans la couche vecteur suitable_terrain. Dans la sortie de la fonction de tampon, tout ce qui restera de la couche originelle représentera les surfaces disposant de plus de 100m autour.
Pour le démontrer:
Allez à
pour ouvrir la fenêtre Tampon(s).Définissez-le comme ceci:
Utilisez la couche suitable_terrain avec des segments de
10
et une distance tampon de-100
. (La distance est automatiquement en mètres car votre carte utilise un CRS projeté).Enregistrez le résultat dans
exercise_data/residential_development/
soussuitable_terrain_continu100m.shp
.Si nécessaire, déplacez la nouvelle couche au-dessus de votre couche d’origine suitable_terrain.
Votre résultat ressemblera à peu près à ceci :
Maintenant, utilisez l’outil Sélection par localisation ( ).
Configurez comme suit :
Sélectionnez les entités de new_solution qui croisent les entités de suitable_terrain_continuous100m.shp.
Voici le résultat:
Les bâtiments jaunes sont sélectionnés. Bien que certains des bâtiments se situent en partie en dehors de la nouvelle couche suitable_terrain_continous100 m, ils se situent bien à l’intérieur de la couche suitable_terrain originale et répondent donc à toutes nos exigences.
Enregistrez la sélection sous
exercise_data/residential_development/
sousfinal_answer.shp
.
21.14. Results For WMS
21.14.1. Ajout d’une autre couche WMS
Votre carte devrait ressembler à ceci (vous aurez peut-être besoin de réorganiser vos couches):
21.14.2. Ajout d’un Nouveau Serveur WMS
Utilisez la même approche qu’avant pour ajouter le nouveau serveur et la couche appropriée comme hébergée sur ce serveur :
Si vous zoomez sur la zone Swellendam, vous remarquerez que ce jeu de données a une basse résolution :
Par conséquent, il est préférable de ne pas utiliser ces données pour la carte actuelle. Les données Blue Marble sont plus adaptées à une échelle mondiale ou nationale.
21.14.3. Trouver un serveur WMS
Vous remarquerez peut-être que de nombreux serveurs WMS ne sont pas toujours disponibles. Parfois c’est temporaire, parfois c’est permanent. Le serveur WMS World Mineral Deposits WMS à l’adresse http://apps1.gdr.nrcan.gc.ca/cgi-bin/worldmin_en-ca_ows est un exemple de serveur WMS qui fonctionnait au moment de la rédaction du présent document. Il ne nécessite pas de frais ou de contraintes d’accès, et il est mondial. Par conséquent, il satisfait aux exigences. Gardez toutefois à l’esprit qu’il ne s’agit là que d’un exemple. Il existe de nombreux autres serveurs WMS parmi lesquels vous pouvez choisir.
21.15. Results For GRASS Integration
21.15.1. Ajouter une couche au mapset
Vous pouvez ajouter des couches (à la fois vecteur et raster) dans un jeu de cartes GRASS en les glissant et en les déposant dans le navigateur (voir Follow Along: Load data using the QGIS Browser) ou en utilisant le v.in.gdal.qgis
pour les couches vecteur et le r.in.gdal.qgis
pour les couches raster.
21.15.2. Reclassification couche raster
Pour découvrir la valeur maximale du raster, lancez l’outil r.info : dans la console, vous verrez que la valeur maximale est de 1699.
Vous êtes maintenant prêt à écrire les règles. Ouvrez un éditeur de texte et ajouter les règles suivantes:
0 thru 1000 = 1
1000 thru 1400 = 2
1400 thru 1699 = 3
enregistrer le fichier comme un fichier « my_rule.txt » et fermez l’éditeur de texte.
Lancez l’outil r.reclass, choisissez la couche g_dem et chargez le fichier contenant les règles que vous venez de sauvegarder.
Cliquez sur Execute et ensuite sur Voir le résultat. Vous pouvez changer les couleurs et le résultat final devrait ressembler à l’image suivante :
21.16. Results For Concepts de bases de données
21.16.1. Propriétés de la table d’adresses
Pour notre table d’adresses théorique, nous pourrions stocker les propriétés suivantes :
House Number
Street Name
Suburb Name
City Name
Postcode
Country
Lors de la création de la table qui représentera les objets adresse, nous allons créer des colonnes qui représentent chacune de ces propriétés et nous allons les nommer avec des noms courts conformes au SQL:
house_number
street_name
suburb
city
postcode
country
21.16.2. Normalisation de la table Personne
Le problème principal avec la table people est qu’elle contient un seul champ adresse qui enregistre l’adresse complète d’une personne. En pensant à la table address étudiée précédemment, nous savons qu’une adresse est composée de plusieurs éléments. En stockant ces éléments dans un seul champ, il sera plus complexe de mettre à jour et de requêter nos données. Nous devons donc séparer le champ adresse en autant d’éléments que nécessaire. Cela nous donnera une table avec la structure suivante:
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
Note
Dans la prochaine section, vous étudierez les relations basées sur les clefs étrangères qui peuvent s’appliquer à cet exemple pour améliorer la structure de notre base de données.
21.16.3. Normalisation avancée de la table People
Notre table people ressemble actuellement à ceci:
id | name | house_no | street_id | phone_no
---+--------------+----------+-----------+-------------
1 | Horst Duster | 4 | 1 | 072 121 122
La colonne street_id représenter une relation “un à plusieurs” entre les objets people et l’objet lié street qui est stocké dans la table streets.
Un moyen d’améliorer la normalisation de la table est de séparer le champ de nom en deux: first_name et last_name:
id | first_name | last_name | house_no | street_id | phone_no
---+------------+------------+----------+-----------+------------
1 | Horst | Duster | 4 | 1 | 072 121 122
Nous pouvons également créer des tables séparées pour le nom des villes ou des villages et pour le nom des pays en les liant à notre table people via une relation “un à plusieurs”:
id | first_name | last_name | house_no | street_id | town_id | country_id
---+------------+-----------+----------+-----------+---------+------------
1 | Horst | Duster | 4 | 1 | 2 | 1
Un diagramme ER pour représenter cela devrait ressembler à ça :
21.16.4. Créer une table People
Voici la requête SQL pour créer une table de personnes correcte:
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 );
Le schéma de la table (entrez \d people) ressemble à ceci
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)
Note
Pour des questions d’affichage, nous avons délibérément omis la contrainte de clef étrangère.
21.16.5. La commande DROP
La raison pour laquelle la commande DROP ne fonctionne pas dans ce cas est parce que la table people dispose d’une contrainte de clef étrangère vers la table streets. Cela signifie que détruire (ou supprimer des enregistrements dans) la table streets laisserait des entrées de la table people qui pointeraient vers des références non existantes de la table streets.
Note
Il est possible de “forcer” la suppression d’enregistrements dans la table streets en utilisant la commande CASCADE. Néanmoins, cela supprimerait également des enregistrements dans la table people et toute autre table qui disposerait d’une relation avec la table streets. A utiliser avec précaution !
21.16.6. Insérer une nouvelle rue
La commande SQL que vous devez utiliser ressemble à cela (vous pouvez remplacer le nom de la rue avec un nom de votre choix) :
insert into streets (name) values ('Low Road');
21.16.7. Ajouter une nouvelle personne avec une relation de clef étrangère
Voici la syntaxe SQL correcte à utiliser :
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');
Si vous regardez à nouveau dans la table des rues (en utilisant une déclaration de sélection comme avant), vous verrez que l”id pour l’entrée Main Road est 2.
C’est pourquoi nous pouvons seulement saisir le numéro 2 ci-dessus. Même si nous ne voyons pas le terme Main Road écrit complètement dans la requête précédente, la base de données sera capable de l’associer avec le champ street_id ayant une valeur de 2.
Note
Si vous avez déjà ajouté un nouvel objet street, vous pourriez trouver que le nouveau Main Road a un identifiant à 3 et non à 2.
21.16.8. Renvoyer les noms des rues
Voici la syntaxe SQL correcte à utiliser:
select count(people.name), streets.name
from people, streets
where people.street_id=streets.id
group by streets.name;
Résultat:
count | name
------+-------------
1 | Low Street
2 | High street
1 | Main Road
(3 rows)
Note
Vous avez noté que nous avons préfixé les noms des champs avec les noms des tables (ex: people.name et streets.name). Il est nécessaire de le faire lorsque les noms des champs sont ambigus (c’est-à-dire que plusieurs tables ont les mêmes noms de champs dans la base de données).
21.17. Results For Requêtes Spatiales
21.17.1. Les Unités utilisées dans les requêtes spatiales
Les unités utilisées dans l’exemple de requête sont des degrés, car le SCR utilisé pour la couche est WGS 84. C’est un SCR géographique, ce qui signifie que ses unités sont en degrés. Un SCR projeté, comme les projections UTM, est en mètres.
Souvenez-vous que lorsque vous écrivez une requête, vous avez besoin de savoir quelles unités le SCR de la couche utilise. Cela vous permettra d’écrire une requête qui retournera le résultat que vous attendez.
21.17.2. Création d’un Index Spatial
CREATE INDEX cities_geo_idx
ON cities
USING gist (the_geom);
21.18. Results For Construction géométrique
21.18.1. Création de polylignes
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. Lier des tables
delete from people;
alter table people add column city_id int not null references cities(id);
(Capturer les villes dans 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)');
Si vous obtenez le message d’erreur suivant:
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".
cela indique que lors de votre expérimentation de création de polygones pour la table des villes, vous avez dû en supprimer quelques-uns. Vérifiez les enregistrements de votre table de ville et utiliser un id qui existe.
21.19. Results For Modèle d’Entité Simple
21.19.1. Remplir les 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 );
21.19.2. Remplir la table Geometry_Columns
insert into geometry_columns values
('','public','cities','the_geom',2,4326,'POLYGON');
21.19.3. Ajouter une géométrie
select people.name,
streets.name as street_name,
st_astext(people.the_geom) as geometry
from streets, people
where people.street_id=streets.id;
Résultat:
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)
Comme vous pouvez le voir, notre contrainte autorise l’ajout de valeurs nulles dans la base de données.