cesium 模拟连线通信

var pointsInfo =
      {
        "s_id": "40905",
        "start": 1604937600000,
        "end": 1604938600000,
        "start_for_timeline": 1604937600000,
        "end_for_timeline": 1604938600000,
        "on_circle_milliseconds": 1000,
        "sat_locations_array": [{
          "a": 16.644356,
          "b": 16.906161,
          "c": 0
          //"c": 531947
        }, {
          "a": 5.961894,
          "b": 54.23244,
          "c": 0
          //"c": 540576
        }, {
          "a": -95.029766,
          "b": 82.126711,
          "c": 0
          //"c": 543170
        }]
      };


    var viewer = new Cesium.Viewer("cesiumContainer", {

      imageryProvider : new Cesium.UrlTemplateImageryProvider({
        url: "https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}",
      })
    });
   
    //去掉版权信息
    viewer._cesiumWidget._creditContainer.style.display = "none";

    var entity_sat = viewer.entities.add({
        // 将实体availability设置为与模拟时间相同的时间间隔。
        id:'111',
        position: Cesium.Cartesian3.fromDegrees(16.644356,16.906161,531947),//计算实体位置属性
        //基于位置移动自动计算方向.
        //orientation: new Cesium.VelocityOrientationProperty(entity1p),
        //加载飞机模型
         model: {
            //uri: 'weixin.gltf',
            uri: '/car/25car2.gltf',

            minimumPixelSize: 30
        },
        //路径
        path: {
            resolution: 1,
            material: new Cesium.PolylineGlowMaterialProperty({
                glowPower: 0.1,
                color: Cesium.Color.PINK
            }),
            width: 5
        }
    });

    var s_id = pointsInfo.s_id;
    var situation_time_start = pointsInfo.start;
    var situation_time_end = pointsInfo.end;

    // 下边两个时间用于控制时间轴日期显示
    var situation_time_start_for_timeline = pointsInfo.start_for_timeline;
    var situation_time_end_for_timeline = pointsInfo.end_for_timeline;

    // 卫星原始位置、卫星位置加上经度偏移
    var sat_locations_array = pointsInfo.sat_locations_array;

    var on_circle_milliseconds = pointsInfo.on_circle_milliseconds;

    // 起始时间(卫星可见)
    var start = Cesium.JulianDate.fromDate(new Date(situation_time_start));
    var stop = Cesium.JulianDate.fromDate(new Date(situation_time_end));

    entity_sat.time_orbit_start = start.clone();
    entity_sat.time_orbit_stop = stop.clone();

    // 起始时间(时间轴)
    var start_for_timeline = Cesium.JulianDate.fromDate(new Date(situation_time_start_for_timeline));
    var stop_for_timeline = Cesium.JulianDate.fromDate(new Date(situation_time_end_for_timeline));

    // 设置始时钟始时间
    viewer.clock.startTime = start_for_timeline.clone();

    // 设置始终停止时间
    viewer.clock.stopTime = stop_for_timeline.clone();

    // 时间轴
    viewer.timeline.zoomTo(start_for_timeline, stop_for_timeline);

    // 循环执行,到达终止时间,重新从起点时间开始
    viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP;
    // 计算:卫星、波束覆盖锥形 各个时间点的位置数组
    //var samples = get_position_samples_for_beam(sat_locations_array, time_split_min, start);

    var sat_position_sample = new Cesium.SampledPositionProperty(1);

    var time_split_min = 10;

    //循环:后台计算出来的位置数组
    for (var i = 0; i < sat_locations_array.length; i++) {
      //添加:按分钟增加时间(注意:要和后台的时间点位置 时间维度一样!!)
      var time = Cesium.JulianDate.addMinutes(start, i * time_split_min, new Cesium.JulianDate());

      //获得:该时间点的卫星位置(经纬高)
      var sat_location = sat_locations_array[i];

      var lon = sat_location.a;
      var lat = sat_location.b;
      var alt = sat_location.c;

      var sat_position = Cesium.Cartesian3.fromDegrees(lon, lat,alt);

      //该时间点的 星下点位置
      var sat_position_under_the_stars = Cesium.Cartesian3.fromDegrees(lon, lat, 0);

      var fixedToIcrf = Cesium.Transforms.computeFixedToIcrfMatrix(time);

      var sat_position_InInertial = new Cesium.Cartesian3();
      var sat_position_InInertial_under_the_stars = new Cesium.Cartesian3();
      if (Cesium.defined(fixedToIcrf)) {
        sat_position_InInertial = Cesium.Matrix3.multiplyByVector(fixedToIcrf, sat_position, sat_position_InInertial);
        sat_position_InInertial_under_the_stars = Cesium.Matrix3.multiplyByVector(fixedToIcrf, sat_position_under_the_stars, sat_position_InInertial_under_the_stars);

      }else{
        sat_position_InInertial = sat_position;
        sat_position_InInertial_under_the_stars = sat_position_under_the_stars;
      }

      sat_position_sample.addSample(time, sat_position_InInertial);
    }

    //差值
    sat_position_sample.setInterpolationOptions({
      interpolationDegree: 5,
      interpolationAlgorithm: Cesium.LagrangePolynomialApproximation
    });

   // entity_sat.sat_position_sample = sat_position_sample;

    //设置:卫星位置
    entity_sat.position = sat_position_sample;
    //设置:根据所提供的位置计算模型的朝向
    entity_sat.orientation = new Cesium.VelocityOrientationProperty(sat_position_sample);

    //设置:该卫星的可见时间
    entity_sat.availability = new Cesium.TimeIntervalCollection([
      new Cesium.TimeInterval({
        start: start.clone(),
        stop: stop.clone()
      })
    ]);

    var flyPointsInfo =
            {
              "s_id": "40905",
              "start": 1604937600000,
              "end": 1604938600000,
              "start_for_timeline": 1604937600000,
              "end_for_timeline": 1604938600000,
              "on_circle_milliseconds": 1000,
              "sat_locations_array": [{
                "a": 40.644356,
                "b": 16.906161,
                "c": 10000
                //"c": 531947
              }, {
                "a": 28.961894,
                "b": 54.23244,
                "c": 10000
                //"c": 540576
              }, {
                "a": -70.029766,
                "b": 82.126711,
                "c": 10000
                //"c": 543170
              }]
            };

    // 起始时间(卫星可见)
    var start2 = Cesium.JulianDate.fromDate(new Date(flyPointsInfo.start));
    var stop2 = Cesium.JulianDate.fromDate(new Date(flyPointsInfo.end));

    var entity_feiji = viewer.entities.add({
      // 将实体availability设置为与模拟时间相同的时间间隔。
      id:'222',
      position: Cesium.Cartesian3.fromDegrees(17.644356,16.906161,10000),//计算实体位置属性
      //加载飞机模型
      model: {
        uri: '/car/25car2.gltf',

        minimumPixelSize: 30
      },
      //路径
      path: {
        resolution: 1,
        material: new Cesium.PolylineGlowMaterialProperty({
          glowPower: 0.1,
          color: Cesium.Color.PINK
        }),
        width: 5
      }
    });

    var feiji_position_sample = new Cesium.SampledPositionProperty(1);

    //循环:后台计算出来的位置数组
    for (var i = 0; i < flyPointsInfo.sat_locations_array.length; i++) {
      //添加:按分钟增加时间(注意:要和后台的时间点位置 时间维度一样!!)
      var time = Cesium.JulianDate.addMinutes(start2, i * 10, new Cesium.JulianDate());

      //获得:该时间点的卫星位置(经纬高)
      var sat_location = flyPointsInfo.sat_locations_array[i];

      var lon = sat_location.a;
      var lat = sat_location.b;
      var alt = sat_location.c;

      var sat_position = Cesium.Cartesian3.fromDegrees(lon, lat,alt);

      //该时间点的 星下点位置
      var sat_position_under_the_stars = Cesium.Cartesian3.fromDegrees(lon, lat, 0);

      var fixedToIcrf = Cesium.Transforms.computeFixedToIcrfMatrix(time);

      var sat_position_InInertial = new Cesium.Cartesian3();
      var sat_position_InInertial_under_the_stars = new Cesium.Cartesian3();
      if (Cesium.defined(fixedToIcrf)) {
        sat_position_InInertial = Cesium.Matrix3.multiplyByVector(fixedToIcrf, sat_position, sat_position_InInertial);
        sat_position_InInertial_under_the_stars = Cesium.Matrix3.multiplyByVector(fixedToIcrf, sat_position_under_the_stars, sat_position_InInertial_under_the_stars);

      }else{
        sat_position_InInertial = sat_position;
        sat_position_InInertial_under_the_stars = sat_position_under_the_stars;
      }

      feiji_position_sample.addSample(time, sat_position_InInertial);
    }

    //差值
    feiji_position_sample.setInterpolationOptions({
      interpolationDegree: 5,
      interpolationAlgorithm: Cesium.LagrangePolynomialApproximation
    });

    // entity_sat.sat_position_sample = sat_position_sample;

    //设置:卫星位置
    entity_feiji.position = feiji_position_sample;
    //设置:根据所提供的位置计算模型的朝向
    entity_feiji.orientation = new Cesium.VelocityOrientationProperty(feiji_position_sample);

    //设置:该卫星的可见时间
    entity_feiji.availability = new Cesium.TimeIntervalCollection([
      new Cesium.TimeInterval({
        start: start2.clone(),
        stop: stop2.clone()
      })
    ]);


    viewer.clock.shouldAnimate = true;
    viewer.clock.multiplier = 20;

    var xian = viewer.entities.add({
      // 将实体availability设置为与模拟时间相同的时间间隔。
      //id:'33311111',
      show:true,
      polyline: {
        show:true,
        //positions:new PositionPropertyArray([]),
        positions: new Cesium.CallbackProperty(function (time, result) {

          var car_position = Cesium.ReferenceProperty.fromString(viewer.entities, "111#position");

          var feiji_position = Cesium.ReferenceProperty.fromString(viewer.entities, "222#position");


          // var car_position = Cesium.ReferenceProperty.fromString(viewer.entities, "111#position");
          // console.log(car_position);
          //
          // var car = viewer.entities.getById('111');
          //
          // var feiji = viewer.entities.getById('222');
          //
          // var car_position =  car.position.value;
          // if(car_position == undefined){
          //   car_position = car.position.getValue(viewer.clock.currentTime,new Cesium.Cartesian3());
          // }
          //
          // //console.log(car_position);
          //
          // var car_cartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(car_position);
          // //获得:当前 经度、纬度
          // var car_lat = Cesium.Math.toDegrees(car_cartographic.latitude);
          // var car_lon = Cesium.Math.toDegrees(car_cartographic.longitude);
          // var car_height = car_cartographic.height;
          //
          // car_position = Cesium.Cartesian3.fromDegrees(car_lat, car_lon, 0);
          //
          //
          // var feiji_position =  feiji.position.value;
          //
          // if(feiji_position == undefined){
          //   feiji_position = feiji.position.getValue(viewer.clock.currentTime,new Cesium.Cartesian3());
          // }
          //
          // var feiji_cartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(feiji_position);
          // //获得:当前 经度、纬度
          // var feiji_lat = Cesium.Math.toDegrees(feiji_cartographic.latitude);
          // var feiji_lon = Cesium.Math.toDegrees(feiji_cartographic.longitude);
          // var feiji_height = feiji_cartographic.height;
          //
          // feiji_position = Cesium.Cartesian3.fromDegrees(feiji_lat, feiji_lon, 0);

          var properties = new Array();

          properties.push(car_position);
          properties.push(feiji_position);

          var polyline_positions_array = new Cesium.PositionPropertyArray(properties);

          return polyline_positions_array;
        }, false),
        arcType:"NONE",
        width: 1,
        material: Cesium.Color.RED
      }
    });

   viewer.scene.postRender.addEventListener(function (){
     var car_position = Cesium.ReferenceProperty.fromString(viewer.entities, "111#position");

     var feiji_position = Cesium.ReferenceProperty.fromString(viewer.entities, "222#position");

     var properties = new Array();

     properties.push(car_position);
     properties.push(feiji_position);

     var polyline_positions_array = new Cesium.PositionPropertyArray(properties);

     //==================================


       var car = viewer.entities.getById('111');

      var feiji = viewer.entities.getById('222');

      var car_position =  car.position.value;
      if(car_position == undefined){
        car_position = car.position.getValue(viewer.clock.currentTime,new Cesium.Cartesian3());
      }

      var car_cartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(car_position);
      //获得:当前 经度、纬度
      var car_lat = Cesium.Math.toDegrees(car_cartographic.latitude);
      var car_lon = Cesium.Math.toDegrees(car_cartographic.longitude);
      var car_height = car_cartographic.height;

      car_position = Cesium.Cartesian3.fromDegrees(car_lat, car_lon, car_height);

      var feiji_position =  feiji.position.value;

      if(feiji_position == undefined){
        feiji_position = feiji.position.getValue(viewer.clock.currentTime,new Cesium.Cartesian3());
      }

      var feiji_cartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(feiji_position);
      //获得:当前 经度、纬度
      var feiji_lat = Cesium.Math.toDegrees(feiji_cartographic.latitude);
      var feiji_lon = Cesium.Math.toDegrees(feiji_cartographic.longitude);
      var feiji_height = feiji_cartographic.height;

      feiji_position = Cesium.Cartesian3.fromDegrees(feiji_lat, feiji_lon, feiji_height);

     var sats_distance = Cesium.Cartesian3.distance(car_position, feiji_position) / 1000;

     if(sats_distance < 2600){
       xian.polyline.positions = polyline_positions_array;
     }else{
       xian.polyline.positions = null;
     }

     console.log(sats_distance);




    });

 

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值