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

  • ฐานข้อมูลเชิงพื้นที่ที่กำลังดีวันดีคืน แต่ฐานข้อมูลจะดีแค่ไหนก็ตาม แต่ถ้า Application ทั้งหลายไม่สนับสนุนก็ยากที่จะอยู่ได้ หันมาดู Spatialite ตอนนี้ใน Quantum GIS สนับสนุนฐานข้อมูลนี้ในระดับที่พอใช้ได้ ก็คือสนับสนุนในระดับที่จำกัดที่ผมพบมาคือจะมองข้อมูล BLOB (Binary Large Object) ของ spatialite ซึ่งเป็นรูปถ่ายเป็น NULL แต่อย่างไรก็ตามอนาคตก็น่าจะ support ได้เต็มที่มากกว่านี้
ตัวอย่างการใช้ฐานข้อมูล spatialite

ข้อดีของ Spatialite

  • spatialite ก็คือ sqlite ที่มีส่วนขยายรองรับฐานข้อมูลแบบเชิงพื้นที่ (ความหมายที่ตรงกันก็คือ ฐานข้อมูล GIS หรือ Geographic data หรือ Geospatial data อะไรประมาณนี้) ข้อดีของ spatialite
    • ติดตั้งง่ายๆ เนื่องจากมีขนาดเล็กมาก ขนาดของ sqlite + spatialite ประมาณ 2.2 MB
    • ไม่ต้องมี admin ดูแล
    • กินทรัพยากรของระบบต่ำมาก
    • เร็วและแรง
    • ใช้งานง่าย
  • ผมลองใช้แล้วเห็นด้วยกับทางผู้พัฒนาที่เคลมว่าฐานข้อมูล spatialite นั้นเป็น “The world’s smallest and simplest database” ก็คือ เล็กและเรียบง่ายที่สุด

แบบจำลองเรขาคณิต(Geometry Model) ของฐานข้อมูล

  • ก่อนจะไปต่อผมจะอธิบายสั้นๆ คุณลักษณะเชิงพื้นที่ของรูปลักษณทางภูมิศาตร์ ของฐานข้อมูล spatialite ออกแบบตามมาตรฐาน OGC (Open Geospatial Consortium Inc.) ซึ่งทั้งนี้แบบจำลองนี้จะตามมาตรฐาน OpenGIS ด้วย ซึ่ง geometry จะแบ่งเป็นชั้นๆได้ดังนี้
ภาพแสดงไดอะแกรมแบบจำลองเรขาคณิต
  • จากไดอะแกรมด้านบนจะเป็นแบบจำลองเรขาคณิตของรูปลักษณ์ทางภูมิศาสตร์ ซึ่งสีเหลืองจะเรียกว่า Non-Instantiable ซึ่งหาคำแปลในภาษาไทยได้ยากเหลือเกิน สำหรับผมแล้วง่ายๆก็คือ สร้างไม่ได้ ส่วนสีฟ้าเรียกว่า Instantiable (สร้างได้) ซึ่งผมจะกล่าวถึงเฉพาะสีฟ้าที่สามารถ implement ได้เท่านั้น
  • ซึ่งแบบจำลองจะแบ่งเป็น Class ใหญ่ๆได้ 2 ชั้นคือ Geometry และ Geometry Collection ซึ่งจะมีการแยกย่อยไปดังนี้
    • Class Geometry (ชั้นของเรขาคณิต)
      • class point (จุด) จะมีค่าพิกัด (x,y) ไม่มีขนาด
      • class line string (ชุดของเส้นตรง)
      • class polygon (รูปปิดหลายเหลี่ยม)  รูปปิดนี้จะมีรูปปิดด้านในซ้อนอยู่ก็ได้เรียกว่า interior ring
      Point
      ตัวอย่าง Linestring
      ตัวอย่าง Polygon
    • Class Geometry Collection(ชุดของชั้นเรขาคณิต)
      • MultiPoint (ชุดของจุด)
      • MultiLineString (ชุดของเส้นตรงหลายๆชุด)
      • MultiPolygon (ชุดของรูปปิดหลายเหลี่ยม)
    MultiPoint
    MultiLinestrings

    MultiPolygons
  • เหตุที่ต้องมีแบบจำลองเหล่านี้ไว้เพื่อให้สามารถจัดเก็บรูปทรงเหล่านี้ได้ในรูปแบบไฟล์ และที่สำคัญที่สุดต้องสามารถเข้าถึง สืบค้น จัดการ ประมวลผล และแลกเปลี่ยนข้อมูลด้านสารสนเทศทางภูมิศาสตร์ได้สำหรับวัตถุเชิงพื้นที่

ดาวน์โหลดและใช้งานสำหรับผู้ใช้วินโดส์

  • เนื่องจาก Sqlite + Spatialite มีขนาดเล็กจึงไม่ต้องการติดตั้งเพียงดาวน์โหลดไฟล์มาแล้ว unzip ไฟล์ไปวางไว้แล้วทำ shortcut ก็ใช้งานได้เลย ซึ่งก็เหมือนใน linux เพียงแค่ untar ไฟล์ก็เรียกใช้ได้
  • ตามไปที่นี่ได้เลย http://www.gaia-gis.it/spatialite/binaries.html ซึ่งจะมีไฟล์ให้ดาวน์โหลดอยู่มาก อาจจะงงๆ ผมจะลงลิงค์ดาวน์โหลดให้(แต่อนาคตลิงค์อาจจะขาด เพราะไฟล์เปลี่ยนเวอร์ชั่น) คลิกที่ลิงค์เพื่อดาวน์โหลดได้เลย

ติดตั้งเพื่อใช้งาน

  • เนื่องจากไม่มีโปรแกรม install สำหรับผมแล้วจะสร้างโฟลเดอร์ “spatialite” เช่น c:\spatialite จากนั้นก็ unzip ไฟล์ ที่เราดาวน์โหลดไฟล์ทั้งหมดที่ผมแนะนำมาขั้นต้นลงไปในโฟลเดอร์เดียวกันเลย  และอย่าลืมตั้ง path “c:\spatialite” ให้ด้วย
โฟลเดอร์สำหรับ Spatialite

สร้างฐานข้อมูลเพื่่อทดสอบ

  • ที่โฟลเดอร์ผมจะใช้ 2 tools คือ spatialite-gui และ spatialite-gis สำหรับนำมาเตรียมข้อมูลและแสดงผล ผู้ใช้อาจจะสร้าง shortcut เพื่่อเรียกใช้ได้ง่ายๆ  ตอนแรกผมจะเรียก spatialite-gui มาก่อนดังรูป
spatialite-gui เมื่อเปิดครั้งแรก
  • คลิกที่เมนู Files > Create a New (Empty) SQLite DB ตั้งชื่อไฟล์ใหม่จะมี extension เป็น sqlite อัตโนมัติ ผมตั้งชื่อไฟล์ geology.sqlite
สร้างฐานข้อมูล spatialite ใหม่
  • ผมจะลองข้อมูลอย่างง่ายๆ โดยเปิด shape file ที่เป็น point เล็กๆ ไม่กี่จุด เพื่่อ import ไปในฐานข้อมูล spatialite ที่เมนูไฟล์คลิก Files > Advanced > Load Shapefile เปิดไฟล์ geo.shp มาที่นี่สำคัญที่สุดคือต้องป้อนค่า SRID (Spatial Reference System Identifier) ให้ถูกต้อง ค่า SRID จะเป็นหมายเลขแสดงระบบพิกัดที่เราใช้อยู่ ตัวอย่างที่ผมใช้อยู่คือค่า 32647 เป็น UTM Zone 47N บน WGS84
ตั้งค่าต่างๆให้กับ shape file ที่ import เข้า spatialite
  • จะเห็น Table “GeoPoint” ขึ้นมาคลิกขวาเลือก Edit table rows ต่อไปจะเพิ่ม column เข้าไปเพื่อจัดเก็บรูปถ่าย
แสดง Table ที่จะทำการเพิ่ม column
  • เพิ่ม column ใหม่ให้ฐานข้อมูลเพื่อเก็บรูปภาพ ที่ table “GeoPoint” คลิกขวาเลือก Add New Column

 

 

  • ต่อไปจะเริ่ม import รูปถ่ายตามชื่อไฟล์ของรูป
Import Blob to new column
  • ต่อไปผมเพิ่ม table ที่เป็นเส้นชั้นความสูงด้วยวิธีการที่กล่าวมาแล้วคือคลิกที่เมนู Files > Advanced > Load Shapefile เลือกไฟล์ Contours.shp

 

  • ตอนนี้ก็พอแค่นี้ก่อนครับ ติดตามตอนหน้า จะนำฐานข้อมูล spatialite มาเปิดดูด้วย spatialite-gis และไปลองฐานข้อมูลด้วย QGIS ว่าจะ support ได้สักขนาดไหนกันครับ

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

  1. สวัสดีครับ ขอสอบถามครับ พอดีไปอ่านใน คู่มือ Spatiallite ได้เปรียบเทียบกับฐานข้อมูลตัวอื่นๆ แล้วยก Binary size มาเปรียบเทียบ อยากทราบว่า Binary size นี้มันคืออะไรครับ

    ในนี้ครับ https://www.gaia-gis.it/spatialite-2.1/SpatiaLite-manual.html

    ขอบคุณครับ

    1. สวัสดีครับ คงหมายถึงขนาด execute file หรือ dynamic link library (dll) ที่ขนาดของ libsqlite3.dll ขนาด 199 KB และ libspatialite-2.dll ขนาดเพียง 93 KB ซึ่งขนาดเล็กมาก เวลา execute แล้วคงกินเมโมรี่นิดเดียวครับ

Leave a Reply

Your email address will not be published. Required fields are marked *