Bienvenue sur PostGIS.fr

Bienvenue sur PostGIS.fr , le site de la communauté des utilisateurs francophones de PostGIS.

PostGIS ajoute le support d'objets géographique à la base de données PostgreSQL. En effet, PostGIS "spatialise" le serverur PostgreSQL, ce qui permet de l'utiliser comme une base de données SIG.

Maintenu à jour, en fonction de nos disponibilités et des diverses sorties des outils que nous testons, nous vous proposons l'ensemble de nos travaux publiés en langue française.

source: trunk/workshop-foss4g/geometries.rst @ 19

Revision 19, 19.4 KB checked in by djay, 13 years ago (diff)

Ajouter quelques traductions.

Partie 8 : les géometries

System Message: WARNING/2 (<string>, line 4)

Title underline too short.

Partie 8 : les géometries
=====================

Introduction

Dans :ref:`une partie précédente<loading_data>` nous avons charger différentes données. Avant de commencer à jouer avec, commençons par regarder quelques exemples simples. Depuis pgAdmin, choisissez encore la base de donnée nyc et ouvrez l'outils de requêtage SQL. Copiez cette exemple de code SQL (aprÚs avoir supprimer le contenu présent défaut si nécessaire) puis exécutez-le.

System Message: ERROR/3 (<string>, line 9); backlink

Unknown interpreted text role "ref".
CREATE TABLE geometries (name varchar, geom geometry);
INSERT INTO geometries VALUES
  ('Point', 'POINT(0 0)'),
  ('Linestring', 'LINESTRING(0 0, 1 1, 2 1, 2 2)'),
  ('Polygon', 'POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))'),
  ('PolygonWithHole', 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(1 1, 1 2, 2 2, 2 1, 1 1))'),
  ('Collection', 'GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0, 1 0, 1 1, 0 1, 0 0)))');
SELECT Populate_Geometry_Columns();
SELECT name, ST_AsText(geom) FROM geometries;
./geometries/start01.png

L'exemple ci-dessus créé une table (geometries) puis y insert cinq géométries : un point, une ligne, un polygone, un polygone avec un trou, et une collection. Au final, les lignes insérées sont sélectionnées et affichées dans le tableau de sortie.

Les tables de métadonnées

System Message: WARNING/2 (<string>, line 31)

Title underline too short.

Les tables de métadonnées
-------------------------

Dans le respect de la spécification Simple Features for SQL (:term:`SFSQL`), PostGIS fournit deux tables pour récupérer et s'informer sur les types de géométries disponibles dans une base de données spécifique.

System Message: ERROR/3 (<string>, line 33); backlink

Unknown interpreted text role "term".
  • La premiÚre table, spatial_ref_sys, définit tout les systÚme de projection connu de la base de données et sera décrite plus en détals plus tard.
  • La seconde table, geometry_columns, fournit une liste de toutes les "entités" (définit comme un objet avec un attribut géométrique) et les détails de base relatives à ces entités.
./geometries/table01.png

Dans l'exemple founit en introduction, la fonction :command:`Populate_Geometry_Columns()` détecte toute les colonnes de la base de données qui contiennent des géométries et met à jour la table geometry_columns pour y inclure leurs références.

System Message: ERROR/3 (<string>, line 40); backlink

Unknown interpreted text role "command".

Regardons maintenant table geometry_columns de notre base de données. Copiez cette commande dans la fenêtre de requêtage :

SELECT * FROM geometry_columns;
./geometries/start08.png
  • f_table_catalog, f_table_schema, et f_table_name fournissent le nom complet de la table contenant une géométrie donnée. Étant donné que PostgreSQL n'utilise pas de catalogues, f_table_catalog est toujouts vide.
  • f_geometry_column est le nom de la colonne qui contient la géométrie -- pour les tables ayant plusieurs colonnes géométriques, il y a un enregistrement dans cette table pour chacune.
  • coord_dimension et srid définissent respectivement la dimension de la géométrie (en 2-, 3- or 4-dimensions) et le systÚme de références spatiales qui fait référence à la table spatial_ref_sys.
  • La colonne type définit le type de géométrie comme décrit plus tÃŽt, nous avons déjà vu les points et les lignes.

En interrogeant cette table, les clients SIG et les libraires peuvent déterminer quoi attendre lors de la récupration des données et peuvent réaliser les opération de reprojection, transformation ou rendu sans avoir a inspecter chaque géométrie.

Réprésenter des objets du mode réel

System Message: WARNING/2 (<string>, line 59)

Title underline too short.

Réprésenter des objets du mode réel
-----------------------------------

La spécification Simple Features for SQL (:term:`SFSQL`), le standard ayant guidé le développement de PostGIS, définit comment les objets du monde réel doivent être représentés. En considérant une forme continue à une seule résolution fixe, nous obtenu un piÚtre représentation des objets. SFSQL considÚre uniquement les représentations en 2 dimensions. PostGIS a étendu cela en ajoutant les représentation en 3 et 4 dimensions, plus récemment la spécification SQL-Multimedia Part 3 (:term:`SQL/MM`) a officiellement définit sa propre représenation.

System Message: ERROR/3 (<string>, line 61); backlink

Unknown interpreted text role "term".

System Message: ERROR/3 (<string>, line 61); backlink

Unknown interpreted text role "term".

Notre table exemple contient différents types de géométries Nous pouvons récupérer les informations de chaque objets en utilisant les fonctions qui lisent les métadonnées de la géométrie.

SELECT name, ST_GeometryType(geom), ST_NDims(geom), ST_SRID(geom)
  FROM geometries;
      name       |    st_geometrytype    | st_ndims | st_srid
-----------------+-----------------------+----------+---------
 Point           | ST_Point              |        2 |      -1
 Polygon         | ST_Polygon            |        2 |      -1
 PolygonWithHole | ST_Polygon            |        2 |      -1
 Collection      | ST_GeometryCollection |        2 |      -1
 Linestring      | ST_LineString         |        2 |      -1

Les points

./introduction/points.png

Un point spatiale représente une localisation unique sur la Terre. Ce point est représenté par une seule coordonnée (incluant soit 2, 3 ou 4 dimensions). Les points sont utilisés pour représenter des objets lorsque le détails exact du contour n'est pas important à une échelle donnée. Par exemple, les villes sur une carte du monde pourraient être décrite sous la forme de points alors qu'une carte régionale utiliserait une représentation polygonale des villes.

SELECT ST_AsText(geom)
  FROM geometries
  WHERE name = 'Point';
POINT(0 0)

Ceraints des fonctions spécifiques pour travailler avec les points sont :

Donc, nous pouvons lire les coordonnées d'un point de la maniÚre suivante :

SELECT ST_X(geom), ST_Y(geom)
  FROM geometries
  WHERE name = 'Point';

La table des stations de métros de la ville de New York (nyc_subway_stations) est un ensemble de données représenté sous la forme de points. La requête SQL suivante reverra la géométrie associée à un point (dans la colonne :command:`ST_AsText`).

System Message: ERROR/3 (<string>, line 117); backlink

Unknown interpreted text role "command".
SELECT name, ST_AsText(the_geom)
  FROM nyc_subway_stations
  LIMIT 1;

Les lignes

./introduction/lines.png

Une ligne est un chemin entre plusieurs points. Elle prend la forme d'un tableay ordonné de deux (ou plus) points. Les routes et les riviÚres sont tipyquement représenté sous la forme de lignes. Une ligne est dire fermée si elle commence et se fini en un même point. Elle est dite simple si elle ne se coupe pas ni se touche elle-même (sauf à ses extrémités si elle est fermée). Une ligne peut être à la fois fermée et simple.

Le réseau des rues de New York (nyc_streets) a été chargé plus tÎt. Cet ensemble de données contient les détails comme le nom et le type. Une rue du monde réelle pourrait être constituée de plusieurs lignes, chacune représentant une file de la avec différents attributs.

La requête SQL suivante retourne la géométrie associée à une ligne (dans la colonne :command:`ST_AsText`) :

System Message: ERROR/3 (<string>, line 136); backlink

Unknown interpreted text role "command".
SELECT ST_AsText(geom)
  FROM geometries
  WHERE name = 'Linestring';
LINESTRING(0 0, 1 1, 2 1, 2 2)

Les fonctions spatiales permettant de travailler avec les lignes sont les suivantes :

Donc, la longueur de notre ligne est :

SELECT ST_Length(geom)
  FROM geometries
  WHERE name = 'Linestring';
3.41421356237309

Les polygones

./introduction/polygons.png

Un polygone est représenté comme une zone. Le contour externe du polygone est représenté par une ligne simple et fermée. Les trous sont représenté de la même maniÚre.

Les polygones sont utiliser pour représenter les objets dont les tailles et la forme sont importants. Les limites de villes, les parks, les batiments ou les cours d'eau sont habituellement représenté par des polygones lorsque l'échelle est suffisament élevée pour voir distinguer leurs zones. Les routes et les riviÚres peuvent parfois être représenté comme des polygones.

La requête SQL suivante retournera la géométrie associée à un polygon (dans la colonne :command:`ST_AsText`).

System Message: ERROR/3 (<string>, line 178); backlink

Unknown interpreted text role "command".
SELECT ST_AsText(geom)
  FROM geometries
  WHERE name LIKE 'Polygon%';

Note

PlutÎt que d'utiliser le signe = dans notre clause WHERE, nous avons utilisé l'opérateur LIKE pour pouvoir définir notre comparaison. Vous auriez sans doute voulu utiliser le symbole * pour exprimer "n'importe quelle valeur" mais en SQL vous devez utiliser : % et l'opérateur LIKE pour informer le systÚme que cette comparaison doit être possible.

POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))
POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(1 1, 1 2, 2 2, 2 1, 1 1))

Le premier polygon a seulement une ligne. Le second a un "trou". La plupart des systÚmes de rendu graphique supportent le concept de "polygone", mais les systÚme SIG sont les seuls a accepter que les polygones puisse contenir des trous.

./screenshots/polygons.png

Certaines des fonctions spatiales spécifique de traitement des polygones sont :

Nous pouvons calculer l'aire de nos polygones en utilisant la fonction area :

SELECT name, ST_Area(geom)
  FROM geometries
  WHERE name LIKE 'Polygon%';
Polygon            1
PolygonWithHole    99

Remarquez que le polygone contenant un trou a une aire égale à l'aire du contour externe (un carré de 10 sur 10) moins l'aire du trou (un carré de 1 sur 1).

Les collections

Il y a quatre types de collections, qui regroupe ensembles plusieurs géométries simples.

  • MultiPoint, une collection de points
  • MultiLineString, une collection de lignes
  • MultiPolygon, une collection de polygones
  • GeometryCollection, une collections hétérogÚne de n'importe quelle géométrie (dont d'autre collections)

Les collections sont un concept présents dans les logiciels SIG plus que dans les application de rendu graphique générique. Elles sont utiles pour directement modeler les objets du monde réel comme des objet spatiaux. Par exemple, comment modéliser une parcelle qui é coupée par un chemin ? Comme un MultiPolygon, ayant une partie de chaque coté du chemin.

./screenshots/collection2.png

Notre collection exemple contient un polygon et un point :

SELECT name, ST_AsText(geom)
  FROM geometries
  WHERE name = 'Collection';
GEOMETRYCOLLECTION(POINT(2 0),POLYGON((0 0, 1 0, 1 1, 0 1, 0 0)))
./screenshots/collection.png

Certaines des fonctions spatiales spécifiques à la manipulation des collections sont :

Entré / Sortie des géométries

System Message: WARNING/2 (<string>, line 260)

Title underline too short.

Entré / Sortie des géométries
-----------------------------

Within the database, geometries are stored on disk in a format only used by the PostGIS program. In order for external programs to insert and retrieve useful geometries, they need to be converted into a format that other applications can understand. Fortunately, PostGIS supports emitting and consuming geometries in a large number of formats:

The following SQL query shows an example of :term:`WKB` representation (the call to :command:`encode()` is required to convert the binary output into an ASCII form for printing):

System Message: ERROR/3 (<string>, line 294); backlink

Unknown interpreted text role "term".

System Message: ERROR/3 (<string>, line 294); backlink

Unknown interpreted text role "command".
SELECT encode(
  ST_AsBinary(ST_GeometryFromText('LINESTRING(0 0 0,1 0 0,1 1 2)')),
  'hex');
./geometries/represent-04.png

For the purposes of this workshop we will continue to use WKT to ensure you can read and understand the geometries we're viewing. However, most actual processes, such as viewing data in a GIS application, transferring data to a web service, or processing data remotely, WKB is the format of choice.

Since WKT and WKB were defined in the :term:`SFSQL` specification, they do not handle 3- or 4-dimensional geometries. For these cases PostGIS has defined the Extended Well Known Text (EWKT) and Extended Well Known Binary (EWKB) formats. These provide the same formatting capabilities of WKT and WKB with the added dimensionality.

System Message: ERROR/3 (<string>, line 306); backlink

Unknown interpreted text role "term".

Here is an example of a 3D linestring in WKT:

SELECT ST_AsEWKT(ST_GeometryFromText('LINESTRING(0 0 0,1 0 0,1 1 2)'));
./geometries/represent-05.png
SELECT encode(ST_AsEWKB(ST_GeometryFromText(
    'LINESTRING(0 0 0,1 0 0,1 1 2)')), 'hex');
./geometries/represent-06.png

In addition to emitters for the various forms (WKT, WKB, GML, KML, JSON, SVG), PostGIS also has consumers for four (WKT, WKB, GML, KML). Most applications use the WKT or WKB geometry creation functions, but the others work too. Here's an example that consumes GML and output JSON:

SELECT ST_AsGeoJSON(ST_GeomFromGML('<gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point>'));
./geometries/represent-07.png

Function List

Populate_Geometry_Columns: Ensures geometry columns have appropriate spatial constraints and exist in the geometry_columns table..

ST_Area: Returns the area of the surface if it is a polygon or multi-polygon. For "geometry" type area is in SRID units. For "geography" area is in square meters.

ST_AsText: Returns the Well-Known Text (WKT) representation of the geometry/geography without SRID metadata.

ST_AsBinary: Returns the Well-Known Binary (WKB) representation of the geometry/geography without SRID meta data.

ST_EndPoint: Returns the last point of a LINESTRING geometry as a POINT.

ST_AsEWKB: Returns the Well-Known Binary (WKB) representation of the geometry with SRID meta data.

ST_AsEWKT: Returns the Well-Known Text (WKT) representation of the geometry with SRID meta data.

ST_AsGeoJSON: Returns the geometry as a GeoJSON element.

ST_AsGML: Returns the geometry as a GML version 2 or 3 element.

ST_AsKML: Returns the geometry as a KML element. Several variants. Default version=2, default precision=15.

ST_AsSVG: Returns a Geometry in SVG path data given a geometry or geography object.

ST_ExteriorRing: Returns a line string representing the exterior ring of the POLYGON geometry. Return NULL if the geometry is not a polygon. Will not work with MULTIPOLYGON

ST_GeometryN: Returns the 1-based Nth geometry if the geometry is a GEOMETRYCOLLECTION, MULTIPOINT, MULTILINESTRING, MULTICURVE or MULTIPOLYGON. Otherwise, return NULL.

ST_GeomFromGML: Takes as input GML representation of geometry and outputs a PostGIS geometry object.

ST_GeomFromKML: Takes as input KML representation of geometry and outputs a PostGIS geometry object

ST_GeomFromText: Returns a specified ST_Geometry value from Well-Known Text representation (WKT).

ST_GeomFromWKB: Creates a geometry instance from a Well-Known Binary geometry representation (WKB) and optional SRID.

ST_GeometryType: Returns the geometry type of the ST_Geometry value.

ST_InteriorRingN: Returns the Nth interior linestring ring of the polygon geometry. Return NULL if the geometry is not a polygon or the given N is out of range.

ST_Length: Returns the 2d length of the geometry if it is a linestring or multilinestring. geometry are in units of spatial reference and geography are in meters (default spheroid)

ST_NDims: Returns coordinate dimension of the geometry as a small int. Values are: 2,3 or 4.

ST_NPoints: Returns the number of points (vertexes) in a geometry.

ST_NRings: If the geometry is a polygon or multi-polygon returns the number of rings.

ST_NumGeometries: If geometry is a GEOMETRYCOLLECTION (or MULTI*) returns the number of geometries, otherwise return NULL.

ST_Perimeter: Returns the length measurement of the boundary of an ST_Surface or ST_MultiSurface value. (Polygon, Multipolygon)

ST_SRID: Returns the spatial reference identifier for the ST_Geometry as defined in spatial_ref_sys table.

ST_StartPoint: Returns the first point of a LINESTRING geometry as a POINT.

ST_X: Returns the X coordinate of the point, or NULL if not available. Input must be a point.

ST_Y: Returns the Y coordinate of the point, or NULL if not available. Input must be a point.

Note: See TracBrowser for help on using the repository browser.