直接上代码

  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
viewer.timeline.zoomTo(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 = Cesium.Property.getValueOrUndefined(entity.position, time, entityPosition);
if (!Cesium.defined(position)) {
return undefined;
}
var orientation = Cesium.Property.getValueOrUndefined(entity.orientation, 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 hpr = new Cesium.HeadingPitchRoll();
var trs = new Cesium.TranslationRotationScale();
function computeEmitterModelMatrix() {
hpr = Cesium.HeadingPitchRoll.fromDegrees(viewModel.heading, viewModel.pitch, viewModel.roll, hpr); trs.translation = Cesium.Cartesian3.fromElements(viewModel.transX, viewModel.transY, viewModel.transZ, translation);
trs.rotation = Cesium.Quaternion.fromHeadingPitchRoll(hpr, rotation); 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 = Cesium.Math.toRadians(i);
var time = Cesium.JulianDate.addSeconds(start, i, new Cesium.JulianDate());//时间递增
var position = Cesium.Cartesian3.fromDegrees(lon + (radius * 1.5 * Math.cos(radians)), lat + (radius * Math.sin(radians)),
Cesium.Math.nextRandomNumber() * 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 = viewer.entities.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//颜色
})
}
}); viewer.trackedEntity = entity;
function getColor(colorName, alpha) {
var color = Cesium.Color[colorName.toUpperCase()];
return Cesium.Color.fromAlpha(color, parseFloat(alpha));
}
//根据geojson获取飞行路径
Cesium.loadJson('SampleData/flyline2.json').then(function (jsonData) {
var lineArray = jsonData.features[0].geometry.coordinates;
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;
entity.orientation = new Cesium.VelocityOrientationProperty(property);
}).otherwise(function (error) {
console.log(error);
});
//移动的原理:position参数包含时间和所处位置,根据当前时间得到位置
//entity.position = circularPosition;
//根据模型当前位置自动计算模型的旋转等参数
//entity.orientation = 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: viewModel.endScale, 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(), 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; Cesium.Cartesian3.normalize(position, gravityScratch);
Cesium.Cartesian3.multiplyByScalar(gravityScratch, viewModel.gravity * dt, gravityScratch); p.velocity = Cesium.Cartesian3.add(p.velocity, gravityScratch, p.velocity);
}
//根据目标模型计算粒子系统相关参数
viewer.scene.preRender.addEventListener(function (scene, time) {
particleSystem.modelMatrix = computeModelMatrix(entity, time);
// Account for any changes to the emitter model matrix.
particleSystem.emitterModelMatrix = computeEmitterModelMatrix(); });

利用geojson实现模型轨迹运动的更多相关文章

  1. R语言利用ROCR评测模型的预测能力

    R语言利用ROCR评测模型的预测能力 说明 受试者工作特征曲线(ROC),这是一种常用的二元分类系统性能展示图形,在曲线上分别标注了不同切点的真正率与假正率.我们通常会基于ROC曲线计算处于曲线下方的 ...

  2. 每天一点点之css - 动画-一个圆绕着另一个圆动(绕着轨迹运动)

    最近要开发一个类似星河的效果,需要小圆绕着一定的轨迹运动,这个时候我首先想到的是使用canvas来实现,在实现过程中发现这个实现起来不是很灵活,然后想到css3有动画也可以实现,下面是效果 注:图2是 ...

  3. Journal of Proteomics Research | 利用混合蛋白质组模型对MBR算法中错误转移鉴定率的评估

    题目:Evaluating False Transfer Rates from the Match-between-Runs Algorithm with a Two-Proteome Model 期 ...

  4. 小随笔:利用Shader实现模型爆炸和沙粒化的效果

    0x00 前言 上一篇小随笔<小随笔:利用Shader给斯坦福兔子长毛和实现雪地效果>中,我和大家聊了聊著名的斯坦福兔子和利用geometry shader实现的一些效果.这篇文章继续沿用 ...

  5. [转]JavaScript与元素间的抛物线轨迹运动

    在张鑫旭的博客看到这个抛物线的小动画,觉得很感兴趣,转载一下方便研究~ 原文地址:http://www.zhangxinxu.com/wordpress/?p=3855 在页面上添加元素的位移动画,除 ...

  6. NLP(十八)利用ALBERT提升模型预测速度的一次尝试

    前沿   在文章NLP(十七)利用tensorflow-serving部署kashgari模型中,笔者介绍了如何利用tensorflow-serving部署来部署深度模型模型,在那篇文章中,笔者利用k ...

  7. 利用Tensorboard可视化模型、数据和训练过程

    在60分钟闪电战中,我们像你展示了如何加载数据,通过为我们定义的nn.Module的子类的model提供数据,在训练集上训练模型,在测试集上测试模型.为了了解发生了什么,我们在模型训练时打印了一些统计 ...

  8. arcgis point 随着 line类型的轨迹运动的动画

    animate : function(frampoint,topoint,speed = 60){ var path = topoint.geometry.paths[0]; var i = 1; v ...

  9. unity3d控制模型的运动

    这里就不多做解释了,直接上代码,只为了备忘. public class HeroMove : MonoBehaviour { private float speed;//人物行动速度 private ...

随机推荐

  1. Memcahced 缓存过期时间问题

    转载:https://help.aliyun.com/knowledge_detail/38654.html 关于设置缓存数据的过期时间,可以参考以下Memcached官方说明: An expirat ...

  2. poj - 3585(二次扫描与换根法)

    周末牛客挂了个更难的,这个简单一些 #include<iostream> #include<cstring> #include<cstdio> #include&l ...

  3. ArrayList、LinkedList、Vector、CopyOnWriteArrayList的区别和源码分析

    1. ArrayList ArrayList 是一个数组队列,相当于动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List, RandomAccess, ...

  4. 软RAID和硬RAID的区别

    要实现RAID可以分为硬件实现和软件实现两种.所谓硬RAID就是指通过硬件实现,同理软件实现就作为软RAID.   硬RAID 就是用专门的RAID控制器将硬盘和电脑连接起来,RAID控制器负责将所有 ...

  5. 使用rapidjson把文本json数据解析到树状结构

    一个递归搞定 无聊的时候练练手就写了一个 头文件什么的我就不贴了 demo程序是MFC写的 void ParseObject(rapidjson::Value dc, CTreeCtrl * pTre ...

  6. vps批量管理,服务器批量管理,3389批量管理工具

    注册的第一天,把我的工具弄上来.如果有一个软件,如果你有vps虚拟机,服务器,3389中的任意一种两种或全部,而且还是批量的,需要管理.那么,你可能会想找个软件来管理吧,毕竟,一个人忙不过来管理这么多 ...

  7. 1061 判断题 (15 分)C语言

    判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分. 输入格式: 输入在第一行给出两个不超过 100 的正整数 N 和 M,分别是学生人数和判断题数量.第二行给出 M ...

  8. PHP计算每月几周,每周的开始结束日期

    PHP计算每月几周,每周的开始结束日期 因为项目中需要一个每周工作计算的功能,具体日期的算法是,把每月拆分成几个周,最后一个星期这个月份的天数不够就补上下个月的. 列如今天8月27星期一,这个月有31 ...

  9. 解决RabbitMQ远程不能访问的问题

    刚刚安装的RabbitMQ-Server-3.3.5,并且也已经开启了Web管理功能,但是现在存在一个问题: 出于安全的考虑,guest这个默认的用户只能通过http://localhost:1567 ...

  10. 开发一个简单的ip解析webservice接口,并用springmvc生成客户端调用

    1.创建webservice工程,这次先采用jax-ws框架,下次再尝试jax-rs(restful) 2.写个实现ip解析的类,接收传入的ip,并返回解析信息 3.Myeclipse——>Ne ...