Validation de la géométrie
La validation de géométrie est fournie par le type ST_Geometry via les bibliothèques st_shapelib (Oracle) et st_geometry dans PostgreSQL, IBM DB2 et Informix. Lorsqu'une table est créée, les données sont validées lorsque les enregistrements sont insérés ou mis à jour.
Vous pouvez insérer des données dans des tables spatiales de deux façons principalement :
- En utilisant des fonctions constructeur et des applications créées à l'aide de ces fonctions
- En utilisant l'API d'ArcGIS et des applications créées à l'aide de cet API
Les fonctions constructeur sont définies par chaque implémentation de type spatial et peuvent utiliser différentes méthodes pour valider des données géométriques. Les fonctions constructeur ST_Geometry Esri et IBM et l'API ArcGIS utilisent la bibliothèque de formes Esri pour valider les données géométriques lorsque l'entité est créée. D'autres types spatiaux, tels que SDO_Geometry, la géométrie PostGIS et la géométrie ou la géographie Microsoft SQL Server, possèdent leurs propres fonctions constructeur et utilisent leurs propres règles de vérification de formes. Par conséquent, vous devriez lire respectivement la documentation Oracle, PostGIS ou SQL Server pour connaître les règles de vérification qui s'appliquent lorsque les entités sont insérées ou mises à jour vers ces types en dehors d'ArcGIS.
ArcGIS valide également la géométrie lorsque les données sont lues. Les géométries non valides ne peuvent pas être affichées dans ArcGIS.
Les règles de validation de géométrie suivantes s'appliquent à l'API d'Esri, aux fonctions constructeur ST_Geometry et quand ArcGIS lit la géométrie :
Règles de validation pour les formes de point
-
La surface et la longueur des points sont 0.0.
-
L'enveloppe d'un seul point est égale aux valeurs x,y du point.
- L'enveloppe d'une forme de point multi-parties est l'emprise minimale.
Règles de validation pour les lignes simples ou les chaînes de lignes
- Les points en double séquentiels sont supprimés.
- Chaque partie doit avoir au moins deux points distincts.
- Chaque partie ne peut pas se croiser. Les points de début et de fin peuvent être identiques, mais l'anneau résultant n'est pas traité comme une forme de surface.
- Les parties peuvent se toucher aux extrémités.
- La longueur est la somme de toutes les parties.
Règles de validation pour les lignes ou les chaînes non structurées
- Les lignes peuvent se croiser.
- Chaque partie doit avoir au moins deux points distincts.
- Les points en double séquentiels sont supprimés.
- La longueur est la somme de toutes les parties.
Règles de validation et opérations pour les formes de surface
- Les occurrences séquentielles en double d'un point de coordonnée sont supprimées.
- Les arcs pendants sont supprimés.
- Les segments de ligne doivent être fermés (les coordonnées z aux points de début et de fin doivent également être identiques) et ne pas se couper.
- Pour les formes de surface avec des trous, les trous doivent se trouver entièrement dans la limite externe. ArcGIS élimine les trous qui se trouvent à l'extérieur de la limite externe.
- Un trou qui touche une limite externe à un seul point commun est converti en une inversion de la forme de surface.
- Plusieurs trous qui se touchent à des points communs sont fusionnés en un seul trou.
- Les formes de surface multi-parties ne peuvent pas se chevaucher. Toutefois, deux parties peuvent se toucher à un point.
- Les formes de surface multi-parties ne peuvent pas partager de limite commune. Les limites communes sont fusionnées.
- Si deux anneaux ont une limite commune, ils sont fusionnés en un seul anneau.
- Le périmètre de géométrie total, y compris les limites de tous les trous dans les polygones en anneau, est calculé et stocké comme longueur de la géométrie.
- La surface est calculée.
- L'enveloppe est calculée.
- Les points d'une forme de surface sont stockés dans le sens anti-horaire bien que les clients ArcGIS puissent renvoyer des points dans un sens ou dans l'autre. Si vous générez une forme de surface qui contient des coordonnées dans le sens horaire, ArcGIS modifie la rotation pour s'assurer que la liste des coordonnées suit un sens anti-horaire.
Dans cet exemple, le point de départ est a et la description correcte des coordonnées est a, b, c, d, a.
- Une forme de surface peut avoir des inversions. Il s'agit d'espaces vides à l'intérieur de la forme de surface qui touchent la limite externe.
- Les formes de surface inversées ont un anneau intérieur qui touche la limite externe. Il ne s'agit pas polygones en anneau.
- Lorsqu'une forme de surface comporte un trou en anneau, la limite externe est répertoriée en premier. Les points des trous sont stockés dans le sens opposé de la limite externe.
Dans l'illustration suivante, la description de la limite externe est a, b, c, d, a et la description du trou est e, f, g, h, e. Dans la liste des coordonnées, la forme de surface est stockée sous la forme a,b,c,d,a,e,f,g,h,e.
- Si deux trous se touchent à un point, ils sont traités comme un seul trou, et non deux.
Dans cet exemple, les deux surfaces intérieures sont un trou unique parce qu'elles partagent un point commun, g.
- La fusion des formes de surface et des formes de surface avec trous peut devenir assez complexe, comme le montre l'illustration prochaine. La limite externe est un lac avec un îlot. Un petit lac se trouve sur l'îlot.
Il est possible de représenter ces entités comme une, deux ou trois formes. Vous pouvez stocker chaque entité séparément. Le lac le plus vaste est un polygone en anneau. La limite du grand lac est la limite externe tandis que l'îlot est la limite du trou en anneau seul. L'îlot est également un polygone en anneau. La limite de l'îlot est la limite externe tandis que le petit lac est le trou. Le petit lac est une forme de surface unique.
Si les lacs sont les entités importantes, une forme avec un trou représente le grand lac, alors qu'une deuxième forme représente le petit lac. Vous pouvez également utiliser une forme de surface multi-parties pour représenter l'entité. La première partie de forme est le grand lac avec un trou en anneau qui représente l'îlot. La deuxième partie est le petit lac.
- Les formes NIL jouent le rôle d'espaces réservés. Cela permet de disposer d'une ligne d'attributs sans géométrie correspondante. Pour obtenir une forme NIL, vous pouvez par exemple demander l'intersection de deux surfaces qui ne se coupent pas.
Comme les surfaces A et B ne se touchent pas, le résultat d'une requête d'intersection produit une géométrie vide.
- Les formes ont des dimensions. Une forme avec uniquement les coordonnées x,y est considérée comme bidimensionnelle. Une forme qui a des coordonnées z ou des mesures est tridimensionnelle. Une forme peut également comporter une mesure NIL.
Identifiant de référence spatiale
Pour les classes d'entités utilisant le type ST_Geometry, si vous essayez d'insérer une valeur dont les coordonnées sont à l'extérieur de la limite de l'identifiant de référence spatiale (SRID) fourni et avec lequel la table a été créée, l'instruction INSERT échoue et un message similaire à ceux indiqués ci-dessous apparaît :
SGBD | Message d'erreur |
---|---|
Oracle | ERROR at line 1: ORA-20004: Error generating shape from text (-112) ORA-06512: at "SDE.ST_GEOMETRY_SHAPELIB_PKG", line 42 ORA-06512: at "SDE.ST_POLYGON", line 69 ORA-06512: at line 1 |
PostgreSQL | ERROR: ESRI: error generating shape [-112]: |
Informix | SQL Error (-937): Coordinates out of bounds in ST_PolyFromText. |
DB2 | GSE3416N Coordinate out of bounds |
SQLite | Error: ST_Geometry failed with SDE error -139: 'The specified coordinate exceeds the valid coordinate range':[4] |