vue3 +Echarts+ts 不同地区根据条件显示不同颜色

一、下载echarts、axios

二、代码如下

<template>
  <div id="main" class="map" ref="mapDom"></div>
</template>

<script setup lang="ts">
import { ref, onMounted } from "vue";
import axios from "axios";
import echartMap from "./echartMap.ts";
import * as echarts from "echarts";
// 获取dom
const mapDom: any = ref(null);
// 获取地图的数据
let mapData: any = ref([]);
//处理数据的方法函数
let mapRender = echartMap();
onMounted(() => {
  // 初始化画布
  var map = echarts.init(mapDom.value);
  axios
    .get(`https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json`)
    .then((res: any) => {
      mapData.value = res.data;
      // registerMap 注册一个地图   mapData 地图的数据包 根据不同的数据渲染不同的地图
      echarts.registerMap("china", res.data);
      // 这个调用是进行地图的渲染
      map.setOption(mapRender(res.data.features));
    });
});
</script>
<style>
.map {
  height: 900px;
  margin: auto;
}
</style>

echartMap.ts

export default () => {
  const mapRender = (data: any = [], mapData: any = []) => {
    let mapLocal: any = [];
    mapData.forEach((value: any, index: number) => {
      console.log(value.properties.name);
      mapLocal.push(value.properties.name);
    });
    //特殊城市
    let city = ["北京", "重庆", "上海", "天津"];
    let area: any = {
      内蒙古: "内蒙古自治区",
      新疆: "新疆维吾尔自治区",
      广西: "广西壮族自治区",
      宁夏: "宁夏回族自治区",
      西藏: "西藏自治区",
      澳门: "俺们特别行政区",
      香港: "香港特别行政区",
    };
    // 处理字典
    let result = data.map((i: any, index: number) => {
      let name = "";
      if (city.find((x: any) => x === i.properties.name)) {
        name = i.properties.name + "市";
      } else if (area[i.properties.name]) {
        name = area[i.properties.name];
      } else {
        name = i.properties.name + "省";
      }
      return {
        name: i.properties.name,
        value: Number(i.properties.adcode), //将省的id作为Value,看需求可更改
        itemStyle:
          Number(i.properties.adcode) < 100000
            ? { color: "#313695" }
            : Number(i.properties.adcode) < 200000
            ? { color: "#4575b4" }
            : Number(i.properties.adcode) < 300000
            ? { color: "#74add1" }
            : Number(i.properties.adcode) < 400000
            ? { color: "#abd9e9" }
            : Number(i.properties.adcode) < 500000
            ? { color: "#a7ce89" }
            : Number(i.properties.adcode) < 600000
            ? { color: "#9fe080" }
            : Number(i.properties.adcode) < 700000
            ? { color: "#40b27d" }
            : { color: "#fdae61" },
      };
    });
    // echarts 的数据配置选项 具体看官网
    let option = {
      title: {
        text: "中国地图",
        left: "right",
        triggerEvent: true,
      },
      tooltip: {
        trigger: "item",
        showDelay: 0,
        transitionDuration: 0.2,
      },
      visualMap: {},
      series: [
        {
          name: "中国地图",
          type: "map",
          roam: true,
          map: "china",
          // 设置地图的文字
          label: {
            show: true,
            fontSize: 8,
            color: "#fff",
          },
          emphasis: {
            label: {
              show: true,
            },
          },
          data: result,
        },
      ],
    };
    return option;
  };
  return mapRender;
};

三、效果图

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值