为什么在使用 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)