将shapefile数据导入PostGIS时,我没有选择正确的Projection。

现在如何在不变换坐标的情况下更改数据的SRID?

#1 楼

有一个单行功能可以为您完成此任务。只需使用以下SQL查询:

select UpdateGeometrySRID('Schema Name', 'mytable', 'the_geom', newSRID) ;


但是,如果您像我一样,可能会对低级的微型步骤感兴趣。从逻辑上讲,以上功能等效于以下四个步骤:


在geometry_columns表中,将SRID更新为所需值。

通过使用以下SQL语句在表上进行约束

ALTER TABLE mytable DROP CONSTRAINT enforce_srid_the_geom;


通过使用以下SQL语句更新几何的SRID'
UPDATE mytable SET the_geom = ST_SetSRID(the_geom, newSRID);


使用以下SQL语句重新添加约束

ALTER TABLE mytable

ADD CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = (newSRID));



评论


有关更多信息和链接,请参见postgis.org/docs/ST_SetSRID.html。

– BradHards
2012年10月1日在9:12

我只使用此“ UPDATE mytable SET the_geom = ST_SetSRID(the_geom,newSRID);”

–阿德鲁兹曼博士
3月31日下午2:18

@MdAmiruzzaman这个问题来自PostGIS的1.x版本,其中使用了geometries_columns表。现在使用2.x,并且不使用该表,您不需要经过这么长时间的过程,但是如果您对表有约束,那么也需要更新

–德瓦塔塔·滕舍
3月31日10:45

如果您在表上有视图,UpdateGeometrySRID将不起作用。您需要先使用表格删除所有视图,然后再更新几何,它们会重新创建所有视图

– GeoStoneMarten
8月21日7:46

#2 楼

在PostGIS 2.x中,几何列通常使用像geometry(Point, 1234)这样的typmod。对于这些,您可以使用ALTER TABLE一步直接修改几何列类型。例如,要将geommytable的SRID设置为WGS84,请使用ST_SetSRID:

ALTER TABLE mytable
  ALTER COLUMN geom
    TYPE geometry(Point, 4326)
    USING ST_SetSRID(geom, 4326);


请注意,这只会更改SRID,而不会变换坐标数据。

评论


进行微小的更改后,这也将适用于UpdateGeometrySRID不支持的地理位置列。

–dsz
19年1月31日,下午3:16