Cesium+Vue3学习系列(5)---置顶地图注记图层、设置图层显示顺序

 本学习系列将以Cesium + Vue3 + Vite +Typescript+elementplus作为主要技术栈展开,后续会循序渐进,持续探索Cesium的高级功能,相关源码全部免费公开。 请关注微信公众号 “webgis学习”或扫描下方二维码,关注后,在公众号里输入“Cesium学习系列源码”,即可看到全部代码。

上篇文章中忽略了注记压盖问题,即当用户先选中注记,然后再切换地图时,导致注记被底图压盖,比较影响用户体验。以下提供解决方法。

1、在上篇文章的LayerManager类里增加SetAnnotationLayerTop方法,主要借助raiseToTop实现。如下

// 置顶标注图层
    SetAnnotationLayerTop() {
       let annotationHandle =  this.layersIdMap.get(LayerIdFlag.TDT_ANNOTATION_WMTS)?.handle
       if(annotationHandle){
           this.viewer.imageryLayers.raiseToTop(annotationHandle)
       }
    }

2、前端EarthDataLayers.vue中,在加载其他影像图层后。判断是否选中注记,如果选中,直接将注记图层放到顶层即可。


const changeImageData = (val: string | number | boolean | undefined) => {
    imageDataRadio.value = val as string   
   
    switch (val) {
        case 'bingImage':
            mLayerManager?.Remove(LayerIdFlag.TDT_IMAGERY_WMTS)
            mLayerManager?.Remove(LayerIdFlag.TDT_VECTOR_WMTS)
            break
        case 'tdtImage':
            mLayerManager?.Remove(LayerIdFlag.TDT_VECTOR_WMTS)
            mLayerManager?.Add(tdtImageLayerInfo)
            break
        case 'tdtVec':
            mLayerManager?.Remove(LayerIdFlag.TDT_IMAGERY_WMTS)
            mLayerManager?.Add(tdtVecLayerInfo)
            break
        default:
            break
    }
    // 置顶标注图层
    if (tdtAnnotationChecked.value) {
        mLayerManager?.SetAnnotationLayerTop()
    }
}

3、也可将指定图层显示索引,实现如下

/**设置影像数据的叠加顺序 */
    SetImageryLayerIndex(layer: Cesium.ImageryLayer, targetIndex: number) {
        const imageryLayers = this.viewer.imageryLayers
        const curIndex = imageryLayers.indexOf(layer)
        if (curIndex === targetIndex) return
        if (targetIndex === 0) {
            imageryLayers.lowerToBottom(layer)          // 直接到底
        } else if (targetIndex === imageryLayers.length - 1) {
            imageryLayers.raiseToTop(layer)            // 直接到顶
        } else {
            // 逐层移动,直到索引匹配
            while (imageryLayers.indexOf(layer) > targetIndex) imageryLayers.lower(layer)
            while (imageryLayers.indexOf(layer) < targetIndex) imageryLayers.raise(layer)
        }
    }

效果如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值