SDO_GEOMETRY et ArcGIS

Voici les conséquences de la création d'une classe d'entités avec le stockage SDO_GEOMETRY dans une géodatabase :

Une table avec une colonne SDO_GEOMETRY est créée.

Si vous spécifiez un mot-clé de configuration DBTUNE avec le paramètre GEOMETRY_STORAGE défini sur SDO_GEOMETRY lorsque vous créez une classe d'entités dans une géodatabase dans Oracle, ArcGIS utilise une colonne SDO_GEOMETRY pour le champ de forme.

La classe d'entités d'exemple suivante a un champ d'identifiant unique (IdObjet), des attributs de nom et de population et une colonne de forme SDO_GEOMETRY.

NomType de donnéesNul ?

NOM

VARCHAR2(32)*

POPULATION

NUMBER(11)

SHAPE

MDSYS.SDO_GEOMETRY

OBJECTID

NUMBER(38)

NOT NULL

Remarque :

*NVARCHAR2(32) remplace VARCHAR2(32) si des chaînes Unicode sont utilisées.

Un index spatial est créé pour la colonne SDO_GEOMETRY.

ArcGIS crée un index spatial d'arborescence R dans la colonne SDO_GEOMETRY d'une classe d'entités par défaut. ArcGIS utilise la fonction SDO_FILTER d'Oracle pour réaliser des requêtes spatiales sur la classe d'entités. Par conséquent, un index spatial est requis pour les requêtes spatiales.

ArcGIS supprime et recrée automatiquement les index spatiaux Oracle Spatial créés par ArcGIS, chaque fois qu'une classe d'entités est basculée entre les modes LOAD_ONLY_IO et NORMAL_IO. Les index spatiaux définis par l'application Oracle Spatial Index Advisor ou créés à l'aide de SQL ne sont pas supprimés lorsqu'ArcGIS bascule la classe d'entités en mode LOAD_ONLY_IO.

Un enregistrement est ajouté à la vue métadonnées d'Oracle Spatial.

Lorsqu’ArcGIS crée une classe d'entités contenant une colonne SDO_GEOMETRY, l'enregistrement de métadonnées Oracle Spatial nécessaire est ajouté à la vue USER_SDO_GEOM_METADATA. Ces métadonnées comprennent le nom de table, le nom de colonne SDO_GEOMETRY, l'identifiant de référence spatiale et les informations sur les dimensions des coordonnées.

Lorsque vous utilisez ArcGIS pour supprimer la classe d'entités, les métadonnées d'Oracle Spatial sont également supprimées.

Une dimension de coordonnées est spécifiée.

Vous pouvez créer des géométries ArcGIS aux formats 2D (x,y), 2D avec mesures (x,y,m), 3D (x,y,z) ou 3D avec mesures (x,y,z,m). Lors de la création de classes d'entités avec une colonne SDO_GEOMETRY, ArcGIS place les informations de dimension d'Oracle Spatial dans la colonne DIMINFO de la vue de métadonnées.

  • La valeur de coordonnée x est la première dimension.
  • La valeur de coordonnée y est la deuxième dimension.
  • La valeur de coordonnée z est la troisième dimension si la classe d'entités est définie avec des altitudes.
  • La valeur de coordonnée m est la dernière dimension (troisième ou quatrième, selon la présence ou l'absence d'une coordonnée z) si la classe d'entités est définie avec des mesures.

La colonne SDO_GEOMETRY est renseignée.

Lors du stockage de géométrie dans la géodatabase, ArcGIS renseigne la valeur SDO_GEOMETRY à partir d'un objet de l'interface API nommé SE_SHAPE. L'objet SE_SHAPE peut contenir des géométries simples ou complexes, y compris des altitudes, des mesures, des données DAO, des annotations et des faces surfaciques. Le type de données SDO_GEOMETRY prend en charge un sous-ensemble de ces propriétés géométriques. Du fait qu'il n'existe pas de correspondance (mappage) un à un entre les composants des objets SDO_GEOMETRY et SE_SHAPE, ArcGIS applique un ensemble de règles lors du stockage de données dans les tables spatiales Oracle :

  • Créer une valeur SDO_GTYPE à quatre chiffres basée sur le type d'entité de la géométrie.
  • Définissez le type SDO_SRID.
  • Ecrire les valeurs de coordonnées avec le système de référentiel de coordonnées approprié.
  • Ecrire les coordonnées dans l'ordre x, y, z et m, en ne définissant les coordonnées d'altitude et de mesure que si elles existent dans l'objet SE_SHAPE source.
  • Si les coordonnées d'altitude et/ou de mesure figurent dans l'objet source SE_SHAPE, stocker l'ensemble des coordonnées avec une coordonnée d'altitude et/ou de mesure.
  • Définir les coordonnées d'altitude et de mesure sur la valeur NaN ("not a number") si des coordonnées spécifiques de la géométrie contiennent des valeurs d'altitude ou de mesure indéfinies.
  • Permettre l'existence de mesures sur tout type de géométrie, pas seulement pour les objets linestring. La première et la dernière coordonnée ne contiennent pas nécessairement de valeurs de mesure.
  • Ne pas imposer un ordre croissant ou décroissant des valeurs de mesure.
  • Ecrire des courbes circulaires dans le type SDO_GEOMETRY.
  • Convertir les arcs non circulaires (tels que spline cubique ou courbe de Bézier) en objets linestring à tronçons droits et stocker la représentation courbe dans SE_ANNO_CAD_DATA.
  • Valider toutes les entités avant leur écriture dans la base de données.
  • Utiliser SDO_POINT pour le stockage des points simples x,y ou x,y,z dans l'objet SDO_GEOMETRY. Pour d'autres types de classes d'entités ponctuelles, stocker les points dans SDO_ORDINATE_ARRAY.
Remarque :

ArcGIS ne prend pas en charge les ensembles de géométries hétérogènes dans l'objet SDO_GEOMETRY et ArcGIS ne code pas d'éléments SDO_ETYPE 0 dans l'objet SDO_GEOMETRY. Les éléments SDO_ETYPE 0 sont spécifiques à l'application.

Une colonne supplémentaire est ajoutée à la table métier pour stocker les propriétés DAO et d'annotations.

Le type SDO_GEOMETRY ne peut pas stocker tous les types d'éléments géométriques que le stockage ArcGIS doit prendre en charge. Lorsqu'ArcGIS crée ou inscrit une classe d'entités, une colonne appelée SE_ANNO_CAD_DATA est ajoutée à la table métier. Selon l'exemple de classe d'entités de la première section de cette rubrique, la table métier contiendrait maintenant les colonnes suivantes :

NomType de donnéesNul ?

NOM

VARCHAR2(32)*

POPULATION

NUMBER(11)

SHAPE

MDSYS.SDO_GEOMETRY

SE_ANNO_CAD_DATA

BLOB

OBJECTID

NUMBER(38)

NOT NULL

Remarque :

*NVARCHAR2(32) remplace VARCHAR2(32) si des chaînes Unicode sont utilisées.

Chaque fois qu'il détecte que la source de données contient des données DAO, ArcGIS écrit une représentation géométrique simple des données DAO dans la valeur SDO_GEOMETRY et écrit les données DAO non modifiées dans la valeur SE_ANNO_CAD_DATA. La propriété SE_ANNO_CAD_DATA contient des données issues de nombreux composants ArcGIS :

  • Objets paramétriques tels que les splines cubiques et les courbes de Bézier d'ArcMap
  • Faces surfaciques de l'Extension ArcGIS Spatial Analyst

Les requêtes spatiales sur la classe d'entités sont exécutées à l'aide des fonctions de filtrage d'Oracle Spatial.

ArcGIS utilise la fonction SDO_FILTER d'Oracle Spatial pour exécuter la requête spatiale primaire. ArcGIS exécute un filtrage secondaire de SDO_GEOMETRY basé sur la relation spatiale demandée par l'application.

Les applications peuvent également inclure des fonctions de filtrage primaire et secondaire d'Oracle Spatial dans la clause SQL WHERE fournie à ArcGIS. A l'aide des filtres spatiaux de la clause WHERE, les applications peuvent distribuer la requête spatiale sur le serveur de base de données et l'application même.