ฉันใช้PostGIS2.0ทำทางแยก raster / polygon ฉันมีปัญหาในการทำความเข้าใจการทำงานที่ฉันควรใช้และวิธีที่เร็วที่สุดในการแสดงคืออะไร ปัญหาของฉันเป็นดังนี้:
- ฉันมีรูปหลายเหลี่ยมและแรสเตอร์
- ฉันต้องการค้นหาพิกเซลทั้งหมดที่อยู่ในรูปหลายเหลี่ยมและได้รับผลรวมของค่าพิกเซล
- และ (ปัญหาที่อัปเดต): ฉันได้รับค่าจำนวนมากสำหรับบางพิกเซลที่ไม่มีอยู่ในแรสเตอร์ดั้งเดิมเมื่อฉันทำการค้นหา
ฉันมีความเข้าใจความยากลำบากไม่ว่าฉันควรใช้หรือST_Intersects()
ST_Intersection()
ฉันยังไม่รู้ด้วยว่าวิธีที่ดีที่สุดในการรวมพิกเซลของฉันคืออะไร นี่เป็นวิธีแรกที่ฉันได้ลอง (# 1):
SELECT
r.rast
FROM
raster as r,
polygon as p
WHERE
ST_Intersects(r.rast, p.geom)
ส่งคืนรายการของrast
ค่าซึ่งฉันไม่แน่ใจว่าจะทำอย่างไร ฉันพยายามคำนวณสถิติสรุปโดยใช้ST_SummaryStats()
แต่ฉันไม่แน่ใจว่านี่คือผลรวมถ่วงน้ำหนักของพิกเซลทั้งหมดที่อยู่ในรูปหลายเหลี่ยม
SELECT
(result).count,
(result).sum
FROM (
SELECT
ST_SummaryStats(r.rast) As result
FROM
raster As r,
polygon As p
WHERE
ST_Intersects(r.rast, p.geom)
) As tmp
วิธีอื่นที่ฉันได้ลองใช้ (# 2) ใช้ST_Intersection()
:
SELECT
(gv).geom,
(gv).val
FROM
(
SELECT
ST_Intersection(r.rast, p.geom) AS gv
FROM
raster as r,
polygon as p
WHERE
ST_Intersects(r.rast, p.geom)
) as foo;
นี่จะส่งกลับรายการรูปทรงเรขาคณิตที่ฉันวิเคราะห์เพิ่มเติม แต่ฉันคิดว่าสิ่งนี้มีประสิทธิภาพน้อยกว่า
ฉันไม่ชัดเจนซึ่งเป็นคำสั่งที่เร็วที่สุดของการดำเนินการด้วย ฉันควรจะเลือกraster, polygon
หรือpolygon, raster
หรือแปลงรูปหลายเหลี่ยมเข้าไปแรสเตอร์เพื่อที่จะเป็นraster, raster
?
แก้ไข: ฉันปรับปรุงวิธีการ # 2 พร้อมรายละเอียดบางส่วนจากR.K.
ลิงก์ของ
ใช้วิธีการ # 2 ฉันได้สังเกตเห็นข้อผิดพลาดต่อไปนี้ในผลลัพธ์ซึ่งเป็นส่วนหนึ่งของสาเหตุที่ฉันไม่เข้าใจผลลัพธ์ นี่คือภาพของแรสเตอร์ดั้งเดิมของฉันและโครงร่างของรูปหลายเหลี่ยมที่ถูกใช้เพื่อตัดกันซ้อนทับอยู่ด้านบน:
และนี่คือผลลัพธ์ของการแยกโดยใช้ PostGIS:
ปัญหาเกี่ยวกับผลลัพธ์คือมีค่า 21474836 ที่ส่งคืนซึ่งไม่ได้อยู่ในแรสเตอร์ดั้งเดิม ฉันไม่รู้ว่าทำไมสิ่งนี้จึงเกิดขึ้น ฉันสงสัยว่ามันเกี่ยวข้องกับตัวเลขเล็ก ๆ แห่งหนึ่ง (หารด้วยเกือบ 0) แต่ผลลัพธ์กลับมาผิด
ST_SummaryStats()
หมายเลข # 1 แต่ไม่แน่ใจว่าจะใช้สำหรับ # 2 ได้อย่างไร