21. Feuille de réponses

21.1. Results For Ajout de votre première Couche

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

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

Retour au texte

21.2. Results For Un Aperçu de l’Interface

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

Retour au texte

21.2.2. basic Aperçu (Partie 2)

  1. Sauvegarder sous

  2. Zoom sur la couche

  3. Invert selection

  4. Rendu on/off

  5. Mesurer une longueur

Retour au texte

21.3. Results For Travailler avec les Données Vecteurs

21.3.1. basic Données Attributaires

  • Il devrait y avoir 9 champs dans la couche :guilabel:”rivières”.

    1. Sélectionnez la couche dans le panneau Couches.

    2. Faîtes un clic droit et choisissez Ouvrir la table attributaire, ou appuyez sur le bouton openTable sur la table attributaire.

    3. Comptez le nombre de colonnes.

    Astuce

    A quicker approach could be to double-click the rivers layer, open the Layer properties ‣ Fields tab, where you will find a numbered list of the table’s fields.

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

:ref:”Retour au texte<backlink-vector-explore-attribute-data>”

21.3.2. basic Chargement des données

Votre carte devrait avoir sept couches:

  • :guilabel:”aires_protegees”

  • places

  • rivers

  • roads

  • landuse

  • buildings (pris de training_data.gpkg) et

  • water (pris de exercise_data/shapefile).

Retour au texte

21.4. Results For Style

21.4.1. basic Couleurs

  • Vérifiez que les couleurs changent telles que vous l’escomptez.

  • C’est suffisant de sélectionner la couche water dans la légende puis de cliquer sur le bouton symbology Ouvrir le panneau de Style de Couche. Changer pour une couleur adaptée à la couche d’eau.

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

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.

Retour au texte

21.4.2. basic Structure des Symboles

Votre carte devrait maintenant ressembler à ça:

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

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.

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

Retour au texte

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

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

Retour au texte

21.4.4. moderate Niveaux de symboles

Pour obtenir le symbole requis, vous avez besoin de trois couches de symbole:

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

La couche de symbole du bas est une large ligne grise continue. Au sommet 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 :

  1. Vérifiez que vos niveaux de symboles ressemblent à quelque chose comme ça :

    ../../../_images/answer_road_symbol_levels.png
  2. Maintenant, votre carte devrait ressembler à ça:

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

Retour au texte

21.4.5. hard Niveaux de Symbole

  1. Ajustez vos niveaux de symbole avec ces valeurs :

    ../../../_images/answer_road_symbol_layers.png
  2. Essayez différentes valeurs afin d’obtenir différents résultats.

  3. Ouvrez à nouveau votre carte originale avant d’aborder l’exercice suivant.

Retour au texte

21.5. moderate Outline Markers

Voici des exemples de la structure des symboles:

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

Back to text

21.5.1. hard Générateur de symboles géométriques

  • Cliquez sur le bouton signPlus pour ajouter un autre niveau de Symbole.

  • Déplacez le nouveau symbole en bas de la liste en cliquant sur le bouton arrowDown.

  • Choisissez une couleur adaptée pour remplir les polygones d’eau.

  • Click on Marker of the Geometry generator symbology and change the circle with another shape as your wish.

  • Essayez d’expérimenter d’autres options pour obtenir des résultats plus utiles.

Retour au texte

21.6. Results For Données Attributaires

21.6.1. basic Données Attributaires

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 du moment que la plupart de vos lieux ont des noms.

Retour au texte

21.7. Results For Labels

21.7.1. moderate Paramétrage des étiquettes (Partie 1)

Your map should now show the marker points and the labels should be offset by 2mm. The style of the markers and labels should allow both to be clearly visible on the map:

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

Retour au texte

21.7.2. moderate Paramétrage des étiquettes (Partie 2)

Une solution possible aboutit à ce résultat final:

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

Pour arriver à ce résultat:

  • Use a font size of 10

  • Use an around point placement distance of 1.5 mm

  • Use a marker size of 3.0 mm

  • In addition, this example uses the Wrap on character option:

    ../../../_images/wrap_character_settings.png
  • Enter a space in this field and click Apply to achieve the same effect. In our case, some of the place names are very long, resulting in names with multiple lines which is not very user friendly. You might find this setting to be more appropriate for your map.

Retour au texte

21.7.3. hard Utiliser les Valeurs définies par des données

  1. Still in edit mode, set the FONT_SIZE values to whatever you prefer. The example uses 16 for towns, 14 for suburbs, 12 for localities, and 10 for hamlets.

  2. Remember to save changes and exit edit mode

  3. Return to the Text formatting options for the places layer and select FONT_SIZE in the Attribute field of the font size dataDefined data defined override dropdown:

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

    Vos résultats, en utilisant les valeurs ci-dessous, devraient être ceux-ci:

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

Retour au texte

21.8. Results For Classification

21.8.1. moderate Affiner la Classification

  • Utiliser la même méthode que dans le premier exercice de la leçon pour vous débarrasser des bordures:

    ../../../_images/gradient_map_no_pen.png

Les paramètres que vous avez utilisés pourraient ne pas être les mêmes mais, avec Classes = 6 et Mode = Ruptures Naturelles (Jenks) (et bien sûr, en utilisant les mêmes couleurs), la carte ressemblera à ça:

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

Retour au texte

21.9. Results For Création d’un Nouveau Jeu de Données Vectorielles

21.9.1. basic Numérisation

Le style importe peu, mais les résultats devraient plus ou moins ressembler à celui-ci:

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

Retour au texte

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

../../../_images/ring_tool_result.png
  • Annulez vos modifications avant d’entamer l’exercice du prochain outil.

Retour au texte

21.9.3. moderate Topologie: Outil Ajouter une Partie

  • Tout d’abord, sélectionner Bontebok National Park:

../../../_images/park_selected.png
  • Maintenant, ajoutez votre nouvelle partie:

../../../_images/new_park_area.png
  • Annulez vos modifications avant d’entamer l’exercice du prochain outil.

Retour au texte

21.9.4. hard 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 jeu de données différent, il est fort probable que le

OGC_FID de votre polygone d’origine ne soit pas de 1. Choisissez simplement l’entité qui a un OGC_FID.

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

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.

Retour au texte

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

    ../../../_images/value_map_settings.png
  • Click OK three times.

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

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

Retour au texte

21.10. Results For Analyse vectorielle

21.10.1. basic Distance des écoles secondaires

  • Votre boîte de dialogue du tampon devrait ressembler à cela :

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

    The Buffer distance is 1 kilometer.

  • The Segments to approximate value is set to 20. This is optional, but it’s recommended, because it makes the output buffers look smoother. Compare this:

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

    A cela :

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

The first image shows the buffer with the Segments to approximate value set to 5 and the second shows the value set to 20. In our example, the difference is subtle, but you can see that the buffer’s edges are smoother with the higher value.

Retour au texte

21.10.2. basic Distance des Restaurants

To create the new houses_restaurants_500m layer, we go through a two step process:

  • Premièrement, créez un tampon de 500m autour des restaurants et ajouter la couche à la carte.

    ../../../_images/restaurants_buffer.png ../../../_images/restaurants_buffer_result.png
  • Puis, extraire les bâtiments dans cette zone tampon :

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

Votre carte devrait maintenant montrer uniquement les bâtiments qui sont à 50m d’une route, 1km d’une école et 500m d’un restaurant :

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

Retour au texte

21.11. Results For Network Analysis

21.12. moderate Fastest path

Open Network Analysis ‣ Shortest Path (Point to Point) and fill the dialog as:

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

Make sure that the Path type to calculate is Fastest.

Cliquez sur :guilabel:”Run” et fermez la boîte de dialogue.

Open now the attribute table of the output layer. The cost field contains the travel time between the two points (as fraction of hours):

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

Back to text

21.13. Results For Analyse Raster

21.13.1. basic Calculer l’aspect

  • Set your Aspect dialog up like this:

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

Votre résultat:

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

Retour au texte

21.13.2. moderate Calcul de la pente (moins que 2 et 5 degrés)

  • Configurez votre boîte de dialogue Calculatrice Raster comme ceci :

    ../../../_images/answer_raster_calculator_slope.png
  • Pour la version à 5 degrés, remplacez le « 2 » dans l’expression et le nom du fichier avec « 5 ».

Vos résultats:

  • 2 degrés :

    ../../../_images/answer_2degree_result.png
  • 5 degrés :

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

Retour au texte

21.14. Results For Complément à l’Analyse

21.14.1. moderate Raster vers Vecteur

  • Open the Query Builder by right-clicking on the all_terrain layer in the Layers panel, and selecting the Properties ‣ Source tab.

  • Ensuite, créez 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 :

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

Retour au texte

21.14.2. moderate Contrôler les résultats

Vous pouvez remarquer que certains des bâtiments dans votre couche new_solution ont été « tranché » par l’outil Intersection. Cela montre que seule une partie du bâtiment - et donc qu’une partie de la propriété - repose sur un terrain approprié. Nous pouvons donc sensiblement éliminer ces bâtiments de notre jeu de données.

Retour au texte

21.14.3. moderate Affiner l’analyse

A ce stade, votre analyse devrait ressembler à peu près à ceci:

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

Considérez une aire circulaire, continue sur 100 mètres dans toutes les directions.

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

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.

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

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 à Vecteur ‣ Outils de géotraitement ‣ Tampon(s) pour ouvrir la fenêtre Tampon(s).

  • Définissez-le comme ceci:

    ../../../_images/suitable_terrain_buffer.png
  • Utilisez la couche suitable_terrain avec 10 segments et une distance tampon de -100. (La distance est automatiquement en mètres car votre carte utilise une projection CRS.)

  • Sauvegardez la sortie dans exercise_data/residential_development/ comme suitable_terrain_continuous100m.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 :

../../../_images/suitable_buffer_results.png
  • Maintenant, utilisez l’outil Sélection par localisation (Vecteur ‣ Outils de recherche ‣ Sélection par localisation).

  • Configurez comme suit :

    ../../../_images/select_by_location.png
  • Sélectionnez les entités de new_solution qui croisent les entités de suitable_terrain_continuous100m.shp.

Voici le résultat:

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

Les bâtiments jaunes sont sélectionnés. Bien que certains des bâtiments soient en partie à l’extérieur de la nouvelle couche suitable_terrain_continuous100m, ils se trouvent bien dans la couche d’origine suitable_terrain et répondent donc à toutes nos exigences.

  • Sauvegardez la sélection sous exercise_data/residential_development/ comme final_answer.shp.

Retour au texte

21.15. Results For WMS

21.15.1. basic Ajout d’une autre couche WMS

Votre carte devrait ressembler à ceci (vous aurez peut-être besoin de réorganiser vos couches):

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

Retour au texte

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

    ../../../_images/add_ogc_server.png ../../../_images/add_bluemarble_layer.png
  • Si vous zoomez sur la zone Swellendam, vous remarquerez que ce jeu de données a une basse résolution :

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

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ée à une échelle globale ou nationale.

Retour au texte

21.15.3. moderate Trouver un serveur WMS

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.

Retour au texte

21.16. Results For GRASS Integration

21.16.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.16.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.

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.

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

:ref:”Retour au texte <backlink-grass_reclass>”

21.17. Results For Concepts de bases de données

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

Retour au texte

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

Retour au texte

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

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

Retour au texte

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

Retour au texte

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

Retour au texte

21.17.6. basic Insérer une nouvelle rue

La commande SQL que vous devez utiliser ressemble à cela (vous pouvez remplace le nom de la rue avec un nom de votre choix) :

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

Retour au texte

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

Retour au texte

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

Retour au texte

21.18. Results For Requêtes Spatiales

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

Retour au texte

21.18.2. basic Création d’un Index Spatial

CREATE INDEX cities_geo_idx
  ON cities
  USING gist (the_geom);

Retour au texte

21.19. Results For Construction géométrique

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

Retour au texte

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

Retour au texte

21.20. Results For Modèle d’Entité Simple

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

Retour au texte

21.20.2. moderate Remplir la table Geometry_Columns

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

Retour au texte

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

Retour au texte