echarts显示地图

<template>
  <div class="managingPatientSize">
    <div id="china-map"></div>
  </div>
</template>
 
<script>
import geoJson from 'echarts/map/json/china.json'
import * as echarts from 'echarts';
echarts.registerMap('china', geoJson)
export default {
  name: 'ChinaMap',
  data() {
    return {

    }
  },
  methods: {
    drawCharts() {
      

      var nameMap = 'china';
      // 0表示未开发,1表示开发中
      var data = [
        { name: '北京', value: 1290 },
        { name: '天津', value: 42 },
        { name: '河北', value: 1 },
        { name: '山西', value: 0 },
        { name: '内蒙古', value: 0 },
        { name: '辽宁', value: 0 },
        { name: '吉林', value: 0 },
        { name: '黑龙江', value: 0 },
        { name: '上海', value: 1129 },
        { name: '江苏', value: 399 },
        { name: '浙江', value: 102 },
        { name: '安徽', value: 1 },
        { name: '福建', value: 299 },
        { name: '江西', value: 302 },
        { name: '山东', value: 1 },
        { name: '河南', value: 1 },
        { name: '湖北', value: 998 },
        { name: '湖南', value: 480 },
        { name: '重庆', value: 1580 },
        { name: '四川', value: 372 },
        { name: '贵州', value: 69 },
        { name: '云南', value: 695 },
        { name: '西藏', value: 0 },
        { name: '陕西', value: 1 },
        { name: '甘肃', value: 56 },
        { name: '青海', value: 10 },
        { name: '宁夏', value: 1 },
        { name: '新疆', value: 0 },
        { name: '广东', value: 1988 },
        { name: '广西', value: 1860 },
        { name: '海南', value: 14 },
        { name: '香港', value: 879 },
        { name: '澳门', value: 209 },
        { name: '台湾', value: 0 },
      ];

      var geoCoordMap = {};
      var convertData = function (data) {
        var res = [];
        for (var i = 0; i < data.length; i++) {
          var geoCoord = geoCoordMap[data[i].name];
          if (geoCoord) {
            res.push({
              name: data[i].name,
              value: geoCoord.concat(data[i].value),
            });
          }
        }
        return res;
      };

      // 基于准备好的dom,初始化echarts实例
      let myChart = echarts.init(document.getElementById("china-map"));

  
      /*获取地图数据*/
      var mapFeatures = echarts.getMap(nameMap).geoJson.features;
      myChart.hideLoading();
      // 这里很关键
      mapFeatures.forEach(function (v) {
        console.log(v)
        // 地区名称
        var name = v.properties.name;
        // 地区经纬度
        geoCoordMap[name] = v.properties.cp;
      });

      let option = {
        backgroundColor: '#0F1C3C',
        title: [
          {
            top: '31.5%',
            text: '月规模',
            // subtext: '虚拟数据',
            left: '105',
            show: true,
            textStyle: {
              color: '#fff',
            },
          },
        ],
        tooltip: {
          position: function (p) {
            //其中p为当前鼠标的位置
            return [p[0] + 10, p[1] - 10];
          },
          extraCssText: 'max-height:40px;',
          triggerOn: 'mousemove|click',
          formatter: function (e, t, n) {
            if (typeof e.value[2] == 'undefined') {
              if (e.value == '0') {
                return e.name + ":<span style='color: #999;'>未开发</span>";
              } else if (e.value == '1') {
                return e.name + ":<span style='color: blue;'>开发中</span>";
              } else {
                return e.name + ":<span style='color: red;'>" + e.value + '</span> 万';
              }
            }
            //有数量时,显示城市和当前城市所做项目数
            else {
              return e.name + ":<span style='color: red;'>" + e.value[2] + '</span> 万'; //params.value[2]  取出value值中的第三个值  前两个值是经纬度,第三个值是数量
            }
          },
        },
        visualMap: [
          {
            left: 90,
            bottom: '20%',
            min: 0,
            max: 1000,
            show: true,
            //   text: ['High', 'Low'],
            realtime: false,
            calculable: false,
            seriesIndex: [0],
            orient: 'horizontal',
            textStyle: {
              color: 'rgba(175,224,254,.9)',
            },
            pieces: [
              {
                gt: 3,
                label: '已开发',
                color: '#134B1C',
              },
              {
                gte: 1,
                lte: 1,
                label: '开发中',
                color: '#4A4003',
              },
              {
                gte: 0,
                lte: 0,
                label: '未开发',
                color: '#00336C',
              },
            ],
          },
          {
            left: 90,
            // top: this.chinaBox / 2 + 52,
            top: '30%',
            min: 0,
            max: 1000,
            seriesIndex: 1,
            show: true,
            splitNumber: 4,
            padding: [50, 20, 20, 20],
            backgroundColor: 'rgba(255,255,255,.2)',
            textStyle: {
              color: 'rgba(175,224,254,.9)',
            },
            inRange: {
              // color: ['#8B77FF', '#4FCCFF', '#6FE621', '#FFC760', '#FB497C'].reverse(),
              symbolSize: [8, 15],
              symbol: 'circle',
            },
            formatter: function (value) {
              return '';
            },
            pieces: [
              {
                gt: 1000,
                label: '1000万以上',
                color: '#fff',
              },
              {
                gte: 500,
                lte: 1000,
                label: '500-1000万',
                color: '#FFC760',
              },
              {
                gte: 300,
                lt: 500,
                label: '300-500万',
                color: '#6FE621',
              },
              {
                gt: 100,
                lt: 300,
                label: '100-300万',
                color: '#4FCCFF',
              },
              {
                lt: 100,
                gt: 3,
                label: '100万以下',
                color: '#DAB2FF',
              },
            ],
          },
        ],
        geo: {
          // 背景地图
          map: nameMap,
          zoom: 1.2,
          show: false, // 是否显示背景地图
          roam: true,
          label: {
            normal: {
              show: false,
            },
            emphasis: {
              show: false,
            },
          },
          // 默认背景
          itemStyle: {
            normal: {
              areaColor: '#032954',
              borderColor: '#0C6075',
            }
          }
        },
        series: [
          {
            // 地图块的相关信息
            type: 'map',
            map: nameMap,
            zoom: 1.2,
            label: {
              normal: {
                show: true,
                textStyle: {
                  fontSize: 12,
                  fontWeight: 400,
                  color: 'rgb(255,255,255)',
                },
              },
              // 文字hover颜色
              emphasis: {
                show: true, //是否在高亮状态下显示标签。
                textStyle: {
                  color: '#ff0',
                }, //高亮状态下的标签文本样式。
              },
            },
            itemStyle: {
              // 地图边框设置
              normal: {
                // areaColor: '#272235',
                // borderColor: 'rgba(175,224,254,.4)',
                // fontWeightL: 700,
                // borderWidth: 0.5,
                color: function (params) {
                  return '#00ff00'
                }
              },
              // hover效果
              emphasis: {
                areaColor: {
                  type: 'linear',
                  x: 0,
                  y: 0,
                  x2: 0,
                  y2: 1,
                  colorStops: [
                    {
                      offset: 0,
                      color: '#00499B', // 0% 处的颜色
                    },
                    {
                      offset: 1,
                      color: '#00499B', // 100% 处的颜色
                    },
                  ],
                  globalCoord: false, // 缺省为 false
                },
              }
            },
            // 点击效果
            select: {
              itemStyle: {
                areaColor: '#ccb32c',
              },
            },
            data: data,
          },
          {
            // 水波纹
            type: 'effectScatter',
            coordinateSystem: 'geo',
            data: convertData(
              data
                .sort(function (a, b) {
                  return b.value - a.value;
                })
                .slice(0, 50)
            ),
            // symbolSize: function (val) {
            //   return val[2] / 6;
            // },
            showEffectOn: 'render',
            // symbolOffset: [-10, 10], //偏移
            rippleEffect: {
              period: 10, // 动画时间,值越小速度越快
              scale: 4, // 波纹圆环最大限制,值越大波纹越大
              brushType: 'fill', // 波纹绘制方式 stroke, fill
            },
            zlevel: 2,
          },
        ],
      };
      myChart.setOption(option, true);
    },

  },
  mounted() {
    this.drawCharts();
  }
}
</script>
 
<style  scoped>
#china-map {
  width: 1000px;
  height: 600px;
}
</style>
posted @ 2023-10-31 21:54  南风晚来晚相识  阅读(71)  评论(0编辑  收藏  举报