1. 程式人生 > >GIS篇 GeoServer隨手筆記

GIS篇 GeoServer隨手筆記

eoj python3 term 想要 說明 邊界 bmp 案例 2.3

1.1WMS
1.1.1WMS地圖服務(OpenGIS Web Map Service),將地圖數據發布為WEB服務,提供網絡地圖圖片。
1.1.2WMTS,訪問已經切成瓦片分層的數據
1.2WFS要素服務(Web Feature Service)目的是提供對矢量地圖的查詢、編譯等操作。
("矢量地圖":使用直線和曲線來描述圖形)
1.3WCS地理覆蓋服務(Web Coverage Service),目標是發布原始柵格數據。
("柵格數據":就是將空間分割成有規律的網格,每一個網格稱為一個單元,並在各單元上賦予相應的屬性值來表示實體的一種數據形式)
1.4只瀏覽,不需做編輯、查詢、分析的圖層,比如行政區劃、河流、道路圖層,切片較好, 切片後顯示效率高,不切片的話每次加載或圖像範圍發生變化都需要重新渲染地圖;

1.5WMS請求規範
1.5.1GetCapabitities(返回服務級元數據)服務名服務關鍵字類信息,對WMS服務請求參數以及輸出格式的描述,圖層layer(格式為namespace:layer)的列表等
service 服務名 WMS
version 服務版本 1.0.0,1.1.0,1.1.1,1.3.0選一
request 請求名 GetCapabitities
1.5.2GetMap(獲取影像)
service 服務名 WMS
version 服務版本 1.0.0,1.1.0,1.1.1,1.3.0選一
request 請求名 GetCapabitities
layers 圖層名
styles 請求的風格文件名 不填使用服務端默認

srs 坐標系,常用EPSG:4326
bbox 請求的map的邊界的大小
width map輸出寬像素大小
height map輸出高像素大小
format map圖片輸出格式
1.5.3GetFeatureInfo 用於以多種格式(如 HTML、XML 和純文本)文件形式返回地圖中所查詢要素的屬性。
1.6WFS請求規範
1.6.1GetCapabilities操作 返回描述 WFS 服務元數據的XML文檔, 服務元數據描述了該 WFS服務可以提供的地理要素類型以及針對每個要素類型的操作;
1.6.2DescribeFeatureType操作 返回WFS能夠提供的地理要素類型的GML應用模式描述文檔;
1.6.3GetFeature操作 根據用戶查詢條件,從WFS中獲取地理要素,用戶可以設定空間和非空間查詢條件;
1.6.4Transaction 操作 為事務請求提供服務。用於描述地理數據變化的操作方法, 如創建、 修改和刪除地理要素的操作;
1.6.5LockFeature操作 WFS可以在一個事務處理期間鎖定一個地理要素類型中的一個或多個地理要素實例, 這使 WFS具有支持可序列化事務的能力;
1.6.6GetGmlObject 操作 一個 WFS 服務可能通過追蹤Xlinks 來獲取客戶請求所需的構成地理要素的子要素實例。
1.7WCS請求規範
1.7.1GetCapabilities操作返回描述服務和數據集的XML文檔。
1.7.2GetCoverage操作是在GetCapabilities確定什麽樣的查詢可以執行、什麽樣的數據能夠獲取之後執行的,它使用通用的覆蓋格式返回地理位置的值或屬性。
1.7.3DescribeCoverageType操作允許客戶端請求由具體的WCS服務器提供的任一覆蓋層的完全描述。

動態出圖可以使用WMS中的GetMap請求。
矢量查詢可以使用WFS中的GetFeature請求。
要素編輯可以使用WFS中的Transaction請求。

2.管理平臺

2.1管理平臺數據部分

2.1.1工作區
工作區類似我們工作空間,概念可以類比我們進行其他開發時所配置的項目根目錄,用於對某一項具體的工作進行統一的管理。對應於GeoServer所用於的web服務,也可以理解為是一個web網站的根目錄。

2.1.2數據存儲
數據存儲用於管理GeoServer的數據存儲,我們可以將其理解為為Web服務提供數據支持的“數據庫”。

2.1.2.2數據配置
(1)設置數據表的字符集時應該和源數據一致,如果不知道源數據的字符集,考慮選擇UTF-8
(2)本機SRS是指地圖數據本身的坐標參考系統,這是由地圖數據本身的屬性決定的,也是不可修改的。GeoServer會自動從數據文件中讀取這一信息。
相對應的Native Bounding Box則是根據本機SRS自動計算出來的邊框,我們點擊從數據中計算就能計算出來邊框範圍。
定義SRS是指我們自己想要定義顯示地圖數據的坐標參考系統。強制申明會讓自定義SRS覆蓋本機SRS。
對於國內用戶來說,常用的坐標系統可以通過鍵入4326進行查找選擇。選擇確定後,通過點擊“compute from nativ bounds”可以計算出在這個坐標系統下的邊界。

2.1.2.3發布配置
(1)
http緩存響應頭 - 如果勾選,GeoServer將不會在指定的緩存時間內請求相同tile。
(2)
Queryable - 控制圖層是否可以通過WMS GetFeatureInfo請求進行查詢。
(3)
Default style - 當用戶沒有在GetMap請求中指定樣式時使用的默認樣式。
Selected Styles - 用戶可在GetMap中選擇的樣式
(4)
Default rendering buffer - GetMap / GetFeatureInfo請求中的默認緩沖大小。

2.1.3圖層和圖層組
圖層和圖層組都是用來發布和管理新圖層,並可以使用組的形式來進行組織和管理。

2.1.4styles
styles是數據顯示的樣式,在圖層發布指定默認以及可用樣式

2.2管理平臺服務部分

2.2.1WCS用於管理元數據信息和WCS、WFS、WMS通用的配置信息,如數據請求讀寫最大值等。
2.2.2WFS用於配置和管理Feature Data、服務級別以及GML輸出等。
2.2.3WMS用於管理和配置柵格數據和SVG選項以及切片地圖壓縮和分級情況。

2.3管理平臺tile cache部分
2.3.1在tilte layers中選擇Seed,裁剪瓦片的級別後,在Geoserver的根目錄的\geoserver\data\gwc\中會保存瓦片數據,如果沒有數據,嘗試將\geoserver\WEB-INF\web.xml中GEOSERVER_DATA_DIR的參數設為\geoserver\data的全路徑數據目錄,一般非安裝版的geoserver可能出現此問題。
<context-param>
<param-name>GEOSERVER_DATA_DIR</param-name>
<param-value>D:\tomcat\apache-tomcat-8.0.23\webapps\geoserver\data</param-value>
</context-param>

2.3.2在gridset中添加各縮放等級的分片策略
(關於緩存:Geowebcache服務器攔截來至客戶端的請求,判斷本次請求的數據是否已經被緩存。如果請求數據已被緩存,則將這些緩存圖片直接渲染至客戶端;如果請求數據沒有被緩存,則發送請求至WMS Server(提供網絡地圖服務的服務器如geoserver),由服務器處理請求數據,並返回給Geowebcache服務器,Geowebcache服務器進過渲染及緩存數據圖片後繪制到客戶端。)

5.style編寫部分
5.1一些簡單標記的意義,詳細內容請參考sld規範文檔
<Name>
樣式名稱
<FeatureTypeStyle>
要素樣式
<Rule>
規則
<ogc:Filter>
過濾器
<ogc:PropertyIsBetween>
用來定義在兩個屬性值之間的過濾器
<ogc:PropertyIsLessThan>
用來定義在小於某個屬性值的過濾器
<ogc:PropertyIsGreaterThan>
用來定義在大於某個屬性值的過濾器
<ogc:PropertyName>
屬性字段名
<ogc:Literal>
屬性值
<PointSymbolizer>
點標記器
<LineSymbolizer>
線標記器
<PolygonSymbolizer>
面標記器
5.2 style文件中包含中文應該把xml encoding改為"GB2312",否則會出現問題

6.geoserver的默認為不允許跨域訪問。在geoserver項目目錄的web.xml中添加(在其他filter之前)
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

7.geoserver發布tif高程數據
7.1數據源預處理: 需要先將16位的tiff轉換為8位tiff
7.2下載Cesium1.4.4
7.3使用Cesiume 加載GeoserverTerrainProviderkai開源插件
var terrainProvider = new Cesium.GeoserverTerrainProvider({
heightMapWidth: 65, //其他值可能出現地形變形
heightMapHeight: 65, //其他值可能出現地形變形
url: ‘http://127.0.0.1:8080/geoserver/map/wms‘, //wms服s務地址
layerName: ‘ASTGTM2_N30E100_dem‘, //圖層
maxLevel: 20,//最大切片等級
formatImage: {format : "image/png",extension: "png"}, //建議png,使用jpeg會壓縮圖片導致出現地形異常
styleName: ‘generic‘, //使用通常的柵格數據風格
waterMask: false, //是否加載水紋數據
});

8.geoserver切割tif瓦片
使用geoserver自帶的切片工具會導致瓦片之間會錯位
需要使用geotiles工具,在layer Preview界面以png格式打開tif圖層,復制url到geotiles中進行切割
將切割的瓦片放入"gwc/圖層名/"文件夾下

9.其他
使用 gdal將tif切成小塊tif
安裝python3.6
python -m pip install wheel
下載GDAL-2.2.4-cp36-cp36m-win_amd64.whl
python -m pip install 路徑\GDAL-2.2.4-cp36-cp36m-win_amd64.whl
gdal_retile.py -v -r bilinear -levels 4 -ps 256 256 -co "TILED=YES" -co "COMPRESS=JPEG" -targetDir E:\data\tiles E:\data\map\World1.tif

10.相關有價值的參考網站
10.1GeoServer中WMS、WFS的請求規範
https://www.cnblogs.com/naaoveGIS/p/5508882.html
10.2WFS、WMS、WCS的測試用例
https://wenku.baidu.com/view/8e86554d852458fb770b5653.html
10.3Cesium請求地形數據插件使用說明
https://github.com/kaktus40/Cesium-GeoserverTerrainProvider

11.GeoWebServer目錄命名規則
第一層:x x為級數
第二層:x_y x範圍為 0 到 2的第一層級級數加一除以2取整的次方再減一,y相同
第三層:x_y x範圍為 2的第一層級級數除以2取整加1的次方乘以第二層x 到 2的第一層級數除以2取整加2的次方乘以第二層x,y相同
第二層是一層索引,第三層存放的是實際瓦片

12.geoserver影像發布
支持geotiff,geojpg,geopng,geobmp,img,mbtiles等格式影像的發布
geotiff有單獨的數據源支持
數據源WorldImager支持所有geo格式圖片發布,圖片和描述圖片坐標系和相對地理位置的配置文件在同一個文件夾下,這個圖片就是滿足geo格式的圖片,使用地圖軟件導出的geo格式圖片需要檢查配置文件是否正確
還可以通過安裝插件支持例如img,mbtiles等格式的影像發布

13.關於mbtiles
mbtils格式文件原理:利用一個嵌入式類型數據庫sqlite數據表裏字段來存儲圖片的byte,使用時通過查詢數據表就可以讀取圖片
mbtils資料:優點是大大減少存儲量,缺點是大量的查詢會拖慢服務器,較適合離線地圖使用。
geoserver使用水經註生成的mbtiles導入時會報錯
幾乎沒有案例,但是官方有導入導出mbtiles的python工具

14.MBtiles格式轉換
python setup.py install安裝mbutil
使用mbutil將瓦片目錄轉換為.mbtiles格式文件(geoserver不支持jpg格式瓦片轉換的mbtiles,檢測瓦片的文件頭是否為png,後戳為png文件頭也可能為jpg)
生成mbtiles文件後發布即訪問

15.geoserver源碼相關
geoserver使用wicket框架編寫
wicket原理:後端使用java生成控件的模板,前端直接調用模板

GIS篇 GeoServer隨手筆記