การใช้ Virtual Layer ใน QGIS 3 กรณีทดสอบข้อมูลพื้นที่ซ้อนทับ
ได้มีโอกาสทดลองใช้เครื่องมือ Virtual Layer ของ QGIS ซึ่งก็เป็นอะไรที่น่าสนใจเลยทีเดียวครับ มีลักษณะคล้ายๆ กับการทำอะไรสักอย่างหรือหาคำตอบอะไรสักอย่างโดยให้ผลลัพธ์ออกมาในรูปแบบชั้นข้อมูลเสมือนจริง แต่เจ้า Virtual Layer มีจุดเด่นในแบบของการ Query ที่สามารถเรียกใช้ชุดคำสั่ง PostGIS ได้ด้วยครับ
โดยวันนี้ก็เลยจะลองเอามาประยุกต์ใช้ในการตรวจสอบข้อมูลพื้นที่ซ้อนทับของข้อมูล polygon 2 ชั้นข้อมูล คือ parcel และ boundary ซึ่งการตรวจสอบข้อมูลซ้อนทับจะเลือกใช้ชุดคำสั่งทั้งหมดดังนี้คือ ST_Area, ST_Intersection และ ST_Overlaps ไปดูกันเลยครับ
1.เปิด QGIS และเพิ่ม 2 ชั้นข้อมูลขึ้นมาดังภาพ จากนั้นไปที่เมนู Layer > Data Source Manager
2.ไปที่แถบเมนู Virtual Layer
3. คลิกที่ Import แล้วเลือก 2 ชั้นข้อมูลคือ parcel และ boundary
4. จากนั้นทดสอบโดยการตรวจสอบว่ามี polygon ของชั้นข้อมูล parcel ชิ้นไหนบ้างที่มีการซ้อนทับกับชั้นข้อมูล boundary
SELECT *FROM parcel p, boundary bWHERE ST_Overlaps(p.geometry,b.geometry) = TRUE
5. ผลลัพธ์ที่ได้ดังภาพด้านล่างครับ
6. จากนั้นทดลองเพิ่มการคำนวณเนื้อที่เข้าไปครับ
SELECT p.block_id, p.geometry,ST_Area(p.geometry) AS area_parcel,ST_Area(b.geometry) AS area_boundary,ST_Area(ST_Intersection(b.geometry,p.geometry)) AS area_intersectFROM parcel p, boundary bWHERE ST_Overlaps(b.geometry,p.geometry)
7. จากนั้นเมื่อเราทราบขนาดเนื้อที่ของทั้ง 2 ชั้นข้อมูล และทราบขนาดเนื้อที่ที่ intersect กัน ดังนั้นจึงเพิ่มเงื่อนไขว่าลองค้นหาพื้นที่ที่มีการ intersect กันน้อยกว่า 50 เปอร์เซนต์
SELECT p.block_id, p.geometry,ST_Area(p.geometry) AS area_parcel,ST_Area(b.geometry) AS area_boundary,ST_Area(ST_Intersection(b.geometry,p.geometry)) AS area_intersect,(ST_Area(ST_Intersection(b.geometry,p.geometry)) * 100 / ST_Area(p.geometry)) AS percentFROM parcel p, boundary bWHERE ST_Overlaps(b.geometry,p.geometry)AND percent < 50