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/spatial_relationships.rst @ 22

Revision 22, 9.1 KB checked in by djay, 13 years ago (diff)

Traduction de la section 11

RevLine 
[1]1.. _spatial_relationships:
2
[22]3Partie 10 : relations spatiales
[1]4=================================
5
[22]6Jusqu'à maintenant nous n'avons utilisé que des fonctions qui permettent de mesurer (:command:`ST_Area`, :command:`ST_Length`), de serialiser (:command:`ST_GeomFromText`) ou désérialiser (:command:`ST_AsGML`) des géométries. Ces fonctions ont en commun de fonctionner uniquement sur une géométrie à la fois.
[1]7
[22]8Les base de données spatiales sont puissantes car elle ne font pas que stoquer les géométries, elle ont aussi la faculté de vérifier les *relations entre les géométries*.
[1]9
[22]10Pour les questions comme "Quel est le plus proche garage à vélo prêt du park ?" ou "Ou est l'intersection du métros avec telle rue ?" nous devrons comparer les géométries représentant les garage à vélo, les rues et les lignes de métros.
[1]11
[22]12Le standard de l'OGC définit l'ensemble suivant de fonctions pour comparer les géométries.
[1]13
14ST_Equals
15---------
16 
[22]17:command:`ST_Equals(geometry A, geometry B)` test l'égalité spatiale de deux géométries.
[1]18
19.. figure:: ./spatial_relationships/st_equals.png
20   :align: center
21
[22]22ST_Equals retourne TRUE si les deux géométries sont du même type, ont des coordonnées x.y identiques.
[1]23
[22]24PremiÚrement, essayons de récupérer la représentation d'un point de notre table ``nyc_subway_stations``. Nous ne prendrons que l'entrée : 'Broad St'.
[1]25
26.. code-block:: sql
27
28  SELECT name, the_geom, ST_AsText(the_geom)
29  FROM nyc_subway_stations
30  WHERE name = 'Broad St';             
31
32::
33
34     name   |                      the_geom                      |      st_astext
35  ----------+----------------------------------------------------+-----------------------
36   Broad St | 0101000020266900000EEBD4CF27CF2141BC17D69516315141 | POINT(583571 4506714)
37 
[22]38Maintenant, copiez / collez la valeur afficher pour tester la fonction :command:`ST_Equals`:
[1]39
40.. code-block:: sql
41
42  SELECT name
43  FROM nyc_subway_stations
44  WHERE ST_Equals(the_geom, '0101000020266900000EEBD4CF27CF2141BC17D69516315141');
45
46::
47
48   Broad St
49
50.. note::
51
[22]52  La représentation du point n'est pas vraiment compréhensible (``0101000020266900000EEBD4CF27CF2141BC17D69516315141``) mais c'est exactement la représentation des coordonnées. Pour tester l'égalité, utiliser ce format est nécessaire.
[1]53
54
[22]55ST_Intersects, ST_Disjoint, ST_Crosses et ST_Overlaps
[1]56------------------------------------------------------
57
[22]58:command:`ST_Intersects`, :command:`ST_Crosses`, et :command:`ST_Overlaps` test si l'intérieur des géométries s'intersect, se croise ou se chevauche.
[1]59
60.. figure:: ./spatial_relationships/st_intersects.png
61   :align: center
62
[22]63:command:`ST_Intersects(geometry A, geometry B)` retourne t (TRUE) si l'intersection ne rénvoit pas un ensemble vide de résultats. Intersects retourne le résultat exactement inverse de la fonction disjoint.
[1]64
65.. figure:: ./spatial_relationships/st_disjoint.png
66   :align: center
67
[22]68L'opposé de ST_Intersects est :command:`ST_Disjoint(geometry A , geometry B)`. Si deux géométries sont disjointes, elle ne s'intersectent pas et vice-versa. En fait, il est souvent plus éfficace de tester si deux géométries ne s'intersectent pas que de tester si elles sont dijointes du fait que le test d'intersection peut être spatialement indexé alors que le test disjoint ne le peut pas.
[1]69
70.. figure:: ./spatial_relationships/st_crosses.png 
71   :align: center
72
[22]73Pour les comparaisons de couples de types multipoint/polygon, multipoint/linestring, linestring/linestring, linestring/polygon, et linestring/multipolygon, :command:`ST_Crosses(geometry A, geometry B)` retourne t (TRUE) si les résultats de l'intersection
74
[1]75For multipoint/polygon, multipoint/linestring, linestring/linestring, linestring/polygon, and linestring/multipolygon comparisons, :command:`ST_Crosses(geometry A, geometry B)` returns t (TRUE) if the intersection results in a geometry whose dimension is one less than the maximum dimension of the two source geometries and the intersection set is interior to both source geometries.
76
77.. figure:: ./spatial_relationships/st_overlaps.png
78   :align: center
79
[22]80:command:`ST_Overlaps(geometry A, geometry B)` compare deux géométries de même dimension et retourne TRUE si leur intersection est une géométrie différente des deux fournies mais de même dimension.
[1]81
[22]82Essayons de prendre la station de métro de Broad Street et de déterminer sont voisinage en utilisant la fonction :command:`ST_Intersects` :
[1]83
84.. code-block:: sql
85
86  SELECT name, boroname
87  FROM nyc_neighborhoods
88  WHERE ST_Intersects(the_geom, '0101000020266900000EEBD4CF27CF2141BC17D69516315141');
89
90::
91
92          name        | boroname 
93  --------------------+-----------
94   Financial District | Manhattan
95
96
97
98ST_Touches
99----------
100
[22]101:command:`ST_Touches` test si deux géométries se touchent en leur contour extérieur, mais leur contours intérieur ne s'intersectent pas
[1]102
103.. figure:: ./spatial_relationships/st_touches.png
104   :align: center
105
[22]106:command:`ST_Touches(geometry A, geometry B)` retourn TRUE soit si les contours des géométries s'intersectent ou si l'un des contours intérieur de l'une intersecte le contour extérieur de l'autre.
[1]107
[22]108ST_Within et ST_Contains
[1]109-------------------------
110
[22]111:command:`ST_Within` et :command:`ST_Contains` test si une géométrie est totalement incluse dans l'autre.
[1]112
113.. figure:: ./spatial_relationships/st_within.png
114   :align: center
115   
[22]116:command:`ST_Within(geometry A , geometry B)` retourne TRUE si la premiÚre géométries est complÚtement contenue dans l'autre. ST_Within test l'exact opposé au résultat de ST_Contains. 
[1]117
[22]118:command:`ST_Contains(geometry A, geometry B)` retourne TRUE si la seconde géométries est complÚtement contenue dans la premiÚre géométrie.
[1]119
120
[22]121ST_Distance et ST_DWithin
[1]122--------------------------
123
[22]124Une question qui arrive fréquemment dans le domaine du SIG est "trouver tout les trucs qui se trouve à une distance X de cet autre truc".
[1]125
[22]126La fonction :command:`ST_Distance(geometry A, geometry B)` calcule la *plus courte* distance entre deux géoémétries. Cela est pratique pour récupérer la distance entre les objets.
[1]127
128.. code-block:: sql
129
130  SELECT ST_Distance(
131    ST_GeometryFromText('POINT(0 5)'),
132    ST_GeometryFromText('LINESTRING(-2 2, 2 2)'));
133
134::
135
136  3
137
[22]138Pour tester si deux obets sont à la même distance d'un autre, la fonction :command:`ST_DWithin` fournit une test tirant proffit des indexes. Cela est trÚs utile pour répondre au questions du genre : "Combien d'arbre se situe dans un buffer de 500 mÚtres autour de cette route ?". Vous n'avez pas à calculer le buffer, vous avez simplement besoin de tester la distance entre les géométries.
[1]139
140  .. figure:: ./spatial_relationships/st_dwithin.png
141     :align: center
142   
[22]143En utilisant de nouveau notre station de métros Broad Street, nous pouvons trouver les rues voisines (à 10 mÚtres de) de la station :
[1]144
145.. code-block:: sql
146
147  SELECT name
148  FROM nyc_streets
149  WHERE ST_DWithin(
150          the_geom,
151          '0101000020266900000EEBD4CF27CF2141BC17D69516315141',
152          10
153        );
154
155:: 
156
157       name     
158  --------------
159     Wall St
160     Broad St
161     Nassau St
162
[22]163Nous pouvons vérifier la réponse sur une carte. La station Broad St est actuellement à l'intersection des rues Wall, Broad et Nassau.
[1]164
165.. image:: ./spatial_relationships/broad_st.jpg
166
[22]167Liste des fonctions
168-------------------
[1]169
[22]170`ST_Contains(geometry A, geometry B) <http://postgis.org/docs/ST_Contains.html>`_ : retourne TRUE si aucun des points de B n'est à l'extérieur de A, et au moins un point de l'intérieur de B est à l'intérieur de A.
[1]171
[22]172`ST_Crosses(geometry A, geometry B)  <http://postgis.org/docs/ST_Crosses.html>`_ : retourne TRUE si la géométrie A a certains, mais pas la totalité de, ses points à l'intérieur de B.
[1]173
[22]174`ST_Disjoint(geometry A , geometry B) <http://postgis.org/docs/ST_Disjoint.html>`_ : retourne TRUE si les gémétries nes s'intersectent pas - elles n'ont aucun point en commun.
[1]175
[22]176`ST_Distance(geometry A, geometry B)  <http://postgis.org/docs/ST_Distance.html>`_ : retourne la distance cartésienne en 2 dimensions minimum entre deux géométries dans l'unité de la projection.
[1]177
[22]178`ST_DWithin(geometry A, geometry B, radius) <http://postgis.org/docs/ST_DWithin.html>`_ : retourne TRUE si les géométries sont distante (radius) l'une de l'autre.
[1]179
[22]180`ST_Equals(geometry A, geometry B) <http://postgis.org/docs/ST_Equals.html>`_ : retourn TRUE si les géométries fournis représentent la même géométrie. L'ordre des entités n'est pas prit en compte.
[1]181
[22]182`ST_Intersects(geometry A, geometry B) <http://postgis.org/docs/ST_Intersects.html>`_ : retourne TRUE si les géométries s'intersectent - (ont un espace en commun) et FALSE si elles n'en ont pas (elles sont disjointes).
[1]183
[22]184`ST_Overlaps(geometry A, geometry B) <http://postgis.org/docs/ST_Overlaps.html>`_ : retourne TRUE si les géométries ont un espace en commun, sont de la même dimension, mais ne sont pas complÚtement contenu l'une dans l'autre.
[1]185
[22]186`ST_Touches(geometry A, geometry B)  <http://postgis.org/docs/ST_Touches.html>`_ : retourne TRUE si les géométries ont au moins un point en commun, mais leur intérieurs ne s'intersectent pas.
[1]187
[22]188`ST_Within(geometry A , geometry B) <http://postgis.org/docs/ST_Within.html>`_ : retourne TRUE si la géométrie A est complÚtement à l'intérieur de B
[1]189
190
191
Note: See TracBrowser for help on using the repository browser.