利用geojson实现模型轨迹运动

阅读: 评论:0

利⽤geojson实现模型轨迹运动
直接上代码
var viewer = new Cesium.Viewer('cesiumContainer');
//Set the random number seed for consistent results.
小型塑料封口机Cesium.Math.setRandomNumberSeed(3);
//Set bounds of our simulation time
var start = Cesium.JulianDate.fromDate(new Date(2017, 2, 25, 16));
var stop = Cesium.JulianDate.addSeconds(start, 3600, new Cesium.JulianDate());
//Make sure viewer is at the desired time.
viewer.clock.startTime = start.clone();
viewer.clock.stopTime = stop.clone();
viewer.clock.currentTime = start.clone();
viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP; //在时间结束后再次从开始重复
viewer.clock.multiplier = 1;//时间流速
//Set timeline to simulation bounds
To(start, stop);//底部时间条控件调整
var viewModel = {
rate: 5.0,
gravity: 0.0,
minimumLife: 1.0,
破窗锤maximumLife: 1.0,
minimumSpeed: 5.0,
maximumSpeed: 5.0,
startScale: 1.0,
endScale: 4.0,
particleSize: 20.0,
transX: 2.5,
transY: 4.0,
transZ: 1.0,
防盗井盖heading: 0.0,
pitch: 0.0,
roll: 0.0,
fly: false,
spin: false,
show: true
};
var entityPosition = new Cesium.Cartesian3();
var entityOrientation = new Cesium.Quaternion();
var rotationMatrix = new Cesium.Matrix3();
var modelMatrix = new Cesium.Matrix4();
function computeModelMatrix(entity, time) {
var position = ValueOrUndefined(entity.position, time, entityPosition);
if (!Cesium.defined(position)) {
return undefined;
}
聚氨酯生产工艺var orientation = ientation, time, entityOrientation);
if (!Cesium.defined(orientation)) {
modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(position, undefined, modelMatrix);
} else {
modelMatrix = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromQuaternion(orientation, rotationMatrix), position, modelMatrix);          }
return modelMatrix;
}
var emitterModelMatrix = new Cesium.Matrix4();
var translation = new Cesium.Cartesian3();
var rotation = new Cesium.Quaternion();
var rotation = new Cesium.Quaternion();
var hpr = new Cesium.HeadingPitchRoll();
var trs = new Cesium.TranslationRotationScale();
function computeEmitterModelMatrix() {
hpr = Cesium.HeadingPitchRoll.fromDegrees(viewModel.heading, viewModel.pitch, ll, hpr);
return Cesium.Matrix4.fromTranslationRotationScale(trs, emitterModelMatrix);
}
//计算运动轨迹函数:时间+位置
function computeCirclularFlight(lon, lat, radius) {
var property = new Cesium.SampledPositionProperty();
for (var i = 0; i <= 360; i += 45) {
var radians = Radians(i);
var time = Cesium.JulianDate.addSeconds(start, i, new Cesium.JulianDate());//时间递增
var position = Cesium.Cartesian3.fromDegrees(lon + (radius * 1.5 * s(radians)), lat + (radius * Math.sin(radians)),                  RandomNumber() * 500 + 1750);//位置变化
property.addSample(time, position);
}
return property;
}
//计算模型随时间变化的位置
//var circularPosition = computeCirclularFlight(-112.110693, 36.0994841, 0.03);
var staticPosition = Cesium.Cartesian3.fromDegrees(-112.110693, 36.0994841, 1000);//静⽌的位置
var entity = ities.add({
//Set the entity availability to the same interval as the simulation time.
availability: new Cesium.TimeIntervalCollection([new Cesium.TimeInterval({
start: start,
stop: stop
})]),
//Load the Cesium plane model to represent the entity
model: {
//uri: '../Apps/SampleData/models/CesiumAir/Cesium_Air.gltf',
uri: '../Apps/SampleData/plane.gltf',
color: getColor('red', 1),
minimumPixelSize: 54,//控制模型最⼩
maximumScale:5//控制模型最⼤
},
position: staticPosition,
//实时轨迹显⽰
path: {
show: true,
leadTime: 0,//飞机将要经过的路径,路径存在的时间
trailTime: 60,//飞机已经经过的路径,路径存在的时间
width: 1,//线宽度
resolution: 1,
material: new Cesium.PolylineGlowMaterialProperty({
glowPower: 0.3,//应该是轨迹线的发光强度
color: Cesium.Color.PALEGOLDENROD//颜⾊
})
}
});
function getColor(colorName, alpha) {
var color = Cesium.UpperCase()];
return Cesium.Color.fromAlpha(color, parseFloat(alpha));
return Cesium.Color.fromAlpha(color, parseFloat(alpha));
}
//根据geojson获取飞⾏路径
Cesium.loadJson('SampleData/flyline2.json').then(function (jsonData) {
var lineArray = jsonData.features[0].dinates;
空气净化加湿器var property = new Cesium.SampledPositionProperty();
for (var i = 0;  i< lineArray.length; i ++) {
var lon = lineArray[i][0];
var lat = lineArray[i][1];
var dtime = 100*i;
var time = Cesium.JulianDate.addSeconds(start, dtime, new Cesium.JulianDate());//时间递增var position = Cesium.Cartesian3.fromDegrees(lon, lat,11750);//位置变化
property.addSample(time, position);
}
entity.position = property;
}).otherwise(function (error) {
console.log(error);
});
//移动的原理:position参数包含时间和所处位置,根据当前时间得到位置
//entity.position = circularPosition;
//根据模型当前位置⾃动计算模型的旋转等参数
//ientation = new Cesium.VelocityOrientationProperty(circularPosition);
/*************************
粒⼦系统实现
**************************/
var scene = viewer.scene;
//粒⼦系统初始化-实际是使⽤图⽚,改变图⽚的显⽰样式实现仿粒⼦化。
//图⽚可以利⽤canvas代替,在canvas中可以绘制⾃定义图形
var particleSystem = scene.primitives.add(new Cesium.ParticleSystem({
image: '../Apps/SampleData/fire.png',
startColor: Cesium.Color.RED.withAlpha(0.7),
endColor: Cesium.Color.YELLOW.withAlpha(0.3),
startScale: viewModel.startScale,
endScale: dScale,
minimumLife: viewModel.minimumLife,
maximumLife: viewModel.maximumLife,
minimumSpeed: viewModel.minimumSpeed,
maximumSpeed: viewModel.maximumSpeed,
minimumWidth: viewModel.particleSize,
minimumHeight: viewModel.particleSize,
maximumWidth: viewModel.particleSize,
恶霉灵原药maximumHeight: viewModel.particleSize,
// Particles per second.
rate: viewModel.rate,
bursts: [
new Cesium.ParticleBurst({ time: 5.0, minimum: 300, maximum: 500 }),
new Cesium.ParticleBurst({ time: 10.0, minimum: 50, maximum: 100 }),
new Cesium.ParticleBurst({ time: 15.0, minimum: 200, maximum: 300 })
],
lifeTime: 16.0,
emitter: new Cesium.CircleEmitter(0.5),
emitterModelMatrix: computeEmitterModelMatrix(),
emitterModelMatrix: computeEmitterModelMatrix(),
forces: [applyGravity]
}));
particleSystem.show = false;//不显⽰粒⼦系统
//粒⼦系统重⼒
var gravityScratch = new Cesium.Cartesian3();
function applyGravity(p, dt) {
// We need to compute a local up vector for each particle in geocentric space.
var position = p.position;
alize(position, gravityScratch);
Cesium.Cartesian3.multiplyByScalar(gravityScratch, avity * dt, gravityScratch);
p.velocity = Cesium.Cartesian3.add(p.velocity, gravityScratch, p.velocity);
}
/
/根据⽬标模型计算粒⼦系统相关参数
viewer.scene.preRender.addEventListener(function (scene, time) {
// Account for any changes to the emitter model matrix.
});

本文发布于:2023-05-16 11:53:19,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/2/101563.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:时间   模型   位置   路径   计算   参数
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图