Definición
ST_Transform toma como entrada datos de ST_Geometry bidimensionales y devuelve valores convertidos en la referencia espacial especificada por el ID de referencia espacial (SRID) que proporcione.
Cuando los sistemas de coordenadas geográficas son diferentes, ST_Transform realiza una transformación geográfica. Una transformación geográfica se convierte entre dos sistemas de coordenadas geográficas. Una transformación geográfica se define en una dirección determinada, por ejemplo de NAD 1927 a NAD 1983, pero la función ST_Transform aplicará correctamente la transformación sin importar cuáles son los sistemas de coordenadas de origen y de destino.
Los métodos de transformación geográfica se pueden dividir en dos tipos: basados en ecuación y basados en archivo. Los métodos basados en la ecuación son independientes no necesitan ninguna información externa. Los métodos basados en archivos utilizan archivos de disco para calcular los valores de desplazamiento. Son normalmente más precisos que los métodos basados en la ecuación. Los métodos basados en archivos se utilizan comúnmente en Australia, Canadá, Nueva Zelanda, Alemania, España y Estados Unidos. Los archivos (excepto los canadienses) se pueden obtener desde una instalación de ArcGIS Desktop o directamente desde las distintas agencias de representación cartográfica nacionales.
Para posibilitar las transformaciones basadas en archivos, debe colocar los archivos en el servidor de bases de datos en la misma estructura de carpetas relativa que la carpeta pedata del directorio de instalación de ArcGIS Desktop.
Por ejemplo, hay una carpeta llamada pedata en el directorio de instalación de ArcMap y en la carpeta Resources del directorio de instalación de ArcGIS Pro. La carpeta pedata contiene varias subcarpetas, pero las tres carpetas que contienen métodos basados en archivos compatibles son harn, nadcon y ntv2. Copie la carpeta pedata y su contenido desde el directorio de instalación de ArcGIS en el servidor de la base de datos o cree un directorio en el servidor de la base de datos que contenga los subdirectorios y archivos del método de transformación basado en archivos compatible. Una vez que los archivos estén en el servidor de la base de datos, establezca una variable de entorno del sistema operativo llamada PEDATAHOME en el mismo servidor. Defina la variable PEDATAHOME en la ubicación del directorio que contiene los subdirectorios y los archivos; por ejemplo, si la carpeta pedata se copia en C:\pedata en un servidor de Microsoft Windows, defina la variable de entorno PEDATAHOME como C:\pedata.
Consulte la documentación de su sistema operativo para obtener información sobre cómo establecer una variable de entorno.
Después de establecer PEDATAHOME, debe iniciar una nueva sesión de SQL para poder utilizar la función ST_Transform. Sin embargo, no es necesario reiniciar el servidor.
Usar ST_Transform con PostgreSQL
En PostgreSQL, puede realizar conversiones entre referencias espaciales que tienen el mismo o diferente sistema de coordenadas geográficas.
Si los datos están almacenados en una base de datos (y no en una geodatabase), haga lo siguiente para cambiar la referencia espacial de los datos ST_Geometry cuando los sistemas de coordenadas geográficas sean los mismos:
- Cree una copia de seguridad de la tabla.
- Cree una segunda columna (de destino) ST_Geometry en la tabla.
- Registre la columna ST_Geometry de destino especificando el nuevo SRID.
Esto especifica la referencia espacial de la columna mediante la inserción de un registro en la tabla de sistema sde_geometry_columns.
- Ejecute ST_Transform. Especifique que los datos transformados se transfieran a la columna ST_Geometry de destino.
- Anule el registro de la primera columna ST_Geometry (origen).
Si los datos están almacenados en una geodatabase, debe usar las herramientas de ArcGIS para volver a proyectar los datos en una nueva clase de entidad. Ejecutar ST_Transform en una clase de entidad de geodatabase anula la función de actualización de las tablas de sistema de la geodatabase con el nuevo SRID.
Usar ST_Transform con Oracle
En Oracle, puede convertir entre referencias espaciales que tienen el mismo sistema de coordenadas geográficas o diferentes sistemas de coordenadas geográficas.
Si los datos están almacenados en una base de datos (y no en una geodatabase) y no se ha definido ningún índice espacial en la columna espacial, puede agregar una segunda columna ST_Geometry y transferir a esa columna los datos transformados. Puede conservar tanto la columna ST_Geometry original (origen) como la columna ST_Geometry de destino en la tabla, aunque solo se puede mostrar una de ellas en ArcGIS usando una vista o modificando la definición de la capa de consulta para la tabla.
Si los datos están almacenados en una base de datos (y no en una geodatabase) y la columna espacial tiene definido un índice espacial, no puede conservar la columna ST_Geometry original. Una vez que se ha definido un índice espacial en una columna ST_Geometry, el SRID se escribe en la tabla de metadatos st_geometry_columns. ST_Transform no actualiza esa tabla.
- Cree una copia de seguridad de la tabla.
- Cree una segunda columna (de destino) ST_Geometry en la tabla.
- Ejecute ST_Transform. Especifique que los datos transformados se transfieran a la columna ST_Geometry de destino.
- Elimine el índice espacial de la columna ST_Geometry de origen.
- Elimine la columna ST_Geometry de origen.
- Cree un índice espacial en la columna ST_Geometry de destino.
Si los datos están almacenados en una geodatabase, debe usar las herramientas de ArcGIS para volver a proyectar los datos en una nueva clase de entidad. Ejecutar ST_Transform en una clase de entidad de geodatabase anula la función de actualización de las tablas de sistema de la geodatabase con el nuevo SRID.
Usar ST_Transform con SQLite
En SQLite, puede realizar conversiones entre referencias espaciales que tienen el mismo o diferente sistema de coordenadas geográficas.
Sintaxis
Las referencias espaciales de origen y de destino tienen el mismo sistema de coordenadas geográficas.
Oracle y PostgreSQL
sde.st_transform (geometry1 sde.st_geometry, srid integer)
SQLite
st_transform (geometry1 geometryblob, srid in32)
Las referencias espaciales de origen y de destino no tienen el mismo sistema de coordenadas geográficas.
Oracle
sde.st_transform (g1 sde.st_geometry, srid integer, geogtrans_id integer)
PostgreSQL
Opción 1:sde.st_transform (g1 sde.st_geometry, srid int)
Opción 2:sde.st_transform (g1 sde.st_geometry, srid int, [geogtrans_id int])
Opción 3:sde.st_transform (g1 sde.st_geometry, srid int, [extent double] [prime meridian double] [unit conversion factor double])
En la opción 3, puede especificar opcionalmente la extensión como una lista separada por comas de coordenadas en el siguiente orden: coordenada X inferior izquierda, coordenada Y inferior izquierda, coordenada X superior derecha y coordenada Y superior derecha. Si no especifica ninguna extensión, ST_Transform utiliza una extensión más grande y general.
Al especificar una extensión, los parámetros de meridiano base y de factor de conversión de unidad son opcionales. Solo tiene que proporcionar esta información si los valores de extensión que especifique no utilizan el meridiano base de Greenwich o grados decimales.
Consulte en http://www.epsg-registry.org una lista de otros meridianos base predefinidos.
SQLite
st_transform (geometry1 geometryblob, srid int32, geogtrans_id int32)
Tipo de devolución
Oracle y PostgreSQL
ST_Geometry
SQLite
Geometryblob
Ejemplos
Transformar datos cuando las referencias espaciales de origen y de destino tienen el mismo sistema de coordenadas geográficas
El siguiente ejemplo crea una tabla, transform_test, que tiene dos columnas de cadena de líneas: ln1 y ln2. Se inserta una línea en In1 con el SRID 4326. La función ST_Transform se utiliza a continuación en una declaración UPDATE para tomar la cadena de líneas de ln1, convertirla de la referencia de coordenadas asignada al SRID 4326 a la referencia de coordenadas asignada al SRID 3857 y colocarla en la columna 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);
Transformar datos cuando las referencias espaciales de origen y de destino no tienen el mismo sistema de coordenadas geográficas
En el siguiente ejemplo, se crea la tabla n27, que contiene una columna de Id. y una columna de geometría. Se inserta un punto en la tabla n27 con un SRID de 4267. El SRID 4267 utiliza el sistema de coordenadas geográficas NAD 1927.
A continuación, se crea la tabla n83 y la función ST_Transform se utiliza para insertar la geometría de la tabla n27 en la tabla n83 con un SRID de 4269 y un Id. de transformación geográfica de 1241. SRID 4269 utiliza el sistema de coordenadas geográficas NAD 1983 y 1241 es la Id. conocida de la transformación NAD_1927_To_NAD_1983_NADCON. Esta transformación se basa en archivos y se puede utilizar para los 48 estados contiguos de Estados Unidos.
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 se define una PEDATAHOME correctamente, la ejecución de una declaración SELECT contra la tabla n83 devolverá lo siguiente:
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)
);