Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


ST_TRANSFORM

📄字数 1.7K
👁️阅读量 加载中...

功能描述

返回一个新的几何图形,其坐标转换为不同的空间参考系统。

语法格式

sql
GEOMETRY ST_TRANSFORM(GEOMETRY g1, INTEGER srid);
GEOMETRY ST_TRANSFORM(GEOMETRY geom, VARCHAR to_proj);
GEOMETRY ST_TRANSFORM(GEOMETRY geom, VARCHAR from_proj, VARCHAR to_proj);
GEOMETRY ST_TRANSFORM(GEOMETRY geom, VARCHAR from_proj, INTEGER to_srid);

参数说明

  • g1/geom:源 GEOMETRY 对象;
  • srid/to_srid:目标空间参考系统ID,必须存在于spatial_ref_sys表中。
  • from_proj:源坐标系的PROJ1.4字符串。
  • to_proj:目的坐标系的PROJ1.4字符串。

函数返回类型

GEOMETRY 类型

使用说明

  1. ST_TRANSFORM 经常与 ST_SETSRID 混淆。 ST_TRANSFORM 实际上将几何图形的坐标从一个空间参考系统更改为另一个空间参考系统,而 ST_SETSRID() 只是更改几何图形的 SRID 标识符。
  2. ST_TRANSFORM 会在给定源和目标空间参考系统的情况下自动选择合适的转换管道。要使用特定的转换方法,请使用ST_TRANSFORMPIPELINE。
  3. 如果使用多个转换,则在常用转换上拥有一个功能索引以充分利用索引的使用是很有用的。
  4. 该方法实现了SQL/MM规范。 SQL-MM 3: 5.1.6
  5. 此方法支持圆形字符串和曲线。
  6. 该函数支持多面体曲面。

示例

将马萨诸塞州平面美国英尺几何形状更改为 WGS 84 经纬度:

sql

SQL> SELECT TO_CHAR(ST_ASTEXT(ST_TRANSFORM(ST_GEOMFROMTEXT('POLYGON((743238 2967416,743238 2967450,
       743265 2967450,743265.625 2967416,743238 2967416))',2249),4326))) As wgs_geom;

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                                               WGS_GEOM                                                                                               |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| POLYGON((-71.1776848522251 42.39028965129031,-71.17768437663261 42.390382947801015,-71.17758443054647 42.390382667791854,-71.17758259272304 42.390289364798825,-71.1776848522251 42.39028965129031)) |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

3D 圆形字符串:

sql

SQL> SELECT TO_CHAR(ST_ASEWKT(ST_TRANSFORM(ST_GEOMFROMEWKT('SRID=2249;CIRCULARSTRING(743238 2967416 1,743238 2967450 2,743265 2967450 3,743265.625 2967416 3,743238 2967416 4)'),4326)));

+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                                                             EXPR1                                                                                                             |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| SRID=4326;CIRCULARSTRING(-71.1776848522251 42.39028965129031 1,-71.17768437663261 42.390382947801015 2,-71.17758443054647 42.390382667791854 3,-71.17758259272304 42.390289364798825 3,-71.1776848522251 42.39028965129031 4) |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

使用 PROJ.4 文本通过自定义空间参考进行转换:

sql

SQL> WITH data AS (
        SELECT
          ST_GEOMFROMTEXT('POLYGON((170 50,170 72,-130 72,-130 50,170 50))', 4326) AS p1,
          ST_GEOMFROMTEXT('POLYGON((-170 68,-170 90,-141 90,-141 68,-170 68))', 4326) AS p2,
          '+proj=gnom +ellps=WGS84 +lat_0=70 +lon_0=-160 +no_defs'::text AS gnom
      )
      SELECT TO_CHAR(ST_ASTEXT(
        ST_TRANSFORM(
          ST_INTERSECTION(ST_TRANSFORM(p1, gnom), ST_TRANSFORM(p2, gnom)),
        gnom, 4326)))
      FROM data;

+--------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                   EXPR1                                                                    |
+--------------------------------------------------------------------------------------------------------------------------------------------+
| POLYGON((-140.9999840290591 73.42768865981984,-141 68,-170 68,-170.00000269153608 74.05492179637055,-140.9999840290591 73.42768865981984)) |
+--------------------------------------------------------------------------------------------------------------------------------------------+