vue2版本用echarts实现地图下钻功能 注释详细cv可用

本文详细介绍了如何使用npmiecharts-gl库在网页中实现地图下钻功能,包括引入工具、定义历史记录、初始化地图、添加点击事件以及处理地图层级切换等步骤。
摘要由CSDN通过智能技术生成

一、首先需要下载试图工具

  npm i echarts
  npm i echarts-gl

二、在使用地图页面中引入工具

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

1、在data函数中定义一下地图下钻的历史记录

 // 地图下钻历史记录
 historyMapData: [{ name: "map", adcode: "100000" }],

2、初始化一个存放地图的dom

// 初始化dom
const myChart = echarts.init(document.getElementById("mapEchart"));

3、初始化一下地图

// 初始化map
this.initMap(myChart, "map", "100000");

4、给地图添加点击事件

 myChart.on("click", (e) => {
        if (e.value.level === "district")
          return (this.addressName = "暂无该地区数据无法渲染该地区");
        // 添加历史记录
        this.historyMapData.push(e.value);
        // 初始化地图
        this.initMap(myChart, newName, e.value.adcode);
      });

5、让可视化地图跟随浏览器大小改变

window.addEventListener("resize", () => {
  myChart.resize();
});

6、渲染下钻位置的地图

async initMap(chartDOM, geoName, adcode) {
      // 清除echarts实例
      chartDOM.clear();
      // 请求map的json
      const mapData = await this.getMapJSON(adcode, geoName);
      // 图表配置项
      const option = this.getOption(geoName, mapData);
      // 渲染配置
      chartDOM.setOption(option);
    },
    //获取中国地图区域编码
    async getMapJSON(adcode = "100000", geoName) {
      const res = await axios.get(
        `https://geo.json`
      );

      // 重新注册地图
      echarts.registerMap(geoName, res.data);
      // 过滤json数据
      const mapData = res.data.features.map((item) => {
        // console.log(item.properties.name);
        return {
          value: item.properties,
          name: item.properties.name,
        };
      });

      return mapData;
    },

7、重新注册地图配置地图样式


      // 重新注册地图
      echarts.registerMap(geoName, res.data);
      // 过滤json数据
      const mapData = res.data.features.map((item) => {
        // console.log(item.properties.name);
        return {
          value: item.properties,
          name: item.properties.name,
        };
      });

      return mapData;
    },
    getOption(geoName, mapData) {
      // 图表配置项
      const option = {
        geo3D: {
          zlevel: -100,
          show: false, //是否显示全部区域名称
          type: "map3D",
          center:{x: 0, y: 0},
          map: geoName, // 地图类型。echarts-gl 中使用的地图类型同 geo 组件相同
          regionHeight: 2,
          shading: "realistic",
          realisticMaterial: {
            detailTexture: "./2.png", //初始地图图片
          },
          regions: [
            {
              name: mapData[0].name,
              itemStyle: {
                color: "#ff9900",
              },
            },
          ],
          //默认高亮区域
          emphasis: {
            label: { show: false },
            itemStyle: {
              color: "transparent",
            },
          },
        },
        series: [
          {
            zlevel: -10,
            regionHeight: 4,
            type: "map3D",
            boxWidth: 110,
            boxHeight: 10,
            boxDepth:90,
            top:10,
            bottom:10,
            viewControl: {
              center: [0,10,0],
              panSensitivity: 0,
              rotateSensitivity: 0,
              minAlpha: 80,
              minBeta: 0,
            },
            map: geoName, // 地图类型。echarts-gl 中使用的地图类型同 geo 组件相同
            data: mapData, //这里比较重要 获得过滤后的data,这样点击事件时就能获得这个data的值
            label: {
              show: false, // 是否显示标签。
              textStyle: {
                color: "#fff", // 地图初始化区域字体颜色
                fontSize: 12,
              },
              formatter: (e) => {
                // console.log(e.name);
                return ` ${e.name} `;
              },
            },
            shading: "realistic",
            realisticMaterial: {
              detailTexture: "./2.png",
            },
            itemStyle: {
              borderWidth: 2,
              borderColor: "rgba(20, 123, 200, 0.1)", //区域边界线颜色
              color: "rgba(0, 120, 255, 0.4)",
            },
            emphasis: {
              label: {
                show: true, //鼠标划过或停留是否现在区域名称
                textStyle: {
                  color: "#fff", //鼠标划过或停留的字体颜色
                },
              },
              itemStyle: {
                color: "#fff", //鼠标划过或停留的区域颜色
              },
            },
          },
        ],
      };
      return option;
    },

8、返回上级   

 backMap() {
      const myChart = echarts.init(document.getElementById("mapEchart"));
      // 去除当前的地图信息
      this.historyMapData.pop();
      const len = this.historyMapData.length;
      // 获取上一级的地图信息
      const newdata = this.historyMapData[len - 1];
      // 重新渲染地图
      this.initMap(
        myChart,
        newdata?.name || "map",
        newdata?.adcode || "100000"
      );
    },

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
功能是指地图上的某个区域被点击后,能够进入该区域的详细信息页面。实现这个功能需要以下步骤: 1. 安装 echartsecharts-gl 插件 ```bash npm install echarts echarts-gl --save ``` 2. 引入 echartsecharts-gl 在需要使用 echarts 的组件或页面中,引入 echartsecharts-gl: ```javascript import echarts from 'echarts' import 'echarts-gl' ``` 3. 准备地图数据 在 echarts 官网的地图下载页面(https://echarts.apache.org/zh/download-map.html)下载需要的地图文件,并引入到项目中。 ```javascript import chinaMapJSON from './china.json' echarts.registerMap('china', chinaMapJSON) ``` 4. 配置 echarts 图表 ```javascript const chart = echarts.init(document.getElementById('map')) // 配置 echarts 图表 const option = { // 地图类型 series: [{ type: 'map3D', map: 'china', label: { show: true, textStyle: { color: 'rgba(255,255,255,1)', fontSize: 10 } }, itemStyle: { areaColor: 'rgba(0, 0, 0, 0)', borderColor: 'rgba(0, 0, 0, 0.2)' } }] } chart.setOption(option) // 点击事件 chart.on('click', function (params) { if (params.componentType === 'series') { console.log(params.name) // 输出区域名称 // 进入下一级页面 } }) ``` 5. 实现功能 在点击事件中,获取点击的区域名称,然后根据该名称查询下一级数据,进入下一级页面。 ```javascript chart.on('click', function (params) { if (params.componentType === 'series') { console.log(params.name) // 输出区域名称 // 查询下一级数据 const subData = getSubData(params.name) // 进入下一级页面 router.push({ name: 'SubPage', params: { data: subData } }) } }) ``` 以上就是在 vue2 中实现 echarts 3D 地图功能的具体步骤,需要注意的是,下功能实现需要根据具体的业务需求进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还想陪你看场雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值