Stockage ST_Geometry dans Oracle
Le type de stockage ST_Geometry d'Esri est disponible pour les géodatabases dans des bases de données Oracle, qui fournissent un accès SQL (Structure Query Language) à la géodatabase, conforme aux normes ISO (International Organization for Standards) et OGC (Open Geospatial Consortium, Inc). 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 pour Oracle utilisent par défaut le type spatial ST_Geometry d'Esri 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 point de 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.
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 une géodatabase ArcSDE pour Oracle.
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. Consultez la section Configuration d'Oracle Listener pour utiliser SQL pour en savoir plus.
Avec ArcGIS 9.3 et les versions ultérieures, les nouvelles géodatabases 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.
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 :
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 :
- Entity – Type d'entité géométrique stockée dans la colonne spatiale (linestring, multilinestring, multipoint, multipolygon, point ou polygon), dont la valeur est un masque binaire issu de la procédure stockée st_geom_util.
- Numpts — Nombre de points définissant la géométrie. Pour les géométries multi-parties, cela inclut les séparateurs entre chaque partie, un point pour chaque séparateur.
- Minx, miny, maxx, maxy – Enveloppe spatiale de la géométrie
- Area – Surface de la géométrie
- Len – Périmètre de la géométrie
- SRID – Contient l'identifiant de la géométrie qui la relie à son enregistrement de référence spatiale (système de coordonnées) associé, dans la table ST_Spatial_References.
- Points – Contient le flux d'octets des coordonnées ponctuelles qui définissent la géométrie
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.
- La fonction membre ST_Area renvoie la surface d'une géométrie.
- ST_Len renvoie la longueur d'une géométrie.
- ST_Entity renvoie un nombre contenant un masque binaire qui décrit le type d'entité.
- ST_NumPoints renvoie le nombre de points (sommets) qui définissent une géométrie.
- ST_MinM, ST_MinX, ST_MinY, ST_MinZ renvoie la coordonnée minimale souhaitée d'une géométrie.
- ST_MaxM, ST_MaxX, ST_MaxY, ST_MaxZ renvoie la coordonnée maximale souhaitée d'une géométrie.
- ST_SRID renvoie l'identifiant de référence spatiale d'une géométrie.
- Get_release est une fonction membre statique utilisée en interne pour l'administration des types spatiaux (c'est-à-dire pour les mises à niveau et les correctifs).
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 :
- Table ST_COORDINATE_SYSTEMS
- ST_GEOMETRY_COLUMNS
- Table ST_GEOMETRY_INDEX
- Table 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.
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 serveur d'applications ArcSDE pour Oracle.
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
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.