Mengubah dari SRID 900913 ke 4326 dengan PostGis

8

Saya memiliki dua tabel Postgres dengan SRID yang berbeda: 4326 dan 900913. Saya ingin mengubah yang terakhir menjadi 4326. Saya pertama-tama mengubah SRID menggunakan:

Select UpdateGeometrySRID('table', 'geomcolumn', 4326).  

Saya kemudian mengubah data referensi menggunakan:

update table set geomcolumn = ST_Transform (geomcolumn, 4326). 

Ini sepertinya berhasil. Tetapi ketika saya mengubah pengaturan SRS dari lapisan yang relevan di TileMill ke WGS84, saya mendapatkan kesalahan ini:

Terdeteksi dari batas-batas geografis.

Agaknya transformasi tidak berhasil tetapi tidak jelas mengapa.

rpahne
sumber
Saya kira Anda ingin WGS84, yaitu EPSG: 4326, bukan 4236.
AndreJ
Pertanyaan cepat: apakah Tilemill lebih cepat jika geometrinya adalah WGS84? Jadi apakah layak mengkonversi setiap lapisan yang menggunakan Proyeksi 900913 ke WGS84? Maaf .. Saya seorang novis GIS;)
Georg

Jawaban:

22

Transformasi gagal untuk kasus Anda karena perintah UpdateGeometrySRID hanya mengubah metadata, tetapi tidak mengubah koordinat. Dan ketika Anda mencoba transformasi dari 4326-> 4326, tidak ada transformasi yang dilakukan karena SRID sama.


Jika Anda memiliki PostGIS 2.x dengan tabel seperti ini:

CREATE TABLE my_table (
  gid serial primary key,
  geom geometry(Point,900913),
  name text not null
);

cara yang benar untuk mengubah dan mengubah sistem referensi spasial kolom geometri adalah dengan menggunakan ALTER TABLE DDL:

ALTER TABLE my_table
    ALTER COLUMN geom TYPE geometry(Point,4326) USING ST_Transform(geom,4326);
Mike T
sumber
Saya mencoba melakukan hal yang sama tetapi sepertinya saya tidak dapat menjalankan perintah ALTER TABLE ini. ALTER TABEL Detail_Building_buildinglayer ALTER COLUMN Geometri TIPE geometri (Polygon, 900913) MENGGUNAKAN ST_Transformasi (geom, 2954); Kesalahan yang saya dapatkan adalah hubungan "detail_building_buildinglayer" tidak ada. Saya tidak mendapatkan ini karena itu adalah nama meja saya bukan hubungan.
Tyler Veinot
@TylerVeinot lihat stackoverflow.com/q/21796446/327026
Mike T
Terima kasih, itu masalahnya; program yang membuat tabel geometri menamakannya Geometri dan bukan geom. Setelah membaca posting itu saya mencoba tanda kutip sehingga akan mencari "Geometri" tetapi masih gagal. Jadi, saya mengubah nama kolom geometri menjadi geom, menjalankan kueri dan berhasil; setelah saya ganti namanya kembali menjadi "Geometri". Saya pikir nama dan kasingnya menyebabkan masalah.
Tyler Veinot
1
Sudahkah Anda mengubah nama kolom basis data alih-alih nama kolom dalam skrip SQL ??? Yesus!
Magno C
0

Ini bekerja untuk saya dengan urutan ini:

CREATE TABLE tabla_900913 AS (SELECT ST_TRANSFORM(geom, 4326) FROM "tabla_4326")
Luis Angel Vega Panta
sumber