顯示具有 spatial database 標籤的文章。 顯示所有文章
顯示具有 spatial database 標籤的文章。 顯示所有文章

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資料庫可以有幫助。

2009年1月30日 星期五

空間資料(上)

 

空間資料的儲存方式有檔案+表格、XML-KML、GML及空間資料庫三種主要方式。

XML

XML的方式很多如用來記錄GPS Log的GPX、GML及Google使用的KML。使用XML的好處在於XML可以使用unicode編碼,其使用的標籤語言易讀也易懂,其格式及內容也很容易轉換。目前常用的空間XML格式都是開放的標準之一,許多GIS軟體都有支援,甚至ArcGIS 9.3也將支援KML,QGIS則支援GML與GPX。

 

檔案+表格

一般常用Excel來存放一些數據的資料,善用其中的公式及函數整理起數據來是也很快速。一個Excel檔案中可以儲放多個工作表,很像一個小形的資料庫,可惜Excel並沒有支援標準空間欄位的功能。

在常用空間資料是使用ArcGIS的ESRI Shape檔案,也就是分別儲放在*.shp、*.shx及*.dbf中。副檔案shp是Shape形狀的縮寫,故名思義shp是用來記錄點、線及面的空間資料;副檔名為shx則是shape index的縮寫,也就是存放可以加快空間查詢的資料;最後一個副檔名是dbf,則是Dbase File,用來存放屬性資料的表格檔,一個檔案一個表格。因為DBF是很早就產生的資料格式,所以對後來製定unicode的支援很差,在中文使用上也存在選多缺字問題。

不論是使用Excel、dbf都是使用表格儲存,但是其實我們使用資料雖然放在不同的表格,其實是互相有關係的。例如:學生的資料表及各科成績的資料表是有關係的。但是在表格之間的關係無法用一個有效的方法告訴Excel程式,所以有人就會想出使用各種的方式來表達。

例如:使用相同欄位值

學生資料表
name | gender | Address
王小明 | 男 | 台北市

數學成績
name | 第一次小考|期中考
王小明 | 60|80

在Excel中使用以上的方法即可以幫助我們人類了解其中的關連。若要處理的資料不僅是一個班級而是整個學校且是每一屈的學生紀錄,那要如何處理呢?這時就要靠電腦要處理,ArcGIS程式中參考關連式資料庫實作了一些關連的功能,讓古老的DBF檔案可以依某些欄位建立關連。不過要使用這個功能表格中必須有一些特殊的編碼欄位,例如運研所的提供的台灣行政區圖資…

由於現在常用的圖資還是以上述的方式存儲,一方面限制很多,另一方面即使將上述資料轉到資料庫中,常常也擺脫不了以上述的限制。

 

空間資料庫

資料庫加上空間欄位的支援即是空間資料庫。例如開放原始碼的PostgreSQL資料庫,因為其開放的特性,所以很早就有postGIS擴充功能,讓PostgeSQL支援空間資料的功能。之前版本要分別安裝,一直到PostgreSQL 8之後,安裝時選取PostGIS模組即可安裝好所需的空間資料庫功能。

ESRI在之前一般資料庫尚未支援空間資料時,即推出了ArcSDE產生,它可以擴充一般資料庫,使其可以支援空間功能。ArcSDE的功能就是將空間資料轉換成資料庫的能儲存的格式,反之亦然。除了儲存之外空間資料的查詢亦可以透過ArcSDE來操作。但是在最近不論是PostgreSQL、MySQL及Micorsoft SQL Server 2008都已內建支援空間資料的功能,所以ArcSDE的價錢由本來的天價降至免費附加功能。由於PostgreSQL是公開源始碼且最早支援空間功能,所以相較其它資料庫起來PostgreSQL支援空間功能較完整,,再加上PostgreSQL是免費的資料庫,所以之後所用的空間資料就使用PostgreSQL,為了方便簡稱為PostGIS。

使用空間資料庫的好處

  1. 使用資料庫容易管理、更新與維護、較適合大型的GIS計畫
    使用資料庫的正規化,減少資料不一致性…日後資料維護更容易。
  2. 支援Unicode、多國語言及不受dbf檔案的Big5限制
    這非常很重要,因為許多地名都是較少見的字,在Big5中不支援這些字,例:澎湖縣湖西鄉「菓」葉村。
  3. 在資料庫中使用表格之間表格的關連非常容易
    目前的資料庫大多數為關聯式資料庫,關聯式資料庫最簡單也最強大的功能就是作表格之間的關連,不論是一對一、一對多或多對多都可以輕鬆完成。
  4. 將表格間作關聯後可製作成一個檢視(view)
    檢視(view)可以想成虛擬的表格,例如台灣鄉鎮界的表格與地標的表格作空間關聯即可產生包含鄉鎮屬性的表格。

空間資料庫裡面可以有非常多的表格,有些表格可能含有空間資料有些則否。要如何有效且正確管理其中的資料呢?答案是要遵循資料庫的規範。

之後再詳細說明吧~~