Web地图服务、WMS 请求方式、网络地图服务(WMS)的三大操作
1、GeoServer(地理信息系統(tǒng)服務(wù)器)是 OpenGIS Web 服務(wù)器規(guī)范的 J2EE 實(shí)現(xiàn)(geoserver只能用j2ee開發(fā)),利用GeoServer 可以方便的發(fā)布地圖數(shù)據(jù)。GeoServer的主要特征包括:兼容 WMS 和 WFS 特性;能夠?qū)⒕W(wǎng)絡(luò)地圖輸出為jpeg、gif、png、SVG、KML等格式;能夠運(yùn)行在任何基于 J2EE/Servlet 容器之上。其安裝方式有兩種,一種是常見的.EXE安裝,這種安裝方式最簡(jiǎn)單,只要確保你電腦上安裝了JDK并且8080端口是開的,按照安裝步驟一步一步來就可以完成安裝,安裝完成以后,可以從開始菜單中選擇GeoServer-> Start GeoServer進(jìn)行啟動(dòng),啟動(dòng)服務(wù)后,打開瀏覽器,輸入http://localhost:8080/geoserver/就可以查看到GeoServer的歡迎界面了。另一種安裝是以.WAR的形式安裝,開發(fā)者電腦上得先安裝有Tomcat,然后將此WAR導(dǎo)入即可。
Geoserver是一個(gè)功能齊全,遵循OGC開放標(biāo)準(zhǔn)的開源WFS-T和WMS服務(wù)器。利用Geoserver可以把數(shù)據(jù)作為maps/images來發(fā)布(利用WMS來實(shí)現(xiàn))也可以直接發(fā)布實(shí)際的數(shù)據(jù)(利用WFS來實(shí)現(xiàn)),同時(shí)也提供了修改,刪除和新增的功能(利用WFS-T)。 GeoServer, 顧名思義,是一個(gè)Server. 它是開源的 ,允許用戶查看和編輯地理數(shù)據(jù)。GeoServer能夠發(fā)布的數(shù)據(jù)類型:
(1)地圖或影象——應(yīng)用WMS
(2)實(shí)時(shí)數(shù)據(jù)——應(yīng)用WFS
(3)用戶更新、刪除和編輯的數(shù)據(jù)——應(yīng)用WFS-T。
GeoServer 是您需要顯示地圖在網(wǎng)頁的那些工具的當(dāng)中一個(gè),用戶可以縮放并且移動(dòng)。可以與一些客戶端聯(lián)合使用,比如: MapBuilder(for web pages), UDig, GVSig,等等。 對(duì)標(biāo)準(zhǔn)的使用允許信息從GeoServer 到其它地理信息可以很容易地被結(jié)合。
2、Web地圖服務(wù)(WMS):利用具有地理空間位置信息的數(shù)據(jù)制作地圖,其中將地圖定義為地理數(shù)據(jù)可視的表現(xiàn),地圖本身并不是數(shù)據(jù)。地圖通常以圖像格式表達(dá),例如PNG,GIF或是JPEG,有時(shí)候也表達(dá)為基于矢量圖形,如可縮放矢量圖形(SVG)或是網(wǎng)絡(luò)電腦圖形元文件等格式(WebCGM)。根據(jù)OGC規(guī)范,地圖服務(wù)是專門提供共享地圖數(shù)據(jù)的服務(wù),負(fù)責(zé)根據(jù)客戶程序的請(qǐng)求,提供地圖圖像、指定坐標(biāo)點(diǎn)的要素信息、以及地圖服務(wù)的功能說明信息。
WMS規(guī)范定義了三個(gè)接口(操作):GetCapabilities(獲取服務(wù)能力), GetMap(獲取地圖)和GetFeatureInfo(獲取對(duì)象信息)。其中GetMap為核心操作。GetCapabitities返回服務(wù)級(jí)元數(shù)據(jù),它是對(duì)服務(wù)信息內(nèi)容和要求參數(shù)的一種描述;GetMap返回一個(gè)地圖影像,其地理空間參考和大小參數(shù)是明確定義了的;GetFeatureInfo(可選)返回顯示在地圖上的某些特殊要素的信息。這個(gè)規(guī)范還定義了一個(gè)用于調(diào)用上述操作的萬維網(wǎng)統(tǒng)一資源定位器(URL)語法和服務(wù)級(jí)元數(shù)據(jù)的XML(可擴(kuò)展標(biāo)記語言)表達(dá)法。
3、WMS 請(qǐng)求方式: WMS 支持標(biāo)準(zhǔn) HTTP 中標(biāo)準(zhǔn)的 GET 請(qǐng)求和 POST 請(qǐng)求方式,不過對(duì)于 WMS 來說,基本都是基于 GET 方式的服務(wù)請(qǐng)求,而且 OGC 官方提供的兼容性測(cè)試中也都是基于 GET 方式的請(qǐng)求。
OGC網(wǎng)絡(luò)服務(wù)明確支持的唯一的分布式計(jì)算平臺(tái)(DCP)就是是萬維網(wǎng)本身,更明確地說是實(shí)現(xiàn)了超文本傳遞協(xié)議(HTTP)的網(wǎng)絡(luò)主機(jī)。因此,每個(gè)由服務(wù)實(shí)例支持的各操作的在線資源都是一個(gè)HTTP的統(tǒng)一資源定位器(URL)。HTTP支持兩個(gè)請(qǐng)求方法:GET和POST,一個(gè)基本的WMS規(guī)范僅僅定義用來調(diào)用操作的HTTP GET。URL規(guī)范保留了一些特定的字符并賦予它們必要的意義,如下表1,
表1? HTTP GET查詢中的保留字符
| 字符 | 用???????????? 途 |
| ? | 查詢語句開始的分隔符 |
| & | 查詢語句參數(shù)之間的分隔符 |
| = | 參數(shù)名字和參數(shù)值之間的分隔符 |
| / | 格式參數(shù)值中MIME類型子類型之間的分隔符 |
| : | SRS參數(shù)值中命名空間和標(biāo)識(shí)之間的分隔符 |
| , ? ? ? | 清單型參數(shù)中單個(gè)值的分隔符(例如GETMAP請(qǐng)求中的BBOX,LAYERS和STYLES) |
?
用于HTTPGET請(qǐng)求的在線資源URL事實(shí)上僅僅是一個(gè)URL前綴,為了建立一個(gè)有效的操作請(qǐng)求,在其后還添加了另外的參數(shù)。URL前綴被定義為一個(gè)不透明的字符串,它包括協(xié)議、主機(jī)名、端口號(hào)(可選)、路徑、和一個(gè)問號(hào)“?”,還可以包括一個(gè)或幾個(gè)用于具體服務(wù)器的參數(shù)并以“&”結(jié)束。
表2總結(jié)了操作請(qǐng)求URL的各個(gè)構(gòu)件:
表2?? 普通OGC網(wǎng)絡(luò)服務(wù)請(qǐng)求
| URL 構(gòu)件 | 描???????? 述 |
| http://host[:port]/path?{name[=value]&} | 服務(wù)操作的URL前綴。[ ]表示可選擇0個(gè)或1個(gè)事件;{}表示0個(gè)或更多的事件。前綴完全取決于服務(wù)提供者。 |
| name=value& | 由OGC網(wǎng)絡(luò)服務(wù)定義的一個(gè)或更多的標(biāo)準(zhǔn)請(qǐng)求參數(shù)的名稱和數(shù)值對(duì)。對(duì)于每個(gè)操作,相應(yīng)的的OWS規(guī)范都規(guī)定了請(qǐng)求中使用的必選和可選參數(shù)的實(shí)際列表。 |
?
4、網(wǎng)絡(luò)地圖服務(wù)(WMS)的三大操作
(1)GetCapabilities(必選)
http://localhost:8080/geoserver/wms?service=WMS&request=GetCapabilities( GeoServer )
(瀏覽器會(huì)返回提示打開或保存一個(gè)文件,我的機(jī)器返回的是一個(gè)叫“wms”的文件,沒有擴(kuò)展名。沒關(guān)系我們把它保存為“wms.xml”就可以了)
GetCapabilities請(qǐng)求返回的是一個(gè)對(duì)于WMS服務(wù)的一個(gè)元數(shù)據(jù)的描述,其中包括有當(dāng)前服務(wù)提供商的一些基本信息以及當(dāng)前服務(wù)的一些能力,而對(duì)于使用WMS服務(wù)的客戶端來說,能獲取到的所有信息全部包含在此文檔中,當(dāng)客戶端發(fā)送一個(gè)服務(wù)中沒有提供的的圖片格式時(shí),此時(shí)服務(wù)端將沒有能力處理此請(qǐng)求。在使用WMS服務(wù)時(shí)需要確認(rèn)當(dāng)前服務(wù)提供的能力,以便在使用過程中發(fā)生一些不必要的麻煩。
GetCapabilities 接口用于向客戶端提供當(dāng)前地圖服務(wù)器可以提供的空間信息類型和范圍、具體的圖層信息和顯示樣式、支持的查詢方式、沒有查詢結(jié)果時(shí)(異常)的缺省返回信息格式等服務(wù)描述信息。
GetCapabilities 請(qǐng)求URL的參數(shù)
| 請(qǐng)求參數(shù) | 必選(M)/可選(O) | 說明 |
| VERSION=version(Version ( 版本 )=(1.1.1 或者 1.3.0) ) | O | 請(qǐng)求版本,URL 中可選的請(qǐng)求參數(shù),當(dāng)沒有使用時(shí)就使用當(dāng)前服務(wù)提供商提供的最高的 wms 版本服務(wù) |
| SERVICE=WMS | M | 服務(wù)類型 |
| REQUEST=GetCapabilities | M | 請(qǐng)求名,請(qǐng)求中必須設(shè)置當(dāng)前請(qǐng)求的操作,可以設(shè)置 request 的值為 Getcapabilities 、 GetMap 、 GetFeatureInfo |
| FORMAT=MIME_type? | O | 服務(wù)元數(shù)據(jù)的輸出格式 |
| UPDATESEQUENCE=string | O | 用于控制緩沖存儲(chǔ)的數(shù)字序列或字符串 |
(2)GetMap(必選)
http://localhost:8080/geoserver/wms?bbox=-130,24,-66,50&styles=population&Format=image/png&request=GetMap&layers=topp:states&width=550&height=250&srs=EPSG:4326
?
?
GetMap 接口的目的在于請(qǐng)求服務(wù)器生成一幅具有確定地理位置坐標(biāo)范圍的地圖圖像。但按照WMS規(guī)范,這個(gè)操作需要明確地指定出操作本身遵循的WMS規(guī)范的版本號(hào)以及需要顯示的具體圖層、對(duì)應(yīng)的坐標(biāo)范圍、返回圖像的大小和格式等。
?
??GetMap請(qǐng)求的參數(shù)
| 請(qǐng)求參數(shù) | 必選的(M)/ | 說?? 明 |
| VERSION=version | M | 請(qǐng)求版本. |
| REQUEST=GetMap | M | 請(qǐng)求名稱. |
| LAYERS=layer_list | M | 以逗號(hào)隔開的一個(gè)或多個(gè)圖層列表,若存在SLD參數(shù)則是可選的。 |
| STYLES=style_list | M | 以逗號(hào)隔開的請(qǐng)求圖層的一個(gè)再現(xiàn)風(fēng)格列表,若存在SLD參數(shù)則是可選的。 |
| CRS=namespace:identifier | M | 坐標(biāo)參考系。 |
| BBOX=minx,miny,maxx,maxy | M | 以SRS單位表示的邊界框邊角 (左下角,右上角)。 |
| WIDTH=output_width | M | 以像素表示的地圖圖像寬度。. |
| HEIGHT=output_height | M | 以像素表示的地圖圖像高度 |
| FORMAT=output_format | M | 地圖輸出格式。. |
| TRANSPARENT=TRUE|FALSE | O | 地圖背景的透明性 (default=FALSE). |
| BGCOLOR=color_value | O | 以十六進(jìn)制RGB顏色值表示的背景顏色(default=0xFFFFFF). |
| EXCEPTIONS=exception_format | O | WMS通告異常的格式 (default=SE_XML). |
| TIME=time | O | 請(qǐng)求層的時(shí)間值。 |
| ELEVATION=elevation | O | 請(qǐng)求層的高程。 |
| Other sample dimension(s) | O | 其它適當(dāng)維度的值。. |
| Vendor-specific parameters | O | 可選的實(shí)驗(yàn)性參數(shù)。. |
| 下列參數(shù)只用于支持格式化層描述符規(guī)范的網(wǎng)絡(luò)地圖服務(wù) [3]. | ||
| SLD=styled_layer_descriptor_URL | O | 格式化層描述符的URL(如同SLD規(guī)范中確定的). |
| WFS=web_feature_service_URL | O | 網(wǎng)絡(luò)要素服務(wù)URL,該服務(wù)提供將要用SLD進(jìn)行符號(hào)化的要素。. |
注:在LAYERS參數(shù)值和STYLES參數(shù)值之間存在一個(gè)一一對(duì)應(yīng)關(guān)系
對(duì)GetMap的響應(yīng):
對(duì)有效的GetMap請(qǐng)求的響應(yīng)必須是一張地圖,它包含了所請(qǐng)求的具有地理參考坐標(biāo)的信息層,使用的是期望的樣式,并且采用了指定的空間參照系、范圍框、大小和透明性。一個(gè)無效的GetMap請(qǐng)求必須產(chǎn)生一個(gè)按請(qǐng)求的Exceptions格式輸出的錯(cuò)誤信息(或在極端情況下回答一個(gè)網(wǎng)絡(luò)協(xié)議錯(cuò)誤)。
?
(3)GetFeatureInfo(可選)
GetFeatureInfo是一個(gè)可選操作。該操作向WMS的客戶端程序提供了進(jìn)一步查詢特定空間實(shí)體信息的能力。這種操作往往是由客戶程序在WMS服務(wù)器先前返回的地圖上指定了一個(gè)空間實(shí)體,進(jìn)而提交查詢而形成。支持GetFeatureInfo操作的僅僅是那些定義或繼承了屬性queryable=“1”的層。對(duì)于其它層,客戶端不能發(fā)送GetFeatureInfo請(qǐng)求。如果一個(gè)WMS不支持該請(qǐng)求而遇到了它,則應(yīng)該應(yīng)答一個(gè)適當(dāng)格式的服務(wù)異常。
GetFeatureInfo請(qǐng)求參數(shù)
| 請(qǐng)求參數(shù) | 必選(M)/ | 描述 |
| VERSION=version | M | 請(qǐng)求版本。 |
| REQUEST=GetFeatureInfo | M | 請(qǐng)求名稱。 |
| map request part | M | 地圖請(qǐng)求參數(shù)的部分拷貝,這些參數(shù)產(chǎn)生了需要查詢其信息的地圖。 |
| QUERY_LAYERS=layer_list | M | 用逗號(hào)分隔的需要查詢的一個(gè)或多個(gè)層的列單。 |
| INFO_FORMAT=output_format | M | 要素信息的返回格式(MIME 類型)。 |
| FEATURE_COUNT=number | O | 需要返回其信息的要素個(gè)數(shù)(default=1)。 |
| X=pixel_column | M | 用像素表達(dá)的要素的X坐標(biāo) (以左上角坐標(biāo)為0)。 |
| Y=pixel_row | M | 用像素表達(dá)的要素的Y坐標(biāo) (以左上角坐標(biāo)為0)。 |
| EXCEPTIONS=exception_format | O | WMS報(bào)告異常信息采用的格式(default=application/vnd.ogc.se_xml)。 |
5、三大操作的樣例
(1)GetMap請(qǐng)求類似于在Web上請(qǐng)求一幅圖像,但它的請(qǐng)求參數(shù)更加復(fù)雜。下面是一個(gè)樣例請(qǐng)求:
http://webmapping.mgis.psu.edu/geoserver/wms?version=1.1.1&request=getmap&layers=topp:states&styles=population&SRS=EPSG:4326&bbox=-125,24,-67,50&width=400&height=200&format=image/png
返回的圖像如下圖所示:
>
其中:
http:// —— 使用的網(wǎng)絡(luò)協(xié)議
webmapping.mgis.psu.edu/ —— 主機(jī)域名
geoserver/wms —— 頁面或web程序位置
version=1.1.1 —— WMS版本號(hào)
request=getmap —— 操作動(dòng)詞,可以為GetCapabilities, GetMap和GetFeatureInfo等
layers=topp:states —— 請(qǐng)求地圖所包含的圖層名,可以為多層
styles=population —— 指定圖層繪制的樣式名
SRS=EPSG:4326 —— 指定地圖的坐標(biāo)投影系統(tǒng)代碼
bbox=-125,24,-67,50 —— 請(qǐng)求地圖的范圍(The Bounding Box)
width=400 —— 地圖的像素寬度
height=200 —— 地圖的像素高度,寬度和高度的不同設(shè)置可能會(huì)引起返回圖像的變形
format=image/png —— 返回地圖圖像的格式,可以為Image/gif, image/jpg, image/svg+xml等等
如果參數(shù)設(shè)置錯(cuò)誤,將返回一個(gè)XML文件來描述錯(cuò)誤信息。如下所示:
<ServiceExceptionReportversion="1.1.1">
??? <ServiceException code="">
??? ??? WIDTH and HEIGHT incorrectly specified
??? </ServiceException>
</ServiceExceptionReport>
(2)GetCapabilities請(qǐng)求的樣例如下所示:
http://webmapping.mgis.psu.edu/geoserver/wms?version=1.1.1&request=getcapabilities
返回的是一個(gè)XML文件(文件很大,內(nèi)容略),包括Service、Capability等部分,詳細(xì)信息可以查看返回XML文件。
把這個(gè)文檔去頭去尾以后留下兩個(gè)節(jié)點(diǎn)Service和Capability。 Service包含了有關(guān)服務(wù)器的一般特性數(shù)據(jù),對(duì)于只是想直接使用WMS服務(wù)器的人來說,這個(gè)節(jié)點(diǎn)還不太用得上,唯一值得注意的就是KeywordList節(jié)點(diǎn),它里面是關(guān)鍵字,也就是服務(wù)器的保留字。 Capability才是我們學(xué)習(xí)的重點(diǎn)。如果你想正確的使用WMS服務(wù)器,這個(gè)節(jié)點(diǎn)里面的內(nèi)容就必須搞清楚了。你可以從這個(gè)節(jié)點(diǎn)獲得如下信息:
1)服務(wù)器支持哪些方法,WMS服務(wù)器必須支持GetCapabilities和GetMap,此外還有許多擴(kuò)展的方法。
2)服務(wù)器支持哪些返回格式,WMS返回的地圖都是渲染好的圖片,因此這里的格式基本上都是圖片格式,如image/png。
3)服務(wù)器發(fā)布了哪些圖層,這個(gè)是WMS的重點(diǎn),不然你連最簡(jiǎn)單的GetMap調(diào)用都構(gòu)造不出來。
(3)GetFeatureInfo用于查詢屏幕某點(diǎn)的對(duì)象信息,它的樣例請(qǐng)求如下所示:
http://webmapping.mgis.psu.edu/geoserver/wms?version=1.1.1&request=
getfeatureinfo&layers=topp:states&styles=population&SRS=EPSG:4326&bbox=-125,24,-67,50&width=400&height=200&format=text/html&X=100&y=100&query_layers=topp:states
此請(qǐng)求返回一個(gè)HTML文檔來描述對(duì)象,如下所示:
Results forFeatureType 'states':
--------------------------------------------
the_geom = [GEOMETRY(MultiPolygon) with 153 points]
STATE_NAME = Arizona
STATE_FIPS = 04
SUB_REGION = Mtn
STATE_ABBR = AZ
LAND_KM = 294333.462
WATER_KM = 942.772
PERSONS = 3665228.0
FAMILIES = 940106.0
HOUSHOLD = 1368843.0
MALE = 1810691.0
FEMALE = 1854537.0
WORKERS = 1358263.0
DRVALONE = 1178320.0
CARPOOL = 239083.0
PUBTRANS = 32856.0
EMPLOYED = 1603896.0
UNEMPLOY = 123902.0
SERVICE = 455896.0
MANUAL = 185109.0
P_MALE = 0.494
P_FEMALE = 0.506
SAMP_POP = 468178.0
要注意的是不同規(guī)范版本對(duì)上述請(qǐng)求的參數(shù)規(guī)定不同,如WMS1.3對(duì)于GetFeatureInfo的X、Y參數(shù)要求使用經(jīng)緯度。所以我們必須根據(jù)服務(wù)器的WMS版本來設(shè)置我們的參數(shù)。
6、實(shí)現(xiàn)一個(gè)C#版本的WMS瀏覽器
(1)WmsBrowser需求
1)、用戶輸入WMS服務(wù)器的URI,點(diǎn)擊一個(gè)按鈕調(diào)用GetCapabilities方法。然后用返回的數(shù)據(jù)初始化控制界面。 用戶在控制界面上可以查看服務(wù)器的各種Capability數(shù)據(jù),并且可以選擇要顯示的圖層,調(diào)整圖層順序 ,為圖層設(shè)置參數(shù),然后返回一個(gè)地圖圖片顯示在預(yù)覽區(qū)。
2)、用戶可以把返回的圖片保存成文件。
已經(jīng)有許多支持WMS的客戶端了,有許多代碼可供學(xué)習(xí)和使用。但是,為了不干擾視線,為了避免介紹多余的內(nèi)容,為了體現(xiàn)“自主創(chuàng)新精神”,最重要的是為了體驗(yàn)編程的樂趣(這也是我當(dāng)初進(jìn)入這個(gè)行業(yè)的原因),我決定只使用NotNet標(biāo)準(zhǔn)庫提供的類完全從頭開始編寫代碼。
(2)WmsBrowser設(shè)計(jì)
根據(jù)需求,這是一個(gè)WinForm的執(zhí)行程序。需求其實(shí)很不明確,完全沒有說明最重要的部分,控制界面是什么樣子的,用戶如何使用它。所以有必要補(bǔ)充一下了。
控制界面有兩個(gè)功能:
1)查看GetCapabilities返回的數(shù)據(jù);
2)設(shè)置GetMap需要的調(diào)用參數(shù)。
我們可以據(jù)此來設(shè)計(jì)這個(gè)界面。GetCapabilities返回的數(shù)據(jù)我們前面已經(jīng)介紹過了,想象一下我們這款軟件的潛在用戶可能想要看到哪些數(shù)據(jù),他們會(huì)如何使用這些數(shù)據(jù)。首先肯定是服務(wù)器發(fā)布的圖層,這是訪問WMS的唯一原因。至于服務(wù)器支持哪些調(diào)用應(yīng)該不是他們關(guān)心的,而是我們開發(fā)者關(guān)心的。所以我們需要在界面上顯示出Layer的內(nèi)容,由于Layer是嵌套的,自然而然我們需要一個(gè)樹控件。
除了Layer的Name,Title,Abstract這些屬性外,用戶應(yīng)該還需要知道Layer支持的SRS,Style,Format和BoundingBox。這樣他們才能構(gòu)造出合理的調(diào)用參數(shù)。我們顯然不應(yīng)該讓用戶查看完數(shù)據(jù)后手動(dòng)構(gòu)造調(diào)用參數(shù),我們需要讓用戶很方便的用鼠標(biāo)完成工作。我們已經(jīng)知道需要一個(gè)樹控件來顯示Layer信息。然后我們需要提供構(gòu)造調(diào)用參數(shù)的界面。首先我們?cè)O(shè)想用戶可能會(huì)如何完成這個(gè)工作。
上面的介紹中我們一直是手動(dòng)敲入字符串來完成調(diào)用URI的構(gòu)建的,繁瑣而且容易出錯(cuò),但是這種方法很靈活,所以應(yīng)該保留。于是我們需要一個(gè)TexBox來輸入U(xiǎn)RI。然后我們需要一個(gè)按鈕來發(fā)出GetMap請(qǐng)求。我們必須考慮到,有相當(dāng)一部分人并不善于鍵盤操作(其中包括我),所以我們應(yīng)該給他們提供鼠標(biāo)操作模式。于是第二個(gè)界面出現(xiàn)了,用戶在這里使用鼠標(biāo)選擇想要顯示的Layer,調(diào)整Layer顯示的順序,選擇每個(gè)Layer的Style,選擇Format,選擇SRS,輸入BoundingBox,輸入返回圖片的尺寸。然后同樣點(diǎn)擊上面提到的按鈕,發(fā)出GetMap請(qǐng)求。更進(jìn)一步,我們可以用上面的界面來獲得一個(gè)基本的調(diào)用參數(shù),然后到TextBox里面去微調(diào),這樣用戶會(huì)獲得更好的靈活性。
好了,到這里我們基本上搞清楚控制界面的樣子了。現(xiàn)在需要討論一點(diǎn)設(shè)計(jì)風(fēng)格方面的問題。我們可以把所有代碼寫進(jìn)一個(gè)叫MainForm的類里面,它是一個(gè)WinForm類。這樣沒有錯(cuò),完全可以工作,實(shí)際上我見過的大部分代碼都是這么干得。這樣做的結(jié)果是,我很快就會(huì)放棄這個(gè)項(xiàng)目,轉(zhuǎn)而去瀏覽cnblog或ifeng上面的帖子。我們需要一個(gè)更好的設(shè)計(jì)。我們?cè)谶@里并不是要討論架構(gòu),模式和開發(fā)方法,所以我們只需要達(dá)成一個(gè)共識(shí)就可以了:????????????????????????我們需要把界面元素,操作響應(yīng)以及數(shù)據(jù)模型分開編碼,為他們單獨(dú)建立類體系。
據(jù)此我們的設(shè)計(jì)也就差不多了,開始編碼咯。
WmsBrowser編碼ing。。。
程序完成。
代碼下載
啟動(dòng)程序后會(huì)看見主界面如下:??? 下圖是返回的地圖
?
這個(gè)程序還很稚嫩,有許多問題沒有考慮,例如:輸入驗(yàn)證,數(shù)據(jù)驗(yàn)證,異常處理等。以后我們會(huì)逐步完善它,目前作為一個(gè)參考和學(xué)習(xí)WMS的起點(diǎn)已經(jīng)足夠了。
(3)后續(xù)
在使用這個(gè)程序時(shí),作為用戶,我覺得還有很多不方便的地方。首先,我如果敲錯(cuò)了地址,我很容易敲錯(cuò),程序會(huì)彈出一個(gè)丑陋的異常對(duì)話框,顯示一大堆堆棧信息,完全看不出是什么錯(cuò)誤。其次,設(shè)置參數(shù)BBox很不方便,如果能從已有的地圖上用鼠標(biāo)選擇就好了。還有,返回時(shí)只是顯示一個(gè)圖片想看細(xì)節(jié)又要重復(fù)設(shè)置,Apply,GetMap的操作,太繁瑣了。
轉(zhuǎn)自百川測(cè)繪網(wǎng):www.cehui365.cn
總結(jié)
以上是生活随笔為你收集整理的Web地图服务、WMS 请求方式、网络地图服务(WMS)的三大操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: word两种html区别,word文本框
- 下一篇: 挂科心得: 驾校重要 教练更加重要(转)