計算機是壹門研究用計算機進行信息表示和處理的科學。這裏面涉及到兩個問題:信息表示、信息處理,信息表示直接關系到信息處理的算法與效率。信息(數據)之間往往是有重要的結構關系,數據結構就是對數據表示以及其上操作或功能的封裝,分邏輯結構和存儲結構兩個層面。
邏輯結構定義了數據之間的邏輯結構關系。數據元素相互之間的關系稱為結構,有四類基本結構:集合、線性結構、樹形結構、圖狀結構(網狀結構)。樹形結構和圖形結構全稱為非線性結構。集合結構中的數據元素除了同屬於壹種類型外,別無其它關系。線性結構中元素之間存在壹對壹關系,樹形結構中元素之間存在壹對多關系,圖形結構中元素之間存在多對多關系。在圖形結構中每個結點的前驅結點數和後續結點數可以任意多個。
存儲結構定義了數據實際在計算機中存儲結構關系,是某種邏輯結構在計算機上的具體實現,分順序存儲結構和鏈式存儲結構。順序存儲方法:它是把邏輯上相鄰的結點存儲在物理位置相鄰的存儲單元裏,結點間的邏輯關系由存儲單元的鄰接關系來體現,由此得到的存儲表示稱為順序存儲結構。順序存儲結構是壹種最基本的存儲表示方法,通常借助於程序設計語言中的數組來實現。鏈接存儲方法:它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系是由附加的指針字段表示的。由此得到的存儲表示稱為鏈式存儲結構,鏈式存儲結構通常借助於程序設計語言中的指針類型來實現。索引存儲方法:除建立存儲結點信息外,還建立附加的索引表來標識結點的地址。散列存儲方法:就是根據結點的關鍵字直接計算出該結點的存儲地址。
在GIS開發實現中,空間索引、空間數據存儲、地圖管理、地圖符號化及渲染、空間分析等都會用到很多的數據結構,下面作壹些簡要介紹,僅供參考,讀者可以有不同的實現,效率也會有壹些差異。
數組或鏈表,在GIS中應用最為廣泛,幾乎到處可見其身影。比如,線或多邊形就是Point類型的數組,讀shapefile文件時,文件已經記錄下該要素包含的點數,數組的長度就被確定了,如果添加節點,最好采用封裝好的動態數組或鏈表來存儲;網格索引,用二維數組表示,每個數組元素記錄下該網格範圍所對應的數據存儲地址,方便空間數據的檢索;圖層管理,壹張地圖是由若幹個圖層疊加而成,用數組或鏈表來存儲這些圖層信息,圖層順序調的整轉化為數組或鏈表的刪除和插入。
堆棧和隊列,也屬於線性結構,只是比數組和鏈表多了壹些限制,堆棧是先進後出,隊列是先進先出。比如,線性四叉樹索引,用中序遍歷的方法降四叉樹線性化,其中樹的中序遍歷,非遞歸算法就需要用到堆棧;GPS軌跡跟蹤,隨著GPS點的增加,軌跡會越來越長,在實時跟蹤過程中,可能只需要保留當前最近壹段時間的點,更早之前的點被保存到數據庫中,不再繪制,所以,采用循環隊列來存儲GPS當前壹些點,利用了GPS時間順序先進先出的特點,同時能循環利用隊列;客戶端圖片瓦片緩存池,也可以采用循環隊列,當前可視範圍內獲取到的新瓦片插入到隊列中,當隊列滿的時候,淘汰最早存放在隊列中的瓦片,同時保持隊列緩存池的容量。
優先隊列,是不同於先進先出隊列的另壹種隊列,每次從隊列中取出的是具有最高優先權的元素,二叉堆就是優先隊列,分最大堆和最小堆,它能快速地從壹個集合中找出最大(小)的元素。最優路徑,算法中經常執行壹步就是從後繼節點中找出最優的節點,采用的就是最小堆,它能迅速地找出到當前節點權值最小的節點。
樹,是壹種遞歸定義的數據結構,壹對多的關系,樹是沒有回路的連通圖。四叉樹索引,就是典型的樹結構,按MBR(Minimum Bounding Rectangle 最小外包矩形)相交條件從樹根壹步步往下查找,篩選出要素子集;OGC中XML解析,XML(GML)結構本身也是樹狀結構;等高線,嵌套關系的表達,是樹結構;屬性數據詞典庫,采用Trie數據結構,多叉樹的形式,建立屬性詞典庫,通過字符串的匹配實現屬性查詢。
圖,是壹種數據元素間為多對多關系的數據結構,通常采用鄰接矩陣或鄰接表的方式來存儲。道路網或管網的拓撲構建,道路網或管網屬於網狀結構,用圖來描述節點與弧段之間的拓撲關系,便於最優路徑、最大流最小割通路、爆管、旅行商等網絡分析。
哈希,設計Hash函數代入key算出地址,存儲value值,哈希查找效率高,但可能存在沖突,對內存空間占用相對較大壹點。道路網或管網構建,以節點的node_id為key,以後繼節點的集合為value;GML引擎,以圖層編號為key,屬於該圖層的要素集合為value;線標註,線被裁減後,通過統壹的key來拼接,以不同裁減路段集合為value。
以上簡要介紹了GIS常用數據結構,但應用遠遠不止這些。數據結構+算法=程序,在數據表示和處理上,具體采用哪種邏輯結構,需要分析數據元素之間的邏輯關系,而確定了邏輯結構,還要考慮采用什麽存儲結構來實現,也是需要根據實際情況來分析的,數據結構直接關系到算法的具體實現及效率,在GIS開發實現中應用非常廣泛。
所以GIS對於數據結構有特定的要求,這個具體應用要根據GIS的需要來說。