cesium用鼠标绘制点、线

5 篇文章 3 订阅
4 篇文章 0 订阅

1、如图所示

在这里插入图片描述

2、封装代码

        //绘制
        drawPointLine() {
            this.isDrawPointLine = !this.isDrawPointLine;//用于判断是否绘制
            let that = this;
            let handler = new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas);
            handler.setInputAction((e) => {
                //停止绘制
                if(this.isDrawPointLine == false){
                    handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);//移除事件放在这里才会起效果
                    return;
                }
                //笛卡尔坐标转换经纬度
                let ray = that.viewer.camera.getPickRay(e.position);
                let position = that.viewer.scene.globe.pick(ray, that.viewer.scene);
                let cartographic = Cesium.Cartographic.fromCartesian(position);
                let lon = Cesium.Math.toDegrees(cartographic.longitude);
                let lat = Cesium.Math.toDegrees(cartographic.latitude);
                console.log(lon,lat)
                //创建点
                let pointPrimitives = null;
                pointPrimitives = that.viewer.scene.primitives.add(new Cesium.PointPrimitiveCollection());
                pointPrimitives.add({
                    pixelSize: 10,
                    color: Cesium.Color['RED'],
                    position: Cesium.Cartesian3.fromDegrees(lon, lat),
                });
                //创建线
                that.drawPointLonLats.push(lon);
                that.drawPointLonLats.push(lat);
                that.viewer.entities.add({
                    name: 'line',
                    polyline: {
                        positions: Cesium.Cartesian3.fromDegreesArray(that.drawPointLonLats),
                        width: 2,
                        material: Cesium.Color.YELLOW,
                        clampToGround: true
                    }
                })
            }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
        },
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,作为AI语言模型,我不能提供代码。但我可以给你一些思路和建议。要在cesium中使用鼠标动态绘制线,你需要以下步骤: 1. 监听鼠标点击事件,获取鼠标在地球上的位置。 2. 将鼠标点击的位置转换成笛卡尔坐标系。 3. 将笛卡尔坐标系转换成经纬度坐标系。 4. 将经纬度坐标系转换成cesium中的Cartesian3坐标系。 5. 将Cartesian3坐标系坐标添加到cesium的Entity对象中,以便可以动态绘制线。 6. 使用cesium的PolylineGraphics对象设置曲线的样式、颜色等属性。 以下是一个示例代码片段,仅供参考: ```javascript var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas); var linePositions = []; handler.setInputAction(function (click) { // 获取鼠标点击位置的笛卡尔坐标系 var cartesian = viewer.camera.pickEllipsoid(click.position, viewer.scene.globe.ellipsoid); if (cartesian) { // 将笛卡尔坐标系转换成经纬度坐标系 var cartographic = Cesium.Cartographic.fromCartesian(cartesian); // 将经纬度坐标系转换成cesium的Cartesian3坐标系 var position = Cesium.Cartesian3.fromDegrees(cartographic.longitude, cartographic.latitude, cartographic.height); linePositions.push(position); } }, Cesium.ScreenSpaceEventType.LEFT_CLICK); var entity = viewer.entities.add({ polyline: { positions: linePositions, width: 5, material: Cesium.Color.RED } }); ``` 这段代码监听了鼠标左键点击事件,获取鼠标点击位置的坐标系,并将其添加到linePositions数组中。然后使用这个数组创建了一个PolylineGraphics对象,设置了线条的颜色和宽度,并将其添加到了cesium的Entity对象中,以便可以动态绘制线

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值