WebGL中实现量算撤销操作

前言:在WebGL中有一个名为量算的示例,主要功能是用于测量距离,面积和高度。但是在测量的时候难免会出现描点错误的情况,这个时候就需要一个撤销的操作,但是示例是没有的,参考下文即可实现撤销操作。

这个操作主要分为两步操作:

  1. 在撤销的时候删除之前MeasureHandler创建的最后一个点实体(示例中黄色的点),代码如下:
let len = viewer.entities._entities.length
// 获取最后一个实体的id
let id = viewer.entities._entities._array[len - 1]._id
// 根据id删除最后一个实体
viewer.entities.removeById(id)
  1. 删除线实体中最后一个点,代码如下:
// 删除result的最后一个点
result.positions.pop();

主要代码,以量算面积为例:

//初始化测量面积
handlerArea = new Cesium.MeasureHandler(viewer, Cesium.MeasureMode.Area, clampMode);
handlerArea.measureEvt.addEventListener(function (result) {
    document.onkeydown = function (event) {
        if (event.ctrlKey == true && event.keyCode == 90) {
            let len = viewer.entities._entities.length
            // 获取最后一个实体的id
            let id = viewer.entities._entities._array[len - 1]._id
            // 根据id删除最后一个实体
            viewer.entities.removeById(id)
            // 删除result的最后一个点
            result.positions.pop();
        }
    }
    // console.log("result", result)
    var mj = Number(result.area);
    var selOptV = $("#selOpt").val();
    var positions = result.positions;
    if (selOptV == 3 || selOptV == 4) {
        mj = Number(calcClampValue(positions));
    } else if (selOptV == 5) {
        mj = Number(calcAreaWithoutHeight(positions));
    }
    var area = mj > 1000000 ? (mj / 1000000).toFixed(2) + 'km²' : mj.toFixed(2) + '㎡'
    handlerArea.areaLabel.text = '面积:' + area;
});

效果视频:

量算

官网量算示例地址:http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#measureHandler

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值