Supermap/Cesium 开发心得----飞天动线的实现

在实际开发中,我遇到这样的问题,只给了两地点的坐标,要求会出从A地到B地的在天上飞的那种动态线

本质上动线的效果就是构造实体Entity中的polyline来实现,设置好材质,颜色和运动频率

具体实现:

1、先构造点,假设已知起点和终点的Cartesian3坐标

    function generateCurve(startPoint, endPoint){
        let addPointCartesian = new Cesium.Cartesian3();
        Cesium.Cartesian3.add(startPoint, endPoint, addPointCartesian);
        let midPointCartesian = new Cesium.Cartesian3();
        Cesium.Cartesian3.divideByScalar(addPointCartesian, 2, midPointCartesian);
        let midPointCartographic = Cesium.Cartographic.fromCartesian(midPointCartesian);
                    //除以的这个数越小 开始的位置聚集的位置就越陡,越大 开始的位置线就越平缓,
        midPointCartographic.height = Cesium.Cartesian3.distance(startPoint, endPoint) / 10;
        let midPoint = new Cesium.Cartesian3();
        Cesium.Ellipsoid.WGS84.cartographicToCartesian(midPointCartographic, midPoint);
        let spline = new Cesium.CatmullRomSpline({
            times: [0.0, 0.5, 1.0],
            points: [startPoint, midPoint, endPoint]
        });
        let curvePointsArr = [];
        for(let i = 0, len = 300; i < len; i++){
            curvePointsArr.push(spline.evaluate(i / len));
        }
        return curvePointsArr;
    }

效果展示

  除以的数值大                                                                                                                    

                   

除以的数值小 

    

 

 

2、构造polyline型的Entity

let curLinePointsArr = generateCurve(startPt, endPt);
//构造实体动线的配置
viewer.entities.add({
    description: "飞天动态轨迹线",
    show: true,
    polyline: {
        width: 3,
        positions: curLinePointsArr,
        material: new Cesium.PolylineTrailMaterialProperty({ // 尾迹线材质
            //指定线型的填充颜色,替换为白色。
            color: new Cesium.Color.fromCssColorString("rgba(70,130,180, 1.0)"),
            //指定轮廓线的颜色,可选的黑色。
            outlineColor: new Cesium.Color(70 / 255, 130 / 255, 180 / 255, 0.3),
            //设置尾迹线的长度在整条线中占的比例,替换数值0.3
            trailLength: 0.8,
            //数值属性,设置尾迹线从起点到终点的运行周期,单位是秒,每次转换1000.0。
            period: 3  
        }),
    }
});

最终效果

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值