一、先看效果
二、版本信息
Centos系統:CentOS Linux release 7.3.1611 (Core)
GeoServer版本:2.20.1
Bigemap地圖下載器:30.0.0.0
三、軟件下載安裝
1、Bigemap地圖下載器
2、GeoServer下載安裝
官網下載地址:http://geoserver.org/release/stable/,具體安裝過程參考:https://www.cnblogs.com/haolb123/p/14107636.html
四、BIGEMAP下載電子地圖
1、選擇地圖源
打開BIGEMAP地圖下載器,如下圖,在軟件左上角選擇地圖源為【高德地圖】實際任意選擇都行,我們想要下載個性化無偏移電子地圖,
由於bigemap經常升級,以前地圖源中有【個性化地圖】,現在沒有了,但他提供了其它下載入口。
2、使用框選工具開始下載
使用框選工具【矩形框或者多邊形】框選出目標區域,或者可以導入想要下載的目標區域kml邊界文件,然后進行下載。
我們以甘肅省金昌市永昌縣城關鎮為例,框選城關鎮部分區域。
3、設置地圖樣式
BIGEMAP預設了若干種樣式供您選擇,你可選擇其中一種樣式,然后框選需要的區域之后直接下載或者勾選倒數第二項【自定義】,設置自己想要的地圖樣式。
鼠標雙擊下圖紅色圓圈區域,彈出地圖樣式對話框。我們渲染樣式選擇:其它風格(一)。
4、進行自定義設置
勾選【自定義】之后點擊自定義設置出現如圖所示對話框,您可對字體、路網、其他樣式進行設置,推薦點擊左下角【樣式模版】,選擇一種樣式之后在此基礎上進行修改。
5、注意自定義路網的設置
如果不想讓某種路網顯示在地圖上,第一步選中該類型道路,第二步選擇要下載的地圖級別,取消勾選,如圖所示。(其他地圖級別時,該類型地圖還會繼續顯示)
6、選擇想要顯示在地圖上對象
鼠標移動到如圖所示區域出現下拉框,勾選相應的對象即可使其顯示在地圖上;更多設置需要在自定義功能中設置,如地圖上不出現高速公路,其他類型道路都顯示。
7、怎么找到剛下載的文件
下載時在右上角會顯示下載進度,下載完成后,鼠標移到如圖所示區域,可以展開已下載列表,雙擊剛剛下載的對象,即可打開目標文件位置。
五、投影轉換
1、使用bigemap工具列表中投影轉換工具,依次把下載好的電子地圖圖片全部做投影轉換,目標坐標系選擇:CGCS2000。
2、如果下載的是全球電子地圖,目標坐標系應該選擇:投影坐標系--World—WGS 84 / World Mercator。
3、轉換完成后如下圖.
4、如果未做投影轉換,在geoserver中添加數據存儲時會報異常:
Could not list layers for this store, an error occurred retrieving them: Failed to create reader from file:data/城關鎮_個性化_無偏移_電子地圖/城關鎮_個性化_無偏移_電子地圖_Level_15.tif and hints Hints: EXECUTOR_SERVICE = java.util.concurrent.ThreadPoolExecutor@68fc241b[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0] REPOSITORY = org.geoserver.catalog.CatalogRepository@5339352c System defaults: STYLE_FACTORY = StyleFactoryImpl GRID_COVERAGE_FACTORY = GridCoverageFactory TILE_ENCODING = null FORCE_AXIS_ORDER_HONORING = http LENIENT_DATUM_SHIFT = true FORCE_LONGITUDE_FIRST_AXIS_ORDER = true FEATURE_FACTORY = org.geotools.feature.LenientFeatureFactoryImpl@38f57b3d FILTER_FACTORY = FilterFactoryImpl COMPARISON_TOLERANCE = 1.0E-8
六、Geoserver切割瓦片影像
1、復制投影轉換后的文件到geoserver的data目錄
2、登錄geoserver,新建工作區:oyz
3、新建網格集:EPSG:3857
4、添加數據存儲
依次把15至18級地圖圖片添加到數據存儲。
5、發布圖層
點擊數據存儲【保存】按鈕后自動跳轉新建圖層頁面。
點擊【發布】按鈕后進入編輯圖層頁面,注意:圖層名稱必須是英文,否者在訪問時會出現亂碼。
點擊 Tile Caching 頁簽,調整網格集坐標系添加 EPSG:3875,只保存EPSG:3875,級別設置和bigemap下載TIF圖片級別保持一致。
6、圖層瓦片切割
Number of tasks to use:切割瓦片使用的任務數量,數量越多切割越快。
Grid Set:坐標系,電子地圖選擇ESPG:3857。
Zoom start和Zoom stop兩個級別都選擇16級,這兩個級別和圖層級別保持一致。
等待數分鍾后可以 .\geoserver-2.20.1\data_dir\gwc\oyz_cgz_dz_Level_16目錄查看切割好的瓦片數據
7、切割其它級別瓦片
接下來,我們要重復把第15,16,17,18 級的地圖依次加入數據源。重復4, 5, 6 步驟,把這所有的數據圖層都切割成瓦片,最后切割好的瓦片放在第18級的地圖,效果如下圖:
8、修改圖層cgz_dz_Level_18的訪問級別:15~18
七、Cesium加載WMTS服務,4326和3857
1、電子地圖 3857坐標系
var electronicMapModel = new Cesium.ProviderViewModel({ name: '電地地圖', iconUrl: require('../assets/image/UI/地圖切換_03-02.png'), creationFunction: function () { var esri = new Cesium.WebMapTileServiceImageryProvider({ url: self.Common.mapUrl + '/geoserver/gwc/service/wmts', layer: 'ChengGuanZhen:cgz_dz_Level_18', style: "", format: "image/png", tileMatrixSetID: 'EPSG:3857', tileMatrixLabels: ['EPSG:3857:0', 'EPSG:3857:1', 'EPSG:3857:2', 'EPSG:3857:3', 'EPSG:3857:4', 'EPSG:3857:5', 'EPSG:3857:6', 'EPSG:3857:7', 'EPSG:3857:8', 'EPSG:3857:9', 'EPSG:3857:10', 'EPSG:3857:11', 'EPSG:3857:12', 'EPSG:3857:13', 'EPSG:3857:14', 'EPSG:3857:15', 'EPSG:3857:16', 'EPSG:3857:17', 'EPSG:3857:18'], maximumLevel: 18, show: false, tilingScheme: new Cesium.WebMercatorTilingScheme({ numberOfLevelZeroTilesX: 1, numberOfLevelZeroTilesY: 1 }), }); return esri; } });
2、衛星地圖 4326 坐標系
var terrainMapModel = new Cesium.ProviderViewModel({ name: '衛星影像', iconUrl: require('../assets/image/UI/地圖切換_03-01.png'), creationFunction: function () { var esri = new Cesium.WebMapTileServiceImageryProvider({ url: self.Common.mapUrl + '/geoserver/gwc/service/wmts', layer: 'ChengGuanZhen:cgz_wt_test_4326', style: "", format: "image/png", tileMatrixSetID: 'EPSG:4326', tileMatrixLabels: ['EPSG:4326:0', 'EPSG:4326:1', 'EPSG:4326:2', 'EPSG:4326:3', 'EPSG:4326:4', 'EPSG:4326:5', 'EPSG:4326:6', 'EPSG:4326:7', 'EPSG:4326:8', 'EPSG:4326:9', 'EPSG:4326:10', 'EPSG:4326:11', 'EPSG:4326:12', 'EPSG:4326:13', 'EPSG:4326:14', 'EPSG:4326:15', 'EPSG:4326:16', 'EPSG:4326:17', 'EPSG:4326:18'], maximumLevel: 18, show: false, tilingScheme: new Cesium.GeographicTilingScheme({ numberOfLevelZeroTilesX: 2, numberOfLevelZeroTilesY: 1 }), }); return esri; } });