Vue使用echarts动态渲染地图,点击某省切换展示成此省的下级市

1,178 阅读9分钟

该篇文章仅用于学习记录,复制博客,代码运行不起来的可以去参考原博主的:blog.csdn.net/xzy__007/ar…

方便后期用到找起来比较方便

1721109035130.jpg

  1. 功能介绍
  • 默认展示主地图,点击某个省市区根据地区编码展示对应的省市区地图,当匹配不到对应的省市区编码则展示主地图。
  • 根据地理位置坐标加标记。
  1. 功能实现

    2.1 需要用到的省市区编码json数据 www.jianshu.com/p/add50f649…

    2.2 初始化

<template>
  <div>
    <div id="echatsMap" style="width: 100%; height: 800px"></div>
  </div>
</template>

<script>
import * as echarts from "echarts";
import axios from "axios";
import { cityCode } from "@/components/cityCode.js";
export default {
  name: "echatsMap",
  components: {},
  data() {
    return {
      cityCode: cityCode,
      myChart: "",
      distributionOptions: "",
    };
  },
  mounted() {},
  methods: {},
};
</script>

2.3 创建地图 此处会用到外部链接来获取地图JSON数据(100000是主视图的地区编码):datav.aliyun.com/portal/scho… 传递不同的编码,会返回不同省市区的JSON数据。

image.png

在json文件中添加:

// 在里面加上 用来改变文字展示坐标点 
"cp": [ 103.823557, 36.058039 ],

修改后就不能用动态获取了,需要存放到本地,让其使用本地的文件示例如下(具体改哪来,)

    // 初始化地图数据
    init() {
      // 主地图的JSON文件下载
      let path =  require('../../../../../public/mapJson/china.json');
        echarts.registerMap("china", path );
        this.changeOptions("china");
        this.myChart = echarts.init(document.querySelector("#echatsMap"));
        this.myChart.setOption(this.distributionOptions)
      window.onresize = function () {
        if (this.myChart) this.myChart.resize();
      };
    },

代码实现:

<template>
  <div>
    <div id="echatsMap" style="width: 100%; height: 800px"></div>
  </div>
</template>

<script>
import * as echarts from "echarts";
import axios from "axios";
import { cityCode } from "@/components/cityCode.js";
export default {
  name: "echatsMap",
  components: {},
  data() {
    return {
      cityCode: cityCode,
      myChart: "",
      distributionOptions: "",
    };
  },
  mounted() {
    this.$nextTick(() => {
      this.init();
    });
  },
  methods: {
    // 初始化地图数据
    init() {
      // 主地图的JSON文件下载
      let path = `https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json`;
      axios.get(path).then((res) => {
        echarts.registerMap("china", res.data);
        this.changeOptions("china");
        this.myChart = echarts.init(document.querySelector("#echatsMap"));
        this.myChart.setOption(this.distributionOptions)
      });
      window.onresize = function () {
        if (this.myChart) this.myChart.resize();
      };
    },
    // echarts 配置项
    changeOptions(name) {
      // 经纬度数据
      const seriesList = [
        {
          data: [{ value: [106.9, 27.7] }, { value: [105.29, 27.32] }],
        },
      ];
      // 图标
      const series = seriesList.map((v) => {
        return {
          type: "scatter", //配置显示方式为用户自定义
          coordinateSystem: "geo",
          data: v.data,
          // 自定义图标的样式  支持svg与bse64
          symbol: function (params, key) {
            return "image://" + require("@/assets/logo.png");
          },
          symbolSize: 16,
        };
      });

      // options
      this.distributionOptions = {
        tooltip: {
          // 提示框组件
          show: true, // 显示提示框组件
          trigger: "item", // 触发类型
          triggerOn: "mousemove", // 触发条件
          formatter: "名称:{b}<br/>坐标:{c}",
        },
        series, // 数据
        geo: {
          map: name || "china", // 引入地图 省份或者 国家
          layoutCenter: ["50%", "50%"], //设置后left/right/top/bottom等属性无效
          layoutSize: "45%",
          roam: true, //开启鼠标缩放
          zoom: 2,
          label: {
            normal: {
              //静态的时候展示样式
              show: true, //是否显示地图省份得名称
              textStyle: {
                color: "#fff",
                fontSize: 10,
                fontFamily: "Arial",
              },
            },
            emphasis: {
              // 高亮状态下的样式
              //动态展示的样式
              color: "#fff",
            },
          },
          itemStyle: {
            // 地图区域的多边形 图形样式。
            normal: {
              borderColor: "#fff", // 边框颜色
              areaColor: "#1c2f59", //  区域颜色
              // areaColor: { // 使用背景图片
              //   type: "pattern",
              //   image: require("@/assets/texture.jpeg"), // 使用自己本地图片路径
              //   repeat: "repeat", //可选值repeat、no-repeat、repeat-x、repeat-y
              // },
              textStyle: {
                // 文字颜色
                color: "#fff",
              },
              // shadowBlur: 10, // 图形阴影的模糊大小
              // shadowOffsetX: 10, // 阴影水平方向上的偏移距离。
            },
            emphasis: {
              areaColor: "#1c2f59",
              color: "#fff",
            },
          },
          regions: [
            //对不同的区块进行着色
            // {
            //   name: "河南省", //区块名称
            //   itemStyle: {
            //     normal: {
            //       areaColor: "#281fe1",
            //     },
            //   },
            // },
            // {
            //   name: "浙江省", //区块名称
            //   itemStyle: {
            //     normal: {
            //       areaColor: "#193094",
            //     },
            //   },
            // },
          ],
        },
      };
    },
  },
};
</script>

2.4 点击地图省市区展示省市区地图

  • 大概就是点击省市区时根据名称与编码文件去匹配,把匹配到的编码通过外部接口去获取想要的省市区JSON地图数据。再次渲染echarts即可。
  • 注意:如果没匹配到需跳主地图/获取不到此区域的JSON地图数据。 2.5 china版地图完整代码
<template>
  <div>
    <div id="echatsMap" style="width: 100%; height: 800px"></div>
  </div>
</template>

<script>
import * as echarts from "echarts";
import axios from "axios";
import { cityCode } from "@/components/cityCode.js";
export default {
  name: "echatsMap",
  components: {},
  data() {
    return {
      cityCode: cityCode,
      myChart: "",
      distributionOptions: "",
    };
  },
  mounted() {
    this.$nextTick(() => {
      this.init();
    });
  },
  methods: {
    // 初始化地图数据
    init() {
      // 主地图的JSON文件下载
      let path = `https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json`;
      axios.get(path).then((res) => {
        echarts.registerMap("china", res.data);
        this.changeOptions("china");
        this.myChart = echarts.init(document.querySelector("#echatsMap"));
        this.myChart.setOption(this.distributionOptions);
        // 点击省份子区域的时候可以切换到省份地图
        this.myChart.on("click", (chinaParam) => {
          // 如果没有下层则展示主地图
          if (!this.cityCode) {
            this.cityCode = cityCode;
            // 100000 主地图
            this.getProvinceMapOpt(100000, "")
            return;
          }
          // 根据点击位置地图名字去跟编码数据匹配
          let code = this.cityCode.find(
            (x) => chinaParam.name.indexOf(x ? x.name : "") !== -1
          );
          // 找到正确的编码   去获取对应的地图数据
          // 将该省市区的下级放入 -- 如果接口支持根据编码查询省市区所有下级子级就不需要这么写
          if (code) {
            this.cityCode = code.city;
            this.getProvinceMapOpt(Number(code.adcode), chinaParam.name);
          } else {
            // 没有对应的编码跳主地图
            this.cityCode = cityCode;
            // 100000 主地图
            this.getProvinceMapOpt(100000, "");
          }
        });
      });
      window.onresize = function () {
        if (this.myChart) this.myChart.resize();
      };
    },
    // 下载/显示各省地图
    getProvinceMapOpt(provinceAlphabet, name) {
      // 根据地区编码获取所在地区的JSON地图
      let path = `https://geo.datav.aliyun.com/areas_v3/bound/${provinceAlphabet}_full.json`;
      if (provinceAlphabet === 100000) {
        path = "/mapJson/china.json";
      }
      axios.get(path).then((res) => {
        // 获取完最新的JSON地图数据后,重新渲染
        echarts.registerMap(name, res.data);
        this.changeOptions(name);
        this.myChart.setOption(this.distributionOptions, true);
      });
    },
    // echarts 配置项
    changeOptions(name) {
      // 经纬度数据  --- 不存在的经纬度不会展示出来
      const seriesList = [
        {
          data: [{ value: [106.9, 27.7] }, { value: [105.29, 27.32] }],
        },
      ];
      // 图标
      const series = seriesList.map((v) => {
        return {
          type: "scatter", //配置显示方式为用户自定义
          coordinateSystem: "geo",
          data: v.data,
          // 自定义图标的样式  支持svg与bse64
          symbol: function (params, key) {
            return "image://" + require("@/assets/logo.png");
          },
          symbolSize: 16,
        };
      });

      // options
      this.distributionOptions = {
        tooltip: {
          // 提示框组件
          show: true, // 显示提示框组件
          trigger: "item", // 触发类型
          triggerOn: "mousemove", // 触发条件
          formatter: "名称:{b}<br/>坐标:{c}",
        },
        series, // 数据
        geo: {
          map: name || "china", // 引入地图 省份或者 国家
          layoutCenter: ["50%", "50%"], //设置后left/right/top/bottom等属性无效
          layoutSize: "45%",
          roam: true, //开启鼠标缩放
          zoom: 2,
          label: {
            normal: {
              //静态的时候展示样式
              show: true, //是否显示地图省份得名称
              textStyle: {
                color: "#fff",
                fontSize: 10,
                fontFamily: "Arial",
              },
            },
            emphasis: {
              // 高亮状态下的样式
              //动态展示的样式
              color: "#fff",
            },
          },
          itemStyle: {
            // 地图区域的多边形 图形样式。
            normal: {
              borderColor: "#fff", // 边框颜色
              areaColor: "#1c2f59", //  区域颜色
              textStyle: {
                // 文字颜色
                color: "#fff",
              },
              // shadowBlur: 10, // 图形阴影的模糊大小
              // shadowOffsetX: 10, // 阴影水平方向上的偏移距离。
            },
            emphasis: {
              areaColor: "#1c2f59",
              color: "#fff",
            },
          },
          regions: [
            //对不同的区块进行着色
            // {
            //   name: "河南省", //区块名称
            //   itemStyle: {
            //     normal: {
            //       areaColor: "#281fe1",
            //     },
            //   },
            // },
            // {
            //   name: "浙江省", //区块名称
            //   itemStyle: {
            //     normal: {
            //       areaColor: "#193094",
            //     },
            //   },
            // },
          ],
        },
      };
    },
  },
};
</script>


  1. 展示某个省的地图 3.1 展示某个省的地图的话,要做一些修改
  • 修改默认请求的Json数据
  • 修改默认展示的地图名字等

image.png

3.2 展示到县级别 县级别以上都是用的 geo.datav.aliyun.com/areas_v3/bo… 以下将以 4 展示某个省的地图完整代码进行修改

3.2.1 添加县级以上请求地图数据失败捕获

添加错误捕获

    // 下载/显示各省地图
    getProvinceMapOpt (provinceAlphabet, name) {
      // console.log(provinceAlphabet);
      // 根据地区编码获取所在地区的JSON地图
      let path = `https://geo.datav.aliyun.com/areas_v3/bound/${provinceAlphabet}_full.json`;
      // if (provinceAlphabet === 420000) {
      //   path = "/mapJson/china.json";
      // }
      axios.get(path).then((res) => {

        // 获取完最新的JSON地图数据后,重新渲染
        echarts.registerMap(name, res.data);
        this.changeOptions(name);
        this.myChart.setOption(this.distributionOptions, true);
      }).catch((error) => {
        // 请求出错时的处理逻辑 - 此时有可能是请求到县了,县的请求地址跟其他层级请求地址不一样
        console.error('请求出错:', error);
      });
    },

添加请求县级的JSON地图数据方法

	// 获取县级别的地图数据
        getProvinceMapOptCounty (provinceAlphabet, name) {
      // 根据地区编码获取所在地区的JSON地图
      let path = `https://geo.datav.aliyun.com/areas_v3/bound/${provinceAlphabet}.json`;
      axios.get(path).then((res) => {

        // 获取完最新的JSON地图数据后,重新渲染
        echarts.registerMap(name, res.data);
        this.changeOptions(name);
        this.myChart.setOption(this.distributionOptions, true);
      }).catch((error) => {
        // 请求出错时的处理逻辑 - 此时有可能是请求到县了,县的请求地址跟其他层级请求地址不一样
        console.error('请求出错:', error);
      });
    },

  • 此时在县级别以上获取数据失败时去请求,并记录此时请求到了县级别(因为没有县级以下的数据了,再点击县的话就返回第一级)
  • 需要再点击县的话就返回第一级代码
data () {
     return {
       geoCounty: false,
   	 }
}
    // 初始化地图数据
    init () {
      // 主地图的JSON文件下载
      let path = `https://geo.datav.aliyun.com/areas_v3/bound/420000_full.json`;
      axios.get(path).then((res) => {
        echarts.registerMap("湖北省", res.data);
        this.changeOptions("湖北省");
        this.myChart = echarts.init(document.querySelector("#echatsMap"));
        this.myChart.setOption(this.distributionOptions);
        // 点击省份子区域的时候可以切换到省份地图
        this.myChart.on("click", (chinaParam) => {
          // 如果没有下层则展示主地图
          if (!this.cityCode) {
            this.cityCode = cityCode;
            // 420000 主地图
            this.geoCounty = false
            this.getProvinceMapOpt(420000, "")
            return;
          }
          // 根据点击位置地图名字去跟编码数据匹配
          let code = this.cityCode.find(
            (x) => chinaParam.name.indexOf(x ? x.name : "") !== -1
          );
          // console.log(chinaParam.name,'---',code);
          // 找到正确的编码   去获取对应的地图数据
          // 将该省市区的下级放入 -- 如果接口支持根据编码查询省市区所有下级子级就不需要这么写
          if (code) {
            // 判断是否请求到了县级别
            if (!this.geoCounty) {
              this.getProvinceMapOpt(Number(code.adcode), chinaParam.name);
            } else {
              // this.getProvinceMapOptCounty(Number(code.adcode), chinaParam.name);
              // 已经没有再下层的数据了,再点击返回主视图
              this.cityCode = cityCode;
              // 420000 主地图
              this.geoCounty = false
              this.getProvinceMapOpt(420000, "湖北省");
            }
          } else {
            // 没有对应的编码跳主地图
            this.cityCode = cityCode;
            // 420000 主地图
            this.geoCounty = false
            this.getProvinceMapOpt(420000, "湖北省");
          }
        });
      });
      window.onresize = function () {
        if (this.myChart) this.myChart.resize();
      };
    },
// 下载/显示各省地图
    getProvinceMapOpt (provinceAlphabet, name) {
      console.log(provinceAlphabet);
      // 根据地区编码获取所在地区的JSON地图
      let path = `https://geo.datav.aliyun.com/areas_v3/bound/${provinceAlphabet}_full.json`;
      // if (provinceAlphabet === 420000) {
      //   path = "/mapJson/china.json";
      // }
      axios.get(path).then((res) => {

        // 获取完最新的JSON地图数据后,重新渲染
        echarts.registerMap(name, res.data);
        this.changeOptions(name);
        this.myChart.setOption(this.distributionOptions, true);
      }).catch((error) => {
        this.geoCounty = true
        // 请求出错时的处理逻辑 - 此时有可能是请求到县了,县的请求地址跟其他层级请求地址不一样
        this.getProvinceMapOptCounty(provinceAlphabet, name)
        // console.error('请求出错:', error);
      });
    },
    // 获取县级别的地图数据
    getProvinceMapOptCounty (provinceAlphabet, name) {
      // 根据地区编码获取所在地区的JSON地图
      let path = `https://geo.datav.aliyun.com/areas_v3/bound/${provinceAlphabet}.json`;
      axios.get(path).then((res) => {

        // 获取完最新的JSON地图数据后,重新渲染
        echarts.registerMap(name, res.data);
        this.changeOptions(name);
        this.myChart.setOption(this.distributionOptions, true);
      }).catch((error) => {
        // 请求出错时的处理逻辑 - 此时有可能是请求到县了,县的请求地址跟其他层级请求地址不一样
        console.error('请求出错:', error);
      });
    },

  • 不需要再点击县的话就返回第一级
// 下载/显示各省地图
    getProvinceMapOpt (provinceAlphabet, name) {
      // 根据地区编码获取所在地区的JSON地图
      let path = `https://geo.datav.aliyun.com/areas_v3/bound/${provinceAlphabet}_full.json`;
      // if (provinceAlphabet === 420000) {
      //   path = "/mapJson/china.json";
      // }
      axios.get(path).then((res) => {

        // 获取完最新的JSON地图数据后,重新渲染
        echarts.registerMap(name, res.data);
        this.changeOptions(name);
        this.myChart.setOption(this.distributionOptions, true);
      }).catch((error) => {
        this.geoCounty = true
        // 请求出错时的处理逻辑 - 此时有可能是请求到县了,县的请求地址跟其他层级请求地址不一样
        this.getProvinceMapOptCounty(provinceAlphabet, name)
        // console.error('请求出错:', error);
      });
    },
    // 获取县级别的地图数据
    getProvinceMapOptCounty (provinceAlphabet, name) {
      // 根据地区编码获取所在地区的JSON地图
      let path = `https://geo.datav.aliyun.com/areas_v3/bound/${provinceAlphabet}.json`;
      axios.get(path).then((res) => {

        // 获取完最新的JSON地图数据后,重新渲染
        echarts.registerMap(name, res.data);
        this.changeOptions(name);
        this.myChart.setOption(this.distributionOptions, true);
      }).catch((error) => {
        // 请求出错时的处理逻辑 - 此时有可能是请求到县了,县的请求地址跟其他层级请求地址不一样
        console.error('请求出错:', error);
      });
    },

完整代码:【默认带再点击县的话就返回第一级】

<template>
  <div>
    <div id="echatsMap" style="width: 100%; height: 800px"></div>
  </div>
</template>

<script>
import * as echarts from "echarts";
import axios from "axios";
import { cityCode } from "@/utils/cityCode.js";
export default {
  name: "echatsMap",
  components: {},
  data() {
    return {
      cityCode: cityCode,
      myChart: "",
      distributionOptions: "",
      geographicalCoordinates: [
        { name: "荆州市", value: [112.239741, 30.335165] },
      ],
      //   geoCounty: false,
    };
  },
  mounted() {
    this.$nextTick(() => {
      this.init();
    });
  },

  //   展示某个省的地图的话:
  //   1. 修改默认请求的Json数据
  //   2. 修改默认展示的地图名字等
  methods: {
    // 初始化地图数据
    init() {
      // 主地图的JSON文件下载
      let path = `https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json`;
      axios.get(path).then((res) => {
        echarts.registerMap("china", res.data);
        this.changeOptions("china");
        this.myChart = echarts.init(document.querySelector("#echatsMap"));
        this.myChart.setOption(this.distributionOptions);

        // 点击地图省市区展示省市区地图
        this.myChart.on("click", (chinaParam) => {
          // 如果没有下层则展示主地图
          if (!this.cityCode) {
            this.cityCode = cityCode;
            // 100000 主地图
            // this.geoCounty = false;
            this.geographicalCoordinates = [
              { name: "荆州市", value: [112.239741, 30.335165] },
            ];
            this.getProvinceMapOpt(100000, "");
            return;
          }
          // 根据点击位置地图名字去跟编码数据匹配
          let code = this.cityCode.find(
            (x) => chinaParam.name.indexOf(x ? x.name : "") !== -1
          );
          // 找到正确的编码   去获取对应的地图数据
          // 将该省市区的下级放入 -- 如果接口支持根据编码查询省市区所有下级子级就不需要这么写
          if (code) {
            this.cityCode = code.city;
            this.geographicalCoordinates = [];
            this.getProvinceMapOpt(Number(code.adcode), chinaParam.name);

            // 判断是否请求到了县级别
            // if (!this.geoCounty) {
            //   this.getProvinceMapOpt(Number(code.adcode), chinaParam.name);
            // } else {
            //   // this.getProvinceMapOptCounty(Number(code.adcode), chinaParam.name);
            //   // 已经没有再下层的数据了,再点击返回主视图
            //   this.cityCode = cityCode;
            //   // 420000 主地图
            //   this.geoCounty = false;
            //   this.getProvinceMapOpt(100000, "");
            // }
          } else {
            // 没有对应的编码跳主地图
            this.cityCode = cityCode;
            this.geographicalCoordinates = [
              { name: "荆州市", value: [112.239741, 30.335165] },
            ];
            // this.geoCounty = false;

            // 100000 主地图
            this.getProvinceMapOpt(100000, "");
          }
        });
      });
      window.onresize = function () {
        if (this.myChart) this.myChart.resize();
      };
    },

    // 下载/显示各省地图
    getProvinceMapOpt(provinceAlphabet, name) {
      // 根据地区编码获取所在地区的JSON地图
      let path = `https://geo.datav.aliyun.com/areas_v3/bound/${provinceAlphabet}_full.json`;
      //   if (provinceAlphabet === 100000) {
      //     path = "/mapJson/china.json";
      //   }
      axios
        .get(path)
        .then((res) => {
          // 获取完最新的JSON地图数据后,重新渲染
          echarts.registerMap(name, res.data);
          this.changeOptions(name);
          this.myChart.setOption(this.distributionOptions, true);
        })
        .catch((error) => {
          // 添加县级以上请求地图数据失败捕获
          // 请求出错时的处理逻辑 - 此时有可能是请求到县了,县的请求地址跟其他层级请求地址不一样
          console.error("请求出错:", error);
          //   this.geoCounty = true;
          //   this.getProvinceMapOptCounty(provinceAlphabet, name);
        });
    },

    // 县级别以上都是用的 https://geo.datav.aliyun.com/areas_v3/bound/${区域编码}_full.json去获取的JSON地图数据,
    // 但到了县这个请求地址就变了,变成了https://geo.datav.aliyun.com/areas_v3/bound/${区域编码}.json

    // 获取县级别的地图数据
    getProvinceMapOptCounty(provinceAlphabet, name) {
      // 此时在县级别以上获取数据失败时去请求,并记录此时请求到了县级别(因为没有县级以下的数据了,再点击县的话就返回第一级)
      // 需要再点击县的话就返回第一级代码

      // 根据地区编码获取所在地区的JSON地图
      let path = `https://geo.datav.aliyun.com/areas_v3/bound/${provinceAlphabet}.json`;
      axios
        .get(path)
        .then((res) => {
          // 获取完最新的JSON地图数据后,重新渲染
          echarts.registerMap(name, res.data);
          this.changeOptions(name);
          this.myChart.setOption(this.distributionOptions, true);
        })
        .catch((error) => {
          // 请求出错时的处理逻辑 - 此时有可能是请求到县了,县的请求地址跟其他层级请求地址不一样
          console.error("请求出错:", error);
        });
    },

    // echarts 配置项
    changeOptions(name) {
      // 经纬度数据  --- 不存在的经纬度不会展示出来
      //   const seriesList = [
      //     {
      //       data: [{ value: [106.9, 27.7] }, { value: [105.29, 27.32] }],
      //     },
      //   ];
      const seriesList = [
        {
          data: this.geographicalCoordinates,
        },
      ];
      // 图标
      const series = seriesList.map((v) => {
        return {
          type: "scatter", //配置显示方式为用户自定义
          coordinateSystem: "geo",
          data: v.data,
          // 自定义图标的样式  支持svg与bse64
          symbol: function (params, key) {
            console.log(params, key);
            return "image://" + require("@/assets/logo.png");
          },
          symbolSize: 16,
          tooltip: {
            trigger: "item",
            // show:false,
            formatter: function (params) {
              // 自定义 tooltip 内容
              return `名称:${params.data.name}<br/>坐标:<br/>经度:${params.data.value[0]}<br/>纬度:${params.data.value[1]}`;
            },
          },
        };
      });

      // options
      this.distributionOptions = {
        tooltip: {
          // 提示框组件
          show: true, // 显示提示框组件
          trigger: "item", // 触发类型
          triggerOn: "mousemove", // 触发条件
          formatter: "名称:{b}<br/>坐标:{c}",
        },
        series, // 数据
        geo: {
          map: name || "china", // 引入地图 省份或者 国家
          layoutCenter: ["50%", "50%"], //设置后left/right/top/bottom等属性无效
          layoutSize: "45%",
          roam: true, //开启鼠标缩放
          zoom: 2,
          label: {
            normal: {
              //静态的时候展示样式
              show: true, //是否显示地图省份得名称
              textStyle: {
                color: "#fff",
                fontSize: 10,
                fontFamily: "Arial",
              },
            },
            emphasis: {
              // 高亮状态下的样式
              //动态展示的样式
              color: "#fff",
            },
          },
          itemStyle: {
            // 地图区域的多边形 图形样式。
            normal: {
              borderColor: "rgba(147, 235, 248, 1)", // 边框颜色
              borderWidth: 1,
              //   areaColor: "#1c2f59", //  区域颜色
              areaColor: {
                type: "radial",
                x: 0.5,
                y: 0.5,
                r: 0.8,
                colorStops: [
                  {
                    offset: 0,
                    color: "rgba(147, 235, 248, 0)", // 0% 处的颜色
                  },
                  {
                    offset: 1,
                    color: "rgba(147, 235, 248, .2)", // 100% 处的颜色
                  },
                ],
                globalCoord: false, // 缺省为 false
              },
              // areaColor: { // 使用背景图片
              //   type: "pattern",
              //   image: require("@/assets/texture.jpeg"), // 使用自己本地图片路径
              //   repeat: "repeat", //可选值repeat、no-repeat、repeat-x、repeat-y
              // },

              shadowColor: "rgba(128, 217, 248, 1)",
              // shadowColor: 'rgba(255, 255, 255, 1)',
              shadowOffsetX: -2,
              shadowOffsetY: 2,
              shadowBlur: 10,
              textStyle: {
                // 文字颜色
                color: "#fff",
              },
              // shadowBlur: 10, // 图形阴影的模糊大小
              // shadowOffsetX: 10, // 阴影水平方向上的偏移距离。
            },
            emphasis: {
              areaColor: "#1c2f59",
              color: "#fff",
            },
          },
          regions: [
            //对不同的区块进行着色
            // {
            //   name: "河南省", //区块名称
            //   itemStyle: {
            //     normal: {
            //       areaColor: "#281fe1",
            //     },
            //   },
            // },
            // {
            //   name: "浙江省", //区块名称
            //   itemStyle: {
            //     normal: {
            //       areaColor: "#193094",
            //     },
            //   },
            // },
          ],
        },
      };
    },
  },
};
</script>

数据:

// cityCode.js

export const cityCode = [
  {
    name: "安徽",
    adcode: "340000",
    city: [
      {
        adcode: "340100",
        name: "合肥",
      },
      {
        adcode: "340200",
        name: "芜湖",
      },
      {
        adcode: "340300",
        name: "蚌埠",
      },
      {
        adcode: "340400",
        name: "淮南",
      },
      {
        adcode: "340500",
        name: "马鞍山",
      },
      {
        adcode: "340600",
        name: "淮北",
      },
      {
        adcode: "340700",
        name: "铜陵",
      },
      {
        adcode: "340800",
        name: "安庆",
      },
      {
        adcode: "341000",
        name: "黄山",
      },
      {
        adcode: "341100",
        name: "滁州",
      },
      {
        adcode: "341200",
        name: "阜阳",
      },
      {
        adcode: "341300",
        name: "宿州",
      },
      {
        adcode: "341500",
        name: "六安",
      },
      {
        adcode: "341600",
        name: "亳州",
      },
      {
        adcode: "341700",
        name: "池州",
      },
      {
        adcode: "341800",
        name: "宣城",
      },
    ],
  },
  {
    name: "福建",
    adcode: "350000",
    city: [
      {
        adcode: "350100",
        name: "福州",
      },
      {
        adcode: "350200",
        name: "厦门",
      },
      {
        adcode: "350300",
        name: "莆田",
      },
      {
        adcode: "350400",
        name: "三明",
      },
      {
        adcode: "350500",
        name: "泉州",
      },
      {
        adcode: "350600",
        name: "漳州",
      },
      {
        adcode: "350700",
        name: "南平",
      },
      {
        adcode: "350800",
        name: "龙岩",
      },
      {
        adcode: "350900",
        name: "宁德",
      },
    ],
  },
  {
    name: "广东",
    adcode: "440000",
    city: [
      {
        adcode: "440100",
        name: "广州",
      },
      {
        adcode: "440200",
        name: "韶关",
      },
      {
        adcode: "440300",
        name: "深圳",
      },
      {
        adcode: "440400",
        name: "珠海",
      },
      {
        adcode: "440500",
        name: "汕头",
      },
      {
        adcode: "440600",
        name: "佛山",
      },
      {
        adcode: "440700",
        name: "江门",
      },
      {
        adcode: "440800",
        name: "湛江",
      },
      {
        adcode: "440900",
        name: "茂名",
      },
      {
        adcode: "441200",
        name: "肇庆",
      },
      {
        adcode: "441300",
        name: "惠州",
      },
      {
        adcode: "441400",
        name: "梅州",
      },
      {
        adcode: "441500",
        name: "汕尾",
      },
      {
        adcode: "441600",
        name: "河源",
      },
      {
        adcode: "441700",
        name: "阳江",
      },
      {
        adcode: "441800",
        name: "清远",
      },
      {
        adcode: "441900",
        name: "东莞",
      },
      {
        adcode: "442000",
        name: "中山",
      },
      {
        adcode: "445100",
        name: "潮州",
      },
      {
        adcode: "445200",
        name: "揭阳",
      },
      {
        adcode: "445300",
        name: "云浮",
      },
    ],
  },
  {
    name: "广西",
    adcode: "450000",
    city: [
      {
        adcode: "450100",
        name: "南宁",
      },
      {
        adcode: "450200",
        name: "柳州",
      },
      {
        adcode: "450300",
        name: "桂林",
      },
      {
        adcode: "450400",
        name: "梧州",
      },
      {
        adcode: "450500",
        name: "北海",
      },
      {
        adcode: "450600",
        name: "防城港",
      },
      {
        adcode: "450700",
        name: "钦州",
      },
      {
        adcode: "450800",
        name: "贵港",
      },
      {
        adcode: "450900",
        name: "玉林",
      },
      {
        adcode: "451000",
        name: "百色",
      },
      {
        adcode: "451100",
        name: "贺州",
      },
      {
        adcode: "451200",
        name: "河池",
      },
      {
        adcode: "451300",
        name: "来宾",
      },
      {
        adcode: "451400",
        name: "崇左",
      },
    ],
  },
  {
    name: "贵州",
    adcode: "520000",
    city: [
      {
        adcode: "520100",
        name: "贵阳",
      },
      {
        adcode: "520200",
        name: "六盘水",
      },
      {
        adcode: "520300",
        name: "遵义",
      },
      {
        adcode: "520400",
        name: "安顺",
      },
      {
        adcode: "520500",
        name: "毕节",
      },
      {
        adcode: "520600",
        name: "铜仁",
      },
      {
        adcode: "522300",
        name: "黔西南布依族苗族自治州",
      },
      {
        adcode: "522600",
        name: "黔东南苗族侗族自治州",
      },
      {
        adcode: "522700",
        name: "黔南布依族苗族自治州",
      },
    ],
  },
  {
    name: "甘肃",
    adcode: "620000",
    city: [
      {
        adcode: "620100",
        name: "兰州",
      },
      {
        adcode: "620200",
        name: "嘉峪关",
      },
      {
        adcode: "620300",
        name: "金昌",
      },
      {
        adcode: "620400",
        name: "白银",
      },
      {
        adcode: "620500",
        name: "天水",
      },
      {
        adcode: "620600",
        name: "武威",
      },
      {
        adcode: "620700",
        name: "张掖",
      },
      {
        adcode: "620800",
        name: "平凉",
      },
      {
        adcode: "620900",
        name: "酒泉",
      },
      {
        adcode: "621000",
        name: "庆阳",
      },
      {
        adcode: "621100",
        name: "定西",
      },
      {
        adcode: "621200",
        name: "陇南",
      },
      {
        adcode: "622900",
        name: "临夏回族自治州",
      },
      {
        adcode: "623000",
        name: "甘南藏族自治州",
      },
    ],
  },
  {
    name: "河北",
    adcode: "130000",
    city: [
      {
        adcode: "130100",
        name: "石家庄",
      },
      {
        adcode: "130200",
        name: "唐山",
      },
      {
        adcode: "130300",
        name: "秦皇岛",
      },
      {
        adcode: "130400",
        name: "邯郸",
      },
      {
        adcode: "130500",
        name: "邢台",
      },
      {
        adcode: "130600",
        name: "保定",
      },
      {
        adcode: "130700",
        name: "张家口",
      },
      {
        adcode: "130800",
        name: "承德",
      },
      {
        adcode: "130900",
        name: "沧州",
      },
      {
        adcode: "131000",
        name: "廊坊",
      },
      {
        adcode: "131100",
        name: "衡水",
      },
    ],
  },
  {
    name: "黑龙江",
    adcode: "230000",
    city: [
      {
        adcode: "230100",
        name: "哈尔滨",
      },
      {
        adcode: "230200",
        name: "齐齐哈尔",
      },
      {
        adcode: "230300",
        name: "鸡西",
      },
      {
        adcode: "230400",
        name: "鹤岗",
      },
      {
        adcode: "230500",
        name: "双鸭山",
      },
      {
        adcode: "230600",
        name: "大庆",
      },
      {
        adcode: "230700",
        name: "伊春",
      },
      {
        adcode: "230800",
        name: "佳木斯",
      },
      {
        adcode: "230900",
        name: "七台河",
      },
      {
        adcode: "231000",
        name: "牡丹江",
      },
      {
        adcode: "231100",
        name: "黑河",
      },
      {
        adcode: "231200",
        name: "绥化",
      },
      {
        adcode: "232700",
        name: "大兴安岭",
      },
    ],
  },
  {
    name: "河南省",
    adcode: "410000",
    city: [
      {
        adcode: "410100",
        name: "郑州",
      },
      {
        adcode: "410200",
        name: "开封",
      },
      {
        adcode: "410300",
        name: "洛阳",
      },
      {
        adcode: "410400",
        name: "平顶山",
      },
      {
        adcode: "410500",
        name: "安阳",
      },
      {
        adcode: "410600",
        name: "鹤壁",
      },
      {
        adcode: "410700",
        name: "新乡",
      },
      {
        adcode: "410800",
        name: "焦作",
      },
      {
        adcode: "410900",
        name: "濮阳",
      },
      {
        adcode: "411000",
        name: "许昌市",
      },
      {
        adcode: "411100",
        name: "漯河",
      },
      {
        adcode: "411200",
        name: "三门峡",
      },
      {
        adcode: "411300",
        name: "南阳",
      },
      {
        adcode: "411400",
        name: "商丘",
      },
      {
        adcode: "411500",
        name: "信阳",
      },
      {
        adcode: "411600",
        name: "周口",
      },
      {
        adcode: "411700",
        name: "驻马店",
      },
      {
        adcode: "419001",
        name: "济源",
      },
    ],
  },
  {
    name: "湖北",
    adcode: "420000",
    city: [
      {
        adcode: "420100",
        name: "武汉",
      },
      {
        adcode: "420200",
        name: "黄石",
      },
      {
        adcode: "420300",
        name: "十堰",
      },
      {
        adcode: "420500",
        name: "宜昌",
      },
      {
        adcode: "420600",
        name: "襄阳",
      },
      {
        adcode: "420700",
        name: "鄂州",
      },
      {
        adcode: "420800",
        name: "荆门",
      },
      {
        adcode: "420900",
        name: "孝感",
      },
      {
        adcode: "421000",
        name: "荆州",
      },
      {
        adcode: "421100",
        name: "黄冈",
      },
      {
        adcode: "421200",
        name: "咸宁",
      },
      {
        adcode: "421300",
        name: "随州",
      },
      {
        adcode: "422800",
        name: "恩施土家族苗族自治州",
      },
      {
        adcode: "429004",
        name: "仙桃",
      },
      {
        adcode: "429005",
        name: "潜江",
      },
      {
        adcode: "429006",
        name: "天门",
      },
      {
        adcode: "429021",
        name: "神农架林区",
      },
    ],
  },
  {
    name: "湖南",
    adcode: "430000",
    city: [
      {
        adcode: "430100",
        name: "长沙",
      },
      {
        adcode: "430200",
        name: "株洲",
      },
      {
        adcode: "430300",
        name: "湘潭",
      },
      {
        adcode: "430400",
        name: "衡阳",
      },
      {
        adcode: "430500",
        name: "邵阳",
      },
      {
        adcode: "430600",
        name: "岳阳",
      },
      {
        adcode: "430700",
        name: "常德",
      },
      {
        adcode: "430800",
        name: "张家界",
      },
      {
        adcode: "430900",
        name: "益阳",
      },
      {
        adcode: "431000",
        name: "郴州",
      },
      {
        adcode: "431100",
        name: "永州",
      },
      {
        adcode: "431200",
        name: "怀化",
      },
      {
        adcode: "431300",
        name: "娄底",
      },
      {
        adcode: "433100",
        name: "湘西土家族苗族自治州",
      },
    ],
  },
  {
    name: "海南",
    adcode: "460000",
    city: [
      {
        adcode: "460100",
        name: "海口",
      },
      {
        adcode: "460200",
        name: "三亚",
      },
      {
        adcode: "460300",
        name: "三沙",
      },
      {
        adcode: "460400",
        name: "儋州",
      },
    ],
  },
  {
    name: "吉林",
    adcode: "220000",
    city: [
      {
        adcode: "220100",
        name: "长春",
      },
      {
        adcode: "220200",
        name: "吉林",
      },
      {
        adcode: "220300",
        name: "四平",
      },
      {
        adcode: "220400",
        name: "辽源",
      },
      {
        adcode: "220500",
        name: "通化",
      },
      {
        adcode: "220600",
        name: "白山",
      },
      {
        adcode: "220700",
        name: "松原",
      },
      {
        adcode: "220800",
        name: "白城",
      },
      {
        adcode: "222400",
        name: "延边朝鲜族自治州",
      },
    ],
  },
  {
    name: "江苏",
    adcode: "320000",
    city: [
      {
        adcode: "320100",
        name: "南京",
      },
      {
        adcode: "320200",
        name: "无锡",
      },
      {
        adcode: "320300",
        name: "徐州",
      },
      {
        adcode: "320400",
        name: "常州",
      },
      {
        adcode: "320500",
        name: "苏州",
      },
      {
        adcode: "320600",
        name: "南通",
      },
      {
        adcode: "320700",
        name: "连云港",
      },
      {
        adcode: "320800",
        name: "淮安",
      },
      {
        adcode: "320900",
        name: "盐城",
      },
      {
        adcode: "321000",
        name: "扬州",
      },
      {
        adcode: "321100",
        name: "镇江",
      },
      {
        adcode: "321200",
        name: "泰州",
      },
      {
        adcode: "321300",
        name: "宿迁",
      },
    ],
  },
  {
    name: "江西",
    adcode: "360000",
    city: [
      {
        adcode: "360100",
        name: "南昌",
      },
      {
        adcode: "360200",
        name: "景德镇",
      },
      {
        adcode: "360300",
        name: "萍乡",
      },
      {
        adcode: "360400",
        name: "九江",
      },
      {
        adcode: "360500",
        name: "新余",
      },
      {
        adcode: "360600",
        name: "鹰潭",
      },
      {
        adcode: "360700",
        name: "赣州",
      },
      {
        adcode: "360800",
        name: "吉安",
      },
      {
        adcode: "360900",
        name: "宜春",
      },
      {
        adcode: "361000",
        name: "抚州",
      },
      {
        adcode: "361100",
        name: "上饶",
      },
    ],
  },
  {
    name: "辽宁",
    adcode: "210000",
    city: [
      {
        adcode: "210100",
        name: "沈阳",
      },
      {
        adcode: "210200",
        name: "大连",
      },
      {
        adcode: "210300",
        name: "鞍山",
      },
      {
        adcode: "210400",
        name: "抚顺",
      },
      {
        adcode: "210500",
        name: "本溪",
      },
      {
        adcode: "210600",
        name: "丹东",
      },
      {
        adcode: "210700",
        name: "锦州",
      },
      {
        adcode: "210800",
        name: "营口",
      },
      {
        adcode: "210900",
        name: "阜新",
      },
      {
        adcode: "211000",
        name: "辽阳",
      },
      {
        adcode: "211100",
        name: "盘锦",
      },
      {
        adcode: "211200",
        name: "铁岭",
      },
      {
        adcode: "211300",
        name: "朝阳",
      },
      {
        adcode: "211400",
        name: "葫芦岛",
      },
    ],
  },
  {
    name: "内蒙古",
    adcode: "150000",
    city: [
      {
        adcode: "150100",
        name: "呼和浩特",
      },
      {
        adcode: "150200",
        name: "包头",
      },
      {
        adcode: "150300",
        name: "乌海",
      },
      {
        adcode: "150400",
        name: "赤峰",
      },
      {
        adcode: "150500",
        name: "通辽",
      },
      {
        adcode: "150600",
        name: "鄂尔多斯",
      },
      {
        adcode: "150700",
        name: "呼伦贝尔",
      },
      {
        adcode: "150800",
        name: "巴彦淖尔",
      },
      {
        adcode: "150900",
        name: "乌兰察布",
      },
      {
        adcode: "152200",
        name: "兴安盟",
      },
      {
        adcode: "152500",
        name: "锡林郭勒盟",
      },
      {
        adcode: "152900",
        name: "阿拉善盟",
      },
    ],
  },
  {
    name: "宁夏",
    adcode: "640000",
    city: [
      {
        adcode: "640100",
        name: "银川",
      },
      {
        adcode: "640200",
        name: "石嘴山",
      },
      {
        adcode: "640300",
        name: "吴忠",
      },
      {
        adcode: "640400",
        name: "固原",
      },
      {
        adcode: "640500",
        name: "中卫",
      },
    ],
  },
  {
    name: "青海",
    adcode: "630000",
    city: [
      {
        adcode: "630100",
        name: "西宁",
      },
      {
        adcode: "630200",
        name: "海东",
      },
      {
        adcode: "632200",
        name: "海北藏族自治州",
      },
      {
        adcode: "632300",
        name: "黄南藏族自治州",
      },
      {
        adcode: "632500",
        name: "海南藏族自治州",
      },
      {
        adcode: "632600",
        name: "果洛藏族自治州",
      },
      {
        adcode: "632700",
        name: "玉树藏族自治州",
      },
      {
        adcode: "632800",
        name: "海西蒙古族藏族自治州",
      },
    ],
  },
  {
    name: "山西",
    adcode: "140000",
    city: [
      {
        adcode: "140100",
        name: "太原",
      },
      {
        adcode: "140200",
        name: "大同",
      },
      {
        adcode: "140300",
        name: "阳泉",
      },
      {
        adcode: "140400",
        name: "长治",
      },
      {
        adcode: "140500",
        name: "晋城",
      },
      {
        adcode: "140600",
        name: "朔州",
      },
      {
        adcode: "140700",
        name: "晋中",
      },
      {
        adcode: "140800",
        name: "运城",
      },
      {
        adcode: "140900",
        name: "忻州",
      },
      {
        adcode: "141000",
        name: "临汾",
      },
      {
        adcode: "141100",
        name: "吕梁",
      },
    ],
  },
  {
    name: "山东",
    adcode: "370000",
    city: [
      {
        adcode: "370100",
        name: "济南",
      },
      {
        adcode: "370200",
        name: "青岛",
      },
      {
        adcode: "370300",
        name: "淄博",
      },
      {
        adcode: "370400",
        name: "枣庄",
      },
      {
        adcode: "370500",
        name: "东营",
      },
      {
        adcode: "370600",
        name: "烟台",
      },
      {
        adcode: "370700",
        name: "潍坊",
      },
      {
        adcode: "370800",
        name: "济宁",
      },
      {
        adcode: "370900",
        name: "泰安",
      },
      {
        adcode: "371000",
        name: "威海",
      },
      {
        adcode: "371100",
        name: "日照",
      },
      {
        adcode: "371200",
        name: "莱芜",
      },
      {
        adcode: "371300",
        name: "临沂",
      },
      {
        adcode: "371400",
        name: "德州",
      },
      {
        adcode: "371500",
        name: "聊城",
      },
      {
        adcode: "371600",
        name: "滨州",
      },
      {
        adcode: "371700",
        name: "菏泽",
      },
    ],
  },
  {
    name: "四川",
    adcode: "510000",
    city: [
      {
        adcode: "510100",
        name: "成都",
      },
      {
        adcode: "510300",
        name: "自贡",
      },
      {
        adcode: "510400",
        name: "攀枝花",
      },
      {
        adcode: "510500",
        name: "泸州",
      },
      {
        adcode: "510600",
        name: "德阳",
      },
      {
        adcode: "510700",
        name: "绵阳",
      },
      {
        adcode: "510800",
        name: "广元",
      },
      {
        adcode: "510900",
        name: "遂宁",
      },
      {
        adcode: "511000",
        name: "内江",
      },
      {
        adcode: "511100",
        name: "乐山",
      },
      {
        adcode: "511300",
        name: "南充",
      },
      {
        adcode: "511400",
        name: "眉山",
      },
      {
        adcode: "511500",
        name: "宜宾",
      },
      {
        adcode: "511600",
        name: "广安",
      },
      {
        adcode: "511700",
        name: "达州",
      },
      {
        adcode: "511800",
        name: "雅安",
      },
      {
        adcode: "511900",
        name: "巴中",
      },
      {
        adcode: "512000",
        name: "资阳",
      },
      {
        adcode: "513200",
        name: "阿坝藏族羌族自治州",
      },
      {
        adcode: "513300",
        name: "甘孜藏族自治州",
      },
      {
        adcode: "513400",
        name: "凉山彝族自治州",
      },
    ],
  },
  {
    name: "陕西",
    adcode: "610000",
    city: [
      {
        adcode: "610100",
        name: "西安",
      },
      {
        adcode: "610200",
        name: "铜川",
      },
      {
        adcode: "610300",
        name: "宝鸡",
      },
      {
        adcode: "610400",
        name: "咸阳",
      },
      {
        adcode: "610500",
        name: "渭南",
      },
      {
        adcode: "610600",
        name: "延安",
      },
      {
        adcode: "610700",
        name: "汉中",
      },
      {
        adcode: "610800",
        name: "榆林",
      },
      {
        adcode: "610900",
        name: "安康",
      },
      {
        adcode: "611000",
        name: "商洛",
      },
    ],
  },
  {
    name: "西藏",
    adcode: "540000",
    city: [
      {
        adcode: "540100",
        name: "拉萨",
      },
      {
        adcode: "540200",
        name: "日喀则",
      },
      {
        adcode: "540300",
        name: "昌都",
      },
      {
        adcode: "540400",
        name: "林芝",
      },
      {
        adcode: "540500",
        name: "山南",
      },
      {
        adcode: "540600",
        name: "那曲",
      },
      {
        adcode: "542500",
        name: "阿里",
      },
    ],
  },
  {
    name: "新疆",
    adcode: "650000",
    city: [
      {
        adcode: "650100",
        name: "乌鲁木齐",
      },
      {
        adcode: "650200",
        name: "克拉玛依",
      },
      {
        adcode: "650400",
        name: "吐鲁番",
      },
      {
        adcode: "650500",
        name: "哈密",
      },
      {
        adcode: "652300",
        name: "昌吉回族自治州",
      },
      {
        adcode: "652700",
        name: "博尔塔拉蒙古自治州",
      },
      {
        adcode: "652800",
        name: "巴音郭楞蒙古自治州",
      },
      {
        adcode: "652900",
        name: "阿克苏",
      },
      {
        adcode: "653000",
        name: "克孜勒苏柯尔克孜自治州",
      },
      {
        adcode: "653100",
        name: "喀什",
      },
      {
        adcode: "653200",
        name: "和田",
      },
      {
        adcode: "654000",
        name: "伊犁哈萨克自治州",
      },
      {
        adcode: "654200",
        name: "塔城",
      },
      {
        adcode: "654300",
        name: "阿勒泰",
      },
      {
        adcode: "659001",
        name: "石河子",
      },
      {
        adcode: "659002",
        name: "阿拉尔",
      },
      {
        adcode: "659003",
        name: "图木舒克",
      },
      {
        adcode: "659004",
        name: "五家渠",
      },
    ],
  },
  {
    name: "云南",
    adcode: "530000",
    city: [
      {
        adcode: "530100",
        name: "昆明",
      },
      {
        adcode: "530300",
        name: "曲靖",
      },
      {
        adcode: "530400",
        name: "玉溪",
      },
      {
        adcode: "530500",
        name: "保山",
      },
      {
        adcode: "530600",
        name: "昭通",
      },
      {
        adcode: "530700",
        name: "丽江",
      },
      {
        adcode: "530800",
        name: "普洱",
      },
      {
        adcode: "530900",
        name: "临沧",
      },
      {
        adcode: "532300",
        name: "楚雄彝族自治州",
      },
      {
        adcode: "532500",
        name: "红河哈尼族彝族自治州",
      },
      {
        adcode: "532600",
        name: "文山壮族苗族自治州",
      },
      {
        adcode: "532800",
        name: "西双版纳傣族自治州",
      },
      {
        adcode: "532900",
        name: "大理白族自治州",
      },
      {
        adcode: "533100",
        name: "德宏傣族景颇族自治州",
      },
      {
        adcode: "533300",
        name: "怒江傈僳族自治州",
      },
      {
        adcode: "533400",
        name: "迪庆藏族自治州",
      },
    ],
  },
  {
    name: "浙江",
    adcode: "330000",
    city: [
      {
        adcode: "330100",
        name: "杭州",
      },
      {
        adcode: "330200",
        name: "宁波",
      },
      {
        adcode: "330300",
        name: "温州",
      },
      {
        adcode: "330400",
        name: "嘉兴",
      },
      {
        adcode: "330500",
        name: "湖州",
      },
      {
        adcode: "330600",
        name: "绍兴",
      },
      {
        adcode: "330700",
        name: "金华",
      },
      {
        adcode: "330800",
        name: "衢州",
      },
      {
        adcode: "330900",
        name: "舟山",
      },
      {
        adcode: "331000",
        name: "台州",
      },
      {
        adcode: "331100",
        name: "丽水",
      },
    ],
  },
  {
    adcode: "310000",
    name: "上海",
    city: [
      {
        adcode: "310100",
        name: "市辖区",
      },
      {
        adcode: "310101",
        name: "黄浦区",
      },
      {
        adcode: "310104",
        name: "徐汇区",
      },
      {
        adcode: "310105",
        name: "长宁区",
      },
      {
        adcode: "310106",
        name: "静安区",
      },
      {
        adcode: "310107",
        name: "普陀区",
      },
      {
        adcode: "310108",
        name: "闸北区",
      },
      {
        adcode: "310109",
        name: "虹口区",
      },
      {
        adcode: "310110",
        name: "杨浦区",
      },
      {
        adcode: "310112",
        name: "闵行区",
      },
      {
        adcode: "310113",
        name: "宝山区",
      },
      {
        adcode: "310114",
        name: "嘉定区",
      },
      {
        adcode: "310115",
        name: "浦东新区",
      },
      {
        adcode: "310116",
        name: "金山区",
      },
      {
        adcode: "310117",
        name: "松江区",
      },
      {
        adcode: "310118",
        name: "青浦区",
      },
      {
        adcode: "310120",
        name: "奉贤区",
      },
      {
        adcode: "310230",
        name: "崇明县",
      },
    ],
  },
  {
    name: "重庆",
    adcode: "500000",
    city: [
      {
        adcode: "500100",
        name: "市辖区",
      },
      {
        adcode: "500101",
        name: "万州区",
      },
      {
        adcode: "500102",
        name: "涪陵区",
      },
      {
        adcode: "500103",
        name: "渝中区",
      },
      {
        adcode: "500104",
        name: "大渡口区",
      },
      {
        adcode: "500105",
        name: "江北区",
      },
      {
        adcode: "500106",
        name: "沙坪坝区",
      },
      {
        adcode: "500107",
        name: "九龙坡区",
      },
      {
        adcode: "500108",
        name: "南岸区",
      },
      {
        adcode: "500109",
        name: "北碚区",
      },
      {
        adcode: "500110",
        name: "綦江区",
      },
      {
        adcode: "500111",
        name: "大足区",
      },
      {
        adcode: "500112",
        name: "渝北区",
      },
      {
        adcode: "500113",
        name: "巴南区",
      },
      {
        adcode: "500114",
        name: "黔江区",
      },
      {
        adcode: "500115",
        name: "长寿区",
      },
      {
        adcode: "500222",
        name: "綦江区",
      },
      {
        adcode: "500223",
        name: "潼南县",
      },
      {
        adcode: "500224",
        name: "铜梁县",
      },
      {
        adcode: "500225",
        name: "大足区",
      },
      {
        adcode: "500226",
        name: "荣昌县",
      },
      {
        adcode: "500227",
        name: "璧山县",
      },
      {
        adcode: "500228",
        name: "梁平县",
      },
      {
        adcode: "500229",
        name: "城口县",
      },
      {
        adcode: "500230",
        name: "丰都县",
      },
      {
        adcode: "500231",
        name: "垫江县",
      },
      {
        adcode: "500232",
        name: "武隆县",
      },
      {
        adcode: "500233",
        name: "忠县",
      },
      {
        adcode: "500234",
        name: "开县",
      },
      {
        adcode: "500235",
        name: "云阳县",
      },
      {
        adcode: "500236",
        name: "奉节县",
      },
      {
        adcode: "500237",
        name: "巫山县",
      },
      {
        adcode: "500238",
        name: "巫溪县",
      },
      {
        adcode: "500240",
        name: "石柱土家族自治县",
      },
      {
        adcode: "500241",
        name: "秀山土家族苗族自治县",
      },
      {
        adcode: "500242",
        name: "酉阳土家族苗族自治县",
      },
      {
        adcode: "500243",
        name: "彭水苗族土家族自治县",
      },
      {
        adcode: "500381",
        name: "江津区",
      },
      {
        adcode: "500382",
        name: "合川区",
      },
      {
        adcode: "500383",
        name: "永川区",
      },
      {
        adcode: "500384",
        name: "南川区",
      },
    ],
  },
  {
    name: "北京",
    adcode: "110000",
    city: [
      {
        adcode: "110101",
        name: "东城区",
      },
      {
        adcode: "110102",
        name: "西城区",
      },
      {
        adcode: "110105",
        name: "朝阳区",
      },
      {
        adcode: "110106",
        name: "丰台区",
      },
      {
        adcode: "110107",
        name: "石景山区",
      },
      {
        adcode: "110108",
        name: "海淀区",
      },
      {
        adcode: "110109",
        name: "门头沟区",
      },
      {
        adcode: "110111",
        name: "房山区",
      },
      {
        adcode: "110112",
        name: "通州区",
      },
      {
        adcode: "110113",
        name: "顺义区",
      },
      {
        adcode: "110114",
        name: "昌平区",
      },
      {
        adcode: "110115",
        name: "大兴区",
      },
      {
        adcode: "110116",
        name: "怀柔区",
      },
      {
        adcode: "110117",
        name: "平谷区",
      },
      {
        adcode: "110118",
        name: "亦庄开发区",
      },
      {
        adcode: "110228",
        name: "密云县",
      },
      {
        adcode: "110229",
        name: "延庆县",
      },
    ],
  },
  {
    name: "天津",
    adcode: "120000",
    city: [
      {
        adcode: "120101",
        name: "和平区",
      },
      {
        adcode: "120102",
        name: "河东区",
      },
      {
        adcode: "120103",
        name: "河西区",
      },
      {
        adcode: "120104",
        name: "南开区",
      },
      {
        adcode: "120105",
        name: "河北区",
      },
      {
        adcode: "120106",
        name: "红桥区",
      },
      {
        adcode: "120107",
        name: "塘沽区",
      },
      {
        adcode: "120108",
        name: "汉沽区",
      },
      {
        adcode: "120109",
        name: "大港区",
      },
      {
        adcode: "120110",
        name: "东丽区",
      },
      {
        adcode: "120111",
        name: "西青区",
      },
      {
        adcode: "120112",
        name: "津南区",
      },
      {
        adcode: "120113",
        name: "北辰区",
      },
      {
        adcode: "120114",
        name: "武清区",
      },
      {
        adcode: "120115",
        name: "宝坻区",
      },
      {
        adcode: "120221",
        name: "宁河县",
      },
      {
        adcode: "120223",
        name: "静海县",
      },
      {
        adcode: "120225",
        name: "蓟县",
      },
    ],
  },
  {
    name: "台湾",
    adcode: "710000",
    city: [
      {
        adcode: "719002",
        name: "台北",
      },
      {
        adcode: "719019",
        name: "高雄",
      },
      {
        adcode: "719017",
        name: "台中",
      },
      {
        adcode: "719016",
        name: "台南",
      },
      {
        adcode: "719010",
        name: "新北",
      },
      {
        adcode: "719011",
        name: "基隆",
      },
      {
        adcode: "719006",
        name: "新竹",
      },
      {
        adcode: "719004",
        name: "嘉义",
      },
    ],
  },
  {
    name: "香港特别行政区",
    adcode: "810000",
  },
  {
    name: "澳门特别行政区",
    adcode: "820000",
  },
];

// areaCode.js

export const areaCode = [
  {
    adcode: "420100",
    name: "武汉",
  },
  {
    adcode: "420200",
    name: "黄石",
  },
  {
    adcode: "420300",
    name: "十堰",
  },
  {
    adcode: "420500",
    name: "宜昌",
  },
  {
    adcode: "420600",
    name: "襄阳",
  },
  {
    adcode: "420700",
    name: "鄂州",
  },
  {
    adcode: "420800",
    name: "荆门",
  },
  {
    adcode: "420900",
    name: "孝感",
  },
  {
    adcode: "421000",
    name: "荆州",
  },
  {
    adcode: "421100",
    name: "黄冈",
  },
  {
    adcode: "421200",
    name: "咸宁",
  },
  {
    adcode: "421300",
    name: "随州",
  },
  {
    adcode: "422800",
    name: "恩施土家族苗族自治州",
  },
  {
    adcode: "429004",
    name: "仙桃",
  },
  {
    adcode: "429005",
    name: "潜江",
  },
  {
    adcode: "429006",
    name: "天门",
  },
  {
    adcode: "429021",
    name: "神农架林区",
  },
];

----------------------------dmeo测试----------------------------

<template>
  <div
    id="echatsMap"
    style="
      width: 100vw;
      height: 100vh; /* 使用视口高度 */
      position: relative;
      z-index: 1;
    "
  ></div>
</template>

<script>
import * as echarts from "echarts";
import axios from "axios";
import { cityCode } from "@/utils/cityCode.js";
import { getPointAreas } from "@/api/screen";

export default {
  name: "echatsMap",
  components: {},
  data() {
    return {
      cityCode: cityCode,
      myChart: "",
      distributionOptions: "",
      geographicalCoordinates: [{ name: "荆州市", value: [118.8062, 31.9208] }],
      pointList: [],
    };
  },

  // 省是0,市是1,区县是2
  async mounted() {
    await this.queryPointDatas({
      code: "",
    });

    this.$nextTick(async () => {
      await this.init();
    });
  },

  //   展示某个省的地图的话:
  //   1. 修改默认请求的Json数据
  //   2. 修改默认展示的地图名字等
  methods: {
    async queryPointDatas(params) {
      this.pointList = [];
      await getPointAreas({
        ...params,
      }).then((res) => {
        if (res.data.code == 200) {
          this.pointList = res.data.result;

          console.log("pointList", this.pointList);
        }
      });
    },

    // 初始化地图数据
    init() {
      // 主地图的JSON文件下载
      let path = `https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json`;
      axios.get(path).then((res) => {
        echarts.registerMap("china", res.data);
        this.changeOptions("china");
        this.myChart = echarts.init(document.querySelector("#echatsMap"));
        this.myChart.setOption(this.distributionOptions);
        this.myChart.on("dataZoom", () => {
          this.myChart.resize();
        });

        // 点击地图省市区展示省市区地图
        this.myChart.on("click", async (chinaParam) => {
          // 如果没有下层则展示主地图
          if (!this.cityCode) {
            this.cityCode = cityCode;
            await this.queryPointDatas({
              code: "",
            });
            // 100000 主地图
            this.geographicalCoordinates = [];
            this.getProvinceMapOpt(100000, "");
            return;
          }

          // 根据点击位置地图名字去跟编码数据匹配
          let code = this.cityCode.find(
            (x) => chinaParam.name.indexOf(x ? x.name : "") !== -1
          );
          // 找到正确的编码   去获取对应的地图数据
          // 将该省市区的下级放入 -- 如果接口支持根据编码查询省市区所有下级子级就不需要这么写
          if (code) {
            console.log("进入22222");

            this.cityCode = code.city;
            await this.queryPointDatas({
              code: code.adcode,
            });
            this.getProvinceMapOpt(Number(code.adcode), chinaParam.name);
          }

          console.log(
            "获取位置名称,经纬度----",
            Number(code.adcode),
            chinaParam.name
          );
        });
      });
      window.onresize = function () {
        if (this.myChart) this.myChart.resize();
      };
    },

    // 下载/显示各省地图
    getProvinceMapOpt(provinceAlphabet, name) {
      // 根据地区编码获取所在地区的JSON地图
      let path = `https://geo.datav.aliyun.com/areas_v3/bound/${provinceAlphabet}_full.json`;
      //   if (provinceAlphabet === 100000) {
      //     path = "/mapJson/china.json";
      //   }
      axios
        .get(path)
        .then((res) => {
          // 获取完最新的JSON地图数据后,重新渲染
          echarts.registerMap(name, res.data);
          this.changeOptions(name);
          this.myChart.setOption(this.distributionOptions, true);

          this.myChart.on("dataZoom", () => {
            this.myChart.resize();
          });
        })
        .catch((error) => {
          // 添加县级以上请求地图数据失败捕获
          // 请求出错时的处理逻辑 - 此时有可能是请求到县了,县的请求地址跟其他层级请求地址不一样
          console.error("请求出错:", error);
        });
    },

    // 县级别以上都是用的 https://geo.datav.aliyun.com/areas_v3/bound/${区域编码}_full.json去获取的JSON地图数据,
    // 但到了县这个请求地址就变了,变成了https://geo.datav.aliyun.com/areas_v3/bound/${区域编码}.json

    // echarts 配置项
    changeOptions(name) {
      // 经纬度数据  --- 不存在的经纬度不会展示出来
      // const seriesList = [
      //   {
      //     data: [
      //       { name: "11", value: [117.12, 34.2] },
      //       { name: "22", value: [117.2, 34.3] },
      //     ],
      //   },
      // ];

      // const seriesList = [
      //   {
      //     data: this.geographicalCoordinates,
      //   },
      // ];

      let arr = [];
      this.pointList.forEach((item) => {
        // 省,市(展示一个点)
        if (item.type != 2) {
          arr.push({
            name: item.name,
            value: [item.lon, item.lat],
            size: item.size,
            type: item.type,
          });
        } else {
          // 区:展示所有点
          item.list.forEach((ele) => {
            arr.push({
              name: ele.name,
              value: [ele.lon, ele.lat],
              person: ele.person,
              targetLevelName: ele.targetLevelName,
              telephone: ele.telephone,
              type: item.type,
            });

            // arr = [
            //   {
            //     name: "111",
            //     value: [118.8465671, 31.95852687],
            //     person: "person",
            //     targetLevelName: "targetLevelName",
            //     telephone: "telephone",
            //     type: 2,
            //   },
            // ];
          });
        }
      });

      let seriesList = [
        {
          data: arr,
        },
      ];

      // let seriesList1 = [
      //   {
      //     data: [
      //       {
      //         name: "测试江苏省的点位",
      //         size: 1,
      //         type: 0,
      //         value: [118.7695516, 32.06677694],
      //       },
      //     ],
      //   },
      // ];

      // 图标
      const series = seriesList.map((v) => {
        return {
          type: "effectScatter", //配置显示方式为用户自定义
          coordinateSystem: "geo",
          data: v.data,
          // data: [
          //   // ------------------省----------------------------
          //   // {
          //   //   name: "江苏省",
          //   //   visualMap: false,
          //   //   value: [118.767413, 32.041544],
          //   // },
          //   // {
          //   //   name: "安徽省",
          //   //   visualMap: false,
          //   //   value: [117.283042, 31.86119],
          //   // },
          //   // {
          //   //   name: "浙江省",
          //   //   visualMap: false,
          //   //   value: [120.153576, 30.287459],
          //   // },
          //   // ------------------市----------------------------
          //   // {
          //   //   name: "南京市",
          //   //   visualMap: false,
          //   //   value: [118.767413, 32.041544],
          //   // },
          //   // {
          //   //   name: "常州市",
          //   //   visualMap: false,
          //   //   value: [119.946973, 31.772752],
          //   // },
          //   // {
          //   //   name: "连云港市",
          //   //   visualMap: false,
          //   //   value: [119.178821, 34.600018],
          //   // },
          //   // ----------------区------------------------------
          //   // {
          //   //   name: "六合区",
          //   //   visualMap: false,
          //   //   value: [118.8413, 32.34222],
          //   // },
          //   // {
          //   //   name: "江宁区",
          //   //   visualMap: false,
          //   //   value: [118.8399, 31.95263],
          //   // },
          //   // {
          //   //   name: "雨花台区",
          //   //   visualMap: false,
          //   //   value: [118.7799, 31.99202],
          //   // },
          // ],
          showEffectOn: "render",
          zlevel: 2,
          rippleEffect: {
            period: 15,
            scale: 4,
            brushType: "fill",
          },
          hoverAnimation: true,
          label: {
            normal: {
              show: false,
            },
          },
          itemStyle: {
            normal: {
              // color: (param) => {
              //   return colorArr[param.dataIndex];
              // },
              color: "#d97d21",
              shadowBlur: 10,
              shadowColor: "#333",
            },
          },
          symbolSize: 12,

          // // 自定义图标的样式  支持svg与bse64
          // symbol: function (params, key) {
          //   console.log(params, key);
          //   // return "image://" + require("@/assets/logo.png");
          //   return "image://data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAAXNSR0IB2cksfwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAGlQTFRFAC1HIEA+n4obz6YN/8MAj4EfYGUs77kEoIsakIIf37AJPzAAr4YAn3kAb1UAQDEAAAAAIBkAMCUAf2EAHxgAv5IA36oAz54AgGIAYEkADwwALyQA77YAEAwAX0kAj20A4LAJ0KcN8LoESf7p1AAAAPhJREFUeJzNk8FygzAMRO3iEhJjEBFgAm6S9v8/sitDgcyk7qWd6R5kzD5JNoyUUvolM0+VvWoF5YfntuiQIz/hg9CqSPnGHNUpDWQq7RvzfwBbzotDqOpVbgFcTY3sz1hAWV7U8gJ0srMUXwLgWI37+UkAL+kNSawE4AGiS78C/VbBCWDt2Fqa/AZIRk0S3dyC2FC3a2GhliTGFsbD3QPdVmGIAI/mAXBInYhGKSFAeONHACrP05WGEL8Wew44+O6aJe5oAwpTfQFQD4ua29qCveQGV6FFZb90Db/4N/8WuKf9958HRyf9D4xvnvJzGW9dfHOOe4H8TwI2HczD/MFKAAAAAElFTkSuQmCC"; // 自定图标点图标
          // },
          // symbolSize: 16,
          // tooltip: {
          //   trigger: "item",
          //   // show:false,
          //   formatter: function (params) {
          //     // 自定义 tooltip 内容
          //     return `名称:${params.data.name}<br/>坐标:<br/>经度:${params.data.value[0]}<br/>纬度:${params.data.value[1]}`;
          //   },
          // },
        };
      });

      // options
      this.distributionOptions = {
        tooltip: {
          // 提示框组件
          show: true, // 显示提示框组件
          trigger: "item", // 触发类型
          triggerOn: "mousemove", // 触发条件
          // formatter: "名称:{b}<br/>坐标:{c}",
          formatter: function (params) {
            if (params.data.type != 2) {
              // 自定义 tooltip 内容
              return `${params.data.name}<br/>点位数量: ${params.data.size}个`;
            } else {
              return `点位名称: ${params.data.name}<br/>经纬度值: ${params.value[0]}, ${params.value[1]}<br/>联系人: ${params.data.name}<br/>
              目标水质: ${params.data.targetLevelName}<br/>联系电话: ${params.data.telephone}`;
            }
          },
        },
        series, // 数据
        geo: {
          map: name || "china", // 引入地图 省份或者 国家
          layoutCenter: ["60%", "70%"], //设置后left/right/top/bottom等属性无效
          layoutSize: "45%",
          // center: [104.114129, 37.550339], // 中国中心点
          // left: 1,
          // top: "10%",
          // right: 9,
          // bottom: 50,
          roam: true, //开启鼠标缩放
          zoom: 4,
          label: {
            normal: {
              //静态的时候展示样式
              show: true, //是否显示地图省份得名称
              textStyle: {
                color: "#fff",
                fontSize: 16,
                fontFamily: "Arial",
              },
            },
            emphasis: {
              // 高亮状态下的样式
              //动态展示的样式
              color: "#fff",
            },
          },
          itemStyle: {
            // 地图区域的多边形 图形样式。
            normal: {
              borderColor: "rgba(147, 235, 248, 1)", // 边框颜色
              borderWidth: 1,
              //   areaColor: "#1c2f59", //  区域颜色
              areaColor: {
                type: "radial",
                x: 0.5,
                y: 0.5,
                r: 0.8,
                colorStops: [
                  {
                    offset: 0,
                    color: "rgba(147, 235, 248, 0)", // 0% 处的颜色
                  },
                  {
                    offset: 1,
                    color: "rgba(147, 235, 248, .2)", // 100% 处的颜色
                  },
                ],
                globalCoord: false, // 缺省为 false
              },
              // areaColor: { // 使用背景图片
              //   type: "pattern",
              //   image: require("@/assets/texture.jpeg"), // 使用自己本地图片路径
              //   repeat: "repeat", //可选值repeat、no-repeat、repeat-x、repeat-y
              // },

              shadowColor: "rgba(128, 217, 248, 1)",
              // shadowColor: 'rgba(255, 255, 255, 1)',
              shadowOffsetX: -2,
              shadowOffsetY: 2,
              shadowBlur: 10,
              textStyle: {
                // 文字颜色
                color: "#fff",
              },
              // shadowBlur: 10, // 图形阴影的模糊大小
              // shadowOffsetX: 10, // 阴影水平方向上的偏移距离。
            },
            emphasis: {
              areaColor: "#1c2f59",
              color: "#fff",
            },
          },
          regions: [
            //对不同的区块进行着色
            // {
            //   name: "河南省", //区块名称
            //   itemStyle: {
            //     normal: {
            //       areaColor: "#281fe1",
            //     },
            //   },
            // },
            // {
            //   name: "浙江省", //区块名称
            //   itemStyle: {
            //     normal: {
            //       areaColor: "#193094",
            //     },
            //   },
            // },
          ],
        },
      };
    },

    // ==========测试输入点位功能=================================

    changeOptions2(name) {
      let arr = [];
      this.pointList.forEach((item) => {
        // 省,市(展示一个点)
        if (item.type != 2) {
          arr.push({
            name: item.name,
            value: [item.lon, item.lat],
            size: item.size,
            type: item.type,
          });
        } else {
          // 区:展示所有点
          item.list.forEach((ele) => {
            arr.push({
              name: ele.name,
              value: [ele.lon, ele.lat],
              person: ele.person,
              targetLevelName: ele.targetLevelName,
              telephone: ele.telephone,
              type: item.type,
            });
          });
        }
      });

      let seriesList1 = [
        {
          data: [
            {
              name: "测试江苏省的点位",
              size: 1,
              type: 0,
              value: [118.7695516, 32.06677694],
            },
          ],
        },
      ];

      // 图标
      const series = seriesList1.map((v) => {
        return {
          type: "effectScatter", //配置显示方式为用户自定义
          coordinateSystem: "geo",
          data: v.data,

          showEffectOn: "render",
          zlevel: 2,
          rippleEffect: {
            period: 15,
            scale: 4,
            brushType: "fill",
          },
          hoverAnimation: true,
          label: {
            normal: {
              show: false,
            },
          },
          itemStyle: {
            normal: {
              // color: (param) => {
              //   return colorArr[param.dataIndex];
              // },
              color: "#d97d21",
              shadowBlur: 10,
              shadowColor: "#333",
            },
          },
          symbolSize: 12,
        };
      });

      // options
      this.distributionOptions = {
        tooltip: {
          // 提示框组件
          show: true, // 显示提示框组件
          trigger: "item", // 触发类型
          triggerOn: "mousemove", // 触发条件
          // formatter: "名称:{b}<br/>坐标:{c}",
          formatter: function (params) {
            if (params.data.type != 2) {
              // 自定义 tooltip 内容
              return `${params.data.name}<br/>点位数量: ${params.data.size}个`;
            } else {
              return `点位名称: ${params.data.name}<br/>经纬度值: ${params.value[0]}, ${params.value[1]}<br/>联系人: ${params.data.name}<br/>
              目标水质: ${params.data.targetLevelName}<br/>联系电话: ${params.data.telephone}`;
            }
          },
        },
        series, // 数据
        geo: {
          map: name || "china", // 引入地图 省份或者 国家
          layoutCenter: ["60%", "70%"], //设置后left/right/top/bottom等属性无效
          layoutSize: "45%",
          // center: [104.114129, 37.550339], // 中国中心点
          // left: 1,
          // top: "10%",
          // right: 9,
          // bottom: 50,
          roam: true, //开启鼠标缩放
          zoom: 4,
          label: {
            normal: {
              //静态的时候展示样式
              show: true, //是否显示地图省份得名称
              textStyle: {
                color: "#fff",
                fontSize: 16,
                fontFamily: "Arial",
              },
            },
            emphasis: {
              // 高亮状态下的样式
              //动态展示的样式
              color: "#fff",
            },
          },
          itemStyle: {
            // 地图区域的多边形 图形样式。
            normal: {
              borderColor: "rgba(147, 235, 248, 1)", // 边框颜色
              borderWidth: 1,
              //   areaColor: "#1c2f59", //  区域颜色
              areaColor: {
                type: "radial",
                x: 0.5,
                y: 0.5,
                r: 0.8,
                colorStops: [
                  {
                    offset: 0,
                    color: "rgba(147, 235, 248, 0)", // 0% 处的颜色
                  },
                  {
                    offset: 1,
                    color: "rgba(147, 235, 248, .2)", // 100% 处的颜色
                  },
                ],
                globalCoord: false, // 缺省为 false
              },

              shadowColor: "rgba(128, 217, 248, 1)",
              // shadowColor: 'rgba(255, 255, 255, 1)',
              shadowOffsetX: -2,
              shadowOffsetY: 2,
              shadowBlur: 10,
              textStyle: {
                // 文字颜色
                color: "#fff",
              },
              // shadowBlur: 10, // 图形阴影的模糊大小
              // shadowOffsetX: 10, // 阴影水平方向上的偏移距离。
            },
            emphasis: {
              areaColor: "#1c2f59",
              color: "#fff",
            },
          },
          regions: [],
        },
      };
    },

    handleSelectChoose() {
      // 主地图的JSON文件下载
      let path = `https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json`;
      axios.get(path).then((res) => {
        echarts.registerMap("china", res.data);
        this.changeOptions2("china");
        this.myChart = echarts.init(document.querySelector("#echatsMap"));
        this.myChart.setOption(this.distributionOptions);
        this.myChart.on("dataZoom", () => {
          this.myChart.resize();
        });

        // 点击地图省市区展示省市区地图
        this.myChart.on("click", async (chinaParam) => {
          // 如果没有下层则展示主地图
          if (!this.cityCode) {
            this.cityCode = cityCode;
            await this.queryPointDatas({
              code: "",
            });
            // 100000 主地图
            this.geographicalCoordinates = [];
            this.getProvinceMapOpt(100000, "");
            return;
          }

          // 根据点击位置地图名字去跟编码数据匹配
          let code = this.cityCode.find(
            (x) => chinaParam.name.indexOf(x ? x.name : "") !== -1
          );
          // 找到正确的编码   去获取对应的地图数据
          // 将该省市区的下级放入 -- 如果接口支持根据编码查询省市区所有下级子级就不需要这么写
          if (code) {
            console.log("进入22222");

            this.cityCode = code.city;
            await this.queryPointDatas({
              code: code.adcode,
            });
            this.getProvinceMapOpt(Number(code.adcode), chinaParam.name);
          }

          console.log(
            "获取位置名称,经纬度----",
            Number(code.adcode),
            chinaParam.name
          );
        });
      });
      window.onresize = function () {
        if (this.myChart) this.myChart.resize();
      };
    },
  },
};
</script>

<style scoped lang="less">
// 全屏状态下,地图高度显示不全
::v-deep canvas[data-zr-dom-id="zr_0"] {
  width: 100vw !important; /* 全屏宽度 */
  height: 100vh !important; /* 全屏高度 */
}
</style>

需要的pointList数据形式:

image.png

image.png