cesium通过点击事件绘制图形(点,线,面,圆,矩形)

本文详细介绍了如何利用CesiumJavaScript库响应鼠标点击事件,动态地在3D地球场景中绘制点、线、面、圆形以及矩形。通过实例代码展示各个图形的生成过程,为Cesium地图应用开发提供实用技巧。
摘要由CSDN通过智能技术生成
//未定义变量均为全局变量,如:MinShape,BigShape
// 触发事件
    Draw(){
       const _this = this;
       let handler = new Cesium.ScreenSpaceEventHandler(globalEarth.viewer.scene.canvas);
       let drawingMode = _this.drawType;
       let activeShapePoints = [];
       let activeShape;
       let floatingPoint;

       //双击鼠标左键清除默认事件
                        
globalEarth.viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
            //鼠标左键
            handler.setInputAction(function (event) {
                var earthPosition = globalEarth.viewer.scene.pickPosition(event.position);
                if (Cesium.defined(earthPosition)) {
                    if (activeShapePoints.length === 0) {
                        if(drawingMode != '点'){
                            floatingPoint = createPoint(earthPosition);
                        }
                        activeShapePoints.push(earthPosition);
                        var dynamicPositions = new Cesium.CallbackProperty(function () {
                            if (drawingMode == '面') {
                            return new Cesium.PolygonHierarchy(activeShapePoints);
                            }
                            return activeShapePoints;
                        }, false);
                        if(drawingMode == "点"){
                            activeShape = drawShape(dynamicPositions,earthPosition,true);//绘制动态图
                            terminateShape(false)
                        }else{
                            activeShape = drawShape(dynamicPositions,earthPosition,false);//绘制动态图
                        }
                    }else{
                        activeShapePoints.push(earthPosition);
                        createPoint(earthPosition);
                    }
                }
            }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
            //鼠标移动
            handler.setInputAction(function (event) {
                if (Cesium.defined(floatingPoint)) {
                    var newPos
Cesium中通过鼠标点击绘制矩形,可以按照以下步骤进行: 1. 创建一个矩形实体对象 ```javascript var rectangleEntity = viewer.entities.add({ rectangle : { coordinates : Cesium.Rectangle.fromDegrees(0.0, 0.0, 0.0, 0.0), material : Cesium.Color.RED.withAlpha(0.5) } }); ``` 2. 添加鼠标点击事件监听器 ```javascript var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas); handler.setInputAction(function(click) { // 获取点击位置的经纬度坐标 var position = viewer.camera.pickEllipsoid(click.position, viewer.scene.globe.ellipsoid); if (position) { // 设置矩形的起始位置 rectangleEntity.rectangle.coordinates = Cesium.Rectangle.fromDegrees(position.longitude, position.latitude, position.longitude, position.latitude); // 添加鼠标移动事件监听器 handler.setInputAction(function(movement) { // 获取鼠标移动后的经纬度坐标 var endPosition = viewer.camera.pickEllipsoid(movement.endPosition, viewer.scene.globe.ellipsoid); if (endPosition) { // 更新矩形的位置和大小 rectangleEntity.rectangle.coordinates = Cesium.Rectangle.fromDegrees(position.longitude, position.latitude, endPosition.longitude, endPosition.latitude); } }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); } }, Cesium.ScreenSpaceEventType.LEFT_CLICK); ``` 以上代码中,通过`viewer.camera.pickEllipsoid()`方法获取鼠标点击或移动后的经纬度坐标,然后更新矩形实体的位置和大小。其中,`Cesium.ScreenSpaceEventHandler()`方法用于创建一个屏幕空间事件处理器,可以监听鼠标点击和移动事件。`Cesium.ScreenSpaceEventType()`枚举类型用于指定事件类型,例如`LEFT_CLICK`表示鼠标左键点击事件,`MOUSE_MOVE`表示鼠标移动事件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值