มีคนโทรมาปรึกษาเรื่องการทำระบบ Spatial Database สำหรับงานการบริหารการใช้ที่ดินที่หนี้ไม่พ้นการเก็บข้อมูล  landuse อันต้องสร้างจากการแปลภาพถ่ายทางอากาศหรือภาพถ่ายดาวเทียม แน่นนอนว่าถ้าท่านที่เคยทำงานด้านนี้จะพบ ว่าข้อมูล landuse เป็นข้อมูลที่มีความซับซ้อนของ polygon ที่มากในรูปแบบ muti polygon จำนวนมาหาศาล ยิ่งต้องมาใช้ทำงานหรือเปิดดูข้อมูลภาพยิ่งช้า นี้ยังไม่นับการนำมาใช้ทำระบบ map service ที่ต้องแสดงข้อมูลที่มีความละเอียดสูง วันนี้ผมมีเทคนิคการประมวลผลข้อมูลพวกนี้ผ่าน database มาแนะนำครับ

แนวคิดที่ง่ายแบบโบราณคือการตัดข้อมูลเป็นส่วนๆ แต่เนื่องจากข้อมูลเป็น vector การตัดข้อมูลทำให้เสียคุณสมบัติของเรขาคณิตและ topology ไป ดังนั้นวิธีที่ทำให้สามารถจัดการข้อมูลขนาดใหญ่เหล่านี้ได้เร็วและดีที่สุดคือการสร้าง index ของข้อมูล และทำ generalization ข้อมูล สำหรับการแสดงผล แบบ multi scale

1. สร้าง gist index(Generalized Search Tree) ข้อมูล บน geometry data ในตารางฐานข้อมูล

CREATE INDEX mylanduse_idx ON landuse_2011 USING gist(the_geom);

2. การเตรียม muti scale table โดยเทคนิคการ generalization ข้อมูล ผ่าน postgis โดยเลือกใช้ SimplifyPreserveTopology ซึ่งเป็นฟังก์ชั่นการ generalization ข้อมูล multi polygon ด้วยเทคนิค Douglas-Peuker algorithm

SELECT gid,lu_class,ST_SimplifyPreserveTopology(the_geom,1500) AS the_geom INTO landuse_1500 FROM landuse_2011;

โดยข้อมูลดิบคือ ตาราง landuse_2011 เป็นข้อมูลการใช้ประโยชน์ที่ดิน จำนวน 500000 object เราทำการ pre processing ข้อมูลเพื่อแสดงผล ตาม scale ของระบบ map service เพื่อเพิ่มประสิทธิภาพการทำงานของระบบ สามารถสร้างเป็น table ใหม่ หรือจะทำเป็น View สำหรับการ query เพื่อลดความซ้ำซ้อนของการเก็บข้อมูลก็ได้

การใช้ ST_SimplifyPreserveTopology สามารถประยุกต์ใช้ได้กับ multi line string ที่มีความซับซ้อนของข้อมูลเส้นเช่น ถนนรายละเอียดสูง , เส้นทางน้ำ และเส้นความสูงภูมิประเทศ

ตัวอย่างผลลัพธ์การทำ generalization บน Postgis

ตัวอย่างการแสดงภาพ multi polygon ที่ scale 1:50000 โดยทั้งสองภาพแรกทำการ generalization ข้อมูล ทำให้ประสิทธิภาพการแสดงผล เร็วกว่า ข้อมูลต้นฉบับมาก

ขยายภาพข้อมูลที่ได้ทำการ generalization จะเห็นได้ว่า มีการลดทอนรายละเอียดของ node บน  Polygon ลง เพื่อลดขนาดข้อมูล

สรุป

อย่าไปคิดว่า Spatial Database มันแค่ database มันแค่ storage ผมว่าคนหลายคนยังเข้าใจผิดคิดว่ามันแค่เก็บข้อมูลเพียงอย่างเดียว คำว่า Spatial Database จริงๆมันก็มีการผนวกรวมเอาการ ทำ Geoprocessing และการประมวลผลขั้นสูงกับข้อมูลจำนวนมาก แบบซับซ้อนเข้าไว้ด้วยกันด้วย โดยทั้งหมดทั้งมวล นอกจากความรู้ DBA ที่ต้องมีแล้ว ยังจำเป็นต้องอาศัยความรู้เกี่ยวกับ Spatial Data handle และ Spatial Data management อีกด้วย

แนวโน้มในอนาคต องค์ใหญ่ๆ การใช้ Spatial Database ในการทำงาน จัดเก็บและจัดการข้อมูลจะมีมากขึ้นและจำเข้ามาแทนที่ระบบเดิมคือ file based เรื่อยๆ ดังนั้นการเรียนรู้เรื่องพวกนี้ไว้ไม่เสียหายและจะทำให้ยืดหยุ่นในการพัฒนาระบบ ภูมิสารสนเทศ ขั้นสูงต่อไปครับ