echart创建中国地图、省份地图

知识点:
1.获取地区json数据:地理小工具

2.如果想特殊显示某个地区,但是json文件里面没有这个地区,可以直接在地理小工具里面复制出这个地区的json,按照格式复制进去就可以了

3.地图点击获取经纬度

 //点击事件
    this.myChart.on("click", (param) => {
      let data = this.myChart.convertFromPixel("geo", [
        param.event.offsetX,
        param.event.offsetY,
      ]);
      console.log(data);//可以知道点击的具体坐标位置
      // this.$emit("clickMap", params);
    });

完整代码:

<template>
  <div
    class="mapChart"
    id="cqChart"
    :style="`width:100%;height:${height}`"
  ></div>
</template>

<script>
import china from "./china2.json";
import * as echarts from "echarts";
export default {
  name: "cqChart",
  props: {},
  data() {
    return {
      height: "",
      myChart: null,
    };
  },

  created() {
    //页面创建时执行一次getHeight进行赋值,顺道绑定resize事件
    window.addEventListener("resize", this.getHeight);
    this.getHeight();
  },
  activated() {
    this.myChart.resize();
  },
  mounted() {
    this.myChart = echarts.init(document.getElementById("cqChart"));
    this.myChart.on("click", (param) => {
      //点击事件
      let data = this.myChart.convertFromPixel("geo", [
        param.event.offsetX,
        param.event.offsetY,
      ]);
      console.log(data);//可以知道点击的具体坐标位置
      // this.$emit("clickMap", params);
    });
    echarts.registerMap("泸州市", china);
    this.setOption();
    window.addEventListener("resize", () => {
      this.myChart.resize();
    });
  },
  methods: {
    //定义方法,获取高度减去头尾
    getHeight() {
      this.height = window.innerHeight - 280 + "px";
    },
    setOption() {
      let series = [];
      series.push(this.getSerise());//散点标记
      series.push(this.getSeriseLine());//画线
      let myChart = this.myChart;
      let option = {
        geo: {
          map: "泸州市",
          // roam: "scale", //只开启缩放
          zoomSensitivity: false,
          center: [105.703348, 28.109138], //中心坐标
          itemStyle: {
            areaColor: "rgba(0,0,0,0)",
            borderColor: "#0b827e",
            borderWidth: 2,
          },
          regions: [//高亮显示
            {
              name: "泸州市", //这个名字要和china.js保持一致
              itemStyle: {
                normal: {
                  areaColor: "#0f6f91", // 背景颜色
                  borderColor: "#f0f",
                  borderWidth: 1, // 边框宽度
                  shadowBlur: 3, // 阴影泛化程度
                  borderWidth: 0, //描边线宽。为 0 时无描边
                  shadowOffsetX: 3, //阴影水平方向上的偏移距离
                  shadowOffsetY: 3, //阴影垂直方向上的偏移距离
                },
              },
            },
          ],
          zoom: 7, //视角缩放比例//72
          label: {
            show: true,
            formatter: function (params) {
              let item = null;
              if (params.name == "泸州市") {//只显示泸州市名称
                let name = params.name;
                 return `{a|${name}}`
              }
              return "";
            },
            fontSize: "10",
            color: "#fff",
            lineHeight: 20,
            rich: { a: { fontSize: 16 } },
          },
          emphasis: {
            disabled: true,
            itemStyle: {
              areaColor: "red", //鼠标选择区域颜色
              shadowOffsetX: 0,
              shadowOffsetY: 0,
              shadowBlur: 20,
              borderWidth: 0,
              shadowColor: "rgba(0, 0, 0, 0.5)",
            },
          },
        },
        tooltip: {},
        series: series,
      };

      myChart.setOption(option);
    },
    getSerise() {
      let list = [
        {
          name: "河源",
          value: [105.42678508916828, 27.95926151571386],
          id: 3,
          type: "pie",
        },
        {
          name: "云山坝集气站",
          value: [105.34318636249864, 28.097542971129727],
          id: 3,
          type: "flag",
        },

      ];
      let data = {
        type: "scatter",
        map: "china",
        coordinateSystem: "geo",
        zlevel: 10,
        data: list,
        tooltip: {
          formatter(d) {},
        },
        symbolSize: 0,
        position: "top",
        label: {
          show: true,
          formatter: (params) => {

              return (
                "{" + params.data.type + "|}{cValue|" + params.data.name + "}"
              );
            
          },
          // lineHeight: 20,
          position: "inside",
          padding: [1, 3, 1, 3],
          color: "#ffffff",
          fontSize: 13,
          fontWeight: "normal",
          rich: {
            pie: {
              lineHeight: 35,
              height: 20,
              width: 20,
              backgroundColor: {
                image:
                  "https://cdn.minexiot.com/bigscreen/datav-img/c.png",
              },
              borderWidth: 1,
              verticalAlign: "middle",
              align: 'center',
              lineHeight:25,
            },
            flag: {
              height: 25,
              width: 25,
              backgroundColor: {
                image: "https://cdn.minexiot.com/bigscreen/datav-img/hq2.png",
              },
              borderWidth: 1,
              verticalAlign: "middle",
              align: "center",
            },
            cValue: {
              color: "#fff",
              padding: [3, 3, 0, 3],
              align: "center",
              fontSize: 14,
              // lineHeight: 35,
              // backgroundColor: "yellow",
            },
          },
        },
      };
      return data;
    },
    getSeriseLine() {
      let list = [
        {
          point: ["浙油", "西湖变"],
          coords: [
          [105.50721546227007, 28.109538815812808],
          [105.53928072729404, 28.128777974827187],
          ],
        },
        {
          point: ["浙油", "大树"],
          coords: [
          [105.50461015948687, 28.09786505526501],
          [105.51042198877246, 28.07506865591204],
          ],
        },
      ];
      let data = {
        name: "",
        type: "lines",
        zlevel: 6,
        lineStyle: {
          type: "dashed",
          width: 2,
          opacity: 1,
          curveness: 0,
          orient: "horizontal",
          color: "#fff",
        },
        show: true,
        data: list,
        tooltip: {
          formatter(d) {},
        },
      };
      return data;
    },
  },
};
</script>

<style  lang="scss" scoped>
</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值