•MAPEDIA•
MAPEDIA BLOG
Published in
2 min readSep 12, 2019

--

การใช้ 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

--

--