ST_Transform
定义
ST_Transform 将二维 ST_Geometry 数据转换为空间参考 ID (SRID) 所指定的空间参考。
在 PostgreSQL 中,使用 ST_Transform 函数转换 ST_Geometry 列中的空间参考时,源和目标空间参考必须具有相同的地理坐标系。
在 Oracle 中,可以在具有相同地理坐标系或不同地理坐标系的空间参考之间进行转换。如果地理坐标系不同,则应进行地理(坐标)变换。地理(坐标)变换在地理坐标系间进行转换。地理(坐标)变换定义为在特定转换方向上进行,例如从 NAD 1927 到 NAD 1983,但不管源和目标坐标系是什么,ST_Transform 函数都能正确执行变换。
地理变换方法可分为两类:基于方程和基于文件。基于方程的方法是独立的,不需要任何外部信息。基于文件的方法使用磁盘上的文件计算偏移值。与基于方程的方法相比,它们通常会更加精确。在澳大利亚、加拿大、德国、新西兰、西班牙和美国,一般使用基于文件的方法。文件(加拿大除外)可从 ArcGIS for Desktop 安装获得或直接从各种国家制图机构获得。
要使 Oracle 中的地理数据库支持基于文件的变换,必须将文件置于 Oracle 服务器上与 ArcGIS for Desktop 安装目录中的相对文件夹结构相同的相对文件夹结构中。在 ArcGIS for Desktop 安装目录中,文件位于名为 pedata 的文件夹中。将 pedata 文件夹移动到 Oracle 服务器后,设置名为 PEDATAHOME 的操作系统环境变量。该变量的值是 pedata 位置。例如,如果在 Microsoft Windows 计算机上将 pedata 文件夹复制到 C:\pedata 下,则将 PEDATAHOME 环境变量设置为 C:\pedata。
有关如何设置环境变量的信息,请参阅操作系统文档。
在 pedata 文件夹中,三个受支持基于文件的方法有对应的文件夹:harn、nadcon 和 ntv2。在 ntv2 文件夹中,每个国家都有一个子目录。例如,使用早期的 pedata 位置,则澳大利亚 NTv2 文件位于 C:\pedata\ntv2\australia 下。
设置 PEDATAHOME 后,必须先启动一个新会话,然后才能使用 ST_Transform 函数。但无需重新启动服务器。
语法
在 PostgreSQL 和 Oracle 中,源和目标空间参考具有相同的地理坐标系
sde.st_transform (g1 sde.st_geometry, srid integer)
只有在 Oracle 中,源和目标空间参考不具有相同的地理坐标系
sde.st_transform (g1 sde.st_geometry, srid integer, geogtran_id integer)
返回类型
ST_Geometry
示例
源和目标空间参考具有相同的地理坐标系时转换数据
以下 CREATE TABLE 语句创建包含两个线串列(ln1 和 ln2)的 transform_test 表。
CREATE TABLE transform_test (ln1 sde.st_geometry, ln2 sde.st_geometry);
以下 INSERT 语句将 ST_LineString 插入到 ln1 中且 SRID 为 4326。
INSERT INTO transform_test (ln1) VALUES (
sde.st_geometry ('linestring (10.01 40.03, 92.32 29.39)', 4326)
);
在以下 UPDATE 语句中,ST_Transform 函数采用 ln1 中的线串,将该线串从分配给 SRID 4326 的坐标参考转换为分配给 SRID 3857 的坐标参考,并将其置于 ln2 列中。
UPDATE transform_test
SET ln2 = sde.st_transform (ln1, 3857);
SRID 4326 和 3857 位于 ST_SPATIAL_REFERENCES 视图中,并且两者具有相同的地理基准面。
源和目标空间参考不具有相同的地理坐标系时转换数据(仅限 Oracle)
以下 CREATE TABLE 语句创建 n27 表,其包含一个 ID 列和一个 ST_Geometry 列:
CREATE TABLE n27 (id integer, geometry sde.st_geometry);
以下 INSERT 语句插入 ID 值和 SRID 为 4267 的 ST_Point:
INSERT INTO N27 (id, geometry) VALUES (
1,
sde.st_geometry ('point (-123.0 49.0)', 4267));
);
4267 SRID 使用 NAD 1927 地理坐标系。
创建 n83 表作为变换的目标表格,然后运行变换:
CREATE TABLE n83 (id integer, geometry sde.st_geometry);
INSERT INTO N83 (id, geometry) VALUES (
1,
sde.st_transform (N27.geometry, 4269, 1241);
SRID 4269 使用 NAD 1983 地理坐标系,1241 为 NAD_1927_To_NAD_1983_NADCON 变换的熟知 ID。此变换是基于文件的变换并且可用于美国本土的 48 个州。如果 PEDATAHOME 正确定义,则针对 n83 表格的 SELECT 语句运行将返回以下内容:
SELECT id, sde.st_astext (geometry) description
FROM N83;
ID DESCRIPTION
1 | POINT((-123.00130569 48.999828199))
有关受支持地理变换的列表,请参阅下面的技术文章及其相关列表:http://support.esri.com/en/knowledgebase/techarticles/detail/21327。