【问题标题】:Why do I get different geometry value when using st_transform vs changing the table SRID?为什么在使用 st_transform 与更改表 SRID 时会得到不同的几何值?
【发布时间】:2022-01-16 18:57:45
【问题描述】:

对于“geometry_columns”postgis 视图中的几何列,我有一个表“people”,其 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

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

SELECT St_transform(geometry_column,3003) FROM people;

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

0101000020BB0B0000328D4934B2BF4C413783531F94E74DC1

【问题讨论】:

  • 因为您在转换几何图形时已更改几何图形,但只需使用 setsrid 更改元数据

标签: postgresql gis postgis


【解决方案1】:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多