การหาตำแหน่งจุดกลางของ polygon ใน postgis
16 มิ.ย. 68 , 09:26
เพราะต้องทำแผนที่ตำบล เลยเจอปัญหานิดหน่อยเรื่องตำแหน่งของพิกัดตำบล

ขออนุญาติเอาตำบลเท่ๆ ในจังหวัดอุทัยธานี มาเป็นตัวอย่างนะครับ



เรื่องของคือ มีข้อมูล polygon แต่มีโจทย์ว่า แล้วพิกัดหมุดของตำบลนั้นอยู่ที่ไหน

 

เราสามารถใช้ ST_Centroid ในการหาจุดกลางของ polygon ได้ ตัวอย่างคำสั่งประมาณนี้

แต่ว่าด้วยความเท่ ของตำบลนี้ จุดกลางที่ได้ ดันไม่อยู่ในตำบลนี้ซะนี่ แบบนี้



นอกจากไม่ใช่ตำบลนั้น ยังข้ามอีกจังหวัดอีกซะงั้น

จากกรณีข้างบน ถ้าทรงปกติๆ มันก็อยู่ตรงกลางสวยๆ ดีอยู่หรอก แต่ถ้าทรงมันเท่ เกินไป เราสามารถใช้ ST_PointOnSurface แทนได้ ดังตัวอย่างแบบนี้

ผลที่ได้จะเป็นแบบนี้



ซึ่งค่อนข้างดีทีเดียวเชียวครับ

ผมอัพเดทพิกัดจุดกลาง ลงฟิลด์ center ก็เลยต้อง re-check อีกรอบว่า แล้วพิกัดมันอยู่ในพื้นที่จริงรึเปล่าด้วยคำสั่ง ST_Contains ดังตัวอย่างนี้ครับ

หรือถ้าจะตรวจว่า มีรายการไหนมันไม่อยู่ใน polygon ก็ใช้แบบนี้แทนได้ครับ