การ Intersects โดยใช้ PostgreSQL/PostGIS

การ Intersects ด้วยคำสั่งใน PostGIS ผมได้ยกตัวอย่างโดยการใช้ข้อมูลจุด (point) กับข้อมูลพื้นที่ปิด (polygon) ซึ่งถ้าไม่คิดอะไรมากเราก็สามารถใช้เครื่องมือ Geoprocessing ใน QGIS ก็ได้ แต่ถ้าเราจะต้องจัดการข้อมูลในฐานข้อมูลเชิงพื้นที่เราจำเป็นต้องใช้คำสั่งของ PostGIS ในการทำงานเป็นส่วนให้แทนการคลิกปุ่มเครื่องมือบน QGIS โดยส่วนตัวผมแล้วผมคิดว่ามันเร็วกว่า QGIS ครับ ก่อนหน้านี้ผมได้พยายามแก้ไขปัญหาในเรื่องของการสืบค้นที่ใช้ระยะเวลานานมากสำหรับการ intersects ใน PostGIS ซึ่งวันนี้ผมได้วิธีการแก้ไขปัญหาที่ทำให้การ intersects ที่เร็วขึ้นครับ โดยการเพิ่มคำสั่งของ ST_CoveredBy และ ST_Intersection ท่านสามารถศึกษาได้จากคำสั่งด้านล่างนี้

SELECT hp.gid, c.lcode, c.texture_en,c.cn,
CASE
WHEN ST_CoveredBy(hp.geom, c.geom)
THEN hp.geom
ELSE
ST_Multi(
ST_Intersection(hp.geom, c.geom)
) END AS geom
FROM fire_archive AS hp
INNER JOIN cn_nan AS c
ON ST_Intersects(hp.geom, c.geom)
WHERE c.cn = 65;
--     LIMIT 30;
c2

Query ใน QGIS ด้วยเครื่อง DB Manager

c1

แสดงผลลัพธ์ที่ได้ผ่าน QGIS

Advertisements

Leave a Reply

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 / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s