Stockage ST_Geometry dans PostgreSQL

Le type de données spatiales ST_Geometry peut être utilisé dans les bases de données PostgreSQL contenant une géodatabase et dans celles qui n'en contiennent pas. Le type de données ST_Geometry 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 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, les géodatabases dans PostgreSQL sont définies de manière à utiliser le type spatial ST_Geometry. Vous devez toutefois configurer leur utilisation. Pour en savoir plus, reportez-vous à la rubrique Configuration d'une géodatabase dans PostgreSQL. Si vous utilisez une base de données PostgreSQL qui ne contient pas de géodatabase, vous pouvez installer le type ST_Geometry. 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 :

Pour plus d'informations sur l'utilisation de tables appliquant le stockage ST_Geometry à l'aide de SQL, reportez-vous aux rubriques suivantes :

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 :

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 fonctions, tables et vues PostgreSQL est stocké 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 et vue, reportez-vous à la rubrique Tables système d'une géodatabase stockée dans PostgreSQL. Les tables sont sde_geometry_columns et sde_coordinate_systems. Les vues sont st_geometry_columns et st_spatial_references. Elles reposent sur ces tables.

ApprofondissementApprofondissement :

En outre les vues, fonctions et tables système, les objets de base de données suivants sont utilisés pour gérer les métadonnées ST_Geometry :

  • Un rôle de connexion sde
  • Une structure sde dans la base de données
  • Un déclencheur ST_Geometry : sde_coord_sys_def_insert_tg
  • Des domaines ST_Geometry :
    • st_geomcollection
    • st_linestring
    • st_multilinestring
    • st_multipoint
    • st_multipolygon
    • st_point
    • st_polygon

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.

Dans une base de données

Vous spécifiez le type de données spatiales à utiliser lorsqu'une classe d'entités est créée dans ArcGIS. Pour plus d'informations, reportez-vous à la rubrique Création d'une table de base de données spatiales dans ArcGIS.

Dans une géodatabase

Les informations de stockage des classes d'entités sont contrôlées par les paramètres des mots-clés de configuration dans la table DBTUNE. Vous spécifiez un mot-clé de configuration lorsque vous créez une classe d'entités dans ArcGIS. Le paramètre GEOMETRY_STORAGE du mot-clé de configuration DEFAULTS est défini sur ST_GEOMETRY lorsque la géodatabase est créée. Si vous souhaitez stocker toutes vos données spatiales (ou la plupart) avec le type ST_Geometry, ne modifiez pas la valeur du paramètre GEOMETRY_COLUMNS du mot-clé DEFAULTS. Ensuite, lors de la création d'une classe d'entités dans ArcGIS, spécifiez le mot-clé DEFAULTS.

Si vous modifiez le paramètre DEFAULTS GEOMETRY_STORAGE pour utiliser le type de géométrie PostGIS, mais que vous voulez créer certaines classes d'entités avec le type de données ST_Geometry, il est utile de créer un nouveau mot-clé de configuration pour le stockage ST_Geometry dans la table sde_dbtune. Utilisez la commande d'administration sdedbtune pour exporter le contenu de la table sde_dbtune dans un fichier texte, ajoutez un mot-clé dont le paramètre GEOMETRY_STORAGE est défini sur ST_GEOMETRY, puis utilisez sdedbtune pour importer vos modifications. Vous pouvez par exemple exporter la table sde_dbtune et ajouter un mot-clé de configuration comme suit :

##ST_GEOMETRY
GEOMETRY_STORAGE    "ST_GEOMETRY"
UI_TEXT   "User-interface for ST_GEOMETRY keyword"

END

Pour plus d'informations, reportez-vous à la rubrique Modification du contenu de la table sde_dbtune.

Une fois le mot-clé ajouté, vous pouvez le spécifier au moment de créer une classe d'entités dans ArcGIS afin que votre nouvelle classe d'entités utilise le stockage ST_Geometry.

Accès aux tables PostgreSQL avec des colonnes ST_Geometry

Si vous utilisez SQL pour créer une table avec une colonne ST_Geometry, vous pouvez accéder aux données par l'intermédiaire d'applications SQL, d'applications tierces personnalisées et d'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 :

Si vous avez créé la table dans une géodatabase à l'aide du langage SQL, vous pouvez l'inscrire auprès de 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) ou si vous souhaitez modifier la table dans ArcGIS. Pour l'inscrire auprès de la géodatabase, les conditions suivantes doivent être remplies :

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, lorsque vous insérez des enregistrements avec SQL, vous ne pouvez pas insérer accidentellement des enregistrements utilisant une référence spatiale différente. 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 tridimensionnelles :

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
5/10/2014