一、先看效果
二、版本信息
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; } });