Changeset 62 for trunk/workshop-foss4g/spatial_relationships.rst
- Timestamp:
- 17/03/2012 00:49:40 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/workshop-foss4g/spatial_relationships.rst
r47 r62 2 2 3 3 Partie 10 : Les relations spatiales 4 ================================= 4 =================================== 5 5 6 6 Jusqu'à présent, nous avons utilisé uniquement des fonctions qui permettent de mesurer (:command:`ST_Area`, :command:`ST_Length`), de sérialiser (:command:`ST_GeomFromText`) ou désérialiser (:command:`ST_AsGML`) des géométries. Ces fonctions sont toutes utilisées sur une géométrie à la fois. … … 8 8 Les base de données spatiales sont puissantes car elle ne se contentent pas de stocker les géométries, elle peuvent aussi vérifier les *relations entre les géométries*. 9 9 10 Pour les questions comme "Quel est le plus proche garage à vélo prà ªt du parc ?" ou "Ou est l'intersection du métro avec telle rue ?", nous devrons comparer les géométries représentant les garageà vélo, les rues et les lignes de métro.10 Pour les questions comme "Quel est le plus proche garage à vélo prÚs du parc ?" ou "Ou est l'intersection du métro avec telle rue ?", nous devrons comparer les géométries représentant les garages à vélo, les rues et les lignes de métro. 11 11 12 Le standard de l'OGC définit l'ensemble de fonctions suivant pour comparer les géométries.12 Le standard de l'OGC définit l'ensemble de fonctions suivantes pour comparer les géométries. 13 13 14 14 ST_Equals 15 15 --------- 16 17 :command:`ST_Equals(geometry A, geometry B)` teste l'égalité spatiale de deux géométries. 16 17 :command:`ST_Equals(geometry A, geometry B)` teste l'égalité spatiale de deux géométries. 18 18 19 19 .. figure:: ./spatial_relationships/st_equals.png … … 27 27 28 28 SELECT name, the_geom, ST_AsText(the_geom) 29 FROM nyc_subway_stations 30 WHERE name = 'Broad St'; 29 FROM nyc_subway_stations 30 WHERE name = 'Broad St'; 31 31 32 32 :: … … 35 35 ----------+----------------------------------------------------+----------------------- 36 36 Broad St | 0101000020266900000EEBD4CF27CF2141BC17D69516315141 | POINT(583571 4506714) 37 37 38 38 Maintenant, copiez / collez la valeur affichée pour tester la fonction :command:`ST_Equals`: 39 39 40 40 .. code-block:: sql 41 41 42 SELECT name 43 FROM nyc_subway_stations 42 SELECT name 43 FROM nyc_subway_stations 44 44 WHERE ST_Equals(the_geom, '0101000020266900000EEBD4CF27CF2141BC17D69516315141'); 45 45 … … 61 61 :align: center 62 62 63 :command:`ST_Intersects(geometry A, geometry B)` retourne t (TRUE) si l'intersection ne renvoi tpas un ensemble vide de résultats. Intersects retourne le résultat exactement inverse de la fonction disjoint.63 :command:`ST_Intersects(geometry A, geometry B)` retourne t (TRUE) si l'intersection ne renvoie pas un ensemble vide de résultats. Intersects retourne le résultat exactement inverse de la fonction disjoint. 64 64 65 65 .. figure:: ./spatial_relationships/st_disjoint.png 66 66 :align: center 67 67 68 L'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.68 L'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 efficace de tester si deux géométries ne s'intersectent pas que de tester si elles sont disjointes du fait que le test d'intersection peut être spatialement indexé alors que le test disjoint ne le peut pas. 69 69 70 .. figure:: ./spatial_relationships/st_crosses.png 70 .. figure:: ./spatial_relationships/st_crosses.png 71 71 :align: center 72 72 … … 78 78 :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. 79 79 80 Essayons de prendre la station de métro de Broad Street et de déterminer son tvoisinage en utilisant la fonction :command:`ST_Intersects` :80 Essayons de prendre la station de métro de Broad Street et de déterminer son voisinage en utilisant la fonction :command:`ST_Intersects` : 81 81 82 82 .. code-block:: sql 83 83 84 SELECT name, boroname 84 SELECT name, boroname 85 85 FROM nyc_neighborhoods 86 86 WHERE ST_Intersects(the_geom, '0101000020266900000EEBD4CF27CF2141BC17D69516315141'); … … 88 88 :: 89 89 90 name | boroname 90 name | boroname 91 91 --------------------+----------- 92 92 Financial District | Manhattan … … 102 102 :align: center 103 103 104 :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érieurs de l'une intersecte le contour extérieur de l'autre.104 :command:`ST_Touches(geometry A, geometry B)` retourne TRUE soit si les contours des géométries s'intersectent ou si l'un des contours intérieurs de l'une intersecte le contour extérieur de l'autre. 105 105 106 106 ST_Within et ST_Contains 107 107 ------------------------- 108 108 109 :command:`ST_Within` et :command:`ST_Contains` test si une géométrie est totalement incluse dans l'autre.109 :command:`ST_Within` et :command:`ST_Contains` teste si une géométrie est totalement incluse dans l'autre. 110 110 111 111 .. figure:: ./spatial_relationships/st_within.png 112 112 :align: center 113 114 :command:`ST_Within(geometry A , geometry B)` retourne TRUE si la premiÚre géométrie est complÚtement contenue dans l'autre. ST_Within test l'exact opposé au résultat de ST_Contains.113 114 :command:`ST_Within(geometry A , geometry B)` retourne TRUE si la premiÚre géométrie est complÚtement contenue dans l'autre. ST_Within teste l'exact opposé au résultat de ST_Contains. 115 115 116 116 :command:`ST_Contains(geometry A, geometry B)` retourne TRUE si la seconde géométrie est complÚtement contenue dans la premiÚre géométrie. … … 120 120 -------------------------- 121 121 122 Une question fréquente dans le domaine du SIG est "trouver tou tles éléments qui se trouvent à une distance X de cet autre élément".122 Une question fréquente dans le domaine du SIG est "trouver tous les éléments qui se trouvent à une distance X de cet autre élément". 123 123 124 124 La fonction :command:`ST_Distance(geometry A, geometry B)` calcule la *plus courte* distance entre deux géométries. Cela est pratique pour récupérer la distance entre les objets. … … 134 134 3 135 135 136 Pour tester si deux objets sont à la même distance d'un autre, la fonction :command:`ST_DWithin` fournit un test tirant profit des index es. Cela est trÚs utile pour répondre a une question telle que: "Combien d'arbrese situent 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.136 Pour tester si deux objets sont à la même distance d'un autre, la fonction :command:`ST_DWithin` fournit un test tirant profit des index. Cela est trÚs utile pour répondre a une question telle que: "Combien d'arbres se situent 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. 137 137 138 138 .. figure:: ./spatial_relationships/st_dwithin.png 139 139 :align: center 140 140 141 141 En utilisant de nouveau notre station de métro Broad Street, nous pouvons trouver les rues voisines (à 10 mÚtres de) de la station : 142 142 143 143 .. code-block:: sql 144 144 145 SELECT name 146 FROM nyc_streets 145 SELECT name 146 FROM nyc_streets 147 147 WHERE ST_DWithin( 148 the_geom, 149 '0101000020266900000EEBD4CF27CF2141BC17D69516315141', 148 the_geom, 149 '0101000020266900000EEBD4CF27CF2141BC17D69516315141', 150 150 10 151 151 ); 152 152 153 :: 153 :: 154 154 155 name 155 name 156 156 -------------- 157 157 Wall St … … 159 159 Nassau St 160 160 161 Nous pouvons vérifier la réponse sur une carte. La station Broad St est actuellement à l'intersection des rues Wall, Broad et Nassau. 161 Nous pouvons vérifier la réponse sur une carte. La station Broad St est actuellement à l'intersection des rues Wall, Broad et Nassau. 162 162 163 163 .. image:: ./spatial_relationships/broad_st.jpg … … 170 170 `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. 171 171 172 `ST_Disjoint(geometry A , geometry B) <http://postgis.org/docs/ST_Disjoint.html>`_ : retourne TRUE si les gé métries ness'intersectent pas - elles n'ont aucun point en commun.172 `ST_Disjoint(geometry A , geometry B) <http://postgis.org/docs/ST_Disjoint.html>`_ : retourne TRUE si les géométries ne s'intersectent pas - elles n'ont aucun point en commun. 173 173 174 `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. 174 `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. 175 175 176 `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. 176 `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. 177 177 178 `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 priten compte.178 `ST_Equals(geometry A, geometry B) <http://postgis.org/docs/ST_Equals.html>`_ : retourne TRUE si les géométries fournies représentent la même géométrie. L'ordre des entités n'est pas pris en compte. 179 179 180 `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). 180 `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). 181 181 182 182 `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 contenues l'une dans l'autre. … … 186 186 `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 187 187 188 189
Note: See TracChangeset
for help on using the changeset viewer.