¿Cambiar SRID de datos existentes en PostGIS?

50

Al importar mis datos de archivo de forma a PostGIS, no seleccioné la proyección adecuada.

¿Cómo cambio ahora el SRID de los datos, sin transformar las coordenadas?

Devdatta Tengshe
fuente

Respuestas:

84

Hay una función de línea única que hace esto por usted. Simplemente use la siguiente consulta SQL:

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

Pero, si eres como yo, te interesarían los pasos en miniatura de bajo nivel. Lógicamente hablando, la función anterior es equivalente al siguiente proceso de cuatro pasos:

  1. En la tabla geometry_columns, actualice el SRID al valor requerido.

  2. Suelte la restricción en la tabla, utilizando la siguiente instrucción SQL

    ALTER TABLE mytable DROP CONSTRAINT enforce_srid_the_geom;

  3. Actualice el SRID de la geometría utilizando la siguiente instrucción SQL

    UPDATE mytable SET the_geom = ST_SetSRID(the_geom, newSRID);

  4. Agregue la restricción utilizando la siguiente instrucción SQL

    ALTER TABLE mytable

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

Devdatta Tengshe
fuente
1
Consulte postgis.org/docs/ST_SetSRID.html para obtener más información y enlaces
BradHards,
13

Con PostGIS 2.x, las columnas de geometría generalmente usan typmods como geometry(Point, 1234). Para estos, puede usar ALTER TABLE para modificar directamente el tipo de columna de geometría en un solo paso.

Por ejemplo, para establecer el SRID de geomin mytableen WGS84, use ST_SetSRID :

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

Tenga en cuenta que esto solo alterará el SRID, pero no transformará los datos de coordenadas.

Mike T
fuente
1
Con un cambio trivial, esto también funcionará con columnas de geografía , que UpdateGeometrySRIDno es compatible.
dsz