首页 / 浏览问题 / 三维GIS / 问题详情
API中封装的new Cesium.EditHandler(viewer, editObject),这个支持对编辑的object对象监听吗?
2EXP 2024年08月06日

我在使用EditHandler来编辑一个自定义的矩形区域,但是进入编辑模式之后,默认是多边形的编辑状态,我想使用new Cesium.EditHandler文档中提到的 changedEvt : Event 成员来做编辑对象的监听,满足矩形编辑的逻辑,拖动对角点,其他点同步变化的状态。请问有好的方法吗?

if (!that.editHandler) {
            that.editHandler = new Cesium.EditHandler(that.myMap.viewer, entity);

            that.editHandler.changedEvt.addEventListener((updatedPositions) => {
                console.log('Entity updated:', entity);
                console.log('Updated positions:', updatedPositions);

                // 假设控制点顺序为:[leftTop, rightBottom, rightTop, leftBottom]
                if (updatedPositions.length >= 2) {
                    let leftTop = updatedPositions[0];
                    let rightBottom = updatedPositions[1];

                    // 计算新的矩形坐标
                    let rightTop = new Cesium.Cartesian3(rightBottom.x, leftTop.y, leftTop.z);
                    let leftBottom = new Cesium.Cartesian3(leftTop.x, rightBottom.y, leftTop.z);

                    // 更新实体的控制点
                    let newHierarchy = new Cesium.PolygonHierarchy([
                        leftTop, rightTop, rightBottom, leftBottom, leftTop
                    ]);
                    entity.polygon.hierarchy = newHierarchy;

                    console.log('Updated rectangle positions:', newHierarchy.positions);
                }
            })
            // 是否允许编辑高度
            that.editHandler.isEditZ = false;
            that.editHandler.activate();
        } 

1个回答

您好,上述代码能够实现您想要的效果吗?我这边需要测试下如何实现
1,450EXP 2024年08月06日
不行,这个changedEvt的监听事件,只有在移动点之后,鼠标松开那一刻,事件才会触发,但是我想要的是移动点过程中的事件监听。我在寻找更原生的cesium的处理方式了。
超图cesium没有封装类似圆形和矩形的绘制编辑吗?我在示例中没找到
...