ST_Difference

           เคยติดค้างผู้เข้าอบรม Spatial database ท่านหนึ่งในเรื่องของฟังก์ชั่น clip  โมดูล Geoprocessing ใน postgis โดยพี่ท่านนี้ถามว่าถ้าต้องการ clip polygon โดยใช้ฟังก์ชั่นใน postgis ทำได้ไหมทำได้อย่างไร? ยอมรับจริงๆครับเมื่อตอนที่ท่านถามผมก็ตอบไม่ได้เพราะไม่เคยลองวันนี้หาเจอแล้วครับ ใน spatial database ผ่าน interface ST_ ของ OGC เรียกฟังก์ชั่นนี้ว่า diffence คือการจำแนกความต่างของ Geometry Object ทั้งสอง มาลองดูคำสั่งนะครับ

          ST_Difference(geom1,geom2) โดยข้อมูล Geometry data ได้ก็จะเป็นส่วนที่ อยู่ใน geom1 แต่ไม่อยู่ใน geom2 ซึ่ง ผลลัพธ์ของ  ST_Difference(geom1,geom2) จะไม่เท่ากับ ST_Difference(geom2,geom1) ทดลองเขียน SQL เพื่อประมวลผลข้อมูล โดยผมจะสร้างโพลีกอนวงกลม A และ วงกลม B เพื่อใช้ในการประมวลผล

SELECT 1 As gid, g.geom1, g.geom2, ST_Difference(g.geom1, g.geom2) As diff_geom12,
ST_Difference(g.geom2, g.geom1) As diff_geom21
FROM (SELECT ST_Buffer(ST_MakePoint(9,3),2) As geom1,ST_Buffer(ST_MakePoint(10,2),1) As geom2) As g;

         ผลลัพธ์ที่ได้ก็จะเป็นข้อมูล WKB จากการประมวลผลครับในรูปของตาราง ถ้าอยากเห็น Geometry Feature ในรูปแบบเวกเตอร์ก็ลองใช้ QGIS เรียกเพื่อเรียกดูได้ครับ

ภาพข้อมูล Geometry Object ทั้งสอง(A,B)

ข้อมูล Geometry ผลลัพธ์จาก ST_Difference(geom_A, geom_B)

ข้อมูล Geometry ผลลัพธ์จาก ST_Difference(geom_B, geom_A)

 

 

 

Advertisements

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

สร้างเว็บไซต์หรือบล็อกฟรีที่ WordPress.com.

Up ↑

%d bloggers like this: