第5章 ST_Transform 与 ST_SetSRID:投影还是不投影?
ST_Transform 与 ST_SetSRID:投影还是不投影?
很多人经常分不清 ST_Transform 和 ST_SetSRID 这两个函数。
ST_SetSRID 不会改变坐标,只是添加元数据,声明这些坐标属于哪个空间参考系统。如果你把 WGS 84 经纬度数据错误地标记成了以米为单位的投影坐标系,会怎样?它还是经纬度。名不正言不顺,别指望用 ST_SetSRID 就能神奇地把坐标变成米制。
ST_Transform 则是用来把坐标从一个已知的空间参考系统转换到另一个已知的空间参考系统。
用标准的 ALTER TABLE 命令修正 SRID 错误很简单。下面举几个常见的场景。
示例
你忘了给数据指定空间参考系统,或者指定错了,但你知道它是 WGS 84 经纬度:
ALTER TABLE mytable
ALTER COLUMN geom TYPE geometry(MultiPolygon, 4326)
USING ST_SetSRID(geom, 4326);
你的数据是 WGS 84 经纬度,SRID 也标记对了,但你想把它转成 US National Atlas 米制:
ALTER TABLE mytable
ALTER COLUMN geom
TYPE geometry(MultiPolygon, 2163)
USING ST_Transform(geom, 2163);
你导入数据时没有指定 SRID,你知道它是 WGS 84 经纬度,想把它转成 US National Atlas 米制:
ALTER TABLE mytable
ALTER COLUMN geom
TYPE geometry(MultiPolygon, 2163)
USING ST_Transform(ST_SetSRID(geom, 4326), 2163);