ST_Geometry dans Oracle

Le type de données spatiales EsriST_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 le type spatial.

Remarque :

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

Pour créer une géodatabase et utiliser le type ST_Geometry et l’index de domaine dans le système de gestion de bases de données 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 Privilèges 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. Reportez-vous à la rubrique Ajouter le type ST_Geometry à une base de données Oracle pour en savoir plus.

Le type spatial Esri ST_Geometry, utilisé dans une géodatabase dans Oracle ou dans 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.

Les bibliothèques ST_Geometry doivent être installées sur le même serveur que l’instance Oracle pour permettre un accès aux entités spatiales avec SQL. Vérifiez que le système d’exploitation de votre serveur Oracle est pris en charge pour les bibliothèques ST_Geometry.

Vous devez également configurer le processus extproc Oracle pour qu’il utilise SQL afin d’accéder aux tables qui contiennent le type spatial ST_Geometry.

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

Voici une description de ST_Geometry dans Oracle :

NomType

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)

SURFACE

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_Length 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 et ST_MinZ renvoient la coordonnée minimale souhaitée d'une géométrie.
  • ST_MaxM, ST_MaxX, ST_MaxY et ST_MaxZ renvoient 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, sde.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 (sde.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 (sde.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 (sde.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 sde. 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 sde.

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.

Approfondissement :

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éer des 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ésigner ST_Geometry comme type de stockage par défaut pour les nouvelles classes d'entités de géodatabase

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é de configuration DEFAULTS est défini sur ST_GEOMETRY.

Si vous utilisez une géodatabase antérieure à la version 9.3 d'ArcGIS, que vous avez mis à niveau la géodatabase et que vous souhaitez que toutes les nouvelles classes d'entités soient créées avec le stockage ST_Geometry par défaut, vous devez définir le paramètre GEOMETRY_STORAGE du mot-clé DEFAULTS sur ST_GEOMETRY. Plus plus d'informations, reportez-vous à la rubrique Modifier les mots-clés de configuration.

Utiliser le stockage ST_Geometry pour certaines classes d'entités de géodatabase

Dans Oracle, les géodatabases prennent en charge différents types de stockage de géométrie, qui peuvent être combinés dans la 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 stockage de géométries 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. Par exemple, vous pourriez ajouter un mot-clé de configuration semblable au suivant dans votre géodatabase :

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

Quels objets de base de données sont créés pour des classes d'entités ?

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 de configuration utilisés pour contrôler leur stockage, sont répertoriés dans la table suivante :

Objets de base de donnéesParamè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.

Définir le 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.