前言:在WebGL中有一个名为量算的示例,主要功能是用于测量距离,面积和高度。但是在测量的时候难免会出现描点错误的情况,这个时候就需要一个撤销的操作,但是示例是没有的,参考下文即可实现撤销操作。
这个操作主要分为两步操作:
- 在撤销的时候删除之前MeasureHandler创建的最后一个点实体(示例中黄色的点),代码如下:
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();
主要代码,以量算面积为例:
//初始化测量面积
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