Utilisation d'Oracle Spatial par ArcSDE
ArcSDE prend en charge Oracle Spatial ou Oracle Locator pour le stockage et la gestion de géométrie dans une base de données Oracle. Pour l'utiliser, vous devez avoir défini le paramètre GEOMETRY_STORAGE de l'un de vos mots-clés de configuration sur SDO_GEOMETRY. Si vous souhaitez utiliser principalement le stockage de géométrie Oracle Spatial, spécifiez SDO_GEOMETRY pour le paramètre GEOMETRY_STORAGE de votre mot-clé de configuration DEFAULTS. Si vous ne souhaitez l'utiliser que pour des jeux de données individuels, utilisez le mot-clé SDO_GEOMETRY lors de la création de chaque jeu de données concerné.
Utilisation d'Oracle Spatial dans ArcGIS
Lorsque vous installez le composant ArcSDE pour la première fois, ST_Geometry est le type de stockage de géométries par défaut. Les paramètres par défaut pour le stockage ArcSDE sont définis dans la table DBTUNE par les paramètres GEOMETRY_STORAGE.
Si vous ne voulez stocker qu'une partie de vos classes d'entités avec le stockage du type spatial pour Oracle, vous pouvez spécifier le mot-clé SDO_GEOMETRY lors de la création d'une classe d'entités. Dans un tel cas, cette classe d'entités particulière est créée avec une colonne SDO_GEOMETRY. Dans le fichier dbtune, le mot clé SDO_GEOMETRY paraît comme suit :
##SDO_GEOMETRY GEOMETRY_STORAGE "SDO_GEOMETRY" ATTRIBUTE_BINARY "BLOB" RASTER_STORAGE "SDO_GEORASTER" SDO_COMMIT_INTERVAL 1000 UI_TEXT "User Interface text description for SDO_GEOMETRY" COMMENT "Any general comment for SDO_GEOMETRY keyword" END
Si vous prévoyez d'utiliser le type de stockage SDO_Geometry pour la plupart de vos classes d'entités, vous pouvez modifier le stockage de géométries ArcSDE par défaut pour utiliser le type Oracle Spatial.
Pour modifier le stockage de géométries par défaut, utilisez la commande d'administration sdedbtune pour modifier le mot-clé DBTUNE DEFAULTS et remplacer le paramètre GEOMETRY_STORAGE de ST_GEOMETRY par SDO_GEOMETRY. Après le remplacement du paramètre par défaut GEOMETRY_STORAGE par SDO_GEOMETRY, ArcSDE crée par défaut des classes d'entités avec des colonnes SDO_GEOMETRY.
Pour plus de détails sur l'utilisation de la commande sdedbtune, consultez le manuel ArcSDE Administration Command Reference, installé avec le composant ArcSDE d'ArcGIS Server au niveau Enterprise.
ArcSDE pour Oracle prend en charge plusieurs structures de stockage de géométries différentes — ces différentes structures peuvent être combinées dans une même base de données. Bien qu'il ne puisse y avoir qu'une seule structure de géométrie par défaut, les tables individuelles peuvent être créées avec des structures de géométrie différentes.
Conditions préalables à l'utilisation de tables spatiales Oracle existantes avec ArcSDE
ArcSDE peut utiliser avec succès les tables contenant des colonnes SDO_GEOMETRY créées par des applications externes ou à l'aide de SQL (quelquefois nommées tables tierces) tant que chaque table respecte certaines conditions préalables :
- Elles doivent appartenir à l'utilisateur qui effectue leur enregistrement.
- Elles doivent comporter une seule colonne SDO_GEOMETRY.
- Elles ne doivent comporter aucune autre colonne d'un type défini par l'utilisateur.
- Elles doivent avoir une entrée valide dans la vue USER_SDO_GEOM_METADATA.
- Elles doivent comporter un seul type de géométrie (points, lignes ou polygones). La géométrie peut être une géométrie multi-parties.
- Elles doivent comporter une colonne de nombres entiers uniques et non nuls pouvant être utilisée comme colonne d'ID de ligne enregistrée.
- Elles doivent comporter un index spatial.
- Elles doivent réussir les tests de validation de géométries d'Oracle, faute de quoi l'accès à ces géométries risque de produire des résultats inattendus.
- A chaque enregistrement spatial du tableau SDO_ORDINATES doit correspondre une valeur numérique valide non nulle.
Considérations sur l'interopérabilité
On croit souvent à tort que les applications peuvent interagir simplement parce qu'elles prennent en charge les mêmes types de géométrie sous-jacents. Toutefois, le type de géométrie n'est que l'un des aspects de la géodatabase, ainsi que d'autres structures de base de données SIG. Il est également nécessaire de comprendre les bases des règles, des contraintes, des structures et des mises en œuvre. Vous devez tenir compte des éléments suivants, lorsque vous utilisez Oracle Spatial avec ArcSDE et avec des clients ArcSDE :
ArcSDE et ArcGIS ne prennent pas en charge l'existence de plusieurs colonnes de géométrie dans une table.
Les tables contenant plusieurs colonnes SDO_GEOMETRY doivent être accédées par l'intermédiaire de vues ne contenant qu'une seule colonne SDO_GEOMETRY.
Pour utiliser les données d'une table Oracle Spatial contenant plusieurs colonnes spatiales, créez une vue spatiale à l'aide de SQL. Cette vue ne doit contenir qu'une seule colonne spatiale. Ensuite, inscrivez la vue spatiale dans ArcSDE à l'aide de la commande sdelayer –o register.
Pour savoir comment créer et enregistrer une vue contenant une seule colonne SDO_GEOMETRY, reportez-vous à l'article intitulé Create an Oracle view of an Oracle Spatial layer (containing multiple geometry columns) and register it with ArcSDE, dans la base de connaissance.
ArcSDE et ArcGIS prennent en charge un seul type de géométrie dans une colonne SDO_GEOMETRY.
Si une seule colonne SDO_GEOMETRY d'une table contient plusieurs types de géométrie (par exemple, des enregistrements de type point et d'autres de type polygone), il est impossible d'enregistrer la table avec ArcSDE ou avec la géodatabase ; la classe d'entités doit contenir un seul type de géométrie.
Oracle Spatial n'impose pas nécessairement de contraintes sur le type de géométrie d'une colonne SDO_GEOMETRY. En l'absence de contraintes, une application peut tenter d'appliquer une contrainte de type de géométrie unique, alors qu'une autre application peut insérer différents types de géométrie. A compter de la version Oracle9i, vous avez la possibilité de contraindre le type de géométrie lors de l'insertion dans une table avec un paramètre de création d'index spatial. Pour les versions précédentes d'Oracle, une autre manière d'imposer une contrainte sur le type de géométrie consiste à créer un déclencheur insert-update qui vérifie la propriété SDO_GEOMETRY GTYPE.
ArcSDE et SDO_GEOMETRY procèdent différemment pour valider la géométrie.
ArcSDE valide la géométrie lors de l'insertion ou de la mise à jour des géométries. Dans Oracle 10g, Oracle Spatial même n'impose pas automatiquement la validation de géométrie lors de l'insertion ou de la mise à jour d'une valeur SDO_GEOMETRY si vous insérez ou mettez à jour des géométries en utilisant d'autres méthodes que celles des clients ArcSDE, telles que SQL. Dans Oracle 11g, Oracle Spatial valide les géométries lors des insertions d'index.
La transmission de valeurs de géométrie non conformes ou de format incorrect à des applications client d'ArcSDE peut créer des problèmes. Afin de réduire la fréquence de ces problèmes éventuels, vous devez valider toute géométrie créée ou modifiée à l'aide d'une méthode autre qu'une application client ArcSDE.
Dans ArcSDE 9.1, les entités SDO_GEOMETRY ne sont pas validées lors de leur récupération dans la base de données. Cette modification a été apportée afin d'améliorer les performances de la fonction de récupération.
A compter de la version ArcSDE 9.2, les formes sont validées au moment de leur extraction, mais uniquement si la table spatiale est créée à l'extérieur d'ArcSDE, puis enregistrée avec ArcSDE. Si la couche est créée à l'aide d'ArcGIS ou de l'API ArcSDE, les formes ne sont pas validées lors de la récupération.
Vous disposez de deux outils pour valider la géométrie. Le paramètre VALIDATE_GEOMETRY_WITH_CONTEXT d'Oracle vérifie les géométries en appliquant les règles de validation de forme d'Oracle, tandis que sdelayer –o feature_info les vérifie en utilisant les règles ArcSDE. L'opération feature_info peut également, dans le cadre de ses données en sortie, indiquer si la géométrie d'une forme est reconnue par ArcSDE. Pour plus d'informations sur l'utilisation de cette opération, reportez-vous à la documentation Administration Command Reference fournie avec votre installation ArcSDE.
La validation de géométrie par ArcSDE est différente de la validation de géométrie par Oracle Spatial. Bien qu'il soit important que les géométries soient soumises à la validation d'Oracle Spatial, une validation réussie des géométries par les routines de validation d'Oracle ne garantit pas leur validation par ArcSDE.
Il est possible de créer un déclencheur insert-update pour exécuter la fonction SDO_VALIDATE afin d'imposer la validation des types SDO_GEOMETRY.
L'interface API ArcSDE C permet d'écrire une application effectuant l'extraction d'entités même ayant échoué à la validation de forme d'ArcSDE. Toutefois, il incombe alors à l'application client de déterminer l'aptitude de la géométrie, ou sa méthode de réparation.
La plupart des applications qui reconnaissent les objets SDO_GEOMETRY ne peuvent pas interpréter les données SDO_ETYPE 0 créées par d'autres applications.
Oracle Spatial permet aux applications d'insérer des données qui leur sont spécifiques dans un objet SDO_GEOMETRY. Elles l'appliquent en incorporant leurs données à l'aide d'une valeur 0 de SDO_ETYPE. Cela apporte aux applications une grande souplesse de stockage pour de nombreux types de géométrie non conventionnelle ainsi que pour d'autres données. Toutefois, la signification des données spécifiques aux applications n'est importante que pour l'application ayant généré l'objet SDO_GEOMETRY concerné. De telles données spécifiques aux applications ne peuvent pas être prises en charge de façon fiable dans un environnement interopérable. Les applications qui reconnaissent les objets SDO_GEOMETRY ne peuvent probablement pas interpréter les données SDO_ETYPE 0 créées par d'autres applications. Les applications mettant à jour les objets SDO_GEOMETRY ne peuvent pas modifier ou conserver les données SDO_ETYPE 0.
Lors de la lecture des objets SDO_GEOMETRY comprenant des éléments SDO_ETYPE 0, ArcSDE ignore les données SDO_ETYPE 0 et ne transmet à l'application que les éléments de la géométrie d'entité simple pris en charge.
Lors de la mise à jour d'objets SDO_GEOMETRY comprenant des éléments SDO_ETYPE 0, ArcSDE ne conserve pas les données SDO_ETYPE 0. Par conséquent, les applications nécessitant la conservation des données SDO_ETYPE 0 doivent empêcher des utilisateurs d'avoir un accès UPDATE à la table.
ArcSDE exige que toutes les valeurs SDO_GEOMETRY d'une colonne aient le même système de référentiel de coordonnées.
Si le référentiel de coordonnées est indéfini, la valeur d'identifiant SRID doit être NULL, comme décrit dans le Guide de l'utilisateur Oracle Spatial.
Avec les versions antérieures à Oracle9i, Oracle Spatial n'impose pas automatiquement la validation de l'identifiant de référence spatiale lors de l'insertion ou de la mise à jour d'une valeur SDO_GEOMETRY. Pour imposer la validation de types SDO_GEOMETRY sur ces instances anciennes d'Oracle, vous pouvez créer un déclencheur insert-update pour exécuter la fonction SDO_VALIDATE. Oracle Spatial exige que les identifiants SRID des géométries soient égaux entre eux et correspondent à l'identifiant SRID des métadonnées spatiales, même si sa valeur est NULL.
Oracle Spatial et ArcSDE interprètent la première et la deuxième dimension d'un objet SDO_GEOMETRY respectivement comme x et y.
Lorsqu'un objet SDO_GEOMETRY a trois dimensions, ArcSDE interprète la troisième dimension comme étant une mesure si son nom (dans les métadonnées spatiales) commence par la lettre "m" ; sinon, la mesure est interprétée comme une altitude. Vous pouvez contrôler l'interprétation de la troisième dimension par ArcSDE en définissant le drapeau d'entité de la classe d'entités sur la présence d'altitudes ou de mesures.
La version 2 d'Oracle9i a élargi la portée du membre SDO_GTYPE du type SDO_GEOMETRY en permettant le codage de la dimension contenant la coordonnée de mesure. Le deuxième chiffre de la valeur SDO_GTYPE à quatre chiffres peut être 0, 3 ou 4. S'il s'agit de 3 ou de 4, ce chiffre indique la dimension contenant la coordonnée de mesure. ArcSDE 9 et les versions ultérieures lisent ce codage. Sinon, si l'objet SDO_GEOMETRY a quatre dimensions, la mesure est interprétée comme étant la dernière coordonnée.
Dans cet exemple, sdelayer définit le type d'entité d'une classe d'entités sur le stockage d'objets linestring et d'altitudes :
sdelayer –o add –e l3
Dans cet exemple, sdelayer définit le type d'entité d'une classe d'entités sur le stockage d'objets linestring et de mesures :
sdelayer –o add –e lM
Oracle Spatial (mais pas Oracle Locator) comprend des fonctions pour les calculs du système de référence linéaire (LRS) à l'aide de valeurs de mesure.
Les fonctions LRS d'Oracle Spatial exigent que toutes les valeurs de mesure d'une géométrie soient monotones, donc croissantes ou décroissantes sans valeurs NaN. De plus, le système LRS d'Oracle Spatial limite les valeurs de mesure aux objets linestring.
ArcSDE permet l'existence de mesures et de calculs LRS pour tous les types géométriques, avec la prise en charge de valeurs de mesure en ordre arbitraire et de valeurs NaN.
Si vous souhaitez utiliser les fonctions LRS d'Oracle Spatial, assurez-vous de respecter les contraintes du système LRS d'Oracle Spatial dans la conception de votre application et de votre base de données.
ArcSDE nécessite un identifiant unique de l'entité dans la table spatiale pour exécuter des requêtes spatiales, des requêtes de fichier journal, des opérations de ligne unique et des opérations de base de données multi-versionnée.
Avec la structure binaire compressée d'ArcSDE, la colonne de géométrie peut remplir cette obligation car il s'agit d'une clé étrangère de la table d'entités, définie comme valeur entière unique non NULL. SDO_GEOMETRY ne comprend pas de valeur d'identifiant unique ; lorsque ArcSDE ajoute la colonne SDO_GEOMETRY à une table existante, une colonne d'identifiant unique peut donc être ajoutée également. Une telle colonne est la colonne d'identifiants de ligne enregistrée. Elle est souvent nommée OBJECTID, mais elle peut porter un autre nom. Une colonne existante peut également servir de colonne d'identifiants de ligne enregistrée, tant qu'elle est indexée et qu'il s'agit de nombres entiers, UNIQUE, et NOT NULL. Les colonnes d'identifiants de ligne enregistrée conservées par ArcSDE doivent être de type NUMBER(38) UNIQUE NOT NULL.
Une colonne d'identifiants de ligne enregistrée peut être ajoutée à l'aide de la commande d'administration sdetable ou à l'aide de l'application ArcCatalog. De nombreuses d'applications, dont ArcGIS, exigent une colonne d'identifiants de ligne enregistrée dans chaque table ou classe d'entités. Chaque application a ses besoins et limitations propres.
La modification des classes d'entités Oracle Spatial participant aux réseaux, aux topologies, aux relations ou aux contraintes doit être réservée aux applications ArcGIS.
ArcGIS peut créer et conserver des réseaux et des classes d'entités topologiques intégrées à partir de classes d'entités simples utilisant le type SDO_GEOMETRY. ArcGIS impose des relations et des contraintes sur plusieurs sources de données différentes. ArcGIS gère les relations et conserve l'intégrité topologique des données ; les modifications apportées aux entités sous-jacentes par l'intermédiaire d'ArcGIS sont répercutées sur ces réseaux, topologies et relations intégrés.
La modification des classes d'entités Oracle Spatial participant aux réseaux, aux topologies, aux relations et aux contraintes doit être réservée aux applications ArcGIS. D'autres applications peuvent lire les données librement, mais les modifications qu'elles apportent ne sont pas répercutées correctement dans la géodatabase.