Definición
ST_Transform convierte datos ST_Geometry bidimensionales en la referencia espacial especificada por el ID de referencia espacial (SRID).
Usar ST_Transform con PostgreSQL
En PostgreSQL, la referencia espacial de destino especificada para la transformación debe tener el mismo sistema de coordenadas geográficas que la referencia espacial de origen de la columna ST_Geometry.
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:
- 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. Cuando los sistemas de coordenadas geográficas son diferentes, se 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 for Desktop o directamente desde las distintas agencias de representación cartográfica nacionales.
Para posibilitar las transformaciones basadas en archivos en Oracle, los archivos se deben guardar en el servidor de Oracle en la misma estructura de carpetas relativa que la carpeta pedata del directorio de instalación de ArcGIS for Desktop.
Por ejemplo, en el directorio de instalación de ArcGIS for Desktop, hay una carpeta denominada pedata. Esta carpeta 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 for Desktop al servidor de Oracle o cree un directorio en el servidor de Oracle 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 Oracle, establezca una variable de entorno del sistema operativo llamada PEDATAHOME en el 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.
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. Cuando los sistemas de coordenadas geográficas son diferentes, se 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 for Desktop o directamente desde las distintas agencias de representación cartográfica nacionales.
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)
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 (solo Oracle y SQLite)
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))
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)
);