Gabungkan Beberapa Tabel ke dalam Tabel Baru di PostGIS

13

Saya ingin menggabungkan sejumlah tabel menjadi tabel baru di PostGIS. Ini adalah tugas yang mudah ketika bekerja dengan data Shapefile, tetapi saya tidak yakin bagaimana melakukan ini di PostGIS. Bantuan apa pun akan sangat dihargai. Saya pikir saya menggunakan Tambah, tetapi saya tidak yakin harus mulai dari mana.

Ryan Garnett
sumber

Jawaban:

17

(Pra-penerbangan-cek: apakah atribut identik di semua tabel asli? Apakah tipe geometri persis sama di semua tabel?)

Anda juga bisa

  1. buat tabel (kosong) terlebih dahulu, kemudian gunakan INSERT INTO ... SELECT ... FROM untuk mendapatkan semua data dari masing-masing tabel asli ke dalam gabungan.
  2. Buat tabel baru dari satu pernyataan UNION besar.

Untuk 1 mungkin:

CREATE TABLE merged (id serial primary key, attrib1 integer, attrib2 varchar(15),....);
SELECT AddGeometryColumn('merged','geom',<SRID>,'<FEATURE_TYPE>,'XY');
INSERT INTO merged (attrib1, attrib2, ...., geom) SELECT attribA, attribB,...,geom FROM table_1;
INSERT INTO merged (attrib1, attrib2, ...., geom) SELECT attribA, attribB,...,geom FROM table_2;

dan seterusnya...

Untuk opsi 2:

CREATE TABLE merged AS( 
SELECT attribA, attribB,...,geom FROM table_1
UNION 
SELECT attribA, attribB,...,geom FROM table_2
UNION
.... 
);
SELECT Populate_Geometry_Columns('merged'::regclass);

HTH, Micha

Micha
sumber
Terima kasih Micha, saya akan coba ini. Ya, semua tabel memiliki atribut yang sama dan mereka adalah tipe geometri yang sama. Terima kasih lagi ...
Ryan Garnett
Saya telah mencoba dan saya mendapatkan kesalahan yang terkait dengan XY. Saya tahu saya memasukkan hal yang salah, karena saya tidak yakin apa yang harus saya gunakan di sana. Inilah pertanyaan saya dan respons keluarannya. Bantuan apa pun akan bagus.
Ryan Garnett
CREATE TABLE pbear_pp (kunci primer serial id, entitasname varchar (40)); SELECT AddGeometryColumn ('pbear_pp', 'geom', '- 1', 'polygon', 'XY'); Masukkan ke dalam pbear_pp (entitasname, geom) SELECT entitasname, geom FROM nts250k.nts250k_043e_poly; INSERT INTO pbear_pp (entitasname, geom) SELECT entitasname, geom FROM nts250k.nts250k_043f_poly; DLL DLL ...
Ryan Garnett
PEMBERITAHUAN: CREATE TABLE akan membuat urutan implisit "pbear_pp_id_seq" untuk kolom seri "pbear_pp.id" PEMBERITAHUAN: CREATE TABLE / PRIMARY KEY akan membuat implisit indeks "pbear_pp_pkey" untuk meja "pbear_pp" ERROR: sintaks input tidak valid untuk integer: "XY"
Ryan Garnett
1
gunakan 2 sebagai ganti 'XY' karena argumen itu menentukan dimensi.
lynxlynxlynx