效果预览

组件特点

  1. 仿照百度地图图层切换器,鼠标悬浮在上时展开所有图块,鼠标移开时显示已选中图块。
  2. 依赖图层管理器LayersManager类,统一管理所有图层,每个图块只需关联相关图层对应的code值。
  3. 可通过自定义css样式自由选择图层切换器组件布局位置。
  4. 每个图块由图层和仅注记图层共同组成,注记图层是可选的。

核心代码


<template>
<div id="rootContainer" ref="rootContainer" class="root-container">
<cp-layers :viewer="viewer" :layersManager="layersManagerRef" :layersData="layersDataRef" v-if="layersManagerRef"
style="bottom:40px;right:40px;"></cp-layers>
</div>
</template>
import { onMounted, ref } from "vue";
import 'cesium/Build/Cesium/Widgets/widgets.css';
import { CP_LAYER, LayersManager, type LayersDataType } from "cesium-pocket";
let viewer: any = ref(null)
const rootContainer: any = ref(null);
const viewer = ref<Viewer | null>(null)
const loading = ref(true)
let layersManagerRef = ref<LayersManager>()
let layersDataRef = ref<Array<LayersDataType>>([])
onMounted(() => {
viewer.value = //你获取的viewer
init()
loading.value = false
});
const init = async () => {
let layersManager = new LayersManager(viewer.value as Viewer)
await layersManager.addCPLayer(CP_LAYER.BING_IMG, { code: 'bing' })
await layersManager.addCPLayer(CP_LAYER.BING_IMG_S, { code: 'bing_s' })
await layersManager.addCPLayer(CP_LAYER.BING_IMG_NIGHT, { code: 'bing_night' })
await layersManager.addCPLayer(CP_LAYER.AMAP_IMG, { code: 'amap' })
await layersManager.addCPLayer(CP_LAYER.AMAP_IMG_S, { code: 'amap_s' })
await layersManager.addCPLayer(CP_LAYER.TDT_IMG, { code: 'tdt' })
await layersManager.addCPLayer(CP_LAYER.TDT_IMG_S, { code: 'tdt_s' })
layersManagerRef.value = layersManager
let obj: LayersDataType = {
name: '必应地图',
code: 'bing',
signCode: 'bing_s',
imgSrc: bingPng,
checked: false
}
let obj1: LayersDataType = {
name: '必应夜图',
code: 'bing_night',
signCode: null,
imgSrc: bing_nightPng,
checked: false
}
let obj2: LayersDataType = {
name: '高德地图',
code: 'amap',
signCode: 'amap_s',
imgSrc: amapPng,
checked: false
}
let obj3: LayersDataType = {
name: '天地图',
code: 'tdt',
signCode: 'tdt_s',
imgSrc: tdtPng,
checked: false
}
layersDataRef.value.push(obj)
layersDataRef.value.push(obj1)
layersDataRef.value.push(obj2)
layersDataRef.value.push(obj3)
}
.root-container {
position: relative;
width: 100%;
height: 500px;
}
.map-plugin {
position: absolute;
bottom: 120px;
right: 120px;
z-index: 10;
}

组件参数列表

Component <cp-layers :viewer="viewer" :layersManager="layersManager" :layersData="layersData">
Props 组件属性 Props
序号 名称 类型 必须? 默认值 含义 备注
1 viewer Cesium.Viewer 是 - viewer对象 -
2 layersData Array<LayersDataType> 是 - 切换器数组 -
3 layersManager LayersManager 是 - 图层管理器类 -
Type 接口 LayersDataType Interface
序号 名称 类型 必须? 默认值 含义 备注
1 name string 是 - 现实的中文名称 -
2 code string 是 - 图层对应LayersManager图层管理器添加的的标识码 -
3 signCode string 否 - 注记图层对应LayersManager图层管理器添加的的标识码 -
4 imgSrc string 是 - 切换器上对应图层的图片地址 -
5 checked boolean 是 - 注记图层是否默认show signCode存在的前提下有效