葉 凱,蒲 智,林思成
(新疆農業大學 計算機與信息工程學院,烏魯木齊 830052)
信息技術經過長期的發展已趨于成熟,同時也為流域河湖的研究提供了大量的信息,該類信息包括人文信息、水文信息、空間信息、生態環境信息等[1].傳統的信息存儲方式一般采用文本、表格、圖像等形式儲存在各部門的數據庫中,不能直觀的展示信息,并且查詢相關河湖信息極為不便,嚴重影響了科研工作中的信息獲取效率[2,3].
隨著信息技術和3S技術的迅猛發展,二者相結合的WebGIS技術開始逐步成為GIS應用的主流,相對于C/S結構而言,WebGIS技術具有部署方便、使用簡單、對網絡帶寬要求低的特點,極大拓展了GIS的應用范疇和服務領域,相比傳統的GIS應用優勢明顯[4].
河流湖泊是陸地生態系統的重要組成部分.本文通過對新疆塔里木河流域九大水系河流湖泊信息的整理與研究,結合河流湖泊的空間分布特性,開發了基于WebGIS的塔里木河流域河湖信息系統,該系統不僅能夠對河湖信息進行存儲、管理和維護,而且能通過地圖標注,河湖搜索定位,河流湖泊信息查詢顯示等方式,直觀展示新疆塔里木河流域天然河湖的分布特點及水文相關信息,能為政府、高校、科研單位以及個人提供快捷高效的河湖信息獲取途徑,能對水資源的科學管理、生態環境的改善、涉水工程的建設等項目提供基礎信息支持[5].
本文以塔里木河流域為研究區如圖1.該流域為塔里木盆地諸河流域的總稱,跨中國、吉爾吉斯斯坦、塔吉克斯坦、巴基斯坦等國,大部分位于中國新疆維吾爾自治區南部,是中國最大的內流區.塔里木河流域幅員遼闊,河湖分布廣泛,流域內各水系差異大,多地處崇山峻嶺高寒地帶,甚至無人區,流域內河流主要發源于盆地邊緣的天山南坡、帕米爾高原、喀喇昆侖山、昆侖山及阿爾金山的內陸河流,向盆地內部流動,構成向心水系,河流的歸宿點是塔里木盆地的低洼部位.流域總面積102萬平方千米,其中中國境內91萬平方千米,全區河川徑流總量412億立方米,其中國外流入水量62億立方千米.流域內大于1平方千米的湖泊共有72個(不包括已干涸的羅布泊)總水域面積約1589平方千米,占全新疆湖泊總面積的31%[6,7].

圖1 塔里木河流域水系圖
基于WebGIS技術的塔里木河流域河湖信息系統是一個集地圖操作、河湖信息查詢展示的系統,將為個人或者科研單位等用戶開放,因此必須提供可靠的信息與完善的功能.結合實際需求,遵循科學性、實用性、開放性等原則開發,系統應實現以下功能:
(1)提供簡潔快速的地圖基本操作功能.包括地圖的縮放、漫游、鷹眼、底圖切換、坐標定位、線面量算等功能.
(2)支持矢量數據加載,基礎地圖數據的疊加以及底圖的切換.
(3)河流湖泊的相關水文信息、圖片、歷史文獻等信息的展示.
(4)系統支持對河流長度以及湖泊面積的測量功能.
(5)提供河流湖泊的條件查詢、點選查詢等多方式的河湖查詢方式.
(6)提供給用戶圖形編輯、圖形導出、地圖打印等功能.
綜上所述,系統具備以下特征:系統前端地圖界面,通過在地圖中對河湖矢量圖形的操作進行與服務器端和數據庫服務器的信息交互.系統支持常用柵格、矢量地圖的讀取、可視化.系統具備可擴展性,可根據需求分析對系統靈活的進行功能擴展,增強系統的實用性.
基于WebGIS技術的塔里木河流域河湖信息系統是一個基于B/S架構的應用系統.采用Microsoft SQL Server數據庫及文件系統作為數據服務器.空間數據主要通過GIS功能對文件進行解析顯示.整個系統采用MVC架構,客戶端通過Ajax向.NET服務端發送數據服務請求,服務端采用ADO.NET技術訪問數據庫,將數據結果以JSON格式返回到客戶端.客戶端使用開源項目OpenLayers API進行開發,實現相關地理數據的顯示與操作等GIS功能.系統體系架構如圖2.
系統開發環境搭建可分為兩步執行.第一步,從OpenLayers官網獲取OpenLayers的開發庫,開發庫包含ol.js和ol.css等文件.其中ol.js(ol-debug.js)是核心開發庫,集成了OpenLayers的所有功能,debug版為調試時使用.ol.css文件為樣式類,包含OpenLayers的所有默認樣式信息.第二步,采用.NET體系的MS Visual Studio作為Web應用開發IDE搭建系統框架.

圖2 系統體系架構圖
GeoJSON是一種基于JSON對象表示法的可以被JavaScript語言簡單快速解析進行交換的輕量級數據格式,它能對各種地理數據結構進行編碼,GeoJSON對象可以表示:Point、LineString、Polygon、Multi-Point、MultiLineString、MultiPolygon和 Geometry-Collection.GeoJSON里的特征包含一個對象和其特征,特征集合表示一系列特征.本系統通過LineString或者MultiLineString表示河流的基本特征Point表示湖泊特征.通過對不同水系的河流湖泊的矢量圖形進行繪制,以文件形式存儲在磁盤中,通過OpenLayers構建一個矢量圖層并設置河流顯示樣式,通過renderer渲染器數據顯示在地圖中.通過編碼GeoJSON屬性為每條河流或湖泊設置唯一ID值用以對屬性數據的訪問.GeoJSON河流表示方法示例如圖3.

圖3 河流矢量圖形繪制及效果圖
根據系統功能需求,通過對相關資料的整理以及長期野外考察所得數據,塔里木河流域河湖信息主要包括塔里木河流域內九大水系144條河流湖泊的基礎水文信息、人文信息、地理信息.河流可提取出河源、河口、河長、所屬水系等歷史變遷等關鍵信息,湖泊可提取湖泊的類型、地理坐標、湖面積、歷史水情等關鍵信息.系統中河流湖泊地形風貌的圖片都以文件方式存儲.紙質資料經過掃描、識別、校對、分類等步驟錄入Microsoft SQL Server數據庫中.為了便于管理,數據庫中表分為河流和湖泊兩類,每一類又分為三張表用以存儲三種不同類型的數據,如河流中將數字類、文本類、多媒體類進行分表存儲,數據庫中表結構如表1.

表1 屬性數據表結構(部分)
目前,WebGIS系統已從單一的WebGIS平臺向多元異構方向發展,越來越多的系統需要在同一系統中加載不同GIS廠商提供的數據,調用不同GIS廠商提供的GIS服務,這給WebGIS系統的可擴展性提出了極高的要求,而地理信息多以圖形、文本、多媒體數據方式展現,用戶通過人機交互對空間信息查詢分析.而目前主流的Openlayers正解決了這一難題.Open-layers是一個開源的項目,是一個專為WebGIS客戶端開發提供的JavaScript類庫包,用于為互聯網客戶端提供強大的地圖數據網絡訪問功能,具有靈活的擴展機制,提高了開發效率和靈活性,同時也保證了空間數據的高質量展示[8].
OpenLayers在Web中加載矢量地圖一般有兩種方式:一種是直接讀取矢量格式文件,即存儲在磁盤中的GeoJSON、GML、KML等格式的矢量文件;另一種是調用矢量數據服務接口,通過服務接口讀取矢量要素,這種方式同樣需要有服務資源的支持,即需要發布矢量服務的GIS服務器.本系統通過OpenLayers客戶端解析GeoJSON格式的文件來顯示河流的矢量數據.其數據加載原理是將圖層(Layer)與數據源(Source)進行分離,圖層是渲染地圖數據的容器,數據源則是GIS數據的載體,圖層要與數據源匹配設置.Layer與Source的關系如圖4.

圖4 OpenLayers加載矢量地圖
通過上圖分析可知,矢量地圖加載到地圖容器的原理為:先通過接口調用到GeoJSON格式的文本數據,然后通過ol.format.GeoJSON類的讀寫方法來解析這個文本數據,讀取到矢量要素(Features)及其幾何對象(Geometry)等,最后瀏覽器通過Style類設置的樣式對不同的矢量圖形進行渲染,也就是最終在地圖中看到的河流湖泊的矢量要素.
河流湖泊的數據涉及兩大類數據,即地理數據和屬性數據.地理數據采用多種Google地圖數據作為底圖,上層疊加河流的線矢量數據層和湖泊的點矢量數據層,并通過河流湖泊ID關聯矢量要素.空間數據與屬性數據通過ID一對一關聯實現通過地圖中空間數據查詢同一條河流或者湖泊的屬性數據.數據關聯示意圖如圖5.

圖5 數據關聯示意圖
系統要獲取相關信息展示給用戶,最簡單的方法時通過對前端地圖中河流或者湖泊的矢量要素進行點擊獲取數據,這種獲取方式通過OpenLayers提供的ol.interaction.Select類對象選擇河流或者湖泊矢量要素,并高亮顯示,用類方法get()獲取河流湖泊ID,根據ID值利用Ajax模式請求,即利用jQuery的方法發送數據請求;后臺由Handler.ashx文件統一處理前臺發送的數據查詢請求,再調用封裝的數據查詢方法進行查詢,將結果序列化為JSON格式返回.最終結果先以OpenLayers中的Popup形式彈出河湖名稱與圖片,然后點擊相關信息后在地圖中展示河湖的詳細信息.
系統按照總體系統架構進行,實現了相關功能,系統主要功能包括以下部分:
(1)地圖的顯示與操作
系統通過網絡加載Google地形圖、矢量地圖、遙感影像、交通地圖等地圖數據,并可以進行實時切換和縮放實現不同地圖下的分析研究.可以通過鼠標滾輪或者縮放條進行控制地圖顯示比例,鼠標實時坐標顯示,以及地圖的漫游功能,可以通過按鈕或者鼠標拖拉漫游快速將地圖移動至塔里木河流域.系統初始界面如圖6.

圖6 系統初始界面
(2)查詢功能
系統提供了對河流、湖泊、坐標、圖片的查詢功能,系統河流條件查詢可以根據自己的需求進行按水系、區域、河流長度對河流進行查詢并加載到表格同時將河流的源頭在地圖中標注出來方便查找河流的詳細信息.河流湖泊的空間查詢通過對地圖中的河流湖泊矢量要素的點擊即可即可高亮顯示河流的分布并獲取該點的圖片以及河流的屬性信息以及歷史變遷等人文信息.系統的坐標查詢通過鼠標點擊需要獲取的地點即可在地圖中獲取該地點的經緯度.系統涉及的圖片搜索功能主要將要查找的地點的名稱輸入即可將該地點的圖片都特殊標記與列表中方便用戶點擊查看.河流信息查詢如圖7.

圖7 查詢功能效果
(3)圖形編輯與測量功能
系統提動矢量圖形的編輯功能,包括點、線、面要素的添加刪除和移動,在地圖中對河流矢量圖形進行繪制并生成GeoJSON地理空間信息交換格式,并輸出為文件,可應用于其他不同WebGIS平臺,為地理信息的分享提供了便捷.測量功能主要是測量面積與距離,通過在圖層中繪制線與面,對長度和面積進行計算,計算結果可以作為參考.測量功能如圖8.

圖8 測量功能效果
(4)統計與打印功能
系統對塔里木河流域按各水系河流的條數、流域面積的大小、湖泊的集水面積、湖泊類型進行了分類統計并生成圖表加載到對應區域的地圖中,能對不同流域進行簡單的分析.系統支持地圖的打印功能,用戶可以選擇任意縮放級別和任意類型的地圖進行打印,為流域內地形地貌的解譯提供了良好的支持.系統統計與打印效果如圖9.

圖9 統計與打印效果
本系統充分利用了當前互聯網環境優勢,結合主流的WebGIS等技術,對塔里木河流域的河湖數據進行科學的管理,充分展示了新疆塔里木河流域河流湖泊資源的分布以及地理相關信息,將河湖信息直觀高效的展示給用戶,對塔里木河流域河湖資源的研究與更合理開發利用具有重要意義.系統具有可擴展性,對將來建立全新疆流域河湖信息系統奠定了基礎.但是將來還會遇到很多問題需要解決,隨著河流湖泊的時空變化,數據需要進一步的更新,需要建立系統維護與更新機制,以及根據需求變化進行功能的擴展.
1蘇安琪.塔里木河流域信息分類及系統設計初步.干旱區地理,1997,20(1):65-70.
2張偉杰,張沛露,呂冬梅.基于WebGIS的海洋地理信息共享平臺設計與實現.艦船科學技術,2016,38(8A):130-132.
3龐麗峰,唐小明,劉鵬舉.基于WebGIS省級林業信息共享平臺的研發.西北林學院學報,2011,26(2):180-184.
4郭明強,黃穎,謝忠,等.WebGIS之OpenLayers全面解析.北京:電子工業出版社,2016:2-57.
5肖銳,荊長偉,支俊俊,等.浙江省土壤信息共享平臺的構建與實現.科技通報,2013,29(1):19-24.
6王世江.中國新疆河湖全書.北京:中國水利水電出版社,2010:205-356.
7《中國河湖大典》編纂委員會.中國河湖大典·西北諸河卷.北京:中國水利水電出版社,2014:22-121.
8張貴軍,陳銘.WebGIS工程項目開發實踐.北京:清華大學出版社,2016:208-209.