【Cesium】【vue】空间查询——量距(测量距离)、量面(测量面积)

这篇博客详细介绍了如何使用Cesium和Vue进行空间查询,包括量距和量面功能的实现,同时提到了可能出现的viewer未定义错误及解决方法,强调了调试和页面结构的重要性。
摘要由CSDN通过智能技术生成

一.量距

// 距离测量
    measureLineSpace() {
   
        this.removeMeasure();
        let _this = this;
        let viewer = this.viewer;
        // 取消双击事件-追踪该位置
        viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);

        this.distancehandler = new Cesium.ScreenSpaceEventHandler(viewer.scene._imageryLayerCollection);
        let positions = [];
        let poly = null;
        var distance = 0;
        var cartesian = null, floatingPointArray = [];

        this.distancehandler.setInputAction(function (movement) {
   
            let ray = viewer.camera.getPickRay(movement.endPosition);
            cartesian = viewer.scene.globe.pick(ray, viewer.scene);
            if (positions.length >= 2) {
   
                if (!Cesium.defined(poly)) {
   
                    poly = new PolyLinePrimitive(positions);
                } else {
   
                    positions.pop();
                    // cartesian.y += (1 + Math.random());
                    positions.push(cartesian);
                }
                distance = getSpaceDistance(positions);
            }
        }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);

        this.distancehandler.setInputAction(function (movement) {
   
            let ray = viewer.camera.getPickRay(movement.position);
            cartesian = viewer.scene.globe.pick(ray, viewer.scene);
            if (positions.length == 0) {
   
                positions.push(cartesian.clone());
            }
            positions.push(cartesian);
            //在三维场景中添加Label
            var textDisance = distance + "米";
            // console.log(textDisance + ",lng:" + cartographic.longitude/Math.PI*180.0);
            _this.floatingPoint = viewer.entities.add({
   
                name: '空间直线距离',
                position: positions[positions.length - 1],
                point: {
   
                    pixelSize: 4,
                    color: Cesium.Color.RED,
                    outlineColor: Cesium.Color.WHITE,
                    outlineWidth: 2,
                },
                label: {
   
                    text: textDisance,
                    font: '18px sans-serif',
                    fillColor: Cesium.Color.GOLD,
                    style: Cesium.LabelStyle.FILL_AND_OUTLINE,
                    outlineWidth: 2,
                    verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
                    pixelOffset: new Cesium.Cartesian2(20, -20),
                }
            });

            floatingPointArray.push(_this.floatingPoint);
            _this.distancepointArray = floatingPointArray;
        }, Cesium.ScreenSpaceEventType.LEFT_CLICK);

        this.distancehandler.setInputAction(function (movement) {
   
            _this.distancehandler.destroy(); //关闭事件句柄
            positions.pop(); //最后一个点无效

        }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);

        var PolyLinePrimitive = (function () {
   
            fu
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值