yang dapat diisi dari kolom lain (the_geom) menggunakan:
UPDATE my_table SET
the_geom_mercator = ST_Transform(the_geom,3857)FROM spatial_ref_sysWHERE ST_SRID(the_geom)= srid;
(baris ketiga FROM spatial_ref_sys ...tidak diperlukan, tetapi menjaga transformasi upaya dengan proyeksi yang tidak diketahui atau tidak valid, yang menimbulkan kesalahan).
Dan jika tabel ini dipertahankan (ditambahkan / diperbarui), Anda dapat menggunakan fungsi pemicu untuk memperbarui the_geom_mercator, misalnya:
CREATEOR REPLACE FUNCTION my_table_tg_fn() RETURNS triggerAS$BODY$BEGINIF TG_OP ='INSERT'AND NEW.the_geom ISNULL THENRETURN NEW;-- no new geometry
ELSIF TG_OP ='UPDATE'THENIF NEW.the_geom ISNOTDISTINCTFROM OLD.the_geom THENRETURN NEW;-- same old geometryENDIF;ENDIF;-- Attempt to transform a geometryBEGIN
NEW.the_geom_mercator := ST_Transform(NEW.the_geom,3857);
EXCEPTION WHEN SQLSTATE 'XX000'THEN
RAISE WARNING 'the_geom_mercator not updated: %', SQLERRM;END;RETURN NEW;END;$BODY$ LANGUAGE plpgsql;CREATETRIGGER my_table_tg BEFORE INSERTORUPDATEON my_table FOR EACH ROWEXECUTEPROCEDURE my_table_tg_fn();
Perhatikan bahwa ST_Transform seharusnya menjebak kesalahan dan menampilkan peringatan, misalnya:
Terima kasih atas jawaban yang bagus. Benar-benar rapi untuk menggunakan pemicu, saya akan mulai melakukannya. Bisakah saya menambahkan pemicu itu ke basis data, sehingga saya tidak perlu menambahkan pemicu ini untuk setiap tabel baru?
knutole
Saya menambahkan data ke postgis dengan shp2psqldan tabel dibuat ketika disalurkan melalui psql. Jadi saya tidak bisa menambahkan pemicu sebelum tabel ada?
knutole
1
Jika Anda menggunakan shp2pgsql, gunakan pernyataan pembaruan, lihat di atas. Pemicu berguna jika Anda perlu mempertahankan tabel, tetapi tidak untuk memuat.
Mike T
2
Pertama buat tabel non-spasial normal, yang sudah Anda miliki. Kedua, tambahkan kolom spasial ke tabel menggunakan fungsi OpenGIS "AddGeometryColumn".
Contoh:
CREATETABLE terrain_points (
ogc_fid serial NOTNULL,
elevation doubleprecision,);SELECT AddGeometryColumn('terrain_points','wkb_geometry',3725,'POINT',3);
Anda bisa membuat kolom geometri SRID yang tidak dibatasi untuk menahan bentuk asli dan kemudian mengubah ke yang sudah ada. Berikut adalah contoh yang dibuat dengan asumsi Anda memiliki poligon yang Anda salin dari tabel pementasan (jika Anda telah dicampur, Anda dapat mengatur tipe ke geometri misalnya geometri (Geometri, 3857):
Terima kasih atas jawaban anda. Apakah ada cara untuk melakukan ini pada tabel yang sudah ada (mis. Tanpa menggunakan staging tables)? Katakanlah saya sudah punya tabel, dengan geomkolom, dan saya hanya ingin menambahkan the_geom_webmercatorkolom lain . Bagaimana saya melakukannya?
shp2psql
dan tabel dibuat ketika disalurkan melaluipsql
. Jadi saya tidak bisa menambahkan pemicu sebelum tabel ada?Pertama buat tabel non-spasial normal, yang sudah Anda miliki. Kedua, tambahkan kolom spasial ke tabel menggunakan fungsi OpenGIS "AddGeometryColumn".
Contoh:
sumber
Anda bisa membuat kolom geometri SRID yang tidak dibatasi untuk menahan bentuk asli dan kemudian mengubah ke yang sudah ada. Berikut adalah contoh yang dibuat dengan asumsi Anda memiliki poligon yang Anda salin dari tabel pementasan (jika Anda telah dicampur, Anda dapat mengatur tipe ke geometri misalnya geometri (Geometri, 3857):
sumber
geom
kolom, dan saya hanya ingin menambahkanthe_geom_webmercator
kolom lain . Bagaimana saya melakukannya?