使用EvoMap/Three.js模拟无人机灯光秀

一、创建地图对象

首先我们需要创建一个EM.Map对象,该对象代表了一个地图实例,并设置id为"map"的文档元素作为地图的容器。

javascript 复制代码
    let map = new EM.Map("map",{
        zoom:22.14,
        center:[8.02528, -29.27638, 0],
        pitch:71.507,
        roll:2.01,
        maxPitch:90,
        skyImages:[ '../public/imgs/night/posx.jpg', '../public/imgs/night/negx.jpg', '../public/imgs/night/posy.jpg',
            '../public/imgs/night/negy.jpg','../public/imgs/night/negz.jpg','../public/imgs/night/posz.jpg'
        ]
    })
    map.setLightIntensity(0.1);

在地图的构造参数中,可以使用一系列选项来配置地图的初始状态。其中包括:

  • zoom:设置地图的缩放级别为22.14,这决定了地图的显示比例尺。
  • center:设置地图的中心点坐标为[8.02528, -29.27638, 0],这是一个三维坐标值,表示地图的中心点位置。
  • pitch:设置地图的俯视角度为71.507度,表示地图在垂直方向上的倾斜角度。
  • roll:设置地图的方位角,表示地图围绕Y轴正方向的旋转角度。
  • maxPitch:设置地图的最大俯视角度为90度,限制了地图在垂直方向上的最大倾斜程度。
  • skyImages:设置地图的天空图片,使用了一组图片路径来指定天空的上、下、前、后、左、右六个方向的图片。

接下来的代码调用了 map.setLightIntensity(0.1) 方法,用于设置地图的光照强度设置为默认值的0.1,以降低地图中的光照效果。

二、加载场景

EM.model.Model 是一个用于加载和渲染 3D 模型的类,可以通过传入 URL 参数来加载不同的模型文件,并通过设置坐标、旋转和缩放等参数来放置到地图上。在代码中,我们使用 EM.model.Model 加载了 pudong 模型,并将其添加到了地图上,用于展示具体的建筑物。

javascript 复制代码
    let pudong = new EM.model.Model({
        url:"../public/model/shanghai/pudong.gltf",
        coordinate:[0,0,3.7],
        rotate:[90,35,0],
        scale:[10,10,10]
    })
    map.addModel(pudong);

    pudong.on("loaded",function(){
        let loadingBar = document.getElementsByClassName("loadingBar")[0];
        loadingBar.parentNode.removeChild(loadingBar);
    });

EM.mesh.Water 是一个用于创建水面效果的类,可以通过指定位置、宽度和高度等参数来创建一个水面,具有类似于真实水面的波动效果。在这里,我们创建了一个 EM.mesh.Water 对象,并设置其位置和大小,以在地图上显示出水面的效果。

javascript 复制代码
    let water = new EM.mesh.Water({
        position:[0,0,0],
        width:100,
        height:100
    })
    map.addMesh(water);

EM.effect.Bloom 是一个用于创建全屏泛光特效的类。该特效可以通过设置不同的参数,来控制高光的强度、半径和阈值等属性,从而创建出逼真的光影效果。在这里,我们创建了一个 EM.effect.Bloom 对象,并将其添加到地图中,以提升整个场景的视觉效果。

javascript 复制代码
    let bloom = new EM.effect.Bloom({
        strength:1.5,
        radius:1.2,
        threshold:0.1
    });
    map.addEffect(bloom);

三、加载无人机灯光秀模拟数据

3.1.准备数据

我们需要提前需要提前编排无人机轨迹和颜色数据,让无人机按照既定的轨迹和亮度运行,以下是一条模拟数据。

javascript 复制代码
{
"speed":0.5,
"color":["#f00", "#33f"],
"coordinates":[
  [2.6268,-30.9000,3.6048],
  [0.6030,-30.9000,3.1729]
]
}

这是一组具有速度、颜色和坐标的无人机灯光秀模拟数据,上图的示例数据表示该无人机点位以0.5m/s的速度,位置由[2.6268,-30.9000,3.6048]变化到[0.6030,-30.9000,3.1729],颜色由"#f00"变化到"#33f"。

3.2 添加数据到地图

数据准备完成后,我们可以使用 EM.marker.DynamicPoints类将数据添加到地图中。EM.marker.DynamicPoints 是一个表示动态点图层的类。使用这个类可以快速创建一个具有动态效果的点图层,可用于展示飞机轨迹、交通流量等动态信息。

javascript 复制代码
let points = new EM.marker.DynamicPoints({
                datas:datas,
                globalTimeInterval:true,
                loop:false,
                pointSize:10,
                blending:"additive"
            });
            map.addObject(points);

以下是EM.marker.DynamicPoints每个参数的作用:

a. datas:数据源,用于对接3.1步骤中准备 的数据。

b. globalTimeInterval:全局时间间隔,用于指定动态点的更新速率。如果设置为 true,则所有动态点将以相同的速率更新;否则可以设置每个点的更新速率。

c. loop:循环播放,用于指定动态点是否循环播放。

d. pointSize:点的大小,用于指定每个动态点的大小。

e. blending:混合模式,用于指定动态点的颜色混合模式,可以是 additive(加法混合)或 normal(正常混合)。

四、在线预览

在线预览地址http://111.231.31.134/evomap/demo/cases/uavShow.html

相关推荐
alikami1 小时前
【若依】用 post 请求传 json 格式的数据下载文件
前端·javascript·json
B站计算机毕业设计超人1 小时前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化
wakangda1 小时前
React Native 集成原生Android功能
javascript·react native·react.js
吃杠碰小鸡1 小时前
lodash常用函数
前端·javascript
emoji1111112 小时前
前端对页面数据进行缓存
开发语言·前端·javascript
一个处女座的程序猿O(∩_∩)O2 小时前
vue3 如何使用 mounted
前端·javascript·vue.js
User_undefined2 小时前
uniapp Native.js原生arr插件服务发送广播到uniapp页面中
android·javascript·uni-app
麦兜*2 小时前
轮播图带详情插件、uniApp插件
前端·javascript·uni-app·vue
陈大爷(有低保)2 小时前
uniapp小案例---趣味打字坤
前端·javascript·vue.js
博客zhu虎康2 小时前
ElementUI 的 form 表单校验
前端·javascript·elementui