進行GIS項目開發中,常使用Geoserver作為開源的地圖服務器,利用 GeoServer 可以方便的發布地圖數據,允許用戶對特征數據進行更新、刪除、插入操作,通過 GeoServer 可以比較容易的在用戶之間迅速共享空間地理信息。
安裝
源碼下載
linux的在這
geoserver用戶指導手冊
安裝使用參考
現在我們使用2.16.2版本
Geoserver是一個JavaEE項目,常通過Tomcat進行部署、啟動
首頁:http://localhost:8080/geoserver/web/
初始用戶名為"admin",密碼為"geoserver"
隨着鼠標的拖動,openlayers插件不斷請求調用地圖服務接口,可以注意到只有BBOX參數在不斷改變:
http://localhost:8080/geoserver/topp/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&LAYERS=topp%3Atasmania_state_boundaries&exceptions=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&STYLES=&WIDTH=768&HEIGHT=673&BBOX=139.5703125%2C-50.262451171875%2C156.4453125%2C-35.474853515625
安裝運行可能遇到的問題
出現 org.apache.tomcat.util.bcel.classfile.ClassFormatException: Invalid byte tag in constant pool: 19
的報錯,tomcat版本低的問題,我換apache-tomcat-9.0.34就好了。
發布矢量數據wms(Web地圖服務)
參考1
總結為以下步驟:
1.本地創建數據文件夾D:\Java\apache-tomcat-9.0.0.M10\webapps\geoserver\data\shape1,拷貝矢量數據(.shp、.shx、.dbf、.prj)到文件夾內;
2.頁面上新建工作區
,通常,會為每個項目創建一個工作空間。設置name如test1、命名空間如http://localhost/test1, 命名空間URI文件不需要解析為實際有效的網址。
3.添加新的數據存儲
,包括選擇數據源、數據源名稱、工作區、文件目錄
4.發布圖層(一個shp文件對應一個Layer)。正式發布前需要編輯發布信息,包括配置發布信息,有些數據是自動填充的,有的可以自動計算(設置不適合會影響可見性):
5.在layer preview中通過地圖客戶端openlayers查看地圖。
6.圖層組相關設置參考(非必需)
邊界設置:
可能遇到的問題
添加圖層時,數據名字如果含中文,顯示出來會被url編碼:
不影響發布,但在發布編輯命名圖層時還是用英文命名:
不然對后面gwc緩存服務有影響,數據訪問也不便。
圖層圖標的含義
http請求參數
http://localhost:8080/geoserver/test1_1/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&LAYERS=test1_1%3A%E6%88%91%E6%98%AF%E6%B0%B4%E7%B3%BB&exceptions=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&STYLES=&WIDTH=768&HEIGHT=499&BBOX=129.3914794921875%2C42.62214660644531%2C130.4461669921875%2C43.30741882324219
BBOX參數
決定了圖片位置,它由最小x,最小y,最大x,最大y
四個參數組成,由逗號隔開,url編碼后顯示為%2c
,四個值可以是經緯度值,也可以是投影坐標的邊界(單位是米)。
width=768&height=499
是圖框的寬、高,決定圖幅。
LAYERS參數
即圖層的name,由工作空間名:圖層的命名組成。
通過wms也可獲取要素屬性信息參數
點擊獲取要素屬性信息,返回的是一個html:
http://localhost:8080/geoserver/test1_1/wms?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetFeatureInfo&FORMAT=image%2Fpng&TRANSPARENT=true&QUERY_LAYERS=test1_1%3Aother_road1&LAYERS=test1_1%3Aother_road1&exceptions=application%2Fvnd.ogc.se_inimage&INFO_FORMAT=text%2Fhtml&FEATURE_COUNT=50&X=50&Y=50&SRS=EPSG%3A4326&STYLES=&WIDTH=101&HEIGHT=101&BBOX=129.75831985473633%2C42.89663314819336%2C129.79299545288086%2C42.93130874633789
發布矢量數據wfs(Web要素服務)
一個圖層的WFS服務查看方法是在Layer Preview頁面,選擇WFS下的GeoJSON(以JSON數據形式展現要素信息,方便解析),查看該圖層的要素信息:
谷歌瀏覽器有不兼容問題,在ie中選擇GeoJSON,即可以json形式返回該圖層所有要素的要素屬性數據。
這里使用了getFeature操作,用來檢索要素信息http://localhost:8080/geoserver/test1_1/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=test1_1%3A%E6%88%91%E6%98%AF%E6%B0%B4%E7%B3%BB&maxFeatures=50&outputFormat=json
除了查詢,wfs支持對地理要素的插入,更新,刪除和發現服務,專注於要素的地理信息,簡化了返回信息。
注意:柵格數據如瓦片,沒有wfs提供。
數據輸出格式
發布arcgis瓦片服務
目前沒有對於ArcGIS切片發布的支持,需要借助GeoWebCache,在geoserver1.7版本之后,geoserver都集成了GeoWebCache這個插件模塊。
與gwc結合使用手冊
拓展配置
獨立版的GeoWebCache除了對WMS服務地圖建立緩存外,還有對於ArcGIS切片發布的支持,但GeoWebCache插件版需要額外拓展配置下。
總結為以下幾點:
1、下載獨立版的geowebcache1.16版(與geoserver的gws插件版本一致),將里面的依賴gwc-arcgiscache-1.16.1.jar拷到geoserver的lib中;
2、修改geoserver的lib中的gs-gwc-2.16.2.jar(直接下jar https://mvnrepository.com/artifact/org.geowebcache/gwc-arcgiscache/1.16.2 下不了)。
1)拷貝 geowebcache/WEB-INF/geowebcache-arcgiscache-context.xml到gs-gwc-2.16.2.jar里;
2)修改gs-gwc-2.16.2.jar中的geowebcache-servlet.xml 文件,添加 <import resource="geowebcache-arcgiscache-context.xml"/>
;
3)修改gs-gwc-2.16.2.jar中的geowebcache-core-context.xml 文件,添加 <bean id="gwcArcGISGridsetConfiguration" class="org.geowebcache.arcgis.layer.ArcGISCacheGridsetConfiguration" />
。
配置arcgis瓦片數據
點擊caching defaults
進入Go to the embedded GeoWebCache home page
,可以看到geowebcache.xml文件位置,再進入A list of all the layers and automatic demos
,即是gwc的demo主頁。
在geowebcache.xml的layers節點中添加數據位置信息:
<arcgisLayer>
<name>tmwp_ArcGISServer</name
<tilingScheme>D:\gisdata\GEOWEBCACHE\tmwp_ArcGISServer\conf.xml</tilingScheme>
<tileCachePath>D:\gisdata\GEOWEBCACHE\tmwp_ArcGISServer\_alllayers</tileCachePath>
<hexZoom>false</hexZoom>
</arcgisLayer>
在點擊gwc的demo主頁下方Reload TileLayerConfiguration
。
在demo列表找到tmwp_ArcGISServer
,點擊png
即可查看瓦片地圖。
使用geowebcache的緩存功能
通過geoserver/gwc/service/wms訪問,會開啟緩存服務,並存儲在配置的$GEOWEBCACHE_CACHE_DIR文件中。在gwc主頁可以找到路徑:
Storage Locations
Config file: gwc/geowebcache.xml
Local Storage: C:\Users\ADMINI~1\AppData\Local\Temp\geowebcache
修改$GEOWEBCACHE_CACHE_DIR文件的方法有兩種 :改web.xml 或改geowebcache-core-context.xml。
修改后,重新啟動gs可識別:
目錄中會生成geowebcache.xml配置文件,在該配置文件中配置arcgis瓦圖。
也可以主動去生成切片參考4.4,這里也有linux版的安裝教程,在tile layers
中選擇要切的圖層,選擇剪裁策略(EPSG:900913就是(EPSG:3857)) 和格式,點擊seed/truncate
進入頁面,提交剪裁任務:
生成的瓦片圖也存放在$GEOWEBCACHE_CACHE_DIR文件中。
可能出現的問題
1、因標識不識別導致運行不起來
應該是xml文件配置的問題。
2、jar包沖突問題
如java.lang.NoSuchMethodError
,
在使用gwc-arcgiscache-1.10.5.jar、gwc-arcgiscache-1.15.2.jar時出現,還是需要16版本。
3.服務成功發布但查看地圖http://localhost:8090/geowebcache/demo/tmwp_ArcGISServer?gridSet=EPSG:3857_tmwp_ArcGISServer&format=image/png 顯示400,日志報錯:
還是瓦圖文件的問題,參考這里,修改瓦圖文件即可。
4.跨域問題解決