Stockage ST_Geometry dans Oracle

Le type de données spatiales Esri ST_Geometry peut être utilisé dans les bases de données Oracle contenant une géodatabase et dans celles qui n'en contiennent pas. Il vous permet d'intégrer des données spatiales à d'autres types de données commerciales ; ainsi, votre base de données multi-utilisateurs s'enrichit d'un composant géographique associé à vos analyses et produits de données. En réduisant le nombre de sources de données à gérer, le stockage en commun de vos données spatiales et d'autres objets commerciaux simplifie également l'accès des utilisateurs multiples, la gestion et la protection de vos données.

Le type de données spatiales Esri ST_Geometry est le type de stockage de géométrie par défaut des géodatabases dans Oracle. Vous pouvez également installer le type ST_Geometry dans les bases de données Oracle à l'aide de l'outil de géotraitement Créer un type spatial.

RemarqueRemarque :

Le type ST_Geometry n'est pas pris en charge avec les transactions XA Oracle.

Pour créer une géodatabase et utiliser le type et l'index de domaine ST_Geometry dans le SGBD Oracle, l’administrateur de géodatabase (sde) doit disposer de privilèges système permettant d'instancier des types, des opérateurs et des procédures mémorisées. Pour plus d'informations sur les autorisations nécessaires, reportez-vous à la rubrique Autorisations utilisateur pour les géodatabases dans Oracle. Pour l’installation du type ST_Geometry dans une base de données Oracle, un utilisateur sde doit également être présent et bénéficier de privilèges spécifiques permettant d'instancier des types, des opérateurs et des procédures mémorisées. Consultez la section Ajout du type ST_Geometry à une base de données Oracle pour en savoir plus.

Le type spatial ST_Geometry d'Esri, utilisé dans une géodatabase dans Oracle ou une base de données Oracle, vous permet d'accéder à vos données spatiales à l'aide des fonctions SQL appliquant la norme spatiale ISO SQL/MM, ainsi que la spécification relative aux entités simples de l'OGC (Open Geospatial Consortium). Vous pouvez utiliser des commandes SQL pour stocker, extraire ou manipuler des entités spatiales de la même façon que tout autre type de données. Avec les commandes SQL et les procédures mémorisées, vous pouvez utiliser un nombre important de fonctions conformes aux normes pour l'extraction et l'analyse de données spatiales. L'accès aux données par SQL vous permet d'utiliser d'autres applications pour accéder aux données créées dans Oracle.

Pour accéder aux entités spatiales à l'aide de SQL, les bibliothèques ST_Geometry doivent être installées sur le même serveur que le système de gestion de base de données (SGBD) Oracle. Si vous prévoyez d'exécuter votre SGBD Oracle sur un serveur distinct d'un service ArcSDE, vérifiez la prise en charge pour ArcSDE du système d'exploitation de votre serveur Oracle, et vérifiez également que les bibliothèques ST_Geometry sont bien installées sur ce serveur.

Afin d'utiliser SQL pour accéder à des tables dans Oracle qui utilisent le type spatial, vous devez configurer le processus d'écoute Oracle. Consultez la section Configuration d'Oracle Listener pour utiliser SQL pour en savoir plus.

Méthode de stockage des données spatiales dans ST_Geometry

Voici une description de ST_Geometry dans Oracle :

Nom

Type

ENTITY

NUMBER(38)

NUMPTS

NUMBER(38)

MINX

FLOAT(64)

MINY

FLOAT(64)

MAXX

FLOAT(64)

MAXY

FLOAT(64)

MINZ

FLOAT(64)

MAXZ

FLOAT(64)

MINM

FLOAT(64)

MAXM

FLOAT(64)

AREA

FLOAT(64)

LEN

FLOAT(64)

SRID

NUMBER(38)

POINTS

BLOB

Les attributs du type spatial représentent les informations suivantes :

Comme d'autres types d'objets, le type de données ST_Geometry contient une méthode constructeur et des fonctions. Une méthode constructeur est une fonction qui renvoie une nouvelle instance (objet) du type de données et définit les valeurs de ses attributs.

Le nom du constructeur est le même que celui du type (ST_Geometry). Lorsque vous instanciez un objet du type ST_Geometry, vous appelez la méthode constructeur. Par exemple :

CREATE TABLE hazardous_sites (name        varchar2(128),
                              location    st_geometry);

Les accesseurs ST_Geometry suivants prennent un seul élément ST_Geometry en entrée et renvoient la valeur de propriété demandée en tant que nombre.

Par exemple, la requête suivante renvoie le nom et la surface des différents états des Etats-Unis.

SELECT name, st_area(geometry)
FROM us_states
ORDER BY name;

ST_LineString, ST_MultiLineString, ST_MultiPoint, ST_MultiPolygon, ST_Point et ST_Polygon sont tous des sous-types (ou sous-classes) de ST_Geometry. ST_Geometry et ses sous-types ont des attributs et fonctions en commun. La définition du constructeur est la même pour ST_LineString, ST_MultiLineString, ST_MultiPoint, ST_MultiPolygon, ST_Point et ST_Polygon. Le nom du constructeur est le même que celui du type qu'il construit.

ST_Point étant un objet fini (une valeur de point unique), il peut également être créé à partir de l'une des méthodes ci-dessous.

Cette méthode utilise des points de coordonnée et un SRID.

METHOD

 FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
 Argument Name                  Type                    In/Out Default?

 PT_X                           NUMBER                  IN
 PT_Y                           NUMBER                  IN
 SRID                           NUMBER                  IN

SQL> INSERT INTO sample_pt VALUES (ST_Point (10, 20, 1) );

Cette méthode vous permet de spécifier des points de coordonnée et une valeur d'altitude pour chaque point.

METHOD

 FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
 Argument Name                  Type                    In/Out Default?
 
 PT_X                           NUMBER                  IN
 PT_Y                           NUMBER                  IN
 PT_Z                           NUMBER                  IN
 SRID                           NUMBER                  IN

SQL> INSERT INTO sample_pt VALUES (ST_Point (10, 20, 5, 1) );

Cette dernière méthode pour ST_Point permet en outre de spécifier une valeur de mesure intégrée à l'objet point créé.

METHOD

 FINAL CONSTRUCTOR FUNCTION ST_POINT RETURNS SELF AS RESULT
 Argument Name                  Type                    In/Out Default?

 PT_X                           NUMBER                  IN
 PT_Y                           NUMBER                  IN
 PT_Z                           NUMBER                  IN
 MEASURE                        NUMBER                  IN
 SRID                           NUMBER                  IN

SQL> INSERT INTO sample_pt VALUES (ST_Point (10, 20, 5, 401, 1) );

Structure de métadonnées

Le type ST_Geometry pour Oracle et les tables de métadonnées appartiennent à la structure ArcSDE. La définition de structure est la description de la table de base pour les tables de métadonnées permettant de définir et de décrire la colonne/table, l'index spatial (index de domaine ST_Spatial_Index) et les informations de références spatiales du type. Toutes les définitions et tables de métadonnées, ainsi que tous les paquets des types et index de domaine des types sont créés dans la structure ArcSDE.

L'utilisateur SDE étant propriétaire des définitions relatives à ST_Geometry, ne le supprimez jamais de la base de données si ces dernières comportent des tables contenant des colonnes ST_Geometry. La suppression de cet utilisateur rendrait ces tables inaccessibles.

Comme indiqué dans le Guide des développeurs d'applications d'Oracle, lorsqu'un utilisateur est supprimé de la base de données, l'une des instructions de suppression exécutée est DROP TYPE avec l'option FORCE. Cette instruction supprime tous les types dont cet utilisateur est propriétaire, afin que celui-ci puisse être supprimé de la base de données. L'instruction DROP TYPE FORCE entraîne la suppression des types, même s'ils possèdent des types dépendants ou si des tables y sont associées. Lorsque cela se produit, les tables associées sont signalées comme étant non valides, rendant ainsi inaccessibles les données qu'elles contiennent.

Pour obtenir une description des tables de métadonnées ST_Geometry suivantes, reportez-vous à la rubrique Tables système d'une géodatabase stockée dans Oracle :

  • Table ST_COORDINATE_SYSTEMS
  • ST_GEOMETRY_COLUMNS
  • Table ST_GEOMETRY_INDEX
  • Table ST_SPATIAL_REFERENCES
ApprofondissementApprofondissement :

En outre, les objets de base de données suivants sont créés pour gérer les métadonnées ST_Geometry :

  • Un utilisateur de base de données SDE
  • Un tablespace par défaut pour l'utilisateur SDE
  • Des fonctions ST_Geometry
  • Des vues ST_Geometry
    • ALL_ST_GEOMETRY_COLUMNS_V
    • USER_ST_GEOMETRY_COLUMNS_V
    • USER_ST_GEOM_INDEX_V
  • Des déclencheurs ST_Geometry
    • DB_EV_DROP_ST_METADATA
    • DB_EV_ALTER_ST_METADATA
    • DB_EV_RENAME_ST_METADATA
    • TG_ST_SPATIAL_REF_SRID
    • TG_ST_CREF_SYS
    • TG_GCOL_NAME
    • TG_ST_GEOMINDEX_NAME
  • Un paquetage SPX_UTIL et un corps de paquetage
  • Un opérateur SDEXMLTOTEXT
  • Des types ST_Geometry
    • BLOB_ARRAY_TAB
    • INT_ARRAY_TAB
    • FLT_ARRAY_TAB
    • BND_ROWID_TAB
    • SP_GRID_INFO

      SP_Grid_Info est utilisé comme type de données pour le champ GRID dans la table ST_Geometry_Index. Il contient la valeur du niveau de grille pour les index spatiaux.

Création de classes d'entités dans Oracle avec le stockage ST_Geometry

Dans les bases de données où le type de données spatiales ST_Geometry est installé, spécifiez le type de stockage ST_Geometry lorsque vous créez une classe d'entités.

Dans les géodatabases, le type de stockage de géométrie utilisé pour une classe d'entités est déterminé par le paramètre GEOMETRY_STORAGE dans le mot-clé de configuration que vous spécifiez quand vous créez la classe d'entités.

Désignation de ST_Geometry comme type de stockage par défaut pour les nouvelles classes d'entités de géodatabase

A compter de la version ArcGIS 9.3, ST_Geometry est le type de stockage par défaut pour les classes d'entités d'une nouvelle géodatabase dans Oracle. Cela signifie que le paramètre GEOMETRY_STORAGE du mot-clé DEFAULTS de la table DBTUNE est défini sur ST_GEOMETRY.

Si vous utilisez une géodatabase antérieure à la version 9.3 d'ArcGIS et souhaitez que toutes les nouvelles classes d'entités soient créées en utilisant le stockage ST_Geometry par défaut, vous devez modifier le paramètre GEOMETRY_STORAGE du mot-clé DEFAULTS de la table DBTUNE. Définissez le paramètre GEOMETRY_STORAGE sur ST_GEOMETRY.

RemarqueRemarque :

Utilisez la commande d'administration sdedbtune pour modifier les paramètres DBTUNE. Pour plus de détails sur l'utilisation de la commande sdedbtune, reportez-vous à la rubrique Modification du contenu de la table DBTUNE et au manuel ArcSDE Administration Command Reference fourni avec le serveur d'application ArcSDE pour Oracle.

Utilisation du stockage ST_Geometry pour certaines classes d'entités de géodatabase seulement

Les géodatabases d’Oracle prennent en charge plusieurs types de stockage de géométries différents, qui peuvent être combinés en une même base de données. Bien qu'il ne puisse y avoir qu'un seul type de stockage de géométrie par défaut, vous pouvez créer des tables individuelles avec des types de données différents.

Si vous souhaitez qu'une petite partie seulement de vos classes d'entités utilisent le stockage de type spatial ST_Geometry, vous pouvez définir le paramètre DEFAULTS GEOMETRY_STORAGE sur un autre type de stockage et créer un mot-clé distinct pour le stockage ST_GEOMETRY. Vous pouvez par exemple utiliser la commande sdedbtune pour exporter la table DBTUNE dans un fichier texte, ajouter un mot-clé au fichier semblable à ce qui suit, puis réimporter le fichier dans la table :

##ST_GEOMETRY
GEOMETRY_STORAGE    "ST_GEOMETRY"
ATTRIBUTE_BINARY    "BLOB"
RASTER_STORAGE	    "BLOB"
ST_GEOM_LOB_STORAGE  " STORE AS (
#               TABLESPACE <tablespace_name>
                ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)"

UI_TEXT             "User Interface text description for ST_GEOMETRY"

COMMENT             "Any general comment for ST_GEOMETRY keyword"

END

Une fois le mot-clé ajouté, vous pouvez l'utiliser lorsque vous créez les classes d'entités pour lesquelles vous voulez utiliser le stockage du type de données ST_Geometry. Par exemple, si vous possédez un petit sous-ensemble de données dont l'accès doit s'effectuer via SQL, vous pouvez créer uniquement ce sous-ensemble de classes d'entités devant utiliser le type de données spatiales ST_Geometry comme type de stockage ST_Geometry.

Objets de base de données créés pour les données d'utilisateurs

Trois objets de base de données sont créés lorsque vous utilisez ArcGIS pour créer une classe d'entités utilisant le stockage ST_Geometry. Ces objets, ainsi que les paramètres DBTUNE utilisés pour contrôler leur stockage, sont répertoriés dans le tableau suivant :

Objets de base de données

Paramètres de stockage

Table avec colonne ST_Geometry

Le paramètre B_STORAGE définit le stockage de cette table.

Le paramètre ST_GEOM_LOB_STORAGE définit le stockage des segments LOB dans la table.

Index spatial

Le paramètre S_STORAGE définit le stockage de l'index spatial.

Index sur la colonne ObjectID

Le paramètre B_INDEX_ROWID définit le stockage de cet index.

Pour plus d'informations sur les paramètres de configuration, reportez-vous à la rubrique Paramètres de configuration DBTUNE Oracle, ainsi que la section suivante concernant le stockage du segment LOB.

Définition du stockage du segment LOB

Vous devez modifier le paramètre ST_GEOM_LOB_STORAGE de la liste de mots-clés DEFAULTS. Cependant, s'il est ajouté au mot-clé DEFAULTS, le nom du segment LOB ne doit pas être inclus dans la définition du paramètre. S'il est inclus, vous ne parviendrez pas à créer une deuxième classe d'entités, à moins que vous n'ayez modifié la valeur du nom. Cela est dû au fait que chaque nom de segment LOB doit être unique dans une structure. L'exemple de paramètre ST_GEOM_LOB_STORAGE suivant ne contient pas de noms d'objet, ce qui permet d'éviter les collisions de nom au sein de la même structure :

ST_GEOM_LOB_STORAGE  " STORE AS (
  ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)"

Voici quelques exemples de valeurs valides pour le paramètre ST_GEOM_LOB_STORAGE :

##ST_GEOMETRY
GEOMETRY_STORAGE    "ST_GEOMETRY"
ATTRIBUTE_BINARY    "BLOB"
RASTER_STORAGE	    "BLOB"
ST_GEOM_LOB_STORAGE  " STORE AS (TABLESPACE TERRA_NDX ENABLE STORAGE IN ROW CHUNK 8K
 RETENTION CACHE)"

UI_TEXT             "User Interface text description for ST_GEOMETRY"

COMMENT             "Any general comment for ST_GEOMETRY keyword"

END

##ST_GEOMETRY
GEOMETRY_STORAGE    "ST_GEOMETRY"
ATTRIBUTE_BINARY    "BLOB"
RASTER_STORAGE	    "BLOB"
ST_GEOM_LOB_STORAGE  " STORE AS (ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE)"

UI_TEXT             "User Interface text description for ST_GEOMETRY"

COMMENT             "Any general comment for ST_GEOMETRY keyword"

END

Comme indiqué précédemment dans cette section, si vous définissez le nom du LOB et celui du tablespace de l'index LOB, vous devez modifier ces valeurs avant chaque création de classe d'entités. A défaut, les créations de classe d'entités ultérieures échoueront car chaque nom de segment doit être unique.

5/10/2014