2009年4月14日 星期二

特別的資料庫–Spatial database

特別之處就在於多了處理空間處理的功能。大部分是都是由原本的資料庫功能擴充而來。目前市面上主流的資料庫–Microsoft SQL Server、Postgresql、My SQL…等。此篇沒辦法討論到Oracle DB、IBM DB2,因為它們都非常的「高貴」,沒有機會碰到。

Microsoft SQL Server  –  Express為免費版本

Microsoft SQL Server 2005的版本,開始支援.net的擴充功能,所以在CodePlex - Open Source Project Hosting上就有人為SQL Server 2005寫了空間存儲及處理的擴充空能。在SQL Server 2008中就內建支援空間功能。免費版本的MS SQL Server 2008 Express亦同樣支援空間處理功能。

Microsoft SQL Server 2008 Express: 建議有1.9GB 可用硬碟空間

MySQL  –  Free

MySQL 應該是在5.0後開始支援空間處理功能。之前因為案子的原故(即使在GIS的系統中還是非常多使用MySQL),有想嘗試使用MySQL 5的空間功能,但是看了它的空間功能文件,覺得還很陽春,甚至文件都還沒有完成。不過這也是一年前的事,現在應該有改善一些了?

MySQL Spatial: 42 MB

PostgreSQL  –   Free

PostgreSQL是最早也最大開放源始碼的資料庫系統,以因為如此很早就有人為它開發空間擴充模組–PostGIS。因為PostGIS沒辦法單獨存在,一定要與PostgreSQL同在,所以在稱PostgreSQL資料庫包含PostGIS空間處理的擴充模組,我就簡稱PostGIS。因為PostGIS也開發的最早,所以空間處理的功能都蠻完整的,例如:空間座標系統轉換、空間運算都有對映的功能。甚至一些Web GIS常用的KML、Json的功能都有支援。

PostgreSQL: 25 MB / PostGIS:1.5 MB

SQLite  –  Free

SQLite是個非常小型的資料庫,很適合小型及嵌入式的系統。最近也開始支援空間資料的擴充功能,名稱為SpatiaLite。若僅要處理一種座標系統及簡單的空間功能,可以考量使用SpatiaLite。更多的資料可以參考以下連結。

KISS: spatialite in 5 minutes » Camptocamp Blog – Camptocamp
Part 1: Getting Started with SpatiaLite: An almost Idiot's Guide

SQLite: 200KB / SpatiaLite: 150KB

使用空間資料庫,可以直接在資料庫中作空間的查詢及運算,不需透過另外的GIS軟體。所以可以將原本的GIS Client + ArcSDE + DB的架構換成 GIS Client + Spatial DB。也因為這個原因ArcSDE利基消失了,在9.2的之後的版本就沒有這個產品,官方說法是在分散在ArcGIS Desktop與ArcGIS Server中

一定要用空間資料庫嗎?

當然是要看是否有空間處理的需求。不過依據開發的經驗在某些狀況下即使需要空間功能,但是也可以使用一般資料庫來處理。這種情形常發生在已有系統,但要開始導入Web GIS的案子。基本上這樣的案子須儘量不動到原有系統的情況下作開發,以把風險降至最底。

簡單的判斷準則是,GIS是不是要處理”點”的資料。因為點資料在Database中可以透過兩個欄位儲存X,Y座標資料,在作空間的查詢亦可以簡單地使用SQL語組合出查詢句。點資料儲存及簡單空間查詢都沒有問題,所以使用一般資料庫就能勝任。若是線或多邊形,光計設一個合適的方式放到資料庫中,就是一個挑戰;另外線及多邊形的查詢的方法都要自己撰寫。這種工作交給Spatial Database來處理,開發人員專心致力於提供一個更好的GIS Client會比較好。

以上是一些工作心得的小小分享,希望對大家選擇Special & Spatial資料庫可以有幫助。