Ändern der SRID bestehender Daten in PostGIS?


50

Beim Importieren meiner Shapefile-Daten in PostGIS habe ich nicht die richtige Projektion ausgewählt.

Wie ändere ich jetzt die SRID der Daten, ohne die Koordinaten zu transformieren?

Antworten:


83

Es gibt eine Einzeilenfunktion, die dies für Sie erledigt. Verwenden Sie einfach die folgende SQL-Abfrage:

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

Aber wenn Sie so sind wie ich, würden Sie sich für die kleinen Schritte interessieren. Logischerweise entspricht die obige Funktion dem folgenden vierstufigen Prozess:

  1. Aktualisieren Sie in der Tabelle geometry_columns die SRID auf den erforderlichen Wert.

  2. Legen Sie das Contraint mithilfe der folgenden SQL-Anweisung auf dem Tisch ab

    ALTER TABLE mytable DROP CONSTRAINT enforce_srid_the_geom;

  3. Aktualisieren Sie die SRID der Geometrie mithilfe der folgenden SQL-Anweisung

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

  4. Fügen Sie das Contraint mithilfe der folgenden SQL-Anweisung zurück

    ALTER TABLE mytable

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


1
Siehe postgis.org/docs/ST_SetSRID.html für weitere Informationen und Links
BradHards

13

In PostGIS 2.x verwenden Geometriespalten normalerweise typmods wie geometry(Point, 1234). Für diese können Sie ALTER TABLE verwenden , um den Geometriesäulentyp in einem Schritt direkt zu ändern.

Verwenden Sie beispielsweise ST_SetSRID , um die SRID von geomin mytableauf WGS84 festzulegen :

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

Beachten Sie, dass hierdurch nur die SRID geändert wird, nicht jedoch die Koordinatendaten.


1
Mit einer geringfügigen Änderung funktioniert dies auch mit geografischen Spalten, die UpdateGeometrySRIDnicht unterstützt werden.
DSZ
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.