Stockage ST_Geometry dans PostgreSQL
Vous pouvez utiliser deux types de stockage spatiaux différents dans PostgreSQL : ST_Geometry et géométrie PostGIS. Ces types de données permettent 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 que vous associez à vos analyses et à vos 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.
Par défaut, une géodatabase dans PostgreSQL utilise le type spatial ST_Geometry. Vous pouvez également installer le type ST_Geometry dans votre base de données PostgreSQL. Pour plus d'informations sur l'installation du type ST_Geometry dans une base de données PostgreSQL, reportez-vous à la rubrique Ajout du type ST_Geometry à une base de données PostgreSQL.
Cette rubrique vous aide à comprendre la façon dont le type ST_Geometry est utilisé dans PostgreSQL :
- Architecture du type spatial dans PostgreSQL
- Procédure de stockage de classes d'entités à l'aide du stockage ST_Geometry
- Utilisation de tables PostgreSQL existantes avec des colonnes ST_Geometry
- Procédure d'inscription d'une colonne ST_Geometry pour restreindre la référence spatiale qui peut être utilisée
- Où trouver de la documentation complémentaire
Pour plus d'informations sur l'utilisation de tables appliquant le stockage ST_Geometry à l'aide de SQL, reportez-vous aux rubriques suivantes :
- Création de tables avec une colonne ST_Geometry
- Insertion d'entités dans une table avec une colonne ST_Geometry
- Interrogation des tables ayant une colonne ST_Geometry
- Mise à jour de valeurs dans une colonne spatiale ST_Geometry à l'aide de SQL
- Utilisation des vues spatiales sur les tables comportant une colonne ST_Geometry
Pour plus d'informations sur le type de géométrie PostGIS, consultez la rubrique Qu'est-ce que le type de géométrie PostGIS ?
Méthode de stockage des données spatiales dans ST_Geometry
Voici la description de ST_Geometry dans PostgreSQL :
Nom |
Type |
Description |
---|---|---|
taille |
LONG INTEGER |
Longueur totale de la structure ST_Geometry, y compris la zone tampon de la forme. |
srid |
LONG INTEGER |
Contient l'identifiant de la géométrie la reliant à son enregistrement de référence spatiale (système de coordonnées) associé dans la table sde_spatial_references. |
numpts |
LONG INTEGER |
Nombre de points définissant la géométrie. Pour les géométries multi-parties, ce nombre inclut les séparateurs entre les différentes parties, à raison d'un point par séparateur. |
entity |
SHORT INTEGER |
Type d'entité géométrique stocké dans la colonne spatiale (linestring, multilinestring, multi-point, multi-polygones, point ou polygone). |
sqltype |
SHORT INTEGER |
Type SQL pour la forme ; par exemple, POINT_TYPE, POINTM_TYPE ou MULTIPOLYGONZM_TYPE. |
minx |
LFLOAT |
Définit l'enveloppe spatiale de la géométrie avec miny, maxx et maxy. |
miny |
LFLOAT |
Définit l'enveloppe spatiale de la géométrie avec minx, maxx et maxy. |
maxx |
LFLOAT |
Définit l'enveloppe spatiale de la géométrie avec minx, miny et maxy. |
maxy |
LFLOAT |
Définit l'enveloppe spatiale de la géométrie avec minx, miny et maxx. |
minz |
LFLOAT |
Valeur z minimale. |
maxz |
LFLOAT |
Valeur z maximale. |
minm |
LFLOAT |
Valeur de mesure minimale. |
maxm |
LFLOAT |
Valeur de mesure maximale. |
surface |
LFLOAT |
Surface de la géométrie |
len |
LFLOAT |
Périmètre de la géométrie. |
shape |
BYTEA |
Forme compressée par Esri. |
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 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 de type ST_Geometry, vous invoquez la méthode constructeur, comme illustré dans l'exemple suivant :
CREATE TABLE hazardous_sites (name varchar(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.
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 identique à celui du type qu'il construit.
Structure de métadonnées
Le type spatial des types PostgreSQL et les tables de métadonnées sont stockés dans 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 (ou la table), l'index spatial et les informations de références spatiales du type.
Pour obtenir la description de chaque table, reportez-vous aux tables répertoriées sous Tables système d'une géodatabase stockée dans PostgreSQL. Les tables sont st_coordinate_systems, st_units_of_measure, sde_geometry_columns, sde_spatial_references et sde_coordinate_system.
Création de classes d'entités avec le stockage ST_Geometry à l'aide d'ArcGIS
Au moyen d'ArcGIS for Desktop, vous choisissez le type de stockage à utiliser lors de la création des classes d'entités.
Lors de la création d'une classe d'entités dans ArcGIS qui utilise le stockage ST_Geometry, la table métier de la classe d'entités est créée avec une colonne de type ST_Geometry dans laquelle sont stockées les données spatiales de la classe d'entités.
Si vous vous connectez à une base de données, choisissez ST_Geometry lors de la création d'une table spatiale s'il s'agit du type de colonne spatiale que vous souhaitez utiliser. Pour plus d'informations sur la création des tables dans une base de données, reportez-vous à la rubrique Création d'une table de base de données spatiale dans ArcGIS.
Si vous vous connectez à une géodatabase, vous spécifiez le stockage en choisissant le mot-clé de configuration à utiliser. Les paramètres de stockage par défaut sont définis dans la table sde_dbtune par le paramètre GEOMETRY_STORAGE du mot-clé de configuration DEFAULTS. Si vous ne modifiez pas la valeur du paramètre GEOMETRY_STORAGE du mot-clé DEFAULTS, toutes vos classes d'entités seront créées à l'aide du stockage ST_Geometry, sauf si vous spécifiez un mot-clé de configuration différent lors de la création de la classe d'entités.
Même si vous modifiez le paramètre DEFAULTS GEOMETRY_STORAGE pour utiliser la géométrie PostGIS, vous pouvez continuer à créer des classes d'entités qui utilisent le stockage ST_Geometry. Pour cela, créez un mot-clé de configuration pour le stockage ST_Geometry dans la table sde_dbtune. Vous pouvez par exemple créer un mot-clé de configuration de la façon suivante :
##ST_GEOMETRY GEOMETRY_STORAGE "ST_GEOMETRY" UI_TEXT "User-interface for ST_GEOMETRY keyword" END
Ensuite, au moment de créer la classe d'entités dans ArcGIS, choisissez ce mot-clé et votre nouvelle classe d'entités utilisera alors le stockage ST_Geometry.
L'utilisation de la commande sdedbtune permet de modifier ou d'ajouter des valeurs à la table sde_dbtune. Pour obtenir des instructions, reportez-vous à Modification du contenu de la table DBTUNE.
Accès aux tables PostgreSQL avec des colonnes ST_Geometry
Si vous utilisez le langage SQL pour créer une table avec une colonne ST_Geometry, vous pouvez accéder aux données par l'intermédiaire des applications SQL ou des applications tierces personnalisées, ainsi que vous pouvez accéder à la table dans ArcGIS. Lorsque vous vous connectez à la base de données depuis ArcGIS, vous pouvez effectuer des analyses, afficher ou charger des données dans les tables contenant une colonne ST_Geometry. Pour cela, les critères suivants doivent être satisfaits :
- La table doit contenir une seule colonne ST_Geometry.
- La table ne doit comporter aucune autre colonne d'un type défini par l'utilisateur.
- Si la table stocke plusieurs types de géométrie (points, lignes et polygones), vous devez spécifier les types de géométrie à afficher : un seul type à la fois peut être affiché dans ArcGIS.
- Tous les enregistrements de la table doivent utiliser la même référence spatiale.
Si vous avez créé la table dans une géodatabase à l'aide du langage SQL, vous pouvez l'enregistrer avec la géodatabase si vous souhaitez en utiliser les fonctions (par exemple la réplication, les réseaux, les classes de relations et la topologie). Si vous souhaitez modifier la table dans ArcGIS, vous pouvez enregistrer la table avec la géodatabase à condition que les critères suivants soient satisfaits :
- La table doit appartenir à l'utilisateur qui effectue son inscription.
- Elle doit comporter une seule colonne ST_Geometry.
- Elle ne doit pas avoir d'autres colonnes d'un type défini par l'utilisateur.
- Elle doit avoir un type de géométrie unique (points, lignes ou polygones).
- Tous les enregistrements de la table doivent utiliser la même référence spatiale.
- Il est également nécessaire de disposer d'une colonne de nombres entiers, uniques et de valeur non NULL utilisable comme identifiant d'enregistrement.
Enregistrement de la colonne spatiale
Si vous utilisez SQL pour créer une table contenant une colonne ST_Geometry, vous pouvez enregistrer la colonne pour utiliser une référence spatiale et dimensionnalité spécifiques. De la sorte, les utilisateurs insérant des enregistrements au moyen du langage SQL ne peuvent pas insérer accidentellement des enregistrements utilisant une référence spatiale différente ou contenant des dimensions différentes. Pour cela, utilisez la fonction sde.st_register_spatial_column. La syntaxe permettant d'utiliser cette fonction est la suivante :
SELECT st_register_spatial_column('<database_name>', '<schema_name>',
'<table_name>', '<spatial_column_name>', <srid>, <coordinate_dimension>)
Le SRID spécifié doit figurer dans la table public.sde_spatial_references. La dimension de coordonnée indique si les données comportent uniquement des coordonnées x, y (2), des coordonnées x, y, z (3), des coordonnées x, y, z, m (4) ou des coordonnées x, y, m (5). Par défaut, si vous n'indiquez pas de dimension de coordonnée, les données sont enregistrées comme ayant uniquement les dimensions x, y.
Dans l'exemple suivant, la colonne de forme de la table des blocs dans la structure sasha de la base de données mycitydb est inscrite pour utiliser un SRID de 4236 et stocker uniquement des coordonnées en 3 dimensions :
SELECT st_register_spatial_column(
'mycitydb', 'sasha', 'blocks', 'shape', 4236, 3);
Cette opération ajoute un enregistrement pour la colonne spatiale à la table public.sde_geometry_columns dans la géodatabase ou la base de données.
Si la colonne spatiale est vide et que vous l'inscrivez avec un SRID et une dimensionnalité particuliers, vous pouvez la désinscrire pour modifier le SRID ou la dimensionnalité puis la réinscrire avec différentes valeurs. Vous pouvez désinscrire une colonne spatiale en exécutant la fonction st_unregister_spatial_column(). Cette fonction supprime la colonne spatiale de la table système public.sde_geometry_columns. De la sorte, la colonne spatiale n'est plus associée à aucun système de référence spatiale. La syntaxe permettant d'utiliser cette fonction est la suivante :
SELECT st_unregister_spatial_column(
'<database_name>', '<schema_name>',
'<table_name>', '<column_name>')
Vous pouvez vérifier l'inscription effective d'une colonne spatiale en exécutant la fonction st_isregistered_spatial_column. La syntaxe permettant d'utiliser cette fonction est la suivante :
SELECT st_isregistered_spatial_column(
'<database_name>', '<schema_name>',
'<table_name>', '<column_name>', <srid>)
Si la colonne spatiale est inscrite avec le SRID spécifié, 1 est renvoyé. 0 est renvoyé dans le cas contraire.
Pour découvrir la dimensionnalité avec laquelle la table a été inscrite, utilisez la fonction st_get_coord_dimension. La syntaxe de la fonction st_get_coord_dimension est la suivante :
SELECT st_get_coord_dimension(
'<schema_name>', '<table_name>', '<column_name>', <srid>)
Dans cet exemple, st_get_coord_dimension renvoie xyz, car la table des blocs est inscrite comme étant en trois dimensions.
SELECT st_get_coord_dimension(
'sasha', 'blocks', 'shape', 4236);
st_get_coord_dimension
---------------------------
xyz