ST_Transform

Définition

ST_Transform convertit les données ST_Geometry bidimensionnelles en une référence spatiale spécifiée par l'ID de référence spatiale (SRID).

AttentionAttention :

Si vous avez inscrit la colonne spatiale auprès de la base de données PostgreSQL à l'aide de la fonction st_register_spatial_column, le SRID au moment de l'inscription est écrit dans la table sde_geometry_columns. Si vous avez créé un index spatial dans la colonne spatiale d'une base de données Oracle, le SRID au moment de la création de l'index spatial est écrit dans la table st_geometry_columns. Si vous utilisez ST_Transform pour modifier le SRID des données ST_Geometry, le SRID n'est pas mis à jour dans la table sde_geometry_columns ou st_geometry_columns.

Utilisation de ST_Transform avec PostgreSQL

Dans PostgreSQL, la référence spatiale de destination que vous spécifiez pour la transformation doit présenter le même système de coordonnées géographiques que la référence spatiale source dans la colonne ST_Geometry.

Si les données sont stockées dans une base de données (au lieu d'une géodatabase), procédez comme suit pour changer la référence spatiale des données ST_Geometry :

  1. Créez une copie de sauvegarde de la table.
  2. Créez une deuxième colonne ST_Geometry (de destination) dans la table.
  3. Inscrivez la colonne ST_Geometry de destination en spécifiant le nouveau SRID.

    Cette opération définit la référence spatiale de la colonne en insérant un enregistrement dans la table système sde_geometry_columns.

  4. Exécutez ST_Transform. Faites en sorte que les données transformées soient une sortie de la colonne ST_Geometry de destination.
  5. Annulez l'inscription de la première colonne ST_Geometry (source).

Si les données sont stockées dans une géodatabase, vous devez utiliser les outils ArcGIS pour reprojeter les données dans une nouvelle classe d'entités. L'exécution de ST_Transform dans une classe d'entités de géodatabase annule la fonction de mise à jour des tables système de géodatabase avec le nouveau SRID.

Utilisation de ST_Transform avec Oracle

Dans Oracle, vous pouvez procéder à des conversions de références spatiales qui présentent le même système de coordonnées géographiques ou des systèmes de coordonnées géographiques différents. Lorsque les deux systèmes de coordonnées géographiques sont différents, une transformation géographique est effectuée. Une transformation géographique consiste à effectuer une conversion entre deux systèmes de coordonnées géographiques. Une transformation géographique est définie dans une direction spécifique, par exemple de NAD 1927 vers NAD 1983, mais la fonction ST_Transform appliquera correctement la transformation quels que soient les systèmes de coordonnées source et de destination.

Les méthodes de transformation géographiques peuvent être classées dans les deux catégories suivantes : basées sur des équations et basées sur des fichiers. Les méthodes basées sur des équations sont autonomes et ne nécessitent aucune information externe. Celles basées sur des fichiers font appel à des fichiers stockés sur le disque pour calculer les valeurs de décalage. Elles sont habituellement plus précises que les méthodes basées sur les équations. Les méthodes basées sur des fichiers sont habituellement utilisées en Australie, au Canada, en Allemagne, en Nouvelle-Zélande, en Espagne et aux Etats-Unis. Vous pouvez obtenir les fichiers (à l'exception de ceux pour le Canada) à partir d'une installation ArcGIS for Desktop ou directement auprès des diverses agences nationales de cartographie.

Pour prendre en charge les transformations basées sur des fichiers dans Oracle, les fichiers doivent se trouver sur le serveur Oracle dans la même structure relative de dossiers que dans le dossier pedata du répertoire d'installation d'ArcGIS for Desktop. .

Par exemple, dans le répertoire d'installation d'ArcGIS for Desktop se trouve le dossier pedata. Ce dossier contient plusieurs sous-dossiers, mais les trois dossiers qui contiennent les méthodes basées sur des fichiers prises en charge sont harn, nadcon et ntv2. Copiez le dossier pedata et son contenu depuis le répertoire d'installation d'ArcGIS for Desktop vers le serveur Oracle ou créez un répertoire sur le serveur Oracle qui contient les fichiers et sous-répertoires des méthodes de transformation basées sur des fichiers prises en charge. Une fois les fichiers sur le serveur Oracle, définissez une variable d'environnement de système d'exploitation appelée PEDATAHOME sur le serveur. Définissez la variable PEDATAHOME sur l'emplacement du répertoire contenant les sous-répertoires et les fichiers. Par exemple, si le dossier pedata est copié dans C:\pedata sur un serveur Microsoft Windows, définissez la variable d'environnement PEDATAHOME sur C:\pedata.

Consultez la documentation qui accompagne votre système d'exploitation pour savoir comment définir une variable d'environnement.

Après avoir défini la variable d'environnement PEDATAHOME, vous devez lancer une nouvelle session SQL pour pouvoir utiliser la fonction ST_Transform. Le serveur n'a toutefois pas besoin d'être redémarré.

Si les données sont stockées dans une base de données (au lieu d'une géodatabase) et qu'aucun index spatial n'a été défini dans la colonne spatiale, vous pouvez ajouter une deuxième colonne ST_Geometry et y générer les données transformées. Vous pouvez conserver à la fois la colonne ST_Geometry d'origine (source) et la colonne ST_Geometry de destination dans la table, mais vous ne pouvez afficher qu'une seule colonne en même temps dans ArcGIS à l'aide d'une vue ou en modifiant la définition de couche de requête de la table.

Si les données sont stockées dans une base de données (au lieu d'une géodatabase) et qu'un index spatial a été défini dans la colonne spatiale, vous ne pouvez pas conserver la colonne ST_Geometry d'origine. Lorsqu'un index spatial a été défini dans une colonne ST_Geometry, le SRID est écrit dans la table de métadonnées st_geometry_columns. ST_Transform n'actualise pas cette table.

  1. Créez une copie de sauvegarde de la table.
  2. Créez une deuxième colonne ST_Geometry (de destination) dans la table.
  3. Exécutez ST_Transform. Faites en sorte que les données transformées soient une sortie de la colonne ST_Geometry de destination.
  4. Retirez l'index spatial de la colonne ST_Geometry source.
  5. Retirez la colonne ST_Geometry source.
  6. Créez un index spatial dans la colonne ST_Geometry de destination.

Si les données sont stockées dans une géodatabase, vous devez utiliser les outils ArcGIS pour reprojeter les données dans une nouvelle classe d'entités. L'exécution de ST_Transform dans une classe d'entités de géodatabase annule la fonction de mise à jour des tables système de géodatabase avec le nouveau SRID.

Utilisation de ST_Transform avec SQLite

Dans SQLite, vous pouvez procéder à des conversions de références spatiales qui présentent le même système de coordonnées géographiques ou des systèmes de coordonnées géographiques différents. Lorsque les deux systèmes de coordonnées géographiques sont différents, une transformation géographique est effectuée. Une transformation géographique consiste à effectuer une conversion entre deux systèmes de coordonnées géographiques. Une transformation géographique est définie dans une direction spécifique, par exemple de NAD 1927 vers NAD 1983, mais la fonction ST_Transform appliquera correctement la transformation quels que soient les systèmes de coordonnées source et de destination.

Les méthodes de transformation géographiques peuvent être classées dans les deux catégories suivantes : basées sur des équations et basées sur des fichiers. Les méthodes basées sur des équations sont autonomes et ne nécessitent aucune information externe. Celles basées sur des fichiers font appel à des fichiers stockés sur le disque pour calculer les valeurs de décalage. Elles sont habituellement plus précises que les méthodes basées sur les équations. Les méthodes basées sur des fichiers sont habituellement utilisées en Australie, au Canada, en Allemagne, en Nouvelle-Zélande, en Espagne et aux Etats-Unis. Vous pouvez obtenir les fichiers (à l'exception de ceux pour le Canada) à partir d'une installation ArcGIS for Desktop ou directement auprès des diverses agences nationales de cartographie.

Syntaxe

Les références spatiales source et cible ont le même système de coordonnées géographiques.

Oracle et PostgreSQL

sde.st_transform (geometry1 sde.st_geometry, srid integer)

SQLite

st_transform (geometry1 geometryblob, srid in32)

Les références spatiales source et cible n'ont pas le même système de coordonnées géographiques.

Oracle

sde.st_transform (g1 sde.st_geometry, srid integer, geogtrans_id integer)

SQLite

st_transform (geometry1 geometryblob, srid int32, geogtrans_id int32)

Type de retour

Oracle et PostgreSQL

ST_Geometry

SQLite

Geometryblob

Exemples

Transformation des données lorsque les références spatiales source et de destination ont le même système de coordonnées géographiques

L'exemple suivant crée une table transform_test qui comporte deux colonnes linestring : ln1 et ln2. Une ligne est insérée dans ln1 avec SRID 4326. La fonction ST_Transform est ensuite utilisée dans une instruction UPDATE pour accepter l'objet linestring de la colonne 1n1, le convertir de la référence de coordonnées attribuée à SRID 4326 en référence de coordonnée attribuée à SRID 3857 et le placer dans la colonne ln2.

RemarqueRemarque :

Les SRID 4326 et 3857 possèdent le même datum géographique.

Oracle

CREATE TABLE transform_test (
 ln1 sde.st_geometry,
 ln2 sde.st_geometry);

INSERT INTO transform_test (ln1) VALUES (
 sde.st_geometry ('linestring (10.01 40.03, 92.32 29.39)', 4326)
);
UPDATE transform_test
 SET ln2 = sde.st_transform (ln1, 3857);

PostgreSQL

CREATE TABLE transform_test (
 ln1 sde.st_geometry,
 ln2 sde.st_geometry);

INSERT INTO transform_test (ln1) VALUES (
 sde.st_geometry ('linestring (10.01 40.03, 92.32 29.39)', 4326)
);
UPDATE transform_test
 SET ln2 = sde.st_transform (ln1, 3857);

SQLite

CREATE TABLE transform_test (id integer);

SELECT AddGeometryColumn(
 NULL,
 'transform_test',
 'ln1',
 4326,
 'linestring',
 'xy',
 'null'
);

INSERT INTO transform_test (ln1) VALUES (
 st_geometry ('linestring (10.01 40.03, 92.32 29.39)', 4326)
);
UPDATE transform_test
 SET ln1 = st_transform (ln1, 3857);

Transformation des données lorsque les références spatiales source et de destination n'ont pas le même système de coordonnées géographiques (Oracle et SQLite uniquement)

Dans l'exemple suivant, la table n27 qui contient une colonne ID et une colonne geometry est créée. Un point est inséré dans la table n27 avec un SRID de 4267. Le SRID 4267 utilise le système de coordonnées géographiques NAD 1927.

Ensuite, la table n83 est créée et la fonction ST_Transform est utilisée pour insérer la géométrie depuis la table n27 vers la table n83, mais avec un SRID de 4269 et un ID de transformation géographique de 1241. Le SRID 4269 utilise le système de coordonnées géographiques NAD 1983 et 1241 est l'ID connu pour la transformation NAD_1927_To_NAD_1983_NADCON. Cette transformation est basée sur des fichiers et peut être utilisée pour les 48 états des Etats-Unis.

AstuceAstuce:

Pour obtenir les listes des transformations géographiques prises en charge, reportez-vous à cet article technique et aux listes associées : http://support.esri.com/en/knowledgebase/techarticles/detail/21327.

Oracle

--Create table.
CREATE TABLE n27 (
 id integer,
 geometry sde.st_geometry
);

--Insert point with SRID 4267.
INSERT INTO N27 (id, geometry) VALUES (
 1, 
 sde.st_geometry ('point (-123.0 49.0)', 4267)
);

--Create the n83 table as the destination table of the transformation.
CREATE TABLE n83 (
 id integer,
 geometry sde.st_geometry
);

--Run the transformation.
INSERT INTO N83 (id, geometry) VALUES (
 1, 
 sde.st_transform (N27.geometry, 4269, 1241)
);

Si la variable PEDATAHOME est définie correctement, l'exécution d'une instruction SELECT sur la table n83 doit renvoyer le résultat suivant :

SELECT id, sde.st_astext (geometry) description 
 FROM N83;

ID	DESCRIPTION
1 | POINT((-123.00130569 48.999828199))

SQLite

--Create source table.
CREATE TABLE n27 (id integer);

SELECT AddGeometryColumn(
 NULL,
 'n27',
 'geometry',
 4267,
 'point',
 'xy',
 'null'
);

--Insert point with SRID 4267.
INSERT INTO n27 (id, geometry) VALUES (
 1, 
 st_geometry ('point (-123.0 49.0)', 4267)
);

--Create the n83 table as the destination table of the transformation.
CREATE TABLE n83 (id integer);

SELECT AddGeometryColumn(
 NULL,
 'n83',
 'geometry',
 4269,
 'point',
 'xy',
 'null'
);

--Run the transformation.
INSERT INTO n83 (id, geometry) VALUES (
 1, 
 st_transform ((select geometry from n27 where id=1), 4269, 1241)
);

Thèmes connexes

5/10/2014