记录一下问题解决的过程。
先贴最终效果图:
在三维地球上贴上黑龙江的卫星地图,源文件是tif格式,6.79G

阶段一:通过geoserver发布WMS服务
let mapProvider1 = new Cesium.WebMapServiceImageryProvider({
url: window.configs.WebMapServiceImageryProviderUrl,
layers: 'xxx:xxx',
parameters: {
service: 'WMS',
format: 'image/png',
transparent: true
}
});
viewer.imageryLayers.addImageryProvider(mapProvider1);
问题:
地图加载速度慢。镜头切到A,却会先加载B处的影像然后再加载A;镜头反复切换,影像也要反复重新加载。
geoserver持续运行几天后,会很卡,甚至停住了不响应请求。这个问题尝试通过“任务计划程序”每天定时启动startup.bat来解决,但是发现这种方式启动,geoserver的响应速度比通过鼠标双击startup.bat启动要慢,只是能用,但不好用。
阶段二:通过geoserver发布WMTS服务
let wmtsImageryProvider1 = new Cesium.WebMapTileServiceImageryProvider({
url: 'http://192.168.1.163:8080/geoserver/gwc/service/wmts/rest/xxx:xxx/{style}/{TileMatrixSet}/{TileMatrixSet}:{TileMatrix}/{TileRow}/{TileCol}?format=image/jpeg',
layer: 'xxx:xxx',
style: '',
format: 'image/jpeg',
tileMatrixSetID: 'EPSG:900913', //一般使用EPSG:3857坐标系
// parameters: {
// transparent: true
// }
});
viewer.imageryLayers.addImageryProvider(wmtsImageryProvider1);
通过使用WMTS,加载速度有了大幅提升。
问题:
如下图,加上黑龙江的图层之后,地球的其他部分都变成了白色。猜测原因是geoserver在生成瓦片的时候,把其他部分都填充了白色。尝试通过上面代码块中注释的transparent: true来解决,但没有效果。
于是打算通过cesium lab自己切瓦片来解决,进入第三阶段。
parameters: {
transparent: true
}

阶段三:通过cesium lab自己切瓦片,然后发布瓦片
viewer.imageryLayers.addImageryProvider(
new Cesium.UrlTemplateImageryProvider({
url: './xxx/{z}/{x}/{y}.png',
maximumLevel: 12
})
)
目前切换到任何视角,地图基本1秒就能加载完成。
问题:
如下图,黑龙江地图周围存在白边。

解决方案:
使用Arc Map去掉白边,设置NoData 为 255,并保存。
然后再用cesium lab切片,黑龙江地图周围的白边就没有了。

