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


    一、创建地图对象

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

    1. let map = new EM.Map("map",{
    2. zoom:22.14,
    3. center:[8.02528, -29.27638, 0],
    4. pitch:71.507,
    5. roll:2.01,
    6. maxPitch:90,
    7. skyImages:[ '../public/imgs/night/posx.jpg', '../public/imgs/night/negx.jpg', '../public/imgs/night/posy.jpg',
    8. '../public/imgs/night/negy.jpg','../public/imgs/night/negz.jpg','../public/imgs/night/posz.jpg'
    9. ]
    10. })
    11. 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 模型,并将其添加到了地图上,用于展示具体的建筑物。

    1. let pudong = new EM.model.Model({
    2. url:"../public/model/shanghai/pudong.gltf",
    3. coordinate:[0,0,3.7],
    4. rotate:[90,35,0],
    5. scale:[10,10,10]
    6. })
    7. map.addModel(pudong);
    8. pudong.on("loaded",function(){
    9. let loadingBar = document.getElementsByClassName("loadingBar")[0];
    10. loadingBar.parentNode.removeChild(loadingBar);
    11. });

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

    1. let water = new EM.mesh.Water({
    2. position:[0,0,0],
    3. width:100,
    4. height:100
    5. })
    6. map.addMesh(water);

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

    1. let bloom = new EM.effect.Bloom({
    2. strength:1.5,
    3. radius:1.2,
    4. threshold:0.1
    5. });
    6. map.addEffect(bloom);

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

    3.1.准备数据

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

    1. {
    2. "speed":0.5,
    3. "color":["#f00", "#33f"],
    4. "coordinates":[
    5. [2.6268,-30.9000,3.6048],
    6. [0.6030,-30.9000,3.1729]
    7. ]
    8. }

    这是一组具有速度、颜色和坐标的无人机灯光秀模拟数据,上图的示例数据表示该无人机点位以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 是一个表示动态点图层的类。使用这个类可以快速创建一个具有动态效果的点图层,可用于展示飞机轨迹、交通流量等动态信息。

    1. let points = new EM.marker.DynamicPoints({
    2. datas:datas,
    3. globalTimeInterval:true,
    4. loop:false,
    5. pointSize:10,
    6. blending:"additive"
    7. });
    8. map.addObject(points);

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

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

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

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

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

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

    四、在线预览

    在线预览地址icon-default.png?t=N7T8http://111.231.31.134/evomap/demo/cases/uavShow.html

     

  • 相关阅读:
    基于PHP+MySQL音乐相册网站的设计与实现
    SparkSQL综合案例-省份维度的销售情况统计分析
    亚马逊关键词搜索API接口(item_search-按关键字搜索亚马逊商品接口),亚马逊API接口
    【Java 基础篇】Java Consumer 接口详解
    【云上探索实验室】快速入门AI 编程助手 Amazon CodeWhisperer ——码上学堂领学员招募
    【Mysql】数据库的基本操作和表的增删改查
    No171.精选前端面试题,享受每天的挑战和学习
    webpack:详解CopyWebpackPlugin,复制的同时修改文件内容
    嵌入式笔试面试刷题(day11)
    iceberg常见bug
  • 原文地址:https://blog.csdn.net/u014529917/article/details/134279734