Stockage ST_Geometry dans Oracle

ArcSDE pour Oracle propose un type de stockage de géométrie permettant un accès à la géodatabase en langage SQL (structured query language) conforme aux normes de l'ISO (International Organization for Standards) et de l'OGC (Open Geospatial Consortium). Ce stockage étend les capacités de la base de données Oracle en permettant le stockage d'objets qui représentent des entités géographiques (points, lignes et polygones). Il a été conçu pour utiliser de façon efficace les ressources de la base de données Oracle, pour être compatible avec les fonctions de la base de données Oracle telles que la réplication et le partitionnement et pour fournir un accès rapide aux données spatiales. 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.

Avec ArcGIS 9.3 et les versions ultérieures, les nouvelles géodatabases ArcSDE pour Oracle utilisent par défaut le type spatial ST_Geometry pour le stockage de géométries. Il implémente les spécifications SQL 3 pour les types de données définis par l'utilisateur (UDT), qui permettent de créer des colonnes capables de stocker des données spatiales telles que la localisation d'un repère, d'une rue ou d'une parcelle. Pour une explication du type spatial ST_Geometry, reportez-vous à la section "Méthode de stockage des données spatiales dans ST_Geometry" de cette rubrique.

RemarqueRemarque :

Pour installer ArcSDE et utiliser le type et l'index de domaine ST_Geometry dans le SGBD Oracle, l'administrateur d'ArcSDE 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.

Le type spatial ST_Geometry, utilisé dans une géodatabase ArcSDE pour Oracle, vous permet d'accéder à vos données spatiales à l'aide des fonctions SQL appliquant la norme spatiale SQL/MM de l'ISO 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 une géodatabase ArcSDE pour Oracle.

RemarqueRemarque :

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

Afin d'utiliser SQL pour accéder à une géodatabase dans Oracle qui utilise le type spatial, vous devez configurer le processus Oracle Listener. Pour plus d'informations, reportez-vous à la rubrique Configuration d'Oracle Listener pour utiliser SQL.

Avec ArcGIS 9.3 et les versions ultérieures, les nouvelles géodatabases ArcSDE pour Oracle nécessitent que les fonctions et opérateurs ST soient qualifiés avec le nom de structure sde. Par exemple, lors de l'exécution d'une requête utilisant l'opérateur ST_Union, celui-ci doit être saisi comme "sde.ST_Union". Ceci n'est pas nécessaire pour les géodatabases mises à niveau depuis la version 9.2 d'ArcSDE ou antérieure.

RemarqueRemarque :

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'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.

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

Voici la description de ST_Geometry sous Oracle :

Name

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 permet à l'utilisateur 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) );

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.

SQL> desc sp_grid_info
 Name                                      Null?    Type

 GRID1                                              NUMBER
 GRID2                                              NUMBER
 GRID3                                              NUMBER

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 :

  • ST_COORDINATE_SYSTEMS
  • ST_GEOMETRY_COLUMNS
  • ST_GEOMETRY_INDEX
  • ST_SPATIAL_REFERENCES

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

Le type de stockage de géométries 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

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 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 voulez stocker la plupart de vos données de classe d'entités au format ST_Geometry, conservez la valeur ST_GEOMETRY du paramètre GEOMETRY_STORAGE du mot-clé DEFAULTS.

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 après sa création et au manuel ArcSDE Administration Command Reference fourni avec le composant ArcSDE d'ArcGIS Server Enterprise.

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

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.

Si vous ne voulez stocker qu'une partie de vos classes d'entités avec un stockage de type spatial, vous pouvez définir le paramètre GEOMETRY_STORAGE de DEFAULTS sur un autre type de stockage, puis spécifier le mot-clé ST_GEOMETRY lors de la création de certaines classes d'entités. De cette manière, cette classe d'entités particulière sera créée avec une colonne ST_Geometry. Dans le fichier dbtune, le mot clé ST_GEOMETRY paraît comme suit :

##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

Objets de base de données créés et point de stockage de ces objets

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

RemarqueRemarque :

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.

Pour consulter d'autres d'exemples et obtenir des informations supplémentaires sur la création et la gestion de segments LOB Oracle, recherchez "Segment LOB" dans le centre de ressources ArcGIS et filtrez sur Documentation > Articles de la base de connaissances pour rechercher des articles techniques existant sur le sujet.


3/6/2012