Mengubah SRID data yang ada di PostGIS?

50

Saat mengimpor data shapefile saya ke PostGIS, saya tidak memilih Proyeksi yang tepat.

Bagaimana saya sekarang mengubah SRID data, tanpa mengubah Koordinat?

Devdatta Tengshe
sumber

Jawaban:

84

Ada fungsi garis tunggal yang melakukan ini untuk Anda. Cukup gunakan query SQL berikut:

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

Tetapi, jika Anda seperti saya, Anda akan tertarik pada langkah-langkah miniatur tingkat rendah. Secara logis, fungsi di atas setara dengan proses empat langkah berikut:

  1. Di tabel geometry_columns, perbarui SRID ke nilai yang diperlukan.

  2. Jatuhkan contraint di atas meja, dengan menggunakan pernyataan SQL berikut

    ALTER TABLE mytable DROP CONSTRAINT enforce_srid_the_geom;

  3. Perbarui SRID dari geometri dengan menggunakan pernyataan SQL berikut

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

  4. Tambahkan kembali contraint dengan menggunakan pernyataan SQL berikut

    ALTER TABLE mytable

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

Devdatta Tengshe
sumber
1
Lihat postgis.org/docs/ST_SetSRID.html untuk info dan tautan lebih lanjut
BradHards
13

Dengan PostGIS 2.x, kolom geometri biasanya menggunakan typmods like geometry(Point, 1234). Untuk ini, Anda dapat menggunakan ALTER TABLE untuk secara langsung mengubah jenis kolom geometri dalam satu langkah.

Misalnya, untuk mengatur SRID geomin mytableke WGS84, gunakan ST_SetSRID :

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

Perhatikan bahwa ini hanya akan mengubah SRID, tetapi tidak mengubah data koordinat.

Mike T
sumber
1
Dengan perubahan sepele, ini juga akan berfungsi dengan kolom geografi , yang UpdateGeometrySRIDtidak mendukung.
dsz