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);
});