摘要:在傳統考古領域中利用現代探測和信息技術輔助考古發掘,詳細闡述了利用SVG技術和Java技術實現考古探測Web GIS的基本功能,包括地圖的縮放、平移、查詢以及交互等基本的GIS圖層操作。首先介紹了SVG技術,分析了考古探測Web GIS的系統結構,研究了基于SVG技術的交互式圖層管理,最后建立了系統的模擬結果。
關鍵詞:可升級矢量圖像; 考古探測; 網絡地理信息系統; Java
中圖分類號:TP311文獻標志碼:A
文章編號:1001-3695(2007)07-0055-03
金沙遺址位于成都市區西郊。該遺址的發現是繼三星堆遺址后四川最重大的考古發現,它將古蜀青銅文明的歷史追溯至3 000年前,被譽為2001年全國十大考古新發現。要使金沙遺址為更多的人所了解和熟悉,通過互聯網的宣傳費用是最低的,而影響范圍最廣。此外,為了讓更多的考古專家更為詳細地了解金沙遺址考古發掘情況,有可能利用互聯網進行協同考古研究,這都需要對金沙遺址建立一套網絡瀏覽展示分析的Web GIS。本文利用SVG技術實現了對金沙遺址考古探測的基本圖層管理功能,以及地圖的縮放、平移、查詢、交互操作等功能。
1SVG技術
SVG(Scalable Vector Graphics,可升級矢量圖像)是一種基于XML的開放的矢量圖形描述語言。SVG圖像是與XML 1.0兼容的文檔,SVG元素是指示如何繪制圖像的一些指令,閱讀器(Viewer)解釋這些指令,把SVG圖像在指定設備上顯示出來。使用SVG可以在網頁上顯示各種各樣高質量的矢量圖形,包括許多圖像處理中常見的功能,如圖形、文字、動畫、色彩、濾鏡效果等。最關鍵的是,SVG完全用普通文本來描述,也就是說,這是一種專門為網絡而設計的基于文本的圖像格式。SVG基于XML,可擴展性很強,能夠描述任意復雜的圖像。
1999年2月,SVG草案出臺,經過不斷地修改更新,最終形成了第一份實驗性的實現規范。2001年7月,W3C正式發布了SVG圖像格式建議書,這就是SVG 1.0規范。W3C對SVG的解釋是:“SVG是一種使用XML來描述二維圖像的語言。它允許三種形式的圖像對象存在,分別是矢量圖形、點陣圖像和文本。各種圖像對象能夠組合、變換,并且能修改其樣式,也能夠定義成預處理對象。文本是XML名字空間中的有效字符,這些字符能被作為SVG圖像的關鍵字而存留在搜索引擎中。SVG的功能包括嵌套變換、路徑剪裁、透明度處理、濾鏡效果以及其他擴展;同時,SVG支持動畫和交互,也支持完整的XML的DOM接口。任何一種SVG圖像元素都能使用腳本來處理類似于鼠標單擊、雙擊以及鍵盤輸入等事件。因為與Web標準兼容的緣故,SVG還能夠在同一個Web頁面中憑著繼承自XML的名字空間等特性來完成一系列交互操作?!豹?/p>
本文的考古探測GIS模型在圖層顯示上可以有VML、SVG等多種格式選擇。其中矢量標記語言(Vector Markup Language,VML)是微軟提供的一種矢量圖形編輯和顯示的技術,基于XML技術。但這個格式為微軟自己開發,并不是W3C推薦的標準,只在IE5上得到了支持。SVG也是一種基于XML的技術,并且是W3C推薦的國際標準。相比之下,它比VML具有更多的優點,如支持字符查找、支持Xlink和Xpointer等,因此具有更為廣闊的應用開發前景。本文的考古探測Web GIS實驗模型采用了SVG技術來實現圖層的顯示和管理。
2考古探測Web GIS實驗模型
按照國際文物保護的發展趨勢,保護將以現場保護和埋藏保護為主。由于許多文化遺存一旦暴露在氧化環境下或離開原有的存放環境,將迅速被風化破壞。現有的文物保護措施不能有效地對其實施保護,往往使古文物遺存遭受破壞,損失慘重。利用物理探測結果在GIS中進行空間數據和屬性數據的管理以及利用GIS進行空間分析和緩沖區分析,盡可能地實現在不開挖的情況下進行考古研究。
筆者在金沙遺址進行了多種無損探測方法的試驗,包括高密度電阻率法、高精度磁法、地質雷達等。這些探測數據有空間數據和屬性數據,數據量特別大。在對數據的管理中,本文采用GIS進行管理和展示。作為研究,筆者僅利用GIS軟件對高密度電阻率法的探測數據進行管理,如圖1所示。其中管理了電阻率法的測點、測線以及電阻率法的反演圖等。
對每種方法進行GIS管理后,可以利用GIS的分析功能分析出異常區,以及作一些緩沖區分析,為考古提供科學的指導。高密度電阻率法數據主要包括測線數據和測點數據,以及反映探測結果的地下電性結構圖形剖面等。測點數據結構如表1所示。本文主要關心空間坐標(X、Y、Z)以及每個測點的屬性值。
2.1系統結構模型
系統主要由Web服務、GIS服務和數據存儲三部分的關鍵技術構成,采用基于B/S方式的三層體系結構,如圖2所示。
整個工作流程如下:
(1)客戶端向Web服務器發出服務請求;Web服務器接收到請求后,分析調用請求。如果只是普通的網頁服務就由Web服務器直接處理;如果是GIS服務請求,則向下連接GIS服務器。
(2)在GIS服務器中,根據調用請求,在其中完成空間數據到GML文件的格式轉換,以及GML文件到SVG文件的轉換,并轉回Web服務器。
(3)Web服務器把GIS服務器傳回的SVG文件發送給客戶端,在客戶端的瀏覽器中進行顯示,利用JavaScript腳本語言實現地圖的操作和交互功能。
整個系統功能的實現主要分為服務器端和客戶端的技術實現,在服務器端主要由Web服務器和GIS服務器組成。其中,Web服務器主要負責與客戶端的連接,并提供普通的Web服務,當客戶端需要GIS服務時才連接GIS服務器;GIS服務器主要負責與空間數據的連接與管理。對于多源異構的空間數據,在GIS服務器中進行數據格式的轉換,最終生成SVG文件并傳回給Web服務器,由Web服務器再傳回到客戶端進行顯示。本文主要討論了客戶端的SVG圖像展示和交互操作的實現。
2.2交互式GIS圖層管理
在客戶端安裝Adobe公司的SVG插件,在客戶端使用SVG技術,結合JavaScript腳本語言實現基本的Web GIS功能,包括地圖平移、放大、縮小、圖層的管理、地圖的交互性顯示以及對圖層屬性的查詢等。整個系統基于矢量圖形,在放大和縮小的情況下,圖形顯示質量好;能無級放大和縮小,實現了對測線屬性和測線二維反演圖的查詢;能分別管理各個圖層的顯示與隱藏,并實現了對工作區的交互顯示。
2.2.1地圖的平移
地圖向左平移功能的實現代碼,與其他平移方法代碼類似,主要是利用currentPosition變量的增加和減少進行平移操作。
function hori-move(evt){
viewBox=SVGRoot.getAttribute(′viewBox′);
var viewVals=viewBox.split(′ ′);
currentPosition=parseFloat(viewVals[0]);
if (goLeft==true){//地圖向左移動
if (currentPosition<0.1){
currentPosition=currentPosition+0.1;
}
goLeft=1;
}
viewVals[1]=currentPosition;
SVGRoot.setAttribute(′viewBox′,viewVals.join(′ ′));
}
2.2.2地圖的縮放
地圖放大/縮小的實現代碼,主要利用currentScale變量進行圖形的擴大和縮小變化。
function zoomIn(){
if (SVGRoot.currentScale<5){ //地圖放大
SVGRoot.currentScale=SVGRoot.currentScale*1.5;
}
}
function zoomOut(){
if (SVGRoot.currentScale>0.3){ //地圖縮小
SVGRoot.currentScale=SVGRoot.currentScale*0.5;
}
}
2.2.3圖層的人機交互
SVG采用基于XML的DOM文檔管理結構可以很方便地實現層次管理?!磄〉〈/g〉代表一個組, GIS中的一個專題圖層存儲在一個組中,每個組都有一個唯一標志ID屬性。根據這個ID屬性就可以通過JavaScript控制不同圖層的顯示和隱藏,并且SVG圖形支持事件編程,可以很容易地實現對onclick()或onmouseover()等事件的編程。
圖層的隱藏和顯示功能主要是利用setAttribute函數對visibility參數賦予hidden屬性或visible屬性。部分實現代碼如下:
function vis_hid(id){ //顯示或隱藏圖層獲得所選圖層對象
var SVGstyle=SVGDoc.getElementById(id);
if(SVGstyle.getAttribute(\"visibility\")==\"visible\")
{
//隱藏該圖層
SVGstyle.setAttribute(\"visibility\",\"hidden\");
} else {
//顯示該圖層
SVGstyle.setAttribute(\"visibility\",\"visible\");
}
}
2.2.4查詢功能的實現
該模塊主要對金沙遺址的測線編號進行查詢,輸出該測線的電性結構剖面圖或描述字段信息,以方便探測人員利用該Web GIS平臺進行考古探測數據的管理。
查詢測線的屬性字段主要根據測線的ID號,利用getElementById()函數進行查詢;利用getAttribute ()函數得到測線的屬性字段內容。結果如圖3和4所示,分別為查詢測線的反演圖和測線的數據說明。
//從表單中獲得要查詢的ID號
function showattrib(value){
//獲得符合ID號內容的對象
var SVGid=SVGDoc.getElementById(value)
var new_window=window.open(\"\",\"query\" ,\"height=133,
width=450\");
//顯示該對象的describe字段內容
new_window.document.writeln(SVGid.getAttribute(\"describe\"));
new_window.focus();
}
3結束語
本文首先介紹了SVG技術,分析了WebGIS的系統結構,探討了在探測GIS中利用SVG技術和Java技術實現WebGIS的圖層管理和顯示功能,實現了對探測圖層的基本操作,方便了探測人員和考古人員對探測成果的管理。SVG技術不僅用于地圖的展示,任何矢量圖形都可以使用該技術?;谠摷夹g的圖像具有圖形美觀、文件標準統一、可讀性強、靈活易用等特點。SVG技術在WebGIS及互聯網上的矢量圖形發布中將具有廣闊的應用前景。
參考文獻:
[1]劉南,劉仁義. WebGIS原理及其應用——主要WebGIS平臺開發實例[M].北京:科學出版社,2002.
[2]SVG規范[EB/OL].http://www.w3.org/Graphics/SVG/.
[3]但正剛,李順.XML高級網絡應用[M].北京:清華大學出版社,2002.
[4]McLAUGHLIN B.Java與XML[M].孫兆林,等譯.北京:中國電力出版社,2001.
[5]BIRBECK M.XML高級編程[M].裴劍鋒,等譯.北京:機械工業出版社,2002.
[6]朱渭寧,黃杏元,馬勁松.XML——Web GIS發展的解決之道[J].現代測繪,2000(3):3-6.
[7]鄔倫,劉瑜,張晶,等.地理信息系統——原理、方法和應用[M].北京:科學出版社,2004.
注:“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”