เคยติดค้างผู้เข้าอบรม 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)