Important
La traduction est le fruit d’un effort communautaire auquel vous pouvez vous joindre. Cette page est actuellement traduite à 80.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).
For further information, have a look at the OGC Simple Feature for SQL standard.
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 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(geom) = 'ST_Point'::text
OR 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
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','geom',2,4326,'POINT');
Why? geometry_columns is used by certain applications to be aware of
which tables in the database contain geometry data.
Note
Si la commande INSERT retourne une erreur, lancez d’abord cette requête:
select * from geometry_columns;
If the column f_table_name contains the value people, then
this table has already been registered and you don’t need to do anything
more.
La valeur 2 fait référence au nombre de dimensions; dans ce cas, deux: X et Y.
The value 4326 refers to the projection we are using; in this case, WGS
84, which is referred to by the number 4326 (refer to the earlier discussion
about the EPSG).
★☆☆ Essayez vous-même
Add an appropriate geometry_columns entry for your new cities layer
Réponse
insert into geometry_columns values
('','public','cities','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, 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.
Now is probably a good time to open QGIS and try to view your people
table. Also, we should try editing / adding / deleting records and then
performing select queries in the database to see how the data has changed.
To load a PostgreSQL layer in QGIS, use the menu option or toolbar button:
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:
To see whether QGIS has found the address database and that your
username and password are correct, click Test Connect. If it works,
check the boxes next to Save Username and Save Password.
Then click OK to create this connection.
Back in the Add PostgreSQL Layers dialog, click Connect and add layers to your project as usual.
★★☆ Essayez vous-même
Formulate a query that shows a person’s name, street name and position (from the geom column) as plain text.
Réponse
select people.name,
streets.name as street_name,
st_astext(people.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.
