ST_Transform — 返回坐标转换到不同空间参考系的新几何图形。
geometry ST_Transform(
geometry g1, integer srid)
;
geometry ST_Transform(
geometry geom, text to_proj)
;
geometry ST_Transform(
geometry geom, text from_proj, text to_proj)
;
geometry ST_Transform(
geometry geom, text from_proj, integer to_srid)
;
返回坐标已转换到不同空间参考系的新几何图形。目标空间参考 to_srid
可以由有效的SRID整数参数标识(即,它必须存在于 spatial_ref_sys
表)。或者,定义为PROJ.4字符串的空间参考可用于 to_proj
和/或 from_proj
然而,这些方法并没有得到优化。如果目标空间参考系统用PROJ.4字符串而不是SRID表示,则输出几何图形的SRID将设置为零。的函数除外 from_proj
、输入几何图形必须具有已定义的SRID。
ST_Transform经常与 ST_SetSRID 。ST_Transform实际上将几何体的坐标从一个空间参考系更改到另一个空间参考系,而ST_SetSRID()只是更改几何体的SRID标识符。
![]() | |
需要在支持项目的情况下编译PostGIS。使用 PostGIS_Full_Version 以确认您已编译了项目支持。 |
![]() | |
如果使用多个转换,则对常用转换使用函数索引以利用索引使用是很有用的。 |
![]() | |
在1.3.4之前的版本中,如果与包含曲线的几何体一起使用,此函数会崩溃。这在1.3.4+中已修复 |
增强:引入了对多面体曲面的2.0.0支持。
增强:2.3.0引入了对直接PROJ.4文本的支持。
This method implements the SQL/MM specification. SQL-MM 3:5.1.6
This method supports Circular Strings and Curves
This function supports Polyhedral surfaces.
将马萨诸塞州平面US Foot几何体更改为WGS 84经度
SELECT 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.3902896512902,-71.1776843766326 42.3903829478009, -71.1775844305465 42.3903826677917,-71.1775825927231 42.3902893647987,-71.177684 8522251 42.3902896512902)); (1 row) --3D Circular String example SELECT 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)); st_asewkt -------------------------------------------------------------------------------------- SRID=4326;CIRCULARSTRING(-71.1776848522251 42.3902896512902 1,-71.1776843766326 42.3903829478009 2, -71.1775844305465 42.3903826677917 3, -71.1775825927231 42.3902893647987 3,-71.1776848522251 42.3902896512902 4)
创建部分函数索引的示例。对于不确定是否会填充所有几何图形的表,最好使用省略空几何图形的部分索引,这样既可以节省空间,又可以使索引更小、更高效。
CREATE INDEX idx_geom_26986_parcels ON parcels USING gist (ST_Transform(geom, 26986)) WHERE geom IS NOT NULL;
使用PROJ.4文本转换自定义空间参考的示例。
-- Find intersection of two polygons near the North pole, using a custom Gnomic projection -- See http://boundlessgeo.com/2012/02/flattening-the-peel/ 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 ST_AsText( ST_Transform( ST_Intersection(ST_Transform(p1, gnom), ST_Transform(p2, gnom)), gnom, 4326)) FROM data; st_astext -------------------------------------------------------------------------------- POLYGON((-170 74.053793645338,-141 73.4268621378904,-141 68,-170 68,-170 74.053793645338))
有时,涉及栅格移动的坐标转换可能会失败,例如,如果PROJ.4尚未使用栅格移动文件构建,或者坐标不在定义栅格移动的范围内。默认情况下,如果不存在格网平移文件,则PostGIS将引发错误,但可以通过测试不同的SRID来配置此行为 to_proj
PROJ.4文本的值,或更改 proj4text
中的值。 spatial_ref_sys
数据表。
例如,proj4text参数+datum=NAD87是以下+nadgrids参数的简写形式:
+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat
@前缀表示如果文件不存在,则不会报告错误,但如果到达列表末尾,但没有合适的文件(即找到并重叠),则发出错误。
相反,如果您希望确保至少存在标准文件,但如果扫描所有文件时没有命中,则应用空转换,您可以使用:
+nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat,null
空网格平移文件是覆盖整个世界且不应用平移的有效网格平移文件。因此,作为一个完整的示例,如果您想要更改PostGIS,以使不在正确范围内的到SRID 4267的转换不会引发错误,您将使用以下命令:
UPDATE spatial_ref_sys SET proj4text = '+proj=longlat +ellps=clrk66 +nadgrids=@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat,null +no_defs' WHERE srid = 4267;