系列鏈接:
Java web與web gis學習筆記(一)——Tomcat環境搭建
Java web與web gis學習筆記(二)——百度地圖API調用
JavaWeb和WebGIS學習筆記(三)——GeoServer 發布shp數據地圖
JavaWeb和WebGIS學習筆記(四)——使用uDig美化地圖,並疊加顯示多個圖層
前言:uDig是一個 [open source](https://baike.baidu.com/item/open source/114160) (EPL and BSD) 桌面應用程序框架,構建在Eclipse RCP和GeoTools(一個開源的Java GIS工具包)上的桌面GIS(地理信息系統) ;是一款開源桌面GIS軟件,基於Java和Eclipse平台,可以進行shp格式地圖文件的編輯和查看;是一個開源空間數據查看器/編輯器,對OpenGIS標准,關於互聯網GIS、網絡地圖服務器和網絡功能服務器有特別的加強。uDig提供一個一般的java平台來用開源組件建設空間應用。 ——百度百科
一、下載uDig
可以從uDig官網下載,可以看到,對於Windows平台,1.5.0.RC1版本可以選擇安裝版和解壓版,2.0.0只有解壓版提供下載。這里選擇2.0.0版本的解壓版就好。
uDig界面是英語,可以用插件進行漢化,但我覺得沒必要。如果的確有需要,參考:
https://jingyan.baidu.com/article/fc07f989bc2ec412ffe51904.html
從uDig的介紹可以看出,這是一個基於Java和Eclipse的開源桌面GIS軟件。因此,想要使用uDig必須先安裝Java,在前幾篇文章里也提到過,具體方法在這里就不多說了。
而Eclipse相信Java開發者都不陌生,它是一個開源的、基於Java的可擴展開發平台。就其本身而言,它只是一個框架和一組服務,用於通過插件組件構建開發環境。盡管我們大多都將它當作一個集成開發環境(IDE)來使用,但Eclipse 的目標卻不僅限於此。Eclipse 還包括插件開發環境(Plug-in Development Environment,PDE)。其核心功能(Eclipse RCP)提供了標准化的組件模型,包括菜單,工具欄等,也使得基於 Java 開發桌面應用也變得容易了很多。
盡管uDig是基於Eclipse RCP開發的,但當我們僅僅使用它進行地圖美化時,並不需要安裝並搭建eclipse的開發環境。
當然,如果你需要通過uDig繪制地圖符號,進行復制編輯等操作時(就像我們在ArcGIS的ArcMap上做的那樣),則似乎需要搭建開發環境。至於開發環境如何搭建,可以參考如下兩篇博客:
二、 uDig加載數據
1. 啟動uDig
首先啟動uDig,如果使用的是安裝版,直接雙擊快捷方式就好。如果是解壓版,在文件目錄下雙擊“udig_internal"即可。
2.創建項目
新建一個Project,可以理解為Eclipse中的WorkSpace。
3.新建地圖
在項目名稱上點右鍵,選擇New Map,即可創建一個新的地圖文檔。
4.添加圖層
在地圖名稱上點擊右鍵,選擇Add...,可通過各種數據源導入數據。這里以shp為例,選擇Files。
可以看到我們的shp數據已經導入地圖中了。uDig跟ArcMap操作類似,對圖層單擊右鍵,選擇Zoom to layer即可縮放到圖層。
三、為圖層定義樣式,美化地圖
對於每一個圖層,都可以單獨配置樣式。圖層的樣式是通過SLD進行描述的。相信接觸過QGIS,或者開發過GIS軟件(。)的人都比較熟悉。
SLD是風格化圖層描述器(Styled Layer Descriptor)的簡稱,是2005年OGC提出的一個標准,標准在一定條件下允許WMS服務器對地圖可視化的表現形式進行擴展。
SLD采用XML來配置地圖圖層渲染的可視化風格,可以設置過濾器,自定義圖例等。其中rule是SLD最重要的一個元素,在rule中允許根據某個給定的字段/參數(使用過濾器)對數據集進行分類,並對該分類設置樣式。簡單的說,一個rule就是一種分組渲染規則(例如分級設色地圖中的某一中顏色)。關於SLD的具體內容,我會在另一篇博客詳細說明。
1.配置圖層樣式
選擇需要配置的圖層,點擊右鍵,Change Style(這里以面要素為例)
在Style Editor界面可以對點線面的樣式進行配置。這里打開的是面要素的Style Editor,因此不能選擇左邊的Lines和Points,嗯這很合理,對點、線要素同理。Theme中可以根據屬性字段進行分級/分類渲染(此時每一個級別/類別就對應了一個rule),相當於ArcMap中對圖層的Symbology進行設置。
關於樣式的具體配置方法,幾乎都與ArcMap類似,在這里不做過多介紹。配置一個你覺得好看的地圖就好啦!
值得一提的是:
如果想要在圖中顯示注記,有兩種方式:
(1)第一種方式如下圖,對每一個rule分別配置Labels,可以實現每一種rule有不同樣式的注記。如果shp數據含有中文,一定要注意選擇中文字體,並更改字符的編碼方式為GB2312或GBK,否則會出現亂碼。
(2)第二種方式在Simple Featrue里面設置Label,設置方法同理,此時的注記應用於整個圖層而非某一個rule。同樣要注意中文的問題。
2.導出SLD
在Style Editor中選擇XML選項卡,可以看到圖層樣式的SLD。如果數據有中文,需要將
encoding="UTF-8"
改成
encoding="GBK"或encoding="GB2312"
左下角export可以導出SLD文件,但為了避免不必要的編碼問題,這里建議直接復制文本框中的XML文檔內容。
四、添加Style到GeoServer
打開GeoServer頁面,選擇數據的Styles,然后選擇Add a new style
在接下來出現的頁面中設置Style的各項參數。將復制的SLD內容粘貼到下方的文本框,或者使用圖中導入SLD文件並上傳的方法(不推薦)。然后保存Style即可。
然后再數據的圖層中,找到我們創建的Style所對應的圖層,點擊圖層名稱。
在”發布“選項中找到WMS Settings,修改默認Style為我們新建的Style即可。
在Layer Preview預覽圖層,可以看到,該圖層已經具有我們配置好的樣式了。
注意:如果在預覽時無法顯示地圖,或者出現中文字符亂碼,可能是由於數據源的編碼方式和SLD的編碼方式不一致導致,具體處理方法,參考另一篇博客:GeoServer style中文亂碼解決方法
五、疊加顯示多個圖層
在GeoServer中發布的圖層,通過Layer Preview查看,只能看到當個圖層效果。但我們的地圖往往是多個圖層疊加的結果。想要查看疊加后的結果,有兩種方法:
1.修改請求參數
在瀏覽器地址欄可以看到Layer Preview預覽圖層效果的URL是:
http://localhost:8080/geoserver/xjs/wms?service=WMS&version=1.1.0&request=GetMap&layers=xjs%3ABoundaryChn2_4p&bbox=73.44696044921875%2C6.318641185760498%2C135.08583068847656%2C53.557926177978516&width=768&height=588&srs=EPSG%3A4326&format=application/openlayers
其中,請求參數的layers=xjs%3ABoundaryChn2_4p定義了當前訪問的圖層名
(這里的%3A是指十六進制3A所對應的ASCII字符,即 " : ",也就是說圖層名為xjs:BoundaryChn2_4p)
因此,對於多個圖層的疊加顯示,只需要在layers參數中使用" , "將多個圖層名分隔開即可。
例如:layers=xjs%3ABoundaryChn2_4p,xjs%3ABoundaryChn1_4l,xjs%3ABoundaryChn2_4l
2.創建圖層組
將已發布的多個圖層創建為一個圖層組,在Layer Preview預覽時即可作為一個目標進行預覽,這樣也能實現圖層的疊加顯示。
具體操作如下:
創建完畢后即可在Layer Preview中對該圖層組進行預覽
寫在最后:uDig是一個開源桌面GIS軟件,使用它美化地圖並發布到GeoServer的實質是利用SLD規范對WMS服務進行擴展。因此,配置圖層樣式Style的方式不一定拘泥於uDig一種。我們常用的ArcMap其實也能夠配置Style,只是他配好的圖層樣式並不保存在shp中,而是保存在mxd或者msd文件中。因為ArcGIS是一個商業軟件,不能直接輸出sld文件。我們可以試用一些插件將mxd文件轉成sld,這里可以給大家分享一個:
鏈接:https://pan.baidu.com/s/1hvnQBhEGBp2oPk-cOYttaQ
提取碼:5l1f
當然,QGIS等開源軟件也支持直接導出SLD文件。
