ผสานหลายตารางลงในตารางใหม่ใน PostGIS


13

ฉันกำลังมองหาที่จะรวมจำนวนของแต่ละตารางลงในตารางใหม่ใน PostGIS นี่เป็นงานง่ายเมื่อทำงานกับข้อมูล Shapefile แต่ฉันไม่แน่ใจว่าจะทำอย่างไรใน PostGIS ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก. ฉันคิดว่าฉันใช้ผนวก แต่ฉันไม่แน่ใจว่าจะเริ่มต้นที่ไหน

คำตอบ:


17

(ตรวจสอบล่วงหน้าก่อนการบิน: มีแอตทริบิวต์เหมือนกันในตารางต้นฉบับทั้งหมดหรือไม่รูปแบบเรขาคณิตเป็นชนิดเดียวกันในทุกตารางหรือไม่)

คุณสามารถ

  1. สร้างตาราง (ว่าง) ก่อนจากนั้นใช้ INSERT INTO ... SELECT ... FROM เพื่อรับข้อมูลทั้งหมดจากแต่ละตารางต้นฉบับลงในตารางที่ผสาน
  2. สร้างตารางใหม่จากคำสั่ง UNION ที่มีขนาดใหญ่

สำหรับ 1 มันอาจไป:

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;

และอื่น ๆ ...

สำหรับตัวเลือกที่ 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 ฉันจะลองทำดู ใช่ตารางทั้งหมดมีคุณลักษณะเดียวกันและเป็นประเภทเรขาคณิตเดียวกัน ขอขอบคุณอีกครั้ง ...
Ryan Garnett

ฉันลองแล้วและฉันได้รับข้อผิดพลาดที่เกี่ยวข้องกับ XY ฉันรู้ว่าฉันใส่ผิดสิ่งเพราะฉันไม่แน่ใจว่าควรใช้อะไรดี นี่คือแบบสอบถามของฉันและผลลัพธ์การตอบกลับ ความช่วยเหลือใด ๆ จะดีมาก
Ryan Garnett

สร้างตาราง pbear_pp (รหัสคีย์หลักอนุกรม, entityname varchar (40)); SELECT AddGeometryColumn ('pbear_pp', 'geom', '- 1', 'รูปหลายเหลี่ยม', 'XY'); INSERT INTO pbear_pp (entityname, geom) SELECT entityname, geom จาก nts250k.nts250k_043e_poly; INSERT INTO pbear_pp (entityname, geom) SELECT entityname, geom จาก nts250k.nts250k_043f_poly; ฯลฯ ฯลฯ ...
Ryan Garnett

ข้อสังเกต: สร้างตารางจะสร้างลำดับโดยนัย "pbear_pp_id_seq" สำหรับคอลัมน์อนุกรม "pbear_pp.id" ข้อสังเกต: สร้างตาราง / คีย์หลักจะสร้างดัชนีโดยนัย "pbear_pp_pkey" สำหรับตาราง "pbear_pp" ข้อผิดพลาด: ไวยากรณ์ที่ไม่ถูกต้องสำหรับจำนวนเต็ม: "XY"
Ryan Garnett

1
ใช้ 2 แทน 'XY' เป็นอาร์กิวเมนต์ที่ระบุขนาด
lynxlynxlynx
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.