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/equality.rst @ 60

Revision 52, 4.4 KB checked in by djay, 13 years ago (diff)

Traduction de la partie égalité

RevLine 
[1]1.. _equality:
2
[52]3Partie 22 : Égalité
[1]4=================================
5
[52]6Égalité
[1]7--------
8
[52]9Être en mesure de déterminer si deux geométries sont égales peut être compliqué. PostGIS met à votre disposition différentes fonctions permettant de juger de l'égalité à différents niveaux, bien que pour des raison de simplicité nous nuos contenterons ici de la définition fournie plus bas. Pour illustrer ces fonctions, nous utiliseront les polygones suivants.
[1]10
11.. image:: ./equality/polygon-table.png
12
[52]13Ces polygones sont charger à l'aide des commandes suivantes.
[1]14
15.. code-block:: sql
16
17  CREATE TABLE polygons (name varchar, poly geometry);
18 
19  INSERT INTO polygons VALUES
20    ('Polygon 1', 'POLYGON((-1 1.732,1 1.732,2 0,1 -1.732,
21        -1 -1.732,-2 0,-1 1.732))'),
22    ('Polygon 2', 'POLYGON((-1 1.732,-2 0,-1 -1.732,1 -1.732,
23        2 0,1 1.732,-1 1.732))'),
24    ('Polygon 3', 'POLYGON((1 -1.732,2 0,1 1.732,-1 1.732,
25        -2 0,-1 -1.732,1 -1.732))'),
26    ('Polygon 4', 'POLYGON((-1 1.732,0 1.732, 1 1.732,1.5 0.866,
27        2 0,1.5 -0.866,1 -1.732,0 -1.732,-1 -1.732,-1.5 -0.866,
28        -2 0,-1.5 0.866,-1 1.732))'),
29    ('Polygon 5', 'POLYGON((-2 -1.732,2 -1.732,2 1.732,
30        -2 1.732,-2 -1.732))');
31       
32   SELECT Populate_Geometry_Columns();
33
34.. image:: ./equality/start13.png
35
[52]36Exactement égaux
37^^^^^^^^^^^^^^^^^^
[1]38
[52]39L'égalité exacte est déterminée en comparant deux géométries, sommets par sommets, dans l'ordre, pour s'assurer que chacun est à une position identique. Les exemples suivant montrent comment cette méthode peut être limitée dans son éfficacité.
[1]40
41.. code-block:: sql
42
43  SELECT a.name, b.name, CASE WHEN ST_OrderingEquals(a.poly, b.poly)
44      THEN 'Exactly Equal' ELSE 'Not Exactly Equal' end
45    FROM polygons as a, polygons as b;
46
47.. image:: ./equality/start14.png
48
[52]49Dans cette exemple, les polygones sont seulement égaux à eux-même, mais jamais avec un des autres polygones (dans notre exemple les polygones de 1 à 3). Dans le cas des polygones 1, 2 et 3, les sommets sont à des position identiques mais sont définies dans un ordre différent. Le polygone 4 a des sommets en double causant la non-égalité avec le polygone 1.
[1]50
[52]51Spatiallement égaux
[1]52^^^^^^^^^^^^^^^
53
[52]54Comme nous l'avons précédemment, l'égalité exacte ne prend pas en compte la nature spatiale des géométries. Il y a une fonction, nommée :command:`ST_Equals`, permettant de tester l'égalité spatiale ou l'équivalent des géométries.
[1]55
56.. code-block:: sql
57
58  SELECT a.name, b.name, CASE WHEN ST_Equals(a.poly, b.poly)
59      THEN 'Spatially Equal' ELSE 'Not Equal' end
60    FROM polygons as a, polygons as b;
61
62.. image:: ./equality/start15.png
63
[52]64Ces résultats sont plus proches de notre compréhension intuitive de l'égalité. Les polygones de 1 à 4 sont cosidérés comme égaux, puisque qu'elles recouvrent la même zone. Notez que ni la direction despolygones n'est considérée, le point de départ pour la définition du polygone, ni le nombre de points. Ce qui importe c'est que la zone géographique représentée est la même.
[1]65
[52]66Égalité des étendues
67^^^^^^^^^^^^^^^^^^^^^
[1]68
[52]69L'égalité exacte nécessite, dans le pire des cas, de comparer chaqu'un  des sommets d'une géométrie pour déterminé l'égalité. Ceci peut être trÚs lent, et s'avérer innaproprié pour comparer un grand nombre de géométries. Pour permettre de rendre plus rapide ces comparaison, l'opération d'égalité des étendue est fournit :  :command:`=`. Cet opérateur utilise uniquement les étendues (cadre limite rectangulaire), assurant que les géométries occupent le même espace dans un repÚre cartésien en deux dimensions, mais ne représente pas nécessairement le même espace.
[1]70
71.. code-block:: sql
72
73  SELECT a.name, b.name, CASE WHEN a.poly = b.poly
74      THEN 'Equal Bounds' ELSE 'Non-equal Bounds' end
75    FROM polygons as a, polygons as b;
76
77.. image:: ./equality/start17.png
78
[52]79Comme vous pouvez le constater, toutes les géométries égales ont aussi une étendue égales. Malheureusement, le polygone 5 est aussi retourné comme étant égal avec ce test, puisqu'il partage la même étendue que les autres géométries. Mais alors, pourquoi est-ce utile ? Bien que cela soit traité en détail plus tard, la réponse courte est que cela permet l'utilisation d'indexation spatiales qui peuvent réduire drastiquement les ensembles de géométries à comparrer en utilisant des filtres utilisant cette égalité d'étendues.
[1]80
Note: See TracBrowser for help on using the repository browser.