vue用 echarts 显示区域地图 并用不同颜色显示每个区域

本文介绍了如何在Vue项目中利用Echarts创建动态的中国区域地图,并展示了如何根据需求为每个区域填充不同的颜色。首先需要从Echarts官网获取并引入库,接着通过后端或定位获取省份代码,从阿里云获取区域数据。完成数据获取后,即可进行地图的业务实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

认定了一个女孩 就要好好的珍惜对待她,人生不容辜负,你必须要更加努力 。加油 骚年。

用 echarts 做动态中国区域地图 或者全国地图 效果如下

在这里插入图片描述
做这些 必须先引入echarts 怎么引入的 自己去echarts 官网看 ,这里不解释了

说明下 这个区域地图 需要从阿里云可视化数据请求过来

http://datav.aliyun.com/portal/school/atlas/area_selector#&lat=33.521903996156105&lng=104.29849999999999&zoom=4

所以你要从后端拿到当前的位置,或者 你自己定位 这个根据具体业务 然后拿到省的code 去阿里云请求当前省的的区域 下面是请求地址

https://geo.datav.aliyun.com/areas_v3/bound/geojson?code=100000_full

拿到数据后 接下来 就是写我们业务了


// 这是放图表的结构
   <div class="ditu_box_box_cont" ref="mapDataAll"></div>
   
   // 在methods里面写下面内容
	// 拿到地图数据
    mapDataFun() {
      console.log(resfullData, "resfullData");
      
      // 这个this.mapJson 就是数据 我是直接下载本地了 这个就应该是你从后端请求回来的某个区域数据 下面进行处理
      this.mapData = this.mapJson.features.map((item) => {
        return {
          name: item.properties.name,
          value: Math.ceil(Math.random() * 50), // 这个返回值随机也行 根据自己的业务需求
          level: item.properties.level,
          areaCode: item.properties.adcode,
        };
      });

      console.log(this.mapData, " this.mapData");

      this.renderingView();  // 这个 是渲染地图的
    },
 renderingView() {
      // 渲染地图
      var myChartMap = echarts.init(this.$refs.mapDataAll);
      echarts.registerMap("cityMap", this.mapJson, {}); //加载自定义边界数据地图

      var mapChangeData = {
        tooltip: {
          trigger: "item",
          // 鼠标移入的时候显示该地区 和一些值 自己调成 自己想要的就行
          formatter: (p) => {
            console.log(p);
            let val = p.value;
            if (window.isNaN(val)) {
              val = 0;
            }
            let txtCon =
              "<div style='text-align:center'> 地区:" +
              p.name +
              "<br />value值:" +
              p.data.value +
              "<br />code:" +
              p.data.areaCode +
              "</div>";
            return txtCon;
          },
        },
          
        dataRange: {
          orient: "horizontal",
          x: "center",
          itemWidth: 20, // 值域图形宽度,线性渐变水平布局宽度为该值 * 10
          itemHeight: 10, // 值域图形高度,线性渐变垂直布局高度为该值 * 10

          itemGap: 10,
          padding: 10,

          splitList: [
            { start: -1000, end: 0, label: "缺失值", color: "#E0E0E0" },
            { start: 35, label: ">35", color: "#2066AC" },
            { start: 25, end: 35, label: "25-35", color: "#5996B7" },
            { start: 15, end: 25, label: "15-25", color: "#92C5DE " },
            { start: 5, end: 15, label: "5-15", color: "#FCDBC7" },
            { start: 0, end: 5, label: "<5", color: "#F3A482" },
          ],
          textStyle: {
            color: "#3899FF", // 值域文字颜色
          },
          selectedMode: false,
          color: ["#E0022B", "#E09107", "#A3E00B"],
        },
        series: [
          {
            name: "地图",
            type: "map",
            mapType: "cityMap",
            aspectScale: 0.85, //地图长度比
            color: ["#5F85F6", "#F9C96B"],

            itemStyle: {
              normal: {
                show: true,
              },
              emphasis: {
                // 鼠标移入时区域的样式
                areaColor: "#FFBD5A", // 鼠标移入的背景色
                borderWidth: 0,
                color: "green",
              },
            },

            label: {
              normal: {
                show: true,
                textStyle: {
                  color: "#000000", //省市区字体颜色
                },
              },
              textStyle: {
                color: "rgba(255,255,255,1)",
                fontSize: 30,
                opacity: 1,
                backgroundColor: "rgba(0,0,0,0.2)",
              },
            },
            data: this.mapData, // 上面添加了 name,value,level,cityCode的数据
          },
        ],
      };
      myChartMap.setOption(mapChangeData);
    },

至此结束
如有不足之处请指出 或直接联系邮箱 yuyong1663519276@163.com 谢谢

### 使用 Node.js 和 Electron 构建桌面应用并实现 ECharts 图表实时数据展示 #### 项目初始化与环境搭建 为了创建基于 Node.js 的 Electron 应用程序,首先需要安装必要的开发工具。通过 npm 初始化新项目,并安装 electron 及其他依赖项。 ```bash npm init -y npm install --save-dev electron concurrently wait-on ``` 这一步骤确保了基础框架的建立[^1]。 #### 创建主进程文件 `main.js` 该文件负责启动浏览器窗口以及管理整个应用程序生命周期事件。下面是一个简单的例子: ```javascript const { app, BrowserWindow } = require('electron'); const path = require('path'); function createWindow () { const win = new BrowserWindow({ width: 800, height: 600, webPreferences: { preload: path.join(__dirname, 'preload.js'), nodeIntegration: true } }); win.loadFile('index.html'); } app.whenReady().then(() => { createWindow(); app.on('activate', () => { if (BrowserWindow.getAllWindows().length === 0) { createWindow(); } }); }); app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit(); } }); ``` 此代码片段展示了如何配置基本的应用设置和行为逻辑[^2]。 #### 开发前端页面及集成 ECharts 在项目的根目录下新建 HTML 文件作为渲染界面的一部分,在其中加载 echarts.min.js 来支持图表绘制功能。同时利用 Vue 或 React 等现代 JavaScript 框架来简化组件化开发过程[^4]。 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"/> <title>Electron App with Real-time Data and Charts</title> <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script> <!-- 如果使用Vue --> <script src="https://unpkg.com/vue@next"></script> </head> <body> <div id="app"> <!-- Chart container --> <div ref="chartContainer" style="width: 600px;height:400px;"></div> </div> <script type="module"> import { defineComponent, onMounted, ref } from 'vue'; export default defineComponent({ setup() { let chartInstance = null; function drawChart(dataPoints){ // Initialize or update the existing instance of a chart. if (!chartInstance) { chartInstance = echarts.init(document.querySelector('#app div')); var option = { xAxis: {}, yAxis: {}, series: [{ name:'Data', type:'line', data:dataPoints }] }; chartInstance.setOption(option); } else { // Update options directly when there's already an initialized chart object available. chartInstance.setOption({series:[{data:dataPoints}]}) } } onMounted(async ()=>{ try{ while(true){ await fetch('/api/getRealTimeData') .then(response=>response.json()) .then(json=>drawChart(json.data)); setTimeout(()=>{}, 5 * 1000); // Poll every five seconds for updates. } } catch(error){ console.error(`Error fetching real time data`, error)} }) } }) </script> </body> </html> ``` 上述代码实现了网页端接收来自服务器推送的新鲜统计数据并通过调用 ECharts API 方法动态更新视图的效果[^3]。 #### 后台服务提供 RESTful 接口供客户端请求最新信息 最后,在后台编写 Express Server 提供给前端访问的服务接口。这里假设有一个模拟数据库存储着时间序列形式的历史记录;每当收到 GET 请求时就返回最近一段时间内的观测值给调用者。 ```javascript // server.js require('dotenv').config(); // Load environment variables from .env file into process.env const express = require('express'); const cors = require('cors'); // Middleware to enable Cross-Origin Resource Sharing policy. let simulatedDatabase = []; // Simulated database holding historical records over some period. for(let i=0; i<100 ;i++){ simulatedDatabase.push(Math.random()*100); } setInterval(()=>{ simulatedDatabase.shift(); simulatedDatabase.push((Math.random()-0.5)*10+simulatedDatabase[simulatedDatabase.length-1]); }, 5*1000); const PORT = parseInt(process.env.PORT || 3000); const app = express(); app.use(cors()); app.get('/api/getRealTimeData',(req,res)=>{ res.status(200).json({"status":"success","message":"","data":simulatedDatabase.slice(-20)}); }) app.listen(PORT,()=>console.log(`Server running at http://localhost:${PORT}`)) ``` 这段脚本定义了一个简易版的时间序列API,它每隔五秒会自动生成新的随机数值追加到列表末端,并移除最旧的一项以保持固定长度。当接收到 HTTP GET 请求 `/api/getRealTimeData` 时,则截取最新的二十条记录发送回响应体中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值