มาลองใช้ฐานข้อมูลเชิงพื้นที่ Spatialite ที่ทั้งเล็ก เร็ว และแรง ตอนที่ 2

  • ก่อนจะไปต่อผมอยากจะพูดถึงงาน FOSS4G 2010 มีการ present เรื่อง  “SpatiaLite, the Shapefile of the Future?” ตั้งเครื่องหมายคำถามไว้ด้วยว่า Spatialite จะเป็น shapefile ในอนาคตหรือไม่ ซึ่งที่ผ่านมาก็หลายปีแล้วครับ ที่ฐานข้อมูลแบบ Geodatabase ที่เรียบง่ายแบบ Shapefile ยังไม่มีตัวไหนที่จะได้รับความนิยมเท่ากับ Shapefile แต่ Shapefile ก็มีข้อจำกัดหลายอย่าง ซึ่ง Spatialite ก็เป็นความหวังตรงนี้ แต่จะไปได้สวยหรือปล่าว เพราะในงาน FOSS4G 2010 คุณ Frank Warmerdam (หัวหน้าโครงการ gdal/ogr library อันเลื่องชื่อ) ได้พูดถึงความเสถียร spatialite ว่ายังไม่ถึงจุดนั้นดี และคุณ Alessandro (ผู้พัฒนา Spatialite จาก Italy) ก็ไม่เปิดการพัฒนาเท่าที่มันควรจะเป็น ตรงนี้หรือปล่าวที่ผมดูแล้ว QGIS ก็ยังสนับสนุน Spatialite ในระดับที่จำกัด

RasterLite

  • ตอนนี้เราจะมาลองดู tool ที่จัดการด้านภาพคือ Rasterlite แต่ดู forum ของ QGIS แล้วยังจะไม่ support ในตอนนี้ซึ่งก็น่าเสียดาย แต่ที่ผมลองแล้วเมื่อใช้ Rasterlite ทำการปั๊มรูป GeoTiff เข้าไปในฐานข้อมูล Spatialite เมื่อเปิดดูด้วย Spatialite-gui ข้อมูลเข้าได้ถูกต้อง แต่เมื่อเปิดด้วย Spatialite-gis กลับตาลปัตร เอ้าครับมาลองดูกัน

  • ผมจะเพิ่ม DEM ที่ shade แล้วเป็นรูปภาพธรรมดา(GeoTiff) ครับเข้าไป แต่ที่นี้จะเป็นปัญหาแล้วครับ เพราะ spatialite-gui support เฉพาะ vector ถ้าไปดูโฟลเดอร์ c:\spatialite ที่เราดาวน์โหลดมาจะเห็น tool ของ rasterlite ถ้า จะเพิ่มไฟล์ GeoTiff เข้าไปจะต้องใช้คำสั่ง command line ซึ่งบางคนอาจขยาด แต่ในอนาคตผมเห็นว่าทางผู้พัฒนาต้อง implement ตัว rasterlite เข้าไปใน spatialite-gui เพื่อให้เกิดความสะดวกในการใช้งาน วิธีการคือ กดคีย์ “Win” บนคีย์บอร์ดค้าง แล้วกดคีย์ “R” พิมพ์คำว่า cmd แล้วกด Enter วินโดส์จะเรียกหน้าต่าง command line ออกมา
ใช้ command line เพื่อเรียกใช้ rasterlite

  • ผมจะใช้คำสั่ง raterlite_load ดังรูปด้านล่าง พารามิเตอร์ -d ระบุฐานข้อมูล spatialite (เครื่องหมาย ..\..\ หมายถึงอยู่บนไดเรคทอรีเหนือขึ้นไป 2 ชั้น)  ส่วน -T ระบุไฟล์ Geotiff ที่จะนำไปรวมเข้ากับฐานข้อมูล ส่วน -D ระบุถ้าพบไฟล์ Geotiff อื่นๆที่อยู่ในโฟลเดอร์นี้ให้ process นำไปรวมเข้ากับฐานข้อมูลด้วย
ใช้คำสั่ง rasterlite_load
  • ถ้าคำสั่ง rasterlite_load สำเร็จจะแสดงขนาดของรูปที่ใส่เข้าไปในฐานข้อมูล จากตัวอย่างนี้จะแบ่งรูปเป็นตาราง(คล้ายๆกระเบื้องปูพื้น) ขนาด 3 x 3 หรือรวมทั้งหมดเท่ากับ 9 record ต่อไปจะไปดูข้อมูลด้วย Spatialite-gui คลิกที่เลเยอร์ “DEM_Shaded_rasters” คลิกขวาแล้วเลือก Edit table rows ลองคลิกไปที่ตาราง table ดูที่คอลัมน์ raster ตรง ROWID = 1 คลิกขวาเลือก BLOB Explore ดังรูป

Spatialite-gis

  • ต่อไปจะลองดูด้วย spatialite-gis ทำการ connect ข้อมูล จะเห็นว่าการแสดงผลไม่ถูกต้องคือจะเห็นภาพ raster เป็น polygon ไป (ผมทำอะไรผิดหรือปล่าว)

  • ผมจะลองปิด Raster แล้วตั้งค่า Layer ของ point กับ contour ดู มาดูที่เลเยอร์ “GeoPoint” ก่อน คลิกขวาตั้งค่าดังรูป
ตั้งค่าให้เลเยอร์ GeoPoint
ตั้งค่า classify ให้กับ Layer “contours”
  • ลอง identify ดูจะเห็นข้อมูลเป็นตัวอย่างหิน ประเภทของหิน รวมถึงรูปถ่าย
แสดง Identify ข้อมูล
  • เอาละ Spatialite เพิ่งกำเนิดมาเมื่อปี 2008 ที่ผ่านมานี้เอง ยังมีเวลาพอที่จะพิสูจน์ได้ว่าจะเป็น “Shapefile of the future” หรือปล่าว ต่อไปจะลองนำข้อมูล Spatialite ไปเปิดด้วย QGIS ดูกัน

Quantum GIS 1.6.0 (svn trunk)

  • ตอนที่เขียนอยู่นี้เป็นรุ่น 1.6.0 กำลังพัฒนากันอยู่ รุ่นที่เสถียรคือ 1.5.0 QGIS ผมลงด้วย osgeo4w ก็เลยได้ทั้ง 1.5.0 และ 1.6.0 เพราะตอนติดตั้ง (ผ่าน internet) ไม่ได้ตั้งค่าอะไรมาก ก็เลยโหลดมาซะหลายเวอร์ชั่น มาดูกันครับ
  • คลิกที่เมนู Layer > Add Spatialite Layer… เลือกไฟล์ geology.sqlite ที่สร้างไว้ ลองปรับตั้งค่า layer ดู และอย่างที่ทราบกันคือ table ของเลเยอร์ DEM_Shaded มองเห็นเป็น polygon เช่นเดียวกันกับ spatialite-gis
QGIS แสดงข้อมูลของ Spatialite

QGIS มองไม่เห็นข้อมูล BLOB ของ Spatialite

  • จะสังเกตเห็นข้อมูลเลเยอร์ GeoPoint จะมีรูปถ่ายของหินแนบมาในตารางด้วย ตอนขึ้นข้อมูลในตอนที่ 1 จะเป็น BLOB (Binary Large object) ตัว BLOB เป็นอะไรก็ได้ที่สามารถ stream เก็บเป็นไบนารี ตัวอย่างง่ายที่สุดก็คือ รูปภาพ ลองคลิกที่เลเยอร์ Geopoint แล้วคลิกขวาเลือก Open Attribute Table จะเห็น QGIS แสดงดังรูปด้านล่าง
QGIS มองไม่เห็น BLOB
  • หลังจากงาน FOSS4G 2010 ผมว่าผู้พัฒนา Spatialite คงได้รับ feed back พอสมควรและก็น่าปรับกระบวนยุทธ์กันใหม่ ถ้าจะให้ Spatialite เป็นฟอร์แม็ตมาตรฐานในแวดวง GIS ผมคนหนึ่งก็จะเอาใจช่วยครับ

Leave a Reply

Your email address will not be published.