为什么在使用 st_transform 与更改 table SRID 时得到不同的几何值?
Why do I get different geometry value when using st_transform vs changing the table SRID?
我有一个 table“人”,在“geometry_columns”postgis 视图中几何列的 SRID 设置为 4326。
我的记录 X 的几何列的值为:
"0101000020E6100000000000000080404000000000008040C0"
我知道我可以通过在提到的视图中更新它来更改该几何列的 SRID(例如,从 4326 到 3003),如下所示:
ALTER TABLE people
ALTER COLUMN geometry_column TYPE geometry(POINT, 3003)
USING ST_SetSRID(geometry_column,3003);
我的记录 X 的几何列的值现在是:
0101000020BB0B0000000000000080404000000000008040C0
与像下面的查询一样提取(使用 TS_TRANSFORM)转换后的几何图形,同时保持 SRID 为 4326,为什么我这样做会在几何图形列中得到不同的值?
SELECT St_transform(geometry_column,3003) FROM people;
结果如下,它与上一个不同,但我预计它是相同的:
0101000020BB0B0000328D4934B2BF4C413783531F94E74DC1
在 ALTER TABLE
语句中,您必须转换几何图形,而不仅仅是设置另一个 SRS。在您的代码中,您只是简单地“更改”坐标的 SRID,这意味着坐标对本身保持不变。将坐标从一个 SRS 转换到另一个的唯一方法是使用 ST_Transform
:
ALTER TABLE people
ALTER COLUMN geometry_column TYPE geometry(POINT, 3003)
USING ST_Transform(geometry_column,3003);
演示:db<>fiddle
CREATE TABLE people (geometry_column geometry(point,4326));
INSERT INTO people VALUES ('SRID=4326;POINT(33 -33)');
ALTER TABLE people
ALTER COLUMN geometry_column TYPE geometry(POINT, 3003)
USING ST_Transform(geometry_column,3003);
SELECT ST_AsEWKT(geometry_column) FROM people;
st_asewkt
--------------------------------------------------------
SRID=3003;POINT(3768164.4084946155 -3919656.244736101)
我有一个 table“人”,在“geometry_columns”postgis 视图中几何列的 SRID 设置为 4326。 我的记录 X 的几何列的值为:
"0101000020E6100000000000000080404000000000008040C0"
我知道我可以通过在提到的视图中更新它来更改该几何列的 SRID(例如,从 4326 到 3003),如下所示:
ALTER TABLE people
ALTER COLUMN geometry_column TYPE geometry(POINT, 3003)
USING ST_SetSRID(geometry_column,3003);
我的记录 X 的几何列的值现在是:
0101000020BB0B0000000000000080404000000000008040C0
与像下面的查询一样提取(使用 TS_TRANSFORM)转换后的几何图形,同时保持 SRID 为 4326,为什么我这样做会在几何图形列中得到不同的值?
SELECT St_transform(geometry_column,3003) FROM people;
结果如下,它与上一个不同,但我预计它是相同的:
0101000020BB0B0000328D4934B2BF4C413783531F94E74DC1
在 ALTER TABLE
语句中,您必须转换几何图形,而不仅仅是设置另一个 SRS。在您的代码中,您只是简单地“更改”坐标的 SRID,这意味着坐标对本身保持不变。将坐标从一个 SRS 转换到另一个的唯一方法是使用 ST_Transform
:
ALTER TABLE people
ALTER COLUMN geometry_column TYPE geometry(POINT, 3003)
USING ST_Transform(geometry_column,3003);
演示:db<>fiddle
CREATE TABLE people (geometry_column geometry(point,4326));
INSERT INTO people VALUES ('SRID=4326;POINT(33 -33)');
ALTER TABLE people
ALTER COLUMN geometry_column TYPE geometry(POINT, 3003)
USING ST_Transform(geometry_column,3003);
SELECT ST_AsEWKT(geometry_column) FROM people;
st_asewkt
--------------------------------------------------------
SRID=3003;POINT(3768164.4084946155 -3919656.244736101)