Cesium有孔洞多边形实现高亮效果

参考CSDN其他文章,新增一个图层,将所点击的多边形的坐标点复制到新图层中,即可实现高亮显示。

如果有孔洞多边形需要特殊处理,否则无法显示孔洞。

有孔洞多边形需要增加holes这一属性。

HighlightPolygonEntity (entityID, layerName) {
    // 如果非空,先移除全部entity
    if (highLightEntityList.length) {
        for(let i = 0; i< highLightEntityList.length; i++) {
            layerName.entities.remove(highLightEntityList[i])
        }
    }
    // 取消高亮
    if (!entityID) {
        return;
    }
    // 获取孔洞列表
    let holeList = []
    if(entityID.polygon.hierarchy.getValue().holes) {
        holeList = entityID.polygon.hierarchy.getValue().holes
    }
    highLightEntityList[0] = layerName.entities.add({
        id: 'highlight-0',
        polygon: {
            hierarchy: {
                positions: entityID.polygon.hierarchy.getValue().positions,
                holes: holeList    // 挖除孔洞
            },
            material: Cesium.Color.WHITE.withAlpha(0.5),
            zIndex: 100
        },
        polyline: {
            positions: entityID.polygon.hierarchy.getValue().positions,
            width: 1
        }
    })
    // 孔洞边界线
    for(let i = 1; i <= holeList.length; i++) {
        highLightEntityList[i] = layerName.entities.add({
            id: 'highlight-' + i.toString(),
            polyline: {
                positions: entityID.polygon.hierarchy.getValue().holes[i - 1].positions,
                width: 1
            }
        })
    }
    viewer.dataSources.raiseToTop(layerName); //设置defaultLayer置顶
}

let highLightShowHandler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas)

const defaultLayer = new Cesium.CustomDataSource("defaultLayer")

viewer.dataSources.add(defaultLayer)

highLightShowHandler.setInputAction((e) => {
    let pick = viewer.scene.pick(e.position)
    if(Cesium.defined(pick)) {
        this.HighlightPolygonEntity(pick.id, defaultLayer)
    } else {
        this.HighlightPolygonEntity(null, defaultLayer)
    }
},Cesium.ScreenSpaceEventType.LEFT_CLICK);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值