Définition
ST_Transform prend les données ST_Geometry bidimensionnelles comme entrée et renvoie les valeurs converties en une référence spatiale spécifiée par l'ID de référence spatiale (SRID) que vous fournissez.
Lorsque les deux systèmes de coordonnées géographiques sont différents, ST-Transform effectue une transformation géographique. 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 Desktop ou directement auprès des diverses agences nationales de cartographie.
Pour prendre en charge les transformations basées sur des fichiers, les fichiers doivent se trouver sur le serveur de base de données dans la même structure relative de dossiers que dans le dossier pedata du répertoire d’installation de ArcGIS Desktopou ArcGIS Pro.
Par exemple, il y a un dossier appelé pedata dans le répertoire d'installation ArcMap et dans le dossier Resources du répertoire d'installation ArcGIS Pro. Le dossier pedata 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 vers le serveur de base de données ou créez un répertoire sur le serveur de base de données qui contient les fichiers et sous-répertoires de méthode de transformation issus du fichier pris en charge. Une fois que les fichiers se trouvent sur le serveur de base de données, définissez une variable d'environnement de système d'exploitation appelée PEDATAHOME sur le même 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é.
Utilisation de ST_Transform avec PostgreSQL
Dans PostgreSQL, 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.
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 lorsque les systèmes de coordonnées géographiques sont identiques :
- Créez une copie de sauvegarde de la table.
- Créez une deuxième colonne ST_Geometry (de destination) dans la table.
- 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.
- Exécutez ST_Transform. Faites en sorte que les données transformées soient une sortie de la colonne ST_Geometry de destination.
- 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.
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.
- Créez une copie de sauvegarde de la table.
- Créez une deuxième colonne ST_Geometry (de destination) dans la table.
- Exécutez ST_Transform. Faites en sorte que les données transformées soient une sortie de la colonne ST_Geometry de destination.
- Retirez l'index spatial de la colonne ST_Geometry source.
- Retirez la colonne ST_Geometry source.
- 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.
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)
PostgreSQL
Option 1 : sde.st_transform (g1 sde.st_geometry, srid int)
Option 2 : sde.st_transform (g1 sde.st_geometry, srid int, [geogtrans_id int])
Option 3 : sde.st_transform (g1 sde.st_geometry, srid int, [extent double] [prime meridian double] [unit conversion factor double])
L'option 3 vous permet de spécifier l'étendue en tant que liste de coordonnées séparées par une virgule dans l'ordre suivant : coordonnée x en bas à gauche, coordonnée y en bas à gauche, coordonnée x en haut à droite, coordonnée y en haut à droite. Si vous ne précisez pas d'étendue, ST-Transform utilise une étendue plus générale et plus grande.
Lorsque vous spécifiez une étendue, le méridien principal et les paramètres du facteur de conversion unitaire sont en option. Vous ne devez fournir ces informations que si les valeurs d'étendue spécifiées n'utilisent pas le méridien de Greenwich ni les degrés décimaux.
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 la colonne ln1 avec un SRID de 4326. La fonction ST_Transform est ensuite utilisée dans une instruction UPDATE pour accepter l'objet linestring de la colonne ln1, 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.
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);
Transformer les 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
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 de la table n27 dans la table n83, mais avec un SRID de 4269 et la transformation géographique ID 1241. Le SRID 4269 utilise le système de coordonnées géographiques NAD 1983 et 1241 est l'ID connu de 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.
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)(
select c.id, sde.st_transform (c.geometry, 4269, 1241)
from N27 c
);
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))
PostgreSQL
--Option 1
--Gets geographic transformation from ST_Geometry libraries.
--Does not require you to provide a GTid.
--Performs an equation-based transformation between two geographic coordinate systems
--with different datums. (SRID 4267/DATUM NAD27 to SRID 4269/DATUM NAD 83)
--Provide point to transform.
SELECT sde.ST_AsText(sde.ST_Transform(
sde.ST_Geometry('point (-155.7029 63.6096)',4267), 4269));
--Returns output in SRID 4269.
"POINT ( -155.70290000 63.60960000)"
--Option 2
--Example uses input point in SRID 3857(DATUM: WGS 1984)
--and geographic transformation ID (GTid) 1251.
--Transforms point to SRID 102008 (DATUM: NAD 83)
--Provide point to transform.
SELECT sde.ST_AsText(sde.ST_Transform(
sde.ST_Geometry('point (-13244252.9404 4224702.5198)', 3857), 102008, 1251));
--Returns output in SRID 102008.
"POINT (-1957193.14740000 -297059.19680000)"
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)
);