通过创建GeoLine给地图添加烟花图效果

[复制链接]
6588|0
 楼主| 森友小锘 发表于 2021-7-29 15:27 | 显示全部楼层 |阅读模式
#申请开发板# #技术资源# #有奖活动# #申请原创# #每日话题#

ThingJS除了提供多种类型的模型外,还预置了多种粒子效果,包括:水、火、烟、雨、雪等,每种粒子效果按照不同的使用场景又有多种表现形式,可以满足在不同的天气条件下数字孪生可视化场景中的情况。那能不能在数字孪生可视化地图上添加效果呢?下面我就通过创建GeoLine(地理线)给数字孪生可视化地图添加烟花图效果。





几个关键点:

1. 烟花的火花颜色,大小,位置这三个变量。

2. 烟花飞出的方向:只向上。

3. 烟花的颜色:烟花也就是GeoLine(地理线)一共设置了三种颜色:黄、紫、蓝。

4. 线生长循环开启,烟花会在数字孪生可视化地图上循环出现。





代码如下:

  1. var app = new THING.App();
  2. // 设置app背景为黑色
  3. app.background = [0, 0, 0];

  4. var thingLayer = app.create({
  5. type: "ThingLayer",
  6. name: "thingLayer01"
  7. });

  8. // 引用地图组件脚本
  9. THING.Utils.dynamicLoad(["https://www.thingjs.com/uearth/uearth.min.js"], function () {
  10. app.create({
  11. type: "Map",
  12. url: 'https://www.thingjs.com/citybuilder_console/mapProject/config/TVRFek5ETTRDaXR5QnVpbGRlckAyMDE5',
  13. complete: function (event) {
  14. var building = app.query(/建筑/)[0].data.features;
  15. var points1 = app.query(/旅游/)[0].data.features;
  16. var points2 = app.query(/医疗服务/)[0].data.features;
  17. var points3 = app.query(/大型购物广场/)[0].data.features;
  18. var newPoints2 = points2.filter((i, index) => index % 10 == 0);

  19. createBuilding(building, 'building')
  20. createMeshLine(points1, "#FF9933FF");
  21. createMeshLine(newPoints2, "#FF00FFFF");
  22. createMeshLine(points3, "#00CCFFFF");
  23. }
  24. });
  25. });

  26. /**
  27. * 创建GeoBuilding
  28. */
  29. function createBuilding(building, name) {
  30. building.map(item => {
  31. var coordinates = item.geometry.coordinates;
  32. var height = item.properties.height;
  33. var building = app.create({
  34. type: "GeoBuilding",
  35. name: name,
  36. coordinates, // 支持Polygon和MultiPolygon,格式可参考geoJson规范
  37. height: height,
  38. renderer: {
  39. type: 'vector',
  40. color: [61, 63, 70],// 面填充颜色
  41. opacity: 1, // 填充不透明度
  42. }
  43. });
  44. thingLayer.add(building);
  45. })
  46. }

  47. /**
  48. * 创建GeoLine
  49. */
  50. function createMeshLine(points, color) {
  51. points.map(item => {
  52. var height = Math.random() * 2000 + 3000;
  53. var geoLine = app.create({
  54. type: 'GeoLine',
  55. name: color,
  56. coordinates: [item.geometry.coordinates, item.geometry.coordinates],
  57. heightArray: [0, height * 0.1],
  58. // userData: { 'name': '花家地南街' },
  59. renderer: {
  60. type: 'vector', //GeoLine渲染类型 支持纯色(vector)和贴图(image)两种模式
  61. lineType: 'Line', //可以是Line Plane Pipe Route
  62. // imageUrl: 'https://www.thingjs.com/citybuilder_console/upload/lineIcons/3d/lightFlow_strip05.png',//线的贴图url, type是image时生效
  63. // color: [255, 255, 255], //线的颜色, type是vector时生效
  64. colorMapping: {
  65. 0: "#00000000",
  66. 0.7: "#33333300",
  67. 0.8: "#333333FF",
  68. 1: color,
  69. },
  70. // effect: true, //是否开启发光特效
  71. // width: 10, //只在线类型为Plane,Pipe下生效,代表线的宽度
  72. // numPass: 0.5, // 通道数,在贴图时贴图叠加的次数,次数越多颜色越亮,type是image时生效
  73. speed: 0.4, //线贴图流动速度,默认是0,不流动 speed可以大于0也可以小于0,代表流动方向
  74. // growSpeed: 0.4, //线生长速度,默认是0,不生长,lineType是Line,Plane时生效
  75. // growLoop: true //线生长是否循环,默认是true,lineType是Line,Plane时生效
  76. }
  77. });
  78. thingLayer.add(geoLine);
  79. })
  80. }


最后就可以在数字孪生可视化地图上发射烟花了。本文分享了自己是如何实现在数字孪生可视化地图上产生烟花效果的,同时祝大家天天有精彩!




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

107

主题

107

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部