使用Echarts绘制geo地图(案例)

使用Echarts绘制geo地图(案例)

项目使用@vue/cli 4.5.13以及echarts版本为5.1.2。
需求:在省份地图上,将数据进行分段映射。如图
使用Echarts绘制geo地图(案例)

首先下载geojson数据

链接: http://datav.aliyun.com/tools/atlas/index.html#&lat=33.521903996156105&lng=104.29849999999999&zoom=3
在左侧点击所选择的区域,勾选是否包含子区域(是否显示各个市区域),然后直接下载即可。
使用Echarts绘制geo地图(案例)
下载后我将文件放入了libs文件夹下,并用export default输出:
使用Echarts绘制geo地图(案例)

接下来就是mapEcharts组件的基本代码

<template>
  <div class="map" ref="mapChart"></div>
</template>
<script>
//引入geo数据
import zjData from "libs/china-zj";

export default {
  methods: {
  	initMapChart() {
      const el = this.$refs.mapChart;
      const echarts = require("echarts");
      const myChart = echarts.init(el);
      echarts.registerMap("zj", zjData);
      
	  const option = {
      //这里渲染地图
	  }
	  
      myChart.setOption(option);
      window.addEventListener("resize", function () {
        myChart.resize();
      });
    },
  },
  mounted() {
     this.initMapChart();
  },
};
</script>

<style lang="less" scoped>
.map {
  width: 100%;
  height: 100%;//要给指定高度,这里我在组件外加了固定高度,所以这里给了100%
}
</style>

渲染地图的代码

const option = {
		//数据映射
        visualMap: {
          type: "piecewise",//分段标签
          min: 0,//最小值
          max: 50,//最大值,不设置为无限大
          right: 30,//距离右侧位置
          bottom: 30,//距离底部位置
          orient: "vertical",//组件竖直放置
          align: "left",//色块在左
          textGap: 14,//文字主体之间的距离
          itemSymbol: "circle",//右下角映射组件使用圆点形状
          show: true,
          seriesIndex: 0,//指定取哪个系列的数据(series.data),若不设置则会影响图上标点颜色设置。
          
          //一以下是分段式视觉映射组件的每一段的范围
          //gt:大于、gte:大于等于、lt:小于、lte:小于等于。
          pieces: [
            {
              gt: 5,
              label: "5个以上",
              color: "#1492FF",
            },
            {
              gte: 2,
              lte: 5,
              label: "2-5个",
              color: "#59AAF5",
            },
            {
              gte: 0,
              lt: 2,
              label: "0-2个",
              color: "#99CBF9",
            },
          ],
          /*
          pieces或者inRange内设置颜色试验时都能生效,个人认为需要传入组件控制颜色时
          再选择用inRange,两个都存在并给予不同的颜色,显示以pieces为主。
          */
          //inRange: {
          //    color: ["#99CBF9", "#59AAF5", "#1492FF"],
          //},
        },
        geo: {
          map: "zj",//上面引入的数据名
          show: true,
          roam: false,//关闭拖拽
          label: {  //地图显示的地点名
            show: true,
            color: "#fff",
            fontSize: 16,
          },
          itemStyle: { 
            areaColor: "#99CBF9", //地图区域的颜色(没有数据时会按照这个颜色显示)
            borderColor: "#fff",  //地图区域的边框
            borderWidth: 0.6,
          },
          emphasis: {  //高亮的显示设置
            label: {
              color: "#fff",
            },
            itemStyle: {
              areaColor: "#9DE3FF",
            },
          },
          select: { //选中显示设置
            label: {
              color: "#fff",
            },
            itemStyle: {
              areaColor: "#9DE3FF",
            },
          },
        },
        series: [
        //配置数据的显示
          {
            type: "map",  //类型map
            geoIndex: 0, //指定geo属性后,series-map.map 属性,以及 series-map.itemStyle 等样式配置不再起作用,而是采用 geo 中的相应属性。
            data:[{name: "杭州市",value: 6},
            {name: "湖州市",value: 0},
            {name: "嘉兴市",value: 0},
            {name: "金华市",value: 0},
            {name: "丽水市",value: 0},
            {name: "宁波市",value: 0},
            {name: "衢州市",value: 0},
            {name: "绍兴市",value: 0},
            {name: "台州市",value: 0},
            {name: "温州市",value: 0},
            {name: "舟山市",value: 0}],
          },
        //以下配置了图中白色标记圆点的显示
          {
            type: "scatter", //类型:散点
            coordinateSystem: "geo", //使用地理坐标系
            itemStyle: {
              color: {
                type: "radial", // 径向渐变,前三个参数分别是圆心 x, y 和半径
                x: 0.5,
                y: 0.5,
                r: 0.5,
                colorStops: [
                  {
                    offset: 0.5,
                    color: "#fff", // 50% 处的颜色
                  },
                  {
                    offset: 1,
                    color: "rgb(0 0 0 / 0%)", // 100% 处的颜色
                  },
                ],
                global: false, // 缺省为 false
              },
              borderColor: "#fff", //边框白色
              borderWidth: 1,      //边框宽度
            },
            symbolSize: 10,    //散点大小
            data: [
              { name: "杭州市", value: [119.5035076, 29.703459] },
              { name: "宁波市", value: [121.579792, 29.468388] },
              { name: "温州市", value: [120.452111, 27.700575] },
              { name: "嘉兴市", value: [120.770865, 30.500653] },
              { name: "湖州市", value: [119.882398, 30.607198] },
              { name: "绍兴市", value: [120.582112, 29.597117] },
              { name: "金华市", value: [120.009506, 28.950024] },
              { name: "衢州市", value: [118.67263, 28.681708] },
              { name: "舟山市", value: [122.106863, 30.016028] },
              { name: "台州市", value: [121.128599, 28.561378] },
              { name: "丽水市", value: [119.571786, 28.001993] },
            ],
            zlevel: 1,
          },
        ],
      };

需要注意的问题

1.遇到更改scatter或effectScatter颜色不生效问题

按照官网文档写那些白色标点的时候一直都是默认颜色,写的任何颜色都不生效,经查询发现有人说echarts中visualMap的优先级是最高的需要添加在visualMap中指定seriesIndex来解决,指定取哪个系列的数据他们将会互相影响,其他则不会受影响。试了一下果然ok

上一篇:linux grep命令 的. *


下一篇:基于Python的空间分布初步-学习笔记(一)