ฉันมีชุดข้อมูลที่อยู่แห่งชาติ (37 ล้านชุด) และชุดข้อมูลรูปหลายเหลี่ยมของชุดข้อมูลน้ำท่วม (2 ล้าน) ประเภท MultiPolygonZ ประเภทของรูปหลายเหลี่ยมมีความซับซ้อนมาก ST_NPoints สูงสุดอยู่ที่ประมาณ 200,000 ฉันกำลังพยายามระบุโดยใช้ PostGIS (2.18) ซึ่งจุดที่อยู่ในรูปหลายเหลี่ยมน้ำท่วมและเขียนสิ่งเหล่านี้ไปยังตารางใหม่ที่มีที่อยู่ ID และรายละเอียดความเสี่ยงน้ำท่วม ฉันได้ลองจากมุมมองที่อยู่ (ST_ ภายใน) แต่จากนั้นสลับมุมมองนี้เริ่มต้นจากมุมมองของพื้นที่น้ำท่วม (ST_Contains) เหตุผลว่ามีพื้นที่ขนาดใหญ่ที่ไม่มีความเสี่ยงจากน้ำท่วมเลย ชุดข้อมูลทั้งคู่ได้รับการทำซ้ำเป็น 4326 และทั้งสองตารางมีดัชนีเชิงพื้นที่ ข้อความค้นหาด้านล่างของฉันทำงานเป็นเวลา 3 วันในขณะนี้และไม่แสดงสัญญาณว่าจะเสร็จเร็ว ๆ นี้!
select a.id, f.risk_factor_1, f.risk_factor_2, f.risk_factor_3
into gb.addresses_with_flood_risk
from gb.flood_risk_areas f, gb.addresses a
where ST_Contains(f.the_geom, a.the_geom);
มีวิธีที่เหมาะสมที่สุดในการเรียกใช้หรือไม่ นอกจากนี้สำหรับเคียวรีที่รันนานชนิดนี้วิธีที่ดีที่สุดในการติดตามความคืบหน้านอกเหนือจากการดูการใช้ทรัพยากรและ pg_stat_activity คืออะไร
ข้อความค้นหาเดิมของฉันเสร็จสิ้นแล้วถึงแม้ว่าจะเป็นเวลา 3 วันและฉันก็หันไปทำงานอื่น ๆ ดังนั้นฉันจึงไม่ต้องเสียเวลาในการลองแก้ปัญหา อย่างไรก็ตามฉันเพิ่งเข้ามาเยี่ยมชมอีกครั้งและทำงานผ่านข้อเสนอแนะจนถึงตอนนี้ก็ดีมาก ฉันใช้สิ่งต่อไปนี้:
- สร้างกริด 50 กม. ทั่วสหราชอาณาจักรโดยใช้โซลูชัน ST_FishNet ที่แนะนำที่นี่
- ตั้งค่า SRID ของกริดที่สร้างขึ้นเป็น British National Grid และสร้างดัชนีเชิงพื้นที่ขึ้น
- ตัดข้อมูลน้ำท่วมของฉัน (MultiPolygon) โดยใช้ ST_Intersection และ ST_Intersects (เฉพาะ gotcha ที่นี่ฉันต้องใช้ ST_Force_2D บน geom เป็นรูปร่าง 2pgsql เพิ่มดัชนี Z
- ตัดข้อมูลจุดของฉันโดยใช้กริดเดียวกัน
- สร้างดัชนีในแถวและคอลัมน์และดัชนีเชิงพื้นที่ในแต่ละตาราง
ฉันพร้อมที่จะเรียกใช้สคริปต์ตอนนี้จะวนซ้ำแถวและคอลัมน์ที่เติมผลลัพธ์ลงในตารางใหม่จนกว่าฉันจะครอบคลุมทั้งประเทศ แต่เพิ่งตรวจสอบข้อมูลน้ำท่วมของฉันและรูปหลายเหลี่ยมที่ใหญ่ที่สุดบางส่วนหายไปในการแปล! นี่คือคำถามของฉัน:
SELECT g.row, g.col, f.gid, f.objectid, f.prob_4band, ST_Intersection(ST_Force_2D(f.geom), g.geom) AS geom
INTO rofrse.tmp_flood_risk_grid
FROM rofrse.raw_flood_risk f, rofrse.gb_grid g
WHERE (ST_Intersects(ST_Force_2D(f.geom), g.geom));
ข้อมูลต้นฉบับของฉันมีลักษณะดังนี้:
อย่างไรก็ตามโพสต์การตัดมันดูเหมือนว่า:
นี่คือตัวอย่างของรูปหลายเหลี่ยม "ขาดหายไป":