🌐 在线体验:http://1.116.108.179:8003/SatelliteCloudImage
本文聚焦卫星云图时序可视化的关键技术实现,重点讲解如何在 Cesium 中加载多张本地云图、精准地理配准,并通过 ECharts
时间轴控制其动态切换。
一、禁用 Cesium 默认底图,为自定义图层腾出空间
Cesium 默认会加载 Bing 或 Ion 底图,干扰我们后续叠加的天地图和云图。因此初始化时必须彻底关闭:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| const viewer = new Cesium.Viewer('cesiumContainer', { animation: false, timeline: false, baseLayerPicker: false, geocoder: false, homeButton: false, sceneModePicker: false, navigationHelpButton: false, fullscreenButton: false, infoBox: false, selectionIndicator: false, imageryProvider: false, terrainProvider: Cesium.createWorldTerrain(), })
viewer.imageryLayers.removeAll()
|
二、加载天地图双图层(影像 + 中文标注)
使用天地图官方 API,分两层加载:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| const tiandituImageryProvider = new Cesium.UrlTemplateImageryProvider({ url: `https://t{s}.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=${token}`, subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'], tilingScheme: new Cesium.WebMercatorTilingScheme(), maximumLevel: 18 })
const tiandituLabelProvider = new Cesium.UrlTemplateImageryProvider({ url: `https://t{s}.tianditu.gov.cn/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=${token}`, subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'], tilingScheme: new Cesium.WebMercatorTilingScheme(), maximumLevel: 18 })
viewer.imageryLayers.addImageryProvider(tiandituImageryProvider) viewer.imageryLayers.addImageryProvider(tiandituLabelProvider)
|
三、加载本地云图并精准地理配准
云图是静态 PNG,需指定其覆盖的地理范围(中国区域):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import a1 from '../assets/timeMap/a1.png'
const urlArr = [a1, a2, ..., a10]
const loadTileLayers = (viewer) => { for (let i = 0; i < urlArr.length; i++) { const imageryProvider = new Cesium.SingleTileImageryProvider({ url: urlArr[i], rectangle: Cesium.Rectangle.fromDegrees( 63.8148899733, 12.7700338517, 143.536486117, 56.3833398551 ) })
const options = {alpha: i === 0 ? 0.8 : 0} const layer = new Cesium.ImageryLayer(imageryProvider, options) viewer.imageryLayers.add(layer) arrTileLayer.value.push(layer) } }
|
✅ SingleTileImageryProvider 适用于单张大图,配合 rectangle 可实现像素级地理对齐。
四、ECharts 时间轴联动控制
使用 ECharts 的 timeline 组件驱动云图切换:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| const initTimelineChart = () => { const chart = echarts.init(timelineChartRef.value)
const timelineData = Array.from({length: urlArr.length}, (_, i) => new Date(Date.UTC(2024, 0, 1, i)).toISOString().substring(0, 10) )
chart.setOption({ baseOption: { timeline: { axisType: 'category', autoPlay: true, playInterval: 2000, data: timelineData, label: { color: '#fff' }, checkpointStyle: { color: '#4694C5' } } } })
chart.on('timelinechanged', (event) => { arrTileLayer.value.forEach(layer => layer.alpha = 0) if (arrTileLayer.value[event.currentIndex]) { arrTileLayer.value[event.currentIndex].alpha = 0.8 } }) }
|
五、关键优化点
性能:云图作为静态资源打包,避免网络请求延迟
精度:fromDegrees 参数需根据实际云图覆盖范围微调
体验:加载时显示 spinner,防止白屏
兼容:使用 enablePickFeatures: false 提升渲染性能
通过以上步骤,即可实现一个轻量、精准、交互流畅的卫星云图时序可视化系统。该方案完全基于前端技术栈,无需 GIS 服务器,适合快速部署气象、环保、应急等领域的时空数据展示场景。