Outdated version of the documentation. Find the latest one here.

16.2. Lesson: 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.

../../../_images/ogc_sfs.png

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 plus di’nformations, consultez le 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. Try Yourself hard

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.

Vérifiez vos résultats

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;

If the column :kbd:`f_table_name` contains the value :kbd:`people`, then
this table has already been registered and you don't need to do anything
more.

La valeur 2 indique le nombre de dimensions; dans notre 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).

16.2.6.1. Try Yourself basic

Ajoutez une entrée dans la table geometry_columns pour la couche cities.

Vérifiez vos résultats

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 Couche ‣ Ajouter une couche PostGIS ou la barre d’outils:

mActionAddPostgisLayer

Ce qui ouvrira la boîte de dialogue suivante:

../../../_images/add_postgis_layer_dialog.png

Cliquez sur le bouton New pour ouvrir la boîte de dialogue suivante:

../../../_images/new_postgis_connection.png

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.

16.2.7.1. Try Yourself moderate

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.

Vérifiez vos résultats

16.2.8. In 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. What’s Next?

Dans la prochaine leçon, nous verrons comment importer et exporter des données de la base de données.