ข้อมูลทดสอบ
- เขียนเรื่อง spatialite มา 2-3 ตอนแล้ว มาดูในตอนนี้สมมติว่ามี text file ที่เป็นรูปแบบ csv คั่นฟิลด์หรือคอลัมน์ด้วยเครื่องหมายคอมมา (,) ในข้อมูลมีคอลัมน์ค่าพิกัด X และ Y ด้วย เราจะมาแปลงเป็นฐานข้อมูลของ spatialite ซึ่งสามารถ export เป็น shapefile ได้ถ้าต้องการ สนใจดาวน์โหลดข้อมูลมาทดลองได้ตามลิงค์นี้ landmark_n.zip
ดาวน์โหลดโปรแกรม spatialite, spatialite-gui และ spatialite-gis
- โปรแกรมและเครื่องมือที่จะใช้สำหรับการแปลงข้อมูลจะใช้ tools ที่ชื่อ spatialite-gui และการดูผลลัพธ์จะใช้ spatialite-gis สามารถดาวน์โหลดได้ที่ตามลิงค์นี้ spatialite ซึ่งจะมีให้ดาวน์โหลดหลาย platform ง่ายที่สุดก็คือเลือกดาวน์โหลดเฉพาะ spatialite-gui และ spatialite-gis ก็เพียงพอ
สร้างฐานข้อมูล
- การสร้างฐานข้อมูล การสร้างตาราง(table) การเพิ่ม ลบ คอลัมน์ สามารถทำได้ใน spatialite-gui ได้หมดทั้งสามารถ query เพื่อสืบค้นด้าน spatial ได้ด้วย เมื่อเปิดโปรแกรมมาแล้ว จะทำการ load csv ที่ผมทำลิงค์ไว้ให้ตอนต้นๆ
Load CSV/Text
- จะเห็น view และ table ที่ spatialite-gui สร้างมาให้เป็นดีฟอลต์ ต่อไปจะทำการ load csv คลิกที่เมนู Files > Advance > Load CSV/Text เลือกไฟล์ csv
- ที่พาเนลด้านซ้ายตรงตาราง “landmark_n” คลิกขวาเลือก “edit table rows” ลองดูคอลัมน์ X และ Y
เพิ่มคอลัมน์ Geometry ด้วย AddColumnGeometry
- เราจะสร้าง table ที่เก็บจุดแสดง landmark ด้วยการใช้ข้อมูล X,Y ที่อยู่ในคอลัมน์ที่ผมแสดงไว้ข้างต้น ด้วยการใช้ภาษา SQL ดังบรรทัดด้าน วิธีใช้ copy ไปไว้ที่ช่อง query ของ spatialite ดังรูปด้านล่าง สังเกตว่า 32647 คือ SRID แสดงระบบพิกัดของ UTM Zone 47N บนทรงรี WGS84
SELECT AddGeometryColumn('landmark_n','Geometry',32647,'POINT',2);
- ในตอนนี้คอลัมน์ “Geometry” ที่ยัง Null อยู่ ลองใช้คำสั่ง “edit table rows” ดูอีกครั้ง
Update คอลัมน์ด้วย GeomFromText
- ต่อไปจะ query ด้วย Update …GeomFromText คัดลอกโค๊ดด้านล่างไปแปะที่ช่อง queryแล้วคลิกที่ Execute SQL statement อธิบายอีกนิดว่าชื่อคอลัมน์ X และ Y เมื่อมาปรากฎในคำสั่งจะถูกหุ้มด้วยเครื่องหมาย || แล้วปิดด้วยเครื่องหมาย quote (‘) ถ้าเกิดคอลัมน์ X และ Y เป็นชื่ออื่นเช่น East และ North ตรงคำสั่ง POINT ก็จะกลายเป็น POINT(‘||EAST||’ ‘||NORTH||’)
UPDATE "landmark_n" SET Geometry = GeomFromText('POINT('||X||' '||Y||')',32647);
ทดสอบฐานข้อมูลด้วย spatialite-gis
- ตอนนี้เราไม่ทราบว่าฐานข้อมูลเชิงพื้นที่จะมีสภาพเป็นอย่างไร ปิดทูลส์ spatialite-gui แล้วเปิด spatialite-gis เมื่อเปิดมาแล้วทำการ connect ไปที่ฐานข้อมูล “bangkokgis.sqlite” ที่เราสร้างไว้แล้ว ในตอนแรกโปรแกรมจะถามว่าให้สร้าง table เพิ่มหรือปล่าวเช่น table เก็บสัญลักษณ์ symbol ผมเลือก yes ตรงบรรทัดที่สองเพื่อเลือกให้ spatialite-gis สร้างให้อัติโนมัติ จะเห็นการแสดงผลเป็นจุด
Spatialite Tutorial
- จะเห็นว่าใน post นี้มีคำสั่ง query ของ spatialite อยู่สองคำสั่ง ยังมีคำสั่งอื่นอีกพอสมควรที่น่าศึกษา มี tutorial ที่เขียนไว้ได้ดีพอสมควรใน website ของ spatialite เองสนใจไปดูได้ที่ spatialite tutorial
- ความจริงฐานข้อมูล landmark_n เป็นไฟล์ Shape file แสดง landmark ของกรุงเทพมหานคร ผมดาวน์โหลดมาจาก website จำไม่ได้ว่าที่ไหนเพราะนานแล้ว ยังมีฐานข้อมูลเป็น shape file อีกหลายตัวที่เราจะนำมาทดสอบกันครั้งหน้า จะล้วงลึกเรื่อง query ด้าน spatial ก็ติดตามกันต่อไปนะครับ