Important
La traduction est le fruit d’un effort communautaire auquel vous pouvez vous joindre. Cette page est actuellement traduite à 100.00%.
16.2. Leçon : Modèle d’Entité Simple
Comment pouvons-nous stocker et représenter des entités géographique dans une base de données ? Dans cette leçon nous aborderons une seule approche: le Modèle d’Entité Simple défini par l’OGC.
Objectif de cette leçon: Apprendre à connaître et à utiliser le modèle SFS
16.2.1. Qu’est-ce-que l’OGC ?
L’OGC (Open Geospatial Consortium) est une organisation internationale bénévole d’élaboration de standards qui a été fondée en 1994. Au sein de l’OGC, plus de 370 organisations commerciales, gouvernementales, associatives et laboratoires de recherche à travers le monde participent au développement et à l’implémentation de standards pour les services et le contenu géospatial, le traitement de données SIG et les formats d’échange. - Wikipedia
16.2.2. Quel est le modèle SFS ?
Le Modèle Simple Feature for SQL et une méthode non topologique pour stocker de l’information spatiale dans une base de données. Il définit des fonctions pour accéder, faire des calculs et construire ces données.
Le modèle définit les données spatiales à partir des types Points, Linestring (polylignes) et Polygon (ainsi que leur aggrégation sous forme d’objets multiples).
Pour de plus amples informations, se référer au standard OGC Simple Feature for SQL.
16.2.3. Ajoutez un champ géométrique à la table
Ajoutons un champ de point à notre table de personnes:
alter table people add column the_geom geometry;
16.2.4. Ajoutez une contrainte basée sur le type de géométrie.
Vous pouvez remarquer que le type de champ « géométrie » n’indique pas explicitement de quel type de géométrie il s’agit. C’est pourquoi nous ajoutons une contrainte:
alter table people
add constraint people_geom_point_chk
check(st_geometrytype(the_geom) = 'ST_Point'::text
OR the_geom IS NULL);
Ce code ajoute une contrainte à la table de manière à ce qu’elle n’accepte que les géométries de points ou les valeurs vides.
16.2.5. ★★★ Essayez vous-même
Créez une nouvelle table appelée cities et donnez-lui des colonnes appropriées, incluant un champ de géométrie pour stocker des polygones (les limites administratives). Assurez-vous d’avoir une contrainte géométrique sur les polygones.
Réponse
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 );
16.2.6. Remplissez la table geometry_columns.
A ce stade, vous pouvez également ajouter une entrée dans la table geometry_columns:
insert into geometry_columns values
('','public','people','the_geom',2,4326,'POINT');
Pourquoi ? La colonne geometry_columns est utilisée par certaines applications pour savoir quelles sont les tables de la base de données qui contiennent des données géométriques.
Note
Si la commande INSERT retourne une erreur, lancez d’abord cette requête:
select * from geometry_columns;
Si la colonne f_table_name contient la valeur people, alors cette table a déjà été enregistré et vous n’avez rien à faire de plus.
La valeur 2
fait référence au nombre de dimensions; dans ce cas, deux: X et Y.
La valeur 4326 indique que la table utilise une projection WGS 84 qui est référencée par le numéro 4326 (référez-vous à la discussion précédente à propos des codes EPSG).
★☆☆ Essayez vous-même
Ajoutez une entrée dans la table geometry_columns pour la couche cities.
Réponse
insert into geometry_columns values
('','public','cities','the_geom',2,4326,'POLYGON');
16.2.7. Ajouter un enregistrement géométrique à la table en utilisant SQL
Maintenant que nos tables sont géométriquement adaptées, nous pouvons y stocker des géométries:
insert into people (name,house_no, street_id, phone_no, the_geom)
values ('Fault Towers',
34,
3,
'072 812 31 28',
'SRID=4326;POINT(33 -33)');
Note
Dans la nouvelle entrée ci-dessus, vous devez indiquer quelle projection (SRID) utiliser. Cette indication est obligatoire lorsqu’on enregistre un point à l’aide d’une chaîne de caractères qui n’ajoute pas automatiquement l’information de projection. Bien entendu, le nouveau point doit utiliser le même SRID que le jeu de données dans lequel il est ajouté et vous devez le spécifier.
Si à ce stade vous utilisez une interface graphique, l’indication de la projection de chaque point se ferait automatiquement. En d’autres termes, il n’y a généralement pas besoin d’ajouter la bonne projection à chaque point que vous voulez ajouter si vous avez déjà indiqué le SRID pour le jeu de données utilisé, comme nous l’avons fait auparavant.
C’est le bon moment pour ouvrir QGIS et tenter de visualiser la table people. De plus, nous pouvons essayer d’éditer/ajouter/supprimer des enregistrements et réaliser des requêtes sur la base de données pour visualiser comment la donnée est modifiée.
Pour charger une couche PostGIS dans QGIS, utilisez l’entrée de menu
ou la barre d’outils:Ce qui ouvrira la boîte de dialogue suivante:
Cliquez sur le bouton New pour ouvrir la boîte de dialogue suivante:
Définissez alors une nouvelle connexion, par exemple:
Name: myPG
Service:
Host: localhost
Port: 5432
Database: address
User:
Password:
Pour vérifier que QGIS trouve bien la base de données address et que votre compte/mot de passe sont corrects, cliquez sur Tester la connexion. Si ça fonctionne, cochez les cases après Enregistrer le nom de l’utilisateur et Enregistrer le mot de passe . Cliquez alors sur OK pour créer cette connexion.
Retournez dans la boîte de dialogue Ajouter une ou plusieurs tables PostGIS , cliquez sur Connecter et ajoutez les couches à votre projet comme d’habitude.
★★☆ Essayez vous-même
Elaborez une requête qui montre le nom de la personne, le nom de lrue et la position (depuis la colonne the_geom) au format texte.
Réponse
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 NULL à la base de données.
16.2.8. Conclusion
Vous avez vu comment ajouter des objets spatiaux à votre base de données et comment les visualiser dans un logiciel de SIG.
16.2.9. La suite ?
Dans la prochaine leçon, nous verrons comment importer et exporter des données de la base de données.