Echarts绘制县级以下地图

在做项目的过程中得到一个需求,看似简单实则非常不容易,需求如下:

将上图进行可是化出来,最终结果实现,初版效果如下:

实现本效果其实不难,但是开放平台提供的数据最多能拿到县级行政区划的地图,再下放到乡镇级别的数据是拿不到的,需要使用一个付费软件(BIGMAP全能版),没有特殊需求暂时不用考虑,实现到省、市、县级的地图可视化,地理Geo.JSON数据方式如下,获取网址:

阿里云数据可视化平台:http://datav.aliyun.com/portal/school/atlas/area_selector

使用方式:

点击连接进入开放平台界面如下:

需要选择哪一层级的地理数据,在左侧的地图直接点击,选择好后在右侧的数据部分会生成相应的geo.json(地理坐标系,以下简称Geo)数据,拿到数据后算是完成了最重要的一部,因为Geo数据得到与否直接关系到你的地图能不能可视化出来。

数据获取:以山西为例,点击山西省的地图位置,省市级的行政区划就出现了,点击右侧选择JSON API(引入地理坐标的json数据接口),将其复制到代码中需要使用的位置即可,也可以将JSON数据下载到本地进行使用,但是要采用导出模块的方式进行。

如果你动手能力极强,可以自己绘制行政区划界限,有一个小工具网站可以实现,有可能需要科学上网的工具进行辅助:https://www.strerr.com/geojson/geojson.html#map=8/82.600/-67.857

代码实现

使用vue进行实现,现在搭建好vue的代码框架后,定义好组件,我定义的组件名为HomeView,接下来安装Echarts插件,命令如下:

npm install echarts -s

也可以通过下载echarts的js文件的方式进行引入,详情参照echarts的官网安装文档:https://echarts.apache.org/handbook/zh/get-started/,

在准备好后进行代码实现,主要思路为引入Echarts[import * as echarts from 'echarts']这里注意,与一般的组件的或者插件的引入写法不同,引入下载好的JSON数据(也就是可视化需要的Geo.JSON数据)[import { xMap } from '../assets/xxian.js'],在<template></template>中设置图标容器(注意:一定要给宽高,否则页面会什么都不显示)。

设置好Dom后开始写逻辑

主要代码如下:

<template>
  <div ref="main" id="demo">
  </div>
  <!-- 弹出框容器 -->
</template>

<script setup>
import * as echarts from 'echarts'
import { ref, onMounted } from 'vue';
//引入隰县的地图参数
import { xMap } from '../assets/xxian.js'
//引入图片处理图片的格式
import img from '../assets/image/22.png'


console.log(img)
//设置初始值获取节点
const main = ref()
//页面挂载显示图表
onMounted(() => {
  // console.log(main)

  //echart获取地图存放容器
  let myEcharts = echarts.init(main.value, null,)
  //注册当前使用的地图名(第二个参数带表地图数据)
  echarts.registerMap("xMap", xMap)
  let option = {
    //地理坐标组件
    geo: {
      //标注类型为map(地图)
      type: 'map',
      map: 'xMap',//设定好的地图参数
      roam: true,//开启地图的平移
      zoom: 1.2,//地图的初始比例 
      center: [110.945007, 36.699988],//初始化坐标的位置
      //文字提示信息
      label: {
        show: true,//默认展示地图的文字信息
        color: "#dfe6e9",//字体的颜色 
        fontSize: "14px",//文字的大小
      },
      //地图的颜色设置
      itemStyle: {
        //区块的颜色
        areaColor: "#74b9ff",
        //边界的颜色
        borderColor: '#3742fa',
        //设置背景的阴影颜色
        shadowColor: 'rgba(255,91,112,0.7)',
        shadowBlur: 30,
        //描边的宽
        borderWidth: "1",
        //地图淡入淡出
        emphasis: {
          // focus:"self",
          // self:"self"
          color: "green"
        }
      }
    },
    //地图标记点信息展示
    tooltip: {
      show: true,
      //触发类型
      showContent: true,
      trigger: 'item',
      //自定义提示框的信息,return什么就显示什么
      formatter(params) {
        console.log(params)
        return `str:${params.data.str}<br>第二行:${params.data.info}`
      },
      //设置信息框的出现方式
      triggerOn: "click",
    },
    //标题
    title: {
      text: '隰县行政区地图',
      left: "5%",
      top: "3%",
      textStyle: {
        color: "red",
        fontSize: 60,
        textShadowBlur: 25,
        textShadowColor: "#33ffff"
      }
    },
    // 视觉映射效果
    visualMap: {
      type: 'continuous',
      min: 100,
      max: 5000,
      calculable: true,
      inRange: {
        color: ["#ff66", "#eac736", "#d94e5d"],
      },
      textStyle: {
        color: "green"
      }
    },
    //地图样式描述
    series: [
      {
        type: "scatter",//设计样式类型---散点图
        //指定参照坐标系的类型为地理类型
        coordinateSystem: "geo",
        data: [
          {
            name: "黄土镇",
            value: [111.11767, 36.634011],
            symbol: 'image://' + img,
            str: '测试文本',
            info: '测试文本测试文本测试'
          },
          {
            name: "下李乡", value: [110.935546, 36.87336],

          },
          {
            name: "陡坡乡", value: [111.105324, 36.692755],

          },
          {
            name: "寨子乡", value: [111.004772, 36.617782],

          },
          {
            name: "龙泉镇", value: [111.003751, 36.681035],
          },
          { name: "城南乡", value: [110.925058, 36.75314] },
          { name: "阳头升乡", value: [110.853383, 36.654324] },
          { name: "午城镇", value: [110.875703, 36.505627] },
        ],
        //设置标记点的大小
        symbolSize: 50,
        //设置标记点的涟漪效果
        // type: "effectScatter",
        // 显示标记点的信息
        // label: {
        //   show: true
        // }
      }
    ]
  }
  myEcharts.setOption(option)
  //监听页面的改变
  window.addEventListener("resize", () => {
    // console.log("大小改变")
    myEcharts.resize()
  })
})



</script>

<style>
#demo {
  margin: 0 auto;
  width: 800px;
  height: 600px;
  background: url(../assets/bg.jpg) no-repeat center center;
  background-size: cover;
}
</style>

如果还是无从下手,可以看千峰教育老师录制的可视化视频,链接如下:、

https://www.bilibili.com/video/BV14u411D7qK?p=1&vd_source=0734930fe8bdfa1582275df05d264872

猜你喜欢

转载自blog.csdn.net/weixin_51828648/article/details/129712403