首页 > 其他分享 >echarts的散点图和中国地图配合使用

echarts的散点图和中国地图配合使用

时间:2023-05-12 12:12:13浏览次数:37  
标签:return name val 地图 散点图 value item data echarts

热力图,我觉得也是叫散点图,我做的是分散在地图上面的点,主要效果如下:
图是在晚上抄的:

主要配置有几个:
第一个需要配置两个地图属性,即两个series:

    series: [
      {
        // 地图,可以是数组,多个
        label: { // label就是你地图上展示的名字,比如四川,重庆等等
          show: true, //显示省市名称
          position: [1, 100], // 相对的百分比
          fontSize: 12,
          offset: [2, 0], // 是否对文字进行偏移,横向偏移2像素,纵向偏移0
          align: "left", // 文字对齐方式
          color: '#fff',
        },
        itemStyle: {
          areaColor: "#5470c6" // 地图图形颜色
        },
        geoIndex: 0, // 默认情况下,map series 会自己生成内部专用的 geo 组件。但是也可以用这个 geoIndex 指定一个 geo 组件
        type: "map", // 地图类型
        roam: true, // 整个地图能否缩放,拖拽
        map: city, // 地图名字
        zoom: 1.1, // 当前视角的缩放比例
        top: "15%", // 距离顶部距离
        scaleLimit: { // 缩放级别限制
          max: 9,
          min: 1
        },
      }, { // 散点图配置
        type: 'scatter', // 地图类型
        coordinateSystem: 'geo', // 该系列所用的坐标系,geo表示使用地理坐标系,通过 geoIndex 指定相应的地理坐标系组件。
        data: arr, // 数据
        symbolSize: function (val) { // 散点大小分块展示,calculateValue根据你的最大值除以20得出,最后整个散点大小都会在10-20像素
          if (!val) {
            return
          }
          if (val.length === 0 || val.length < 3) {
            return
          }
          if (!val[2]) {
            return
          }
          let value = val?.[2] / calculateValue
          if (value < 12) {
            return 10
          }
          if (value < 14) {
            return 12
          }
          if (value < 16) {
            return 16
          }
          if (value < 18) {
            return 18
          }
          return 20
        },
        tooltip: {
          // 提示框
          trigger: "item", // 触发类型
          showDelay: 0, // 浮层显示延迟
          transitionDuration: 0.2, // 提示框浮层的移动动画过渡时间,单位是 s,设置为 0 的时候会紧跟着鼠标移动
          formatter: function (params) { // 用来格式化图例文本
            let { data = {} } = params;
            return `${data?.name}设备总数: ${data?.value?.[2]}`;
          }
        },
      }],

然后设置地理坐标系组件geo

    geo: {
      scaleLimit: {
        max: 9,
        min: 1
      },
      map: city,
      roam: true,
      tooltip: {
        show: true
      },
      itemStyle: {
        areaColor: "#5470c6" // 地图图形颜色
      },
      label: {
        show: true, //显示省市名称
        position: [1, 100], // 相对的百分比
        fontSize: 12,
        offset: [2, 0],
        align: "left",
        color: '#fff',
      },
    },

还有一些其他配置,但是我不知道为什么不加这个配置就不得行:


    tooltip: {
      // 提示框
      trigger: "item",
      showDelay: 0,
      transitionDuration: 0.2,
      formatter: function (params) {
        let Count = 0;
        arr.map(item => {
          if(item.name === params.name) {
            Count = item?.value?.[2]
          }
        })
        return `${params.name}<br/>
                    个数: ${Count}`;
      }
    },
    dataset: {
      source: data
    },

完整代码:

export const chinaMapConfig = (configData) => {
  const { data, city, mapData } = configData;
  const arr = []
  const calculatedArr = []; // 获取当前级别里面的设备数量数组
  const foo = (max) => {
    return max / 20
  }  
  for (let i of data) {
    for (let j of mapData?.features) {
      if ((i?.Province && i?.Province?.indexOf(j.properties.name) !== -1)
        || (i?.City && i?.City?.indexOf(j.properties.name) !== -1)
        || (i?.District && i?.District?.indexOf(j.properties.name) !== -1)) {
        arr.push({ value: [...j.properties.center, i.Count], name: j.properties.name }) // 热力图数据
        calculatedArr.push(i.Count)
      }
    }
  }
  calculatedArr.sort((a, b) => b - a)
  const calculateValue = foo(calculatedArr[0])

  const result = {
    tooltip: {
      // 提示框
      trigger: "item",
      showDelay: 0,
      transitionDuration: 0.2,
      formatter: function (params) {
        let Count = 0;
        arr.map(item => {
          if(item.name === params.name) {
            Count = item?.value?.[2]
          }
        })
        return `${params.name}<br/>
                    个数: ${Count}`;
      }
    },
    dataset: {
      source: data
    },
    series: [
      {
        // 地图,可以是数组,多个
        label: {
          show: true, //显示省市名称
          position: [1, 100], // 相对的百分比
          fontSize: 12,
          offset: [2, 0],
          align: "left",
          color: '#fff',
        },
        itemStyle: {
          areaColor: "#5470c6" // 地图图形颜色
        },
        geoIndex: 0,
        type: "map",
        roam: true, // 整个地图能否缩放,拖拽
        map: city,
        zoom: 1.1, // 当前视角的缩放比例
        top: "15%", // 距离顶部距离
        scaleLimit: {
          max: 9,
          min: 1
        },
      }, { // 散点配置
        type: 'scatter',
        coordinateSystem: 'geo',
        data: arr,
        symbolSize: function (val) {
          if (!val) {
            return
          }
          if (val.length === 0 || val.length < 3) {
            return
          }
          if (!val[2]) {
            return
          }
          let value = val?.[2] / calculateValue
          if (value < 12) {
            return 10
          }
          if (value < 14) {
            return 12
          }
          if (value < 16) {
            return 16
          }
          if (value < 18) {
            return 18
          }
          return 20
        },
        tooltip: {
          // 提示框
          trigger: "item",
          showDelay: 0,
          transitionDuration: 0.2,
          formatter: function (params) {
            let { data = {} } = params;
            return `${data?.name}设备总数: ${data?.value?.[2]}`;
          }
        },
      }],
    geo: {
      scaleLimit: {
        max: 9,
        min: 1
      },
      map: city,
      roam: true,
      tooltip: {
        show: true
      },
      itemStyle: {
        areaColor: "#5470c6" // 地图图形颜色
      },
      label: {
        show: true, //显示省市名称
        position: [1, 100], // 相对的百分比
        fontSize: 12,
        offset: [2, 0],
        align: "left",
        color: '#fff',
      },
    },
  };
  return result
};

标签:return,name,val,地图,散点图,value,item,data,echarts
From: https://www.cnblogs.com/taosifan/p/17393713.html

相关文章

  • 几个echarts使用小案例
    1y轴名称放左边、辅助线、时间轴标签、数值轴间隔<divid="main"style="height:400px"></div><script>varchartDom=document.getElementById("main");varmyChart=echarts.init(chartDom);varoption;option={xAxis......
  • react echarts tooltip 区域新加一个输入框,可以编辑保存数据
     //demo页面//需求:产品要求在折线图的tooltip上新加一个输入框,可以编辑这个输入框保存备注信息,需要两种交互方式:1.鼠标滑过展示备注信息。2.鼠标点击某一个日期时,鼠标可以滑到tooltip上做保存/编辑操作。//思路:1.保留初始鼠标滑过echarts图效果。//2.主要难点是点击时to......
  • 百度地图开发api
     获取百度地图ak:https://zhuanlan.zhihu.com/p/574521243 引入依赖:<!--引入HttpClient依赖--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.3</version></......
  • 本地图文直接复制到富文本编辑器中
    ​ 当前功能基于PHP,其它语言流程大抵相同。大概流程:1.将docx文件上传到服务器中2.使用PHPoffice/PHPword实现将word转换为HTML3.将HTML代码返回并赋值到编辑器中 1编辑器配置修改1.1新增上传wordjson配置在ueditor\php\config.json中新增如下配置:     /*......
  • 本地图文直接复制到Web编辑器中
    ​ 这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用后台(服务端)java服务代码:(上传至ROOT/lqxcPics文件夹下)<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@     page contentType="text/html;cha......
  • 百度地图绘制地区的棱柱效果-定位-自定义点-文本标记-信息弹窗
    @目录百度地图webgl使用自定义地图样式地区镂面棱柱效果绘制点信息以及信息弹窗百度地图webgl使用在项目的index.html中引入<scripttype="text/javascript"src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=你的AK秘钥"></script>注意,百度webgl的引入和百度地图的引入......
  • 本地图文直接复制到HTML编辑器中
    ​ 图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码目前限chrome浏览器使用首先以um-editor的二进制流保存为例:打开umeditor.js,找到UM.plugins['autoupload'],然后找到autoUploadHandler方法,注释掉其中的代码。加入下面的代码://判断剪......
  • 散点图
    <!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <metahttp-equiv="X-UA-Compatible"content="IE=edge">  <metaname="viewport"content="width=d......
  • 本地图文直接复制到网页编辑器中
    ​ 自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了。一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器)中时,编辑器都无法自动上传图片。需要用户手动一张张上传Word图片。如果只有一张图片还能够接......
  • 课本_第三章、地图文档
     八股文--地图文档的属性1mxd.title2mxd.author3mxd.relativePaths#相对路径4#以上均可读、写 八股文--打印地图文档的所有属性1dir(obj)#返回对象的所有属性和方法<包括普通属性和特殊属性>2hasattr(obj,name)#用于判断对象是否包含对应的属性--打印......