使用 ECharts-GL 实现世界级、国家级、省市级 3D 地图

一. 前言

在数据可视化领域,二维地图早已司空见惯,它以直观的方式呈现数据关系,帮助我们理解复杂的信息。然而,在追求更优(高大上)用户体验的今天,传统的二维展示方式已经不满足客户的体验需求,同时平面图表也难以充分展现地理信息的丰富维度和空间关系。于是,三维数据可视化越来越受到广大用户的青睐。

ECharts-GL,作为 ECharts 家族的一员,更是专为三维数据可视化而生,它不仅继承了 ECharts 的易用性和高性能,还引入了 WebGL 技术,为用户提供了一个强大且直观的工具,用于创建令人惊叹的 3D 地图和数据可视化作品。

本篇文章,你将学习到如何利用 ECharts-GL 构建沉浸式的 3D 地图体验。并学习如何配置和定制地图的部分细节,包括地形、光照、视角以及纹理的三维表示。

二. 准备 geoJson 数据

首先,我们需要准备多层级的地图数据,比如世界、国家、省份、城市等各级别的地理数据,以及每个区域对应的数据指标,这些数据通常是以 JSON 格式提供的地理信息数据。同时,确保数据格式符合 ECharts 的要求,可以参考官方文档了解各种地图类型的数据格式。

我们可以在一些其他网站获取最新的 geoJson,比如:通过阿里云 DataV 数据可视化平台下载最新的 json 数据文件,以保证目前所有市区的数据都是最新的。

如下图所示,选择数据版本后,点击页面上的下载按钮后即可以下载 json 文件:

三、实现过程:

1、安装echarts和echarts-gl插件:

npm i echarts@5.2.0 -S
npm i echarts-gl@2.0.8 -S

2、在Vue组件中引入echarts和echarts-gl:

  import * as echarts from "echarts";
  import "echarts-gl";

3、创建一个div容器用于显示地图:

<template>
    <div ref="mapRef" class="echarts"></div>
</template>

4、在Vue3组件的mounted生命周期中初始化echarts并绘制地图:

<script setup>
  import { ref, reactive, onMounted } from "vue";
  import * as echarts from "echarts";
  import "echarts-gl";
  import geoJson from "@/assets/csx.json";
  
  const mapRef = ref(null);
  let map = ref();
  
  onMounted(() => {
    const myChart = echarts.init(mapRef.value);
    echarts.registerMap("china", geoJson);
  
    // 图表配置项
    const option = {
      series: [
        {
          type: "map3D",
          map: "china",
          roam: true,
          boxWidth: 55,
          itemStyle: {
            color: "#286ECA", // 地图板块的颜色
            opacity: 1, // 图形的不透明度 [ default: 1 ]
            borderWidth: 0.5, // (地图板块间的分隔线)图形描边的宽度。加上描边后可以更清晰的区分每个区域
            borderColor: "#286ECA", // 图形描边的颜色。[ default: #333 ]
          },
          li
### ECharts GL 3D 地图使用教程 #### 创建基本的地图实例 为了创建一个基础的世界级国家级或省市级的 3D 地图,首先需要引入必要的库文件。这通常涉及加载 `echarts` 和 `echarts-gl` 插件。 ```html <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/echarts-gl/dist/echarts-gl.min.js"></script> ``` 接着初始化图表容器: ```javascript var chart = echarts.init(document.getElementById('main')); ``` #### 配置项设置 配置项是构建可视化图形的核心部分,在这里可以定义地图的各种属性,比如视角角度、光照效果等[^1]。 ```javascript option = { globe: { baseTexture: '/path/to/world.jpg', // 设置地球底纹图片路径 heightTexture: '/path/to/elevation.png', // 设置高度贴图路径用于表现地形起伏 environment: 'auto', shading: 'realistic', realisticMaterial: { roughness: 0.9, metalness: 0.2 }, postEffect: true, light: { main: { intensity: 5, shadow: true }, ambientCubemap: { texture: '/path/to/hdr.hdr', diffuseIntensity: 0.2 } } }, series: [{ type: 'map3D', map: 'world', boxWidth: 200, boxHeight: 100, roam: true, // 是否开启鼠标缩放和平移漫游功能 viewControl: { // 控制视点位置参数 autoRotate: false, distance: 180 } }] }; chart.setOption(option); ``` 这段代码展示了如何通过调整不同的选项来增强视觉效果,例如改变材质质感(`roughness`)和金属度(`metalness`)以获得更真实的表面反射特性;还可以启用后期处理(post-effect),使场景看起来更加逼真。 #### 加载GeoJSON数据 对于特定区域(如国家或省份),可能还需要准备相应的 GeoJSON 文件作为地理边界描述,并将其注册到 ECharts 中以便后续调用。 ```javascript fetch('/path/to/china.json') .then(response => response.json()) .then(chinaJson => { echarts.registerMap('china', chinaJson); // 注册中国地图json数据 option.series[0].map = 'china'; // 修改series中的map字段为中国 chart.setOption(option); }); ``` 上述过程说明了从网络获取 JSON 数据的方式之一,并解释了怎样把下载的数据关联至指定名称的空间内供绘图函数识别使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值