Validation de la géométrie dans les tables contenant des colonnes ST_Geometry
La validation de la géométrie est fournie par le type ST_Geometry via les bibliothèques st_shapelib (Oracle) et st_geometry. 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 accesseurs et des applications créés à l'aide de ces fonctions
- En utilisant l'API d'ArcGIS et des applications créées à l'aide de cet API
Les accesseurs sont définis par chaque implémentation de type spatial et peuvent utiliser différentes méthodes pour valider des données géométriques. Les accesseurs ST_Geometry d'ESRI et l'API d'ArcGIS utilisent la bibliothèque de formes ESRI pour valider des données géométriques. Les types spatiaux tiers ont leurs propres accesseurs et utilisent leurs propres règles de vérification de formes. Par conséquent, pour les règles de vérification de formes des types spatiaux tels que SDO_Geometry, la géométrie PostGIS et la géométrie ou la géographie Microsoft SQL Server, consultez respectivement la documentation Oracle, PostGIS ou SQL Server.
Les règles suivantes s'appliquent à la bibliothèque de formes ESRI et, par conséquent, à l'API d'ESRI et aux accesseurs ST_Geometry.
Règles de validation pour les formes de point
-
La surface et la longueur des points sont définies sur 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 définie sur 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. ArcSDE é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 logiciels ArcSDE 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, ArcSDE 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 ainsi : 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
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 |