为什么在使用st_transform和更改表SRID时会得到不同的几何体值



我有一个表"人;SRID被设置为4326;geometry_columns";postgis视图。我的记录X的几何体列的值为:

"0101000020E6100000000000000080404000000000008040C0";

我知道我可以通过在上述视图中更新该几何列的SRID(例如,从4326更改为3003(,如下所示:

ALTER TABLE people
ALTER COLUMN geometry_column TYPE geometry(POINT, 3003)
USING ST_SetSRID(geometry_column,3003);

我的记录X的几何体列的值现在是:

0101000020BB0B00000000000000080400000000008040C0

与提取(使用TS_TRANSFORM(转换后的几何体(如以下查询中所示(相比,为什么我在几何体列中获得不同的值,同时将SRID保持为4326?

SELECT St_transform(geometry_column,3003) FROM people;

结果如下,它与前一个不同,而我预计它是相同的:

0101000020BB0B00000328D4934B2BF44C41378531F94E74DC1

ALTER TABLE语句中,您必须变换几何体,而不仅仅是设置另一个SRS。在你的代码中,你只是";改变";坐标的SRID,这意味着坐标对本身保持不变。将坐标从一个SRS转换到另一个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)

最新更新