ECharts-GL三维数据可视化

序言

学习笔记
ECharts-GL,作为 ECharts 家族的一员,继承了 ECharts 的易用性和高性能,还引入了 WebGL 技术,用于创建令人惊叹的 3D 地图和数据可视化作品。本文学习如何配置和定制地图的部分细节。

一. 准备 geoJson 数据

通过阿里云 DataV 数据可视化平台下载最新的 json 数据文件

二. 加载 geoJson 数据

const geoJson = "获取的的中国地图json";
const myChart = echarts.init(document.getElementById("main"));
// 注册地图名字(china)和数据(geoJson)
echarts.registerMap("china", geoJson);
// 图表配置项
const option = {
  series: [
    {
      type: "map3D",
      map: "china",
    },
  ],
};
// 设置图表实例的配置项以及数据
myChart.setOption(option);

在这里插入图片描述

1.设置地图的颜色

const option = {
  series: [
    {
      type: "map3D",
      map: "china",
      // 地图的颜色
      itemStyle: {
        color: "#286ECA", // 地图板块的颜色
        opacity: 1, // 图形的不透明度 [ default: 1 ]
        borderWidth: 0.5, // (地图板块间的分隔线)图形描边的宽度。加上描边后可以更清晰的区分每个区域
        borderColor: "#286ECA", // 图形描边的颜色。[ default: #333 ]
      },
    },
  ],
};

2.设置标签显示

const option = {
  series: [
    {
      type: "map3D",
      map: "china",
      // 标签的相关设置
      label: {
        show: true, // (地图上的城市名称)是否显示标签
        distance: 5,
        formatter: function (params) {
          return params.name ? params.name : " ";
        },
        textStyle: {
          // 标签的字体样式
          color: "#fff", // 地图初始化区域字体颜色
          fontSize: 8, // 字体大小
        },
      },
    },
  ],
};

3.鼠标hover高亮

const option = {
  series: [
    {
      type: "map3D",
      map: "china",
      // 鼠标 hover 高亮时图形和标签的样式
      emphasis: {
        label: {
          // label 高亮时的配置
          show: true,
          textStyle: {
            color: "#fff", // 高亮时标签颜色变为 白色
            fontSize: 15, // 高亮时标签字体 变大
          },
        },
        itemStyle: {
          // itemStyle 高亮时的配置
          color: "#66ffff", // 高亮时地图板块颜色改变
        },
      },
    },
  ],
};

4.环境贴图

const option = {
  series: [
    {
      type: "map3D",
      map: "china",
      // 环境贴图,支持純颜色值,渐变色,全景贴图的 url。默认为 'auto'
      environment: new echarts.graphic.LinearGradient(
        0,
        0,
        0,
        1,
        [
          {
            // 配置为垂直渐变的背景
            offset: 0,
            color: "#183890", // 天空颜色
          },
          {
            offset: 0.7,
            color: "#040829", // 地面颜色
          },
          {
            offset: 1,
            color: "#040829", // 地面颜色
          },
        ],
        false
      ),
    },
  ],
};

5.光照

const option = {
  series: [
    {
      type: "map3D",
      map: "china",
      // 光照相关的设置
      light: {
        main: {
          // 场景主光源的设置,在 globe 组件中就是太阳光。
          color: "#3D94CE", // 主光源的颜色。
          intensity: 1.2, // 主光源的强度。
          shadow: false, // 主光源是否投射阴影。默认关闭。开启阴影可以给场景带来更真实和有层次的光照效果。会增加程序的运行开销。
          shadowQuality: "high", // 阴影的质量。可选'low', 'medium', 'high', 'ultra'
          alpha: 55, // 主光源绕 x 轴,即上下旋转的角度。配合 beta 控制光源的方向。
          beta: 10, // 主光源绕 y 轴,即左右旋转的角度。
        },
        ambient: {
          // 全局的环境光设置。
          color: "red", // 环境光的颜色。[ default: #fff ]
          intensity: 0.5, // 环境光的强度。[ default: 0.2 ]
        },
      },
    },
  ],
};

6.设置纹理

const option = {
  series: [
    {
      type: "map3D",
      map: "china",
      // 三维图形的着色效果
      shading: "realistic",
      // 真实感材质相关的配置项
      realisticMaterial: {
        detailTexture: "./img/texture.png", // 纹理图片
        textureTiling: 1,
      },
      // 后处理特效
      postEffect: {
        enable: true,
        SSAO: {
          enable: true,
          radius: 1,
          intensity: 1,
          quality: "high",
        },
        bloom: {
          enable: true,
          strength: 0.5,
          radius: 0,
          threshold: 0,
        },
        FXAA: {
          enable: true,
          alpha: 0.5,
        },
      },
      // 光照设置
      light: {
        main: {
          color: "#3D94CE",
          intensity: 1.2,
          shadow: false,
          shadowQuality: "high",
          alpha: 55,
          beta: 10,
        },
        ambient: {
          color: "#fff",
          intensity: 0.5,
        },
      },
    },
  ],
};

三. 在运行图表时,可能会内存泄漏

通过 echarts init 方法创建 ECharts 实例,如果代码没有做优化,echarts 实例就会越来越多,占用大量内存。

// 第一种:使用 echarts init 之前先判断是否存在实例
const chart = echarts.getInstanceByDom(document.getElementById(dom));
if (chart === undefined) {
  chart = echarts.init(document.getElementById(dom));
}
//第二种:如果 ECharts 存在,先 dispose 销毁后,再调用 init
if (chart) {
  echarts.dispose(chart);
}
chart = echarts.init(document.getElementById(dom));

~多次调用 echarts.init 会导致内存泄漏,应当在恰当时机销毁已经存在的 ECharts 实例,clear()不会销毁实例,只是重新绘制图形,dispose()会销毁实例,需要重新构建 ECharts 对象
~在动态更新图表时,可以使用 ECharts 提供的setOption方法来更新图表数据和配置。
~在绑定事件监听器时,要确保正确解绑,可以使用 ECharts 提供的off方法来取消事件。

ECharts-X是 ECharts 团队推出的全新 3D 可视化库,它是基于 ECharts 的扩展,底层深度整合了 WebGL 库QTEK和 Canvas2D 库ZRender。特色混搭ECharts 里的混搭功能很强大,作为 ECharts 的扩展,ECharts-X 自然也需要支持。ECharts-X 能跟 ECharts 中的折柱饼地图等图表混搭,可以有更丰富的可视化效果,同时 ECharts-X 也能够直接使用 ECharts 中的 legend, dataRange 等组件。3D大规模标注ECharts-X 中的标注在效果和使用上都跟 ECharts 中的标注(markPoint)类似,但是由于WebGL的强大能力,对于几万甚至几十万的markPoint也能进行实时的动画和交互3D大规模标柱标柱(markBar)是 ECharts-X 中新定义的一个概念,它是标注(markPoint)的衍生,在三维空间扩展了高度维度表达更丰富的数据信息。3D大规模标线同样 ECharts-X 中的标线在使用上和 ECharts 类似,但是展现效果从 2D 变成 3D 的曲线,支持几万条 markLine 的实时展现,动画以及交互风场,洋流等向量场的可视化NASA之前发布过全球洋流图,用梵高风格的表现使得可视化也充满了艺术感,ECharts-X 也提供了对洋流,风场这种向量场可视化的便捷配置。同样的,也是实时的展现和交互。自定义底图这个功能比较简单但是非常实用,能够配置地球的底图纹理图片,使得展现更有质感,以后也会在 ECharts 的 map 中加入。下面截图是将地图换成木星纹理的效果。 标签:ECharts
在React中下载 'echarts-gl'时报错 ERESOLVE unable to resolve dependency tree可能是由于依赖树无法解析而导致的。这个错误通常发生在安装npm包时,有两种可能的解决方案。 首先,我们可以尝试使用npm的`--legacy-peer-deps`标志来解决这个问题。在终端中运行以下命令: ``` npm install --legacy-peer-deps ``` 这将使用旧版的依赖处理机制,可能能够解决依赖树无法解析的问题。 另一种解决方案是手动安装缺失的依赖项。首先,我们需要找到导致报错的依赖项。根据你提供的引用信息,这可能与echarts-taro3-react和UnrealBuildTool有关。 对于echarts-taro3-react,根据引用内容,可以尝试使用分包、自定义echart.js或选择合适的版本来解决体积过大的问题。具体的步骤可以参考引用中提供的解决方案。 对于UnrealBuildTool,根据引用内容,显式构建RuntimeDependency对象已被弃用,可以尝试将路径字符串添加到运行时依赖项列表中来解决问题。具体的步骤可以参考引用中提供的解决方案。 最后,如果以上方法都无法解决问题,你可以尝试更新npm或yarn的版本,并重新安装依赖项。有时,使用最新版本的软件可能会解决一些依赖关系的问题。 总之,当React中下载'echarts-gl'时报错ERESOLVE unable to resolve dependency tree时,可以尝试使用`--legacy-peer-deps`标志、手动安装缺失的依赖项或更新软件版本来解决问题。具体的解决方案取决于具体的情况和引用内容所提供的建议。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [echarts-taro3-react:taro3.x-react构建的微信小程序echarts组件,及使用示列](https://download.csdn.net/download/weixin_42110469/18211125)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Unreal Engine 4.20 Release Notes](https://blog.csdn.net/pizi0475/article/details/81636150)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [GNU gettext utilities](https://blog.csdn.net/qk1992919/article/details/78059152)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值