把GIS資料放在RDBMS中,但是一般的RDBMS都沒有提供GIS的資料類型(如點、線、多邊形、以及這些feature之間的拓撲關係和投影座標等相關資訊),RDBMS只提供了少量的資料類型支援:int,float,double,Blog,Long ,char等,一般都是數字,字串和位元據幾種。並且RDBMS不僅沒有提取對GIS資料類型的儲存,也沒有提供對這些基礎類型的操作(如:判斷內含項目關聯性,相鄰、相交、求差、距離、最短路徑等)。
為了實現GIS資料類型的儲存和對GIS資料類型的操作支援。我們可以採用曲折的辦法來達到這些目的。
1、 儲存:把featrue以一個二進位的欄位形式儲存,同時建立對該位元據的描述資訊(稱為空白間中繼資料)。
2、 操作:為每種feature建立一組函數包。
A、 讀取時,先讀取空間中繼資料,根據中繼資料把featrue的位元據填充到featrue對象的data部分中。
B、 寫入時,先寫入空間中繼資料,然後把featrue對像的data部分序列化為位元據,然後儲存到feature欄位中。
C、 空間運算:空間運算操作的內容為fatrue對象的data部分,而空間運算做為fatrue類成員函數。或者單獨為每種feature建立相關的函數包。
下面我們先探究空間資料類型的儲存。儲存主要牽涉到的是GIS資料的中繼資料部分。我們需要管理好各種空間資料。
同種類型的featrue我們歸為一類,我們稱為featrue類,每個feature類對應著資料庫中的一個二進位欄位,每個feature對象對應著這個二進位欄位的具體數值。為了把GIS的feature的屬性資料和空間資料儲存到一起,統一管理。我們建立這樣幾個概念。
資料集:對應著資料庫中的一張表,這個表裡有featrue的二進位欄位和一般的屬性欄位,同時還包括每個feature對象的中繼資料欄位如:周長、面積以及輔助欄位。
資料來源:對應著資料庫中的一組表,由兩部分組成:一部分是資料集,另一部分是對資料集描述的表(稱空間中繼資料表)。通常是每個schma(或者資料庫)下一組空間中繼資料表。
起輔助作用的資料庫物件:包括為各個資料集建立的索引、觸發器、序列……
空間中繼資料表包括:
A:描述每個資料集的表:這個表裡的欄位包括:每個資料集的包圍盒。以及對該資料集所建的索引的類型,名稱等。
B:描述資料集欄位的表:這張表的欄位包括:資料集名,欄位名稱,欄位類型,欄位別名、資料集別名、資料集類型等……
C:輔助對象的中繼資料表:包括描述索引與資料集之間關係的表,包括描述觸發器與資料集之間關係的表,包括描述序列與資料集之間關係的表。描述資料集之間關係的表(如網路資料集,是由點類型的資料集與線類型的資料集組成,這就需要說明點與線之間的拓撲關係咯)
上面我們只討論向量的GIS資料類型的儲存,下面我們來探究下柵格類型的GIS資料存放區。
同樣的也有柵格的資料集,只不過是欄位的類型稍微改變了下而已。為了加快資料存取,我們應當使得GIS操作只存取它所需要的資料,以一張遙感影像為例,我們可以把一塊大影像按一定規則切割為一系列的小圖塊,然後把這些小圖塊以二進位的形式儲存到IMAGE欄位裡,同時把該小圖塊的位移位置(有了其實位置,和位移位置以及每個圖塊的大小就知道了該圖塊的地理範圍了)作為表的屬性欄位儲存下來。以後在取資料時,需要先查該圖塊的中繼資料內容,得出地理範圍(或者乾脆就把每個圖塊的地理範圍儲存下來),這樣就知道在顯示時需要取哪些記錄,然後再把需要顯示的記錄的IMAGE的資料取出來,根據地理範圍把資料拼接起來就可以了(向量資料的顯示與操作也是這麼幹)。圖塊大小的劃定規則是比較重要的,這非常影響速度的。
一般來講一個波段,對應著一個柵格資料集。在顯示影像時,需要同時讀取多個柵格資料集,在顯示的時候把它們拼接到一起。
我們還需要描述這些柵格資料集的中繼資料表,比如,那幾個柵格資料集是一組的對應著同一個影像檔案,地理座標的情況怎樣,影像金字塔資訊。
後面我們討論下影像金字塔,為了加快資料顯示,有些空間資料庫引擎是對最原始的資料抽稀,按每一層金子塔抽稀為一個柵格資料集。抽稀一般採用冪級數的方式。這是一種以空間換時間的做法。
對於影像壓縮技術,我沒有研究過,等過段時間看看再說吧。
有了這些中繼資料表和feature表後,這就為展開GIS操作奠定了基礎。