Changer le SRID des données existantes dans PostGIS?

50

Lors de l'importation de mes données de fichier de formes dans PostGIS, je n'avais pas sélectionné la projection appropriée.

Comment est-ce que je change maintenant le SRID des données, sans transformer les coordonnées?

Devdatta Tengshe
la source

Réponses:

84

Il existe une fonction de ligne unique qui le fait pour vous. Il suffit d'utiliser la requête SQL suivante:

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

Mais, si vous êtes comme moi, les marches miniatures basses vous intéresseront. Logiquement parlant, la fonction ci-dessus est équivalente au processus en quatre étapes suivant:

  1. Dans la table geometry_columns, mettez à jour le SRID avec la valeur requise.

  2. Supprimez la contrainte sur la table à l'aide de l'instruction SQL suivante

    ALTER TABLE mytable DROP CONSTRAINT enforce_srid_the_geom;

  3. Mettre à jour le SRID de la géométrie à l'aide de l'instruction SQL suivante

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

  4. Ajoute la contrainte en utilisant l'instruction SQL suivante

    ALTER TABLE mytable

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

Devdatta Tengshe
la source
1
Voir postgis.org/docs/ST_SetSRID.html pour plus d'informations et des liens
BradHards
13

Avec PostGIS 2.x, les colonnes de géométrie utilisent généralement des typmods geometry(Point, 1234). Pour ceux-ci, vous pouvez utiliser ALTER TABLE pour modifier directement le type de colonne de géométrie en une étape.

Par exemple, pour définir le SRID de geomdans mytablesur WGS84, utilisez ST_SetSRID :

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

Notez que cela ne modifiera que le SRID, mais ne transformera pas les données de coordonnées.

Mike T
la source
1
Avec un changement trivial, cela fonctionnera également avec les colonnes géographiques , ce qui UpdateGeometrySRIDne prend pas en charge.
DSZ