cesium通视分析

//模型数据加载位置
    var modelposition = Cesium.Cartesian3.fromDegrees(obj.position[0], obj.position[1], obj.position[2]);
    var heading = Cesium.Math.toRadians(obj.heading);
    var pitch = Cesium.Math.toRadians(obj.pitch);
    var roll = Cesium.Math.toRadians(obj.roll);
    var hpRoll = new Cesium.HeadingPitchRoll(heading, pitch, roll);
    var converter = Cesium.Transforms.eastNorthUpToFixedFrame;
    var modelMatrix = Cesium.Transforms.headingPitchRollToFixedFrame(modelposition, hpRoll, Cesium.Ellipsoid.WGS84, converter);
    tsdyt_model = viewer.scene.primitives.add(
        new Cesium.Cesium3DTileset({
            url: "http://earthsdk.com/v/last/Apps/assets/dayanta/tileset.json",
        })
    );
    tsdyt_model.readyPromise.then(function (tsdyt_model) {
        //请求模型后执行
        tsdyt_model._root.transform = modelMatrix; //模型位置
    }).otherwise(function (error) {
        throw error
    })
    viewer.zoomTo(tsdyt_model)

    var CesiumEventHandler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
    var positions = [];
    var markers = [];//点实体
    CesiumEventHandler.setInputAction(function (movement) {
        var cartesian = viewer.scene.pickPosition(movement.position);
        if (cartesian) {
            positions.push(cartesian);//加点
            if (markers.length == 0) {
                //创建点实体
                var startpoint = viewer.entities.add({
                    position: cartesian,
                    billboard: {
                        image: obj.startpointStyle.image,
                        heightReference: Cesium.HeightReference.NONE
                    },
                    label: {
                        text: obj.startpointStyle.text,
                        fillColor: Cesium.Color.YELLOW,
                        pixelOffset: {
                            x: obj.startpointStyle.pixelOffsetX,
                            y: obj.startpointStyle.pixelOffsetY
                        },
                        scale: obj.startpointStyle.scale
                    }
                });
                markers.push(startpoint);
            }
            else if (markers.length == 1) {
                var endpoint = viewer.entities.add({
                    position: cartesian,
                    billboard: {
                        image: obj.endpointStyle.image,
                        heightReference: Cesium.HeightReference.NONE
                    },
                    label: {
                        text: obj.endpointStyle.text,
                        fillColor: Cesium.Color.YELLOW,
                        pixelOffset: {
                            x: obj.endpointStyle.pixelOffsetX,
                            y: obj.endpointStyle.pixelOffsetY
                        },
                        scale: obj.endpointStyle.scale
                    }
                });
                markers.push(endpoint);
                CesiumEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)//移除左键事件
                analysisVisible(positions);//开始分析
            }
        }
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);


// * 进行通视分析
    function analysisVisible(positions) {
        // 计算射线的方向
        let direction = Cesium.Cartesian3.normalize(
            Cesium.Cartesian3.subtract(
                positions[1],
                positions[0],
                new Cesium.Cartesian3()
            ),
            new Cesium.Cartesian3()
        );
        // 建立射线
        let ray = new Cesium.Ray(positions[0], direction);
        // 计算交互点,返回第一个
        let result = viewer.scene.pickFromRay(ray);
        // console.log(result)
        if (Cesium.defined(result) && Cesium.defined(result.object)) {
            drawLine(result.position, positions[0], Cesium.Color.GREEN); // 可视区域 
            drawLine(result.position, positions[1], Cesium.Color.RED); // 不可视区域
        }
        else {
            drawLine(positions[0], positions[1], Cesium.Color.GREEN);
            console.log("不在模型上")
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值