相關(guān)鏈接: 北京安全網(wǎng) 北京質(zhì)量網(wǎng) 北京論文網(wǎng) 北京資訊網(wǎng)
摘要:本文介紹了WebService及其相關(guān)技術(shù)發(fā)展現(xiàn)狀,并詳細(xì)闡述了OGC規(guī)范中WMS的相關(guān)標(biāo)準(zhǔn)與要求。結(jié)合需要,自主在VS 2005 C#平臺下實現(xiàn)了WMS的服務(wù)開發(fā)與用戶測試,并進(jìn)行了相關(guān)技術(shù)總結(jié)與歸納。
論文關(guān)鍵詞:WebService,OGC,WMS服務(wù)
近幾年WebGIS 取得了快速發(fā)展,其應(yīng)用也擴(kuò)展到GIS應(yīng)用領(lǐng)域的各個方面。但傳統(tǒng)的WebGIS軟件技術(shù)中仍存在一些局限,具體表現(xiàn)在:并發(fā)處理能力差,響應(yīng)速度慢;系統(tǒng)的異購兼容性不足。解決傳統(tǒng)WebGIS軟件的上述問題,Web Services技術(shù)以及.NET,J2EE等主流開發(fā)平臺為我們提供了很好的解決方案。本文的目的就是要弄清楚Web Services技術(shù)架構(gòu),并且分析如何采用基于.net的開源庫Sharpmap,實現(xiàn)符合OGC(Open Geospatial Consortium)標(biāo)準(zhǔn)之一Web Map Service的網(wǎng)絡(luò)地圖服務(wù)。證明采用Web Services技術(shù)封裝與發(fā)布空間數(shù)據(jù),實現(xiàn)地理信息系統(tǒng)的功能變?yōu)閃eb服務(wù)的可行性。
2 相關(guān)技術(shù)介紹
2.1 WebService介紹及相關(guān)技術(shù)
Web Service的實現(xiàn)包括三個核心技術(shù):UDDI(統(tǒng)一描述,發(fā)現(xiàn)和集成協(xié)議Universal Description,Discovery and integration)用于規(guī)范服務(wù)的注冊,查找和發(fā)現(xiàn)過程,WSDL(網(wǎng)絡(luò)服務(wù)描述語言Web Service Description Language)用于規(guī)范服務(wù)的描述,SOAP(簡單對象訪問協(xié)議Simple Object Access Protocol)用于規(guī)范調(diào)用服務(wù)時采用的通訊協(xié)議。
Web Service的工作流程如圖[1]所示:
圖[1] Web Service工作流程
Web Service是由一系列的協(xié)議組成,Web Service的協(xié)議棧如圖[2]所示,當(dāng)然目前的協(xié)議棧還在不斷的擴(kuò)展,有進(jìn)一步發(fā)展的巨大空間:
圖[2] Web Service協(xié)議棧
從以上的協(xié)議?矗合旅鎯蓪邮窍惹耙呀(jīng)定義好的并且廣泛使用的傳輸層和網(wǎng)絡(luò)層的標(biāo)準(zhǔn),如:IP, HTTP,SMTP等。而中間的四層是目前開發(fā)的Web Service的相關(guān)標(biāo)準(zhǔn)協(xié)議,也是Web Service的核心技術(shù),包括服務(wù)調(diào)用協(xié)議SOAP、服務(wù)描述協(xié)議WSDL,服務(wù)發(fā)現(xiàn)/集成協(xié)議UDDI,以及服務(wù)工作流描述語言WSFL。最上層描述的是更高層的待開發(fā)的關(guān)于路由、可靠性以及事務(wù)等方面的協(xié)議。右邊的部分是各個協(xié)議層的公用機(jī)制,這些機(jī)制一般由外部的正交機(jī)制來完成。
以下主要介紹協(xié)議棧的三個主要協(xié)議具體體現(xiàn)在服務(wù)調(diào)用的時候的角色以及分工:如圖[3]在機(jī)器B上部署Web Service服務(wù),在機(jī)器A上部署著調(diào)用該服務(wù)的站點(diǎn)。A發(fā)送請求給B,B發(fā)送響應(yīng)給A。他們通訊的協(xié)議是HTTP,發(fā)送請求和相應(yīng)的數(shù)據(jù)格式都是基于XML(SOAP)的數(shù)據(jù),A機(jī)器的代理和存根真正負(fù)責(zé)起A與B之間服務(wù)的調(diào)用。WSDL是用于描述A與B通訊接口的協(xié)議;UDDI相當(dāng)于我們的電話黃頁簿,所有的Web Service服務(wù)可以在UDDI上進(jìn)行處理,即需要在UDDI上注冊WSDL文檔。
因此整個調(diào)用的過程我們可以描述如下:A要調(diào)用B的某個服務(wù),它可以先到UDDI服務(wù)器上去查找描述服務(wù)的WSDL文檔。生成WSDL Proxy,然后再與機(jī)器B上的WSDL Stub通訊,這樣我們可以明確Web Service調(diào)用中的通訊協(xié)議,消息格式,描述語言以及發(fā)現(xiàn)機(jī)制分別如圖[3]中①②③④所示。
圖[3] Web Service調(diào)用過程圖
2.2 OGC規(guī)范的WMS的相關(guān)標(biāo)準(zhǔn)
OGC WMS屬于OGC圖示表達(dá)服務(wù),在WMS規(guī)范中將地圖定義為地理數(shù)據(jù)可視的表現(xiàn),WMS返回的不是地圖數(shù)據(jù),而是地圖圖象,WMS規(guī)范定義了三個操作:
GetCapabilities操作返回服務(wù)級元數(shù)據(jù),它是對服務(wù)信息內(nèi)容和請求參數(shù)的一種描述,元數(shù)據(jù)使用XML形式文件表示;
GetMap操作根據(jù)客戶端發(fā)出的請求參數(shù)在服務(wù)端進(jìn)行檢索,服務(wù)器返回一個地圖圖象,其地理空間參數(shù)和大小是已經(jīng)明確定義的,返回的地圖圖象可以是GIF,JPEG,PNG或SVG格式的;
GetFeatureInfo操作根據(jù)用戶請求的X,Y坐標(biāo)或感興趣的圖層,返回這些特殊要素的信息,信息以HTML,GML或者ASCII格式表示。
在 WMS 中GetMap是最重要的一個接口。GetMap的參數(shù)有很多,在調(diào)用時必須的主要參數(shù)如表[1]:
請求參數(shù)
定義
VERSION=1.3.0
請求版本號
REQUEST=GetMap
請求的名稱
LAYERS=layer_list
以逗號分隔的圖層列表
STYLES=style_list
以逗號分隔的每層渲染樣式列表
CRS=namespace:identifier
空間參考系統(tǒng)
BBOX=minx,miny,maxx,maxy
矩形框四角的SRS坐標(biāo)
WIDTH=output_width
地圖圖象的寬度
HEIGHT=output_height
地圖圖象的高度
FORMAT=output_format
地圖的輸出格式
表[1] GetMap主要調(diào)用參數(shù)
用戶可以通過標(biāo)準(zhǔn)的瀏覽器向WMS發(fā)送地圖服務(wù)請求,請求的方式可以通過在URL中添加請求的類型參數(shù)來實現(xiàn)。WMS的GetMap操作支持分布式的地圖服務(wù)網(wǎng)絡(luò)來提供給用戶。以下給出請求的字符串:
'VERSION=1.3.0&REQUEST=GetMapExtended&Layers=Dq,Dqboundary,DqLabel&STYLES=&CRS=EPSG:21413&BBOX=-399387.65172,16569.92082,493752.18997,648496.04222&FORMAT=image/png&WIDTH=677&HEIGHT=479&ACTIVELAYER=Dq';
在該字符串前再加上完整的域名或者固定的IP地址,就可以返回得到該字符所制定的具體的地圖圖像。
2.3.開源代碼sharpmap的相關(guān)介紹
SharpMap是一個基于.net 2.0使用C#開發(fā)的Map渲染類庫,可以渲染各類GIS數(shù)據(jù)(目前支持ESRI Shape和PostGIS格式),可應(yīng)用于桌面和Web程序。SharpMap的發(fā)布許可(License)為GNU General Public License,實現(xiàn)了以下功能:
1)支持的數(shù)據(jù)格式:PostGreSQL/PostGIS,ESRI Shapefile,支持WMS layer支持ECW 和JPEG2000 柵格數(shù)據(jù)格式;
2)Windows Forms 控件,可以移動和縮放;
3)通過HttpHandler支持ASP.net程序;
4)點(diǎn)、線、多邊形、多點(diǎn)、多線和多多邊形等幾何類型和幾何集合(Geome
tryCollections)等OpenGIS簡單要素規(guī)范;
5)可通過Data Providers(增加數(shù)據(jù)類型支持)、Layer Types(增加層類型)和Geometry Types等擴(kuò)展;
6)圖形使用GDI+渲染,支持anti-aliased等;
7)專題圖。
3 實驗結(jié)果
數(shù)據(jù):安徽省的shape數(shù)據(jù);開發(fā)環(huán)境:VS2005,IIS;開發(fā)語言:c#。
實現(xiàn)步驟:
1)新建一個WebService,實現(xiàn)WMS的函數(shù):GetMap,Getcapabilities;
2)配置Webcong,使該WebService支持GET和POST請求兩種方式;
3)GET方法實現(xiàn)如下:
第一步:新建asp.net website,獲取http GET請求的相關(guān)參數(shù);
第二步:通過GET方法,根據(jù)上一步參數(shù)調(diào)用新建的WebService,獲得地圖字節(jié)流;
第三步:所獲得的字節(jié)流是以XML文檔傳輸?shù),并對地圖字節(jié)流采取一定的編碼方式,對該XML文檔進(jìn)行解譯,并對字節(jié)流進(jìn)行解碼,獲得地圖的原始數(shù)據(jù);
第四步:將所獲得地圖渲染出來;
第五步:利用IIS發(fā)布WebService和asp.net website即可。
效果如圖[4]和圖[5]:
所給請求字符串1:
http://localhost/WMS/Default.aspx?VERSION=1.3.0&REQUEST=GetMapExtended&Layers=Xian,Xianboundary,XianLabel&STYLES=&CRS=EPSG:21413&BBOX=-176102.69,174551.45,270467.229,490514.5&FORMAT=image/png&WIDTH=1024&HEIGHT=768&ACTIVELAYER=Xian
所給請求字符串2:
http://localhost/WMS/Default.aspx?VERSION=1.3.0&REQUEST=GetMapExtended&Layers=Dq,Dqboundary,DqLabel&STYLES=&CRS=EPSG:21413&BBOX=-176102.69,174551.45,270467.229,490514.5&FORMAT=image/png&WIDTH=1024&HEIGHT=768&ACTIVELAYER=Dq
圖[4] 圖[5] 圖[6] POST界面
4)POST方法實現(xiàn)如下:
第一步:新建asp.net Website;
第二步:設(shè)計POST界面如圖[6]所示,主要包括REQUEST描述,POST地址,POST數(shù)據(jù);
第三步:獲取post地址,及要post的相關(guān)數(shù)據(jù),利用該值初始化HttpWebRequest對象,設(shè)置POST方法,利用HttpWebResponse 獲得post的XML,對該XML文檔進(jìn)行解譯,并對字節(jié)流進(jìn)行解碼,獲得地圖的原始數(shù)據(jù);
第四步:將所獲得地圖渲染出來;
第五步:利用IIS發(fā)布asp.net website即可。
核心代碼如下:
public byte[] GetMap(string UserRequest)
{
byte[] bytesmap=null;
byte[] bytesmap1 = null;
System.Drawing.Imaging.ImageCodecInfo imageEncoder;
。。。。。。
{
string splitstringLower = splitstring.ToLower();
//Request中的參數(shù)名稱大小寫不敏感,因此在涉及到參數(shù)名稱時,使用splitstringLower,涉及到參數(shù)值時,使用splitstring
int exist = splitstringLower.IndexOf('request');
if (exist >= 0)
{
string[] requestvalue = splitstring.Split(new char[] { '=' });
haveREQUEST = true;
REQUEST = requestvalue[1];
break;
}
}
System.IO.MemoryStream MS = new System.IO.MemoryStream();
img.Save(MS, imageEncoder, null);
img.Dispose();
byte[] buffer = MS.ToArray();
bytesmap = buffer;
}
return bytesmap;
}
}
POST方法獲得地圖數(shù)據(jù),并渲染地圖:
protected void Page_Load(object sender, EventArgs e)
{
# region 創(chuàng)建HttpWebRequest對象
string service = Session['URL'].ToString();
。。。
image.Dispose(); // 釋放圖像資源
using (MemoryStream ms = new MemoryStream())// 采用二進(jìn)制流的方式輸出圖片
{
newImage.Save(ms, ImageFormat.Jpeg); //圖片格式指定為Jpeg
Response.ClearContent(); //清除緩沖區(qū)流中的所有輸出
Response.ContentType = 'image/jpeg'; //輸出流的HTTP MIME類型設(shè)置為'image/Png'
Response.BinaryWrite(ms.ToArray()); //輸出圖片的二進(jìn)制流
}
newImage.Dispose(); // 釋放圖像資源
Response.Flush(); // 輸出
Response.End();
}
4 結(jié)論
.NET是 Microsoft用以創(chuàng)建Web服務(wù)平臺,該平臺將信息、設(shè)備和人以一種統(tǒng)一的、個性化的方式聯(lián)系起來。借助于.NET平臺,可以創(chuàng)建和使用基于XML的應(yīng)用程序、進(jìn)程和Web站點(diǎn)以及服務(wù)。通過.NET,所有的聯(lián)網(wǎng)設(shè)備共同組成了一個無處不在的分布式計算平臺,能夠進(jìn)行最有效的計算。通過Web Service,用戶可以在任何時間、任何地點(diǎn)、通過任何設(shè)備獲得信息。
Web Service的出現(xiàn),改變了網(wǎng)絡(luò)軟件開發(fā)的方式,甚至改變了網(wǎng)絡(luò)軟件的使用方式。從開發(fā)方式來講,Web Service就是網(wǎng)絡(luò)上的組件,可以使用Web Service構(gòu)建基于組件的WebGIS軟件。而從使用方式來看,WebGIS軟件的開發(fā)已經(jīng)不局限于網(wǎng)絡(luò)制圖,網(wǎng)絡(luò)數(shù)據(jù)的交換等功能,目前已經(jīng)在向服務(wù)使用的方向發(fā)展。由第三方將數(shù)據(jù)和對數(shù)據(jù)的操作及使用等功能以Web Service的方式提供出來,將大大減輕開發(fā)者在利用GIS數(shù)據(jù)開發(fā)WebGIS軟件和應(yīng)用過程中的困難,更好地解決WebGIS中出現(xiàn)的各種問題。
5 參考文獻(xiàn)
[1] 李新通,何建邦. GIS互操作與OGC規(guī)范[M]. 地理信息世界.2003
[2] 賈文玨,陳玉敏,龔健雅,李愛霞. 基于WebService的OGC地圖服務(wù)實現(xiàn)方法[J].測繪信息與工程.2004
[3] 陳 博,徐滿武. 基于Web 服務(wù)的計算模型———Web Service[J]. 計算機(jī)應(yīng)用研究.2003
[4] 顧寧 等編著. Web Services原理與研發(fā)實踐[M]. 北京:機(jī)械工業(yè)出版社.2006