Le type de données ST_Geometry 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. Il permet un accès à la géodatabase et à la base de données 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 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, pour être compatible avec les fonctions de la base de données, telles que la réplication et le partitionnement et pour fournir un accès rapide aux données spatiales.
Esri a implémenté un type ST_Geometry défini par Esri dans Oracle, PostgreSQL et SQLite. Ce type de données ST_Geometry est expliqué dans l'aide d'ArcGIS.
ST_Geometry est un résumé, une super classe non instanciée. Toutefois, ses sous-classes peuvent être instanciées. Un type de données instancié peut être défini comme une colonne de tableau pouvant accueillir des valeurs de son type.
Bien que vous puissiez définir une colonne en tant que type ST_Geometry, vous n'insérez pas de valeurs ST_Geometry dans la colonne puisqu'elle ne peut pas être instanciée. Vous insérez plutôt les valeurs de la sous-classe.
Le diagramme suivant montre la hiérarchie du type de données ST_Geometry et de ses sous-classes :
Sous-classes
Les sous-classes de ST_Geometry sont divisées en deux catégories : sous-classes de géométrie de base et sous-classes d'ensembles homogènes. Les géométries de base comprennent les objets ST_Point, ST_LineString et ST_Polygon, alors que l'ensemble homogène comprend les objets ST_MultiPoint, ST_MultiLineString et ST_MultiPolygon. Comme ces noms l'indiquent, les ensembles homogènes sont des ensembles de géométries de base. En plus des propriétés communes aux géométries de base, les ensembles homogènes disposent également de quelques propriétés propres.
Chaque sous-classe stocke le type de géométrie que son nom indique ; par exemple, ST_MultiPoint stocke des multi-points. Le tableau suivant fournit une liste des sous-classes et leurs descriptions :
Sous-type | Description |
---|---|
ST_Point |
|
ST_LineString |
|
ST_Polygon |
|
ST_MultiPoint |
|
ST_MultiLineString |
|
ST_MultiPolygon |
|
Notez que chaque sous-classe hérite des propriétés de la superclasse ST_Geometry mais possède également des propriétés qui lui sont propres. Les fonctions applicables au type de données ST_Geometry acceptent l'ensemble des types d'entités de sous-classe. Toutefois, certaines fonctions ont été définies au niveau de la sous-classe et acceptent uniquement certaines sous-classes. Par exemple, la fonction ST_GeometryN n'accepte en entrée que des valeurs de sous-type ST_MultiLinestring, ST_MultiPoint ou ST_MultiPolygon.
La fonction ST_GeometryType permet d'identifier la sous-classe d'un type ST_Geometry. La fonction ST_GeometryType part d'un ST_Geometry et renvoie la sous-classe instanciée sous forme d'une chaîne de caractères. La fonction ST_NumGeometries permet de connaître le nombre d'éléments de géométrie de base compris dans un ensemble homogène ; elle part d'un ensemble homogène et renvoie le nombre d'éléments de géométrie de base qu'il contient.
Appels de fonction ST_Geometry
Les fonctions ST_Geometry dans Oracle and PostgreSQL sont implémentées dans SQL. Il s'agit d'un langage au niveau de la base de données. Dans Oracle, il s'agit du langage PL/SQL (Procedural Language Structured Query Language). Dans PostgreSQL, le langage utilisé est PL/pgSQL.
Lorsque vous accédez aux colonnes ST_Geometry dans une base de données Oracle ou PostgreSQL à l'aide des fonctions SQL, vous accédez à la base de données directement. Par conséquent la base de données doit être capable d'accéder aux fonctions ST_Geometry. Dans Oracle, la base de données engendre également un processus extproc.
Dans SQLite, les fonctions ST_Geometry sont implémentées dans C dans la bibliothèque ST_Geometry. Vous devez accéder à la bibliothèque ST_Geometry pour utiliser les fonctions ST_Geometry.
Oracle
Les fonctions sont implémentées dans PL/SQL, qui appelle les fonctions écrites en langage de programmation C dans les fichiers de bibliothèque partagés externes. Les fonctions sont appelées à partir de PL/SQL à l'aide d'un nom d'alias qui apparie le nom de la bibliothèque (dans le cas de ST_Geometry dans Oracle, st_shapelib) au nom du fichier de bibliothèque. (Pour plus d'informations, consultez la documentation relative à la commande Oracle CREATE LIBRARY.) La première fois qu'une fonction de type spatial qui requiert st_shapelib est appelée, la base de données demande au processus d'écoute d'engendrer un processus extproc pour la session SQL. Il est fourni au processus extproc l'emplacement de st_shapelib, le nom de la fonction à appeler, ainsi que ses paramètres. Le processus extproc charge st_shapelib et appelle la fonction. Lorsque la fonction externe prend fin, le processus extproc renvoie les résultats et reste actif, dans l'attente d'appels de fonction supplémentaires au cours de la session. Le processus extproc prend fin à la déconnexion de la session SQL.
Pour ce faire, la configuration suivante est requise :
- La base de données a besoin de connaître l'emplacement du fichier contenant st_shapelib, de manière à pouvoir transmettre cette information au processus d'écoute, puis au processus extproc.
- Si le fichier file_spec de st_shapelib dans la table user_libraries ne correspond pas à l'emplacement du fichier physique de st_shapelib sur le serveur, les opérateurs et fonctions ST_Geometry ne fonctionnent pas. Par conséquent, vous devez mettre à jour la définition de bibliothèque dans les bibliothèques utilisateur Oracle pour inclure le chemin d'accès correct de bibliothèque au fichier contenant st_shapelib à l'aide de la commande LIBRARY CREATE.
- La base de données doit savoir quel service gère les requêtes envoyées au processus extproc. Cela est configuré dans le fichier tnsnames.ora.
- Le processus extproc doit être autorisé à charger le fichier contenant st_shapelib. Pour ce faire, la variable d'environnement EXTPROC_DLLS est définie dans le fichier extproc.ora.
- Le processus extproc (exécuté généralement en tant qu'utilisateur propriétaire d'ORACLE_HOME) doit détenir des autorisations de lecture concernant l'emplacement des fichiers de bibliothèques et des droits d'exécution sur ces fichiers.
PostgreSQL
La bibliothèque st_geometry doit être stockée dans le répertoire d'installation de PostgreSQL pour permettre à PostgreSQL d'accéder aux fonctions ST_Geometry. Vous devez copier le fichier st_geometry.dll (Windows) dans le dossier lib du répertoire d'installation de PostgreSQL. Pour les serveurs Linux, copiez le fichier st_geometry.so (Linux) dans le répertoire /usr/lib/pgsql sur le serveur PostgreSQL. Vous trouverez ces deux fichiers dans le dossier DatabaseSupport d'installation ArcMap ou ArcGIS Server. Vous pouvez également les télécharger sur My Esri.
SQLite
Vous devez charger la bibliothèque ST_Geometry et désigner son emplacement de manière à ce que le client SQLite puisse accéder aux fonctions SQL. Vous pouvez définir l'emplacement de la bibliothèque dans la variable d'environnement PATH (Windows) ou LIBPATH (Linux) du client avant de charger la bibliothèque ou spécifier le chemin d'accès lors du chargement de la bibliothèque ST_Geometry. Reportez-vous à la rubrique Charger la bibliothèque ST_Geometry SQLite pour en savoir plus.
Mode d'implémentation de ST_Geometry
ST_Geometry est implémenté en tant que type défini par l'utilisateur pouvant être utilisé dans des bases de données et des géodatabases dans IBM DB2, IBM Informix, Oracle et PostgreSQL. ST_Geometry peut également être utilisé dans des bases de données SQLite.
Chaque SGBD prend en charge ST_Geometry comme suit :
ST_Geometry par SGBD
SGBD | Description |
---|---|
Oracle | Le type de données ST_Geometry est installé lorsque vous créez une géodatabase dans Oracle. Il s'agit du type de stockage de géométries par défaut des géodatabases d'entreprise dans Oracle. Si vous n'avez pas besoin des fonctionnalités de géodatabase, vous pouvez installer le type ST_Geometry dans une base de données Oracle à l'aide de l'outil de géotraitement Créer un type spatial. |
IBM DB2 | Le module DB2 Spatial Extender, inclus par défaut par IBM avec le logiciel DB2, prend en charge ST_Geometry. Le type ST_Geometry est la seule possibilité de stockage de la géométrie de l'entité dans des géodatabases dans DB2. Il a été co-développé par Esri et IBM. Notez qu'il existe des différences dans la syntaxe SQL entre DB2 pour z/OS et DB2 pour Windows/Linux/UNIX. Consultez la documentation DB2 pour connaître la syntaxe appropriée à la version de SGBD que vous utilisez. |
IBM Informix | Le module Informix Spatial DataBlade, fourni par IBM avec le logiciel Informix, installe le type ST_Geometry dans la base de données et la géodatabase. Le type ST_Geometry est la seule possibilité de stockage de la géométrie de l'entité dans des géodatabases dans Informix. Co-développé par Esri et IBM, ce type de stockage hautes performances inclut un accès SQL aux données spatiales conforme aux normes ISO et OGC. |
PostgreSQL | Le type de données ST_Geometry est installé lorsque vous créez une géodatabase dans PostgreSQL. Il s'agit du type par défaut de stockage de la géométrie de l'entité dans des géodatabases dans PostgreSQL. Si vous n'avez pas besoin des fonctionnalités de géodatabase, vous pouvez installer le type ST_Geometry dans une base de données PostgreSQL à l'aide de l'outil de géotraitement Créer un type spatial. |
SQLite | Le type de données ST_Geometry dans SQLite est implémenté avec une bibliothèque st_geometry et une colonne geometryblob. Les fonctions SQL ST_Geometry sont stockées dans la bibliothèque st_geometry et non dans la base de données. Vous pouvez utiliser l'outil de géotraitement Créer une base de données SQLite ou la fonction ArcPy CreateSQLiteDatabase pour créer une base de données SQLite qui contient le type ST_Geometry. Vous pouvez également utiliser la fonction SQL CreateOGCTables pour créer le type de données ST_Geometry dans une base de données SQLite existante. |