当前位置: 首页 > article >正文

echarts地图立体效果,echarts地图点击事件,echarts地图自定义自定义tooltip

一.地图立体效果

方法1:两层地图叠加

实现原理:geo数组中放入两个地图对象,通过修改zlevel属性以及top,left,right,bottom形成视觉差

配置项参考如下代码:

geo: [
          {
            zlevel: 2,
            top: 96,
            map: 'map',
            itemStyle: {
              color: '#091A51ee',
              opacity: 1,
              borderWidth: 2,
              borderColor: '#16BAFA'
            },
            label: {
              show: true,
              position: 'top',
              color: '#fff',
              fontSize: 14,
              lineHeight: 16,
              fontWeight: 'bold',
              textShadowColor: '#073BDA', // 阴影颜色
              textShadowBlur: 10, // 阴影模糊程度
              textShadowOffsetX: 0, // 阴影横向偏移
              textShadowOffsetY: 4, // 阴影纵向偏移
              formatter: function({ name }) {
                return ` ${name}`
              }
            },
            emphasis: {
              disabled: true, //是否可以被选中
              label: {
                show: true,
                color: '#fff',
                fontSize: 18,
                textShadowColor: '',
                textShadowBlur: 0, // 阴影模糊程度
                textShadowOffsetX: 0, // 阴影横向偏移
                textShadowOffsetY: 0 // 阴影纵向偏移
              },
              itemStyle: {
                color: '#01A8F1'
              }
            }
          },
          {
            zlevel: 1,
            map: 'map',
            itemStyle: {
              color: '#17418B',
              opacity: 1,
              borderWidth: 2,
              borderColor: '#17418B'
            },
            label: {
              show: false
            },
            emphasis: {
              disabled: false, // 是否可以被选中
              itemStyle: {
                color: '#01A8F1'
              }
            }
          }
        ]

方法二:通过echarts-gl实现3d效果

1.需要引入echarts-gl.js文件或者npm下载

2.此方法地图省份的点击事件不生效!!!

3.省份名称需要通过下面代码才能显示出来

formatter: function ({ name }) {

          return ` ${name}`

 }

配置项完整代码如下:

geo3D: {
            map: "map",
            roam: true,
            shading: "color",
            boxHeight: 100,
            regionHeight: 8,
            itemStyle: {
              color: "#163C99",
              opacity: 0.4,
              borderWidth: 1,
              borderColor: "#0EF6FA"
            },
            emphasis: {
              disabled: true, //是否可以被选中
              label: {
                //移入时的高亮文本
                show: true,
                color: "#000", //显示字体颜色变淡
                fontSize: 18 //显示字体变大
              }
            },
            label: {
              show: true,
              position: "top",
              color: "#fff",
              fontSize: 14,
              lineHeight: 16,
              formatter: function ({ name }) {
                return ` ${name}`
              }
            },
            light: {
              //光照阴影
              main: {
                color: "#032372", //光照颜色
                intensity: 0.1, //光照强度 //shadowQuality: 'high', //阴影亮度
                shadow: true, //是否显示阴影
                shadowQuality: "medium", //阴影质量 ultra //阴影亮度
                alpha: 80,
                beta: 0,
                ambientCubemap: 0.5
              },
              ambient: {
                intensity: 1,
                color: "#133995" //光照颜色
              }
            },
            viewControl: {
              beta: 0, //x轴旋转
              alpha: 75, //Y轴旋转
              panMouseButton: "center", //平移操作使用的鼠标按键
              rotateMouseButton: "left", //旋转操作使用的鼠标按键
              rotateSensitivity: 0, //禁止旋转地图
              //下面的四个参数 可以实现禁止缩放地图
              projection: "orthographic",
              orthographicSize: 110,
              maxOrthographicSize: 110,
              minOrthographicSize: 110
            }
          }

//如果要选中/激活高亮某个省份
function setProvince(e) {
      let option = mapChartInstance.getOption()
      option.geo3D[0].regions = [
        {
          name: e,
          itemStyle: {
            color: "#0cf4f9",
            opacity: 1
          }
        }
      ]
      mapChartInstance.setOption(option)
 }

二.地图点击事件

//this.mapChart替换成对应的echarts实例
this.mapChart.on('click', (e) => {
  this.setProvince(e.name)
})

三.自定义tooltip

实现原理:

tooltip和地图的div容器宽高一致,tooltip中要自定义显示的内容相对于tooltip定位,然后通过echarts提供的convertToPixel()方法计算出自定义显示内容的相对位置

html

<div class="top_content">
        <div class="map_chart" id="map_chart"></div>
        <div class="map-tooltip">
          <div class="in u-flex-col u-row-center " :style="curMapData">
            <div>{{ current_province.name }}:</div>
            <div class="u-m-t-15"><span>{{ total }}</span> 家合作企业</div>
          </div>
        </div>
</div>

js

const properties = mapJson.features.find(item => item.properties.name.includes(name)).properties
const cp = properties.cp || properties.center
this.curMapData = this.showTooltipAtCoords(cp)


showTooltipAtCoords(cp) { // 经纬度转换position位置
      const lng = cp[0]
      const lat = cp[1]
      const point = this.mapChart.convertToPixel('geo', [lng, lat])
      const left = `${point[0]}px` // 设置位置
      const top = `${point[1] - 90}px` // 设置位置
      return `left:${left} ;top:${top}`
},


http://www.kler.cn/a/421473.html

相关文章:

  • Spark和MapReduce场景应用和区别
  • 08-模块与包
  • Linux——基础命令(2) 文件内容操作
  • 【C语言】递归的内存占用过程
  • Python知识分享第十八天
  • Python中的函数参数
  • 工程设计行业内外网文件交换解决方案:FileLink助力高效、安全的跨网协作
  • Linux网络编程之---多线程实现并发服务器
  • 【北京迅为】iTOP-4412全能版使用手册-第三十二章 网络通信-TCP套字节
  • 嵌入式蓝桥杯学习1 点亮LED
  • LabVIEW 队列消息处理器设计
  • 云计算介绍_02(虚拟化、虚拟化类型、虚拟化层架构、容器)
  • 鸿蒙多线程开发——Sendable使用注意事项
  • 【docker】docker compose多容器部署
  • Rain后台权限管理系统,快速开发
  • 我的知识图谱和Neo4j数据库的使用
  • AI×5G 市场前瞻及应用现状
  • 深入探索 HarmonyOS 的 Navigation 组件:灵活的页面管理与动态导航
  • win10-Docker打不开this can prevent Docker from starting. Use at your own risk.
  • 【C++】LeetCode:LCR 022. 环形链表 II
  • 数字图像处理(13):图像裁剪
  • 银河麒麟V10-SP1设置redis开机自启
  • Web安全基础实践
  • 论文阅读:Single-cell transcriptomics of 20 mouse organs creates a Tabula Muris
  • 【docker】Overlay网络
  • 【分页查询】.NET开源 ORM 框架 SqlSugar 系列