Zmieniasz SRID istniejących danych w PostGIS?

50

Podczas importowania danych pliku kształtu do PostGIS nie wybrałem właściwej projekcji.

Jak mogę teraz zmienić SRID danych bez przekształcania współrzędnych?

Devdatta Tengshe
źródło

Odpowiedzi:

83

Istnieje funkcja jednej linii, która robi to za Ciebie. Wystarczy użyć następującego zapytania SQL:

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

Ale jeśli jesteś podobny do mnie, zainteresują Cię miniaturowe kroki na niskim poziomie. Logicznie rzecz biorąc, powyższa funkcja jest równoważna z następującym czteroetapowym procesem:

  1. W tabeli geometry_columns zaktualizuj identyfikator SRID do wymaganej wartości.

  2. Upuść ograniczenie na tabelę, używając następującej instrukcji SQL

    ALTER TABLE mytable DROP CONSTRAINT enforce_srid_the_geom;

  3. Zaktualizuj SRID'd geometrii, używając następującej instrukcji SQL

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

  4. Dodaj ograniczenie z powrotem, używając następującej instrukcji SQL

    ALTER TABLE mytable

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

Devdatta Tengshe
źródło
1
Aby uzyskać więcej informacji i linki,
zobacz postgis.org/docs/ST_SetSRID.html
13

W PostGIS 2.x kolumny geometryczne zwykle używają typmods jak geometry(Point, 1234). W tym celu możesz użyć ALTER TABLE, aby bezpośrednio zmodyfikować typ kolumny geometrii w jednym kroku.

Na przykład, aby ustawić SRID się geomw mytableWGS84, użyj ST_SetSRID :

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

Pamiętaj, że spowoduje to jedynie zmianę SRID, ale nie przekształci danych współrzędnych.

Mike T.
źródło
1
Po trywialnej zmianie zadziała to również z kolumnami geograficznymi , które UpdateGeometrySRIDnie są obsługiwane.
dsz