一篇文章搞定echarts地图轮播高亮

yizhihongxing

下面是详细讲解“一篇文章搞定echarts地图轮播高亮”的完整攻略:

1.准备工作

在开始操作之前,你需要准备以下工具和技能:

  • 计算、理解经纬度坐标系并能熟练使用echarts中的地图组件
  • 熟练使用javascript编程语言
  • 确保已经完成了echarts库和其依赖库的安装

2. 地图轮播高亮思路

地图轮播高亮的核心思路,是通过定时器不断切换并高亮指定点的策略,使地图中的点逐一高亮显示并让用户能够看到。但是,具体实现过程中会有一些细节需要注意:

  • 首先,需要准备好地图的json数据文件和需要高亮的点的数据集文件,这两个文件可以通过官方提供的下载链接获得;

  • 其次,需要按照一定的格式加载地图数据和点数据,并对其进行相应的处理,使其能够与echarts地图组件相对应,并正确显示。

  • 最后,需要通过定时器实现地图轮播,并在每一次轮播的过程中,高亮指定的点,从而让用户更好地了解指定区域或者点的信息。

以下是具体实现过程:

3. 具体实现

3.1 数据准备

首先,从 echarts 的官网中下载中国地图(JSON格式),并根据需要对地图属性进行设置和调整,然后加载数据,如下代码:

$.getJSON("echarts-china.json", function(chinaJson) {
  echarts.registerMap("china", chinaJson);
});

接下来,我们需要准备数据集文件。一般我们需要一个数组保存需要高亮的点的经纬度。

在这里,我们以标志点的数据集数组为例。以下是标记点的数据格式:

var data=[
  {name: '海门', value: 9},
  {name: '鄂尔多斯', value: 12},
  {name: '招远', value: 12},
  {name: '舟山', value: 12},
  {name: '齐齐哈尔', value: 14},
  {name: '盐城', value: 15},
  ...
]

3.2 表示经纬度

以上面的数据为例,将经纬度表示为数组:

var geoCoordMap = {
    "上海市": [121.4648,31.2891],
    "东莞市": [113.8953,22.901],
    "东营市": [118.7073,37.5513],
    "中山市": [113.4229,22.478],
    "临汾市": [111.4783,36.1615],
    "临沂市": [118.3118,35.2936],
    ...
};

这个 geoCoordMap 对象是用来存放坐标信息的。对象的键值为城市名,值则是坐标信息的两个值。坐标类型可以是 String,也可以是 Number 类型。我这里使用 Number 类型,方便后面的计算。

3.3 地图显示数据

首先需要通过 ECharts 的官方 API 来指定地图的显示属性,进行基本的设置。这里我们以中国地图为例:

option = {
    tooltip: {
        trigger: 'item',
        formatter: '{b}'
    },
    geo: {
        name: '中国地图',
        type: 'map',
        map: 'china',
        roam: true,
        //缩放比例
        zoom: 1.23,
        label: {
            normal: {
                show: true,
                textStyle: {
                    color: 'rgba(0,0,0,0.4)'
                }
            }
        },
        itemStyle: {
            normal:{
                borderColor: 'rgba(0, 0, 0, 0.2)'
            },
            emphasis:{
                areaColor: '#F3B329',
                shadowOffsetX: 0,
                shadowOffsetY: 0,
                shadowBlur: 20,
                borderWidth: 0,
                shadowColor: 'rgba(0, 0, 0, 0.5)'
            }
        }
    },
    series: []
};

接下来就是将数据渲染在地图上的过程。

series: [
    {
      // 圆圈的设置
      type: 'scatter',
      coordinateSystem: 'geo', // 采用的坐标系
      itemStyle: {
          normal: {
              color: '#ddb926'
          }
      },
      label: {
          normal: {
              formatter: '{b}',
              position: 'right',
              show: true
          }
      },
      symbolSize: function (val) {
          return val[2] ;
      },
      data: []
    },
    {
      // 轮播点的闪烁显示设置
      type: 'effectScatter',
      coordinateSystem: 'geo', // 采用的坐标系
      data: [],
      symbol: 'circle',
      showEffectOn: 'render',
      rippleEffect: {
          period: 15,
          scale: 4,
          brushType: 'fill'
      },
      hoverAnimation: true,
      label: {
          normal: {
              formatter: '{b}',
              position: 'right',
              show: true
          }
      },
      itemStyle: {
          normal: {
              color: '#46bee9',
              shadowBlur: 10,
              shadowColor: 'rgba(14, 31, 46, 0.8)',
              shadowOffsetX: 1,
              shadowOffsetY: 2
          }
      },
      zlevel: 1
  }]

同时,也需要将前面处理好的标记点数据,添加到我们要渲染的数据中,进行关联,如下代码:

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

3.4 轮播高亮

接下来就是通过定时器实现轮播高亮的过程。这里我们定义了一个 index 变量保存当前显示的城市索引,接着用 setInterval 函数不停地切换 index 变量的值,并重新设置地图对应的数据位置。同时,我这里还添加了一些动画效果,使切换的过程更加流畅。

var index = -1;
var mtime;
(function loop() {
    mtime = setTimeout(loop, 3000);//时间间隔
    index = (index + 1) % data.length;
    var name = data[index].name;
    var value = data[index].value;
    mapChart.dispatchAction({
        type: 'downplay',
        seriesIndex: 0
    });
    mapChart.dispatchAction({
        type: 'highlight',
        seriesIndex: 0,
        name: name
    });
    mapChart.dispatchAction({
        type: 'highlight',
        seriesIndex: 1,
        name: name
    });
    mapChart.dispatchAction({
        type: 'highlight',
        seriesIndex: 2,
        name: name
    });
})();

4. 示例

以下是两个使用此方法实现的Echarts轮播高亮地图的示例:

以上就是关于“一篇文章搞定echarts地图轮播高亮”的完整攻略,希望能够对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一篇文章搞定echarts地图轮播高亮 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • 详解Python中logging日志模块在多进程环境下的使用

    1. 概述 logging是Python官方提供的通用日志模块,可以帮助开发者轻松实现对程序的日志记录和管理。在多进程环境下,要想实现多个进程共同使用同一个日志文件,需要使用logging模块的多进程支持。 本文主要介绍如何使用logging模块在多进程环境下进行日志记录。 2. 配置多进程支持 在使用logging模块时,需要先对其进行配置。在多进程环境下…

    JavaScript 2023年5月28日
    00
  • JavaScript引入方式深入解读

    JavaScript引入方式深入解读 想要在网页中使用JavaScript,我们需要将JavaScript代码引入到网页中。JavaScript有三种引入方式:内嵌、外部引入和异步引入,下面将对这三种引入方式进行详细讲解。 内嵌引入 内嵌引入是将JavaScript代码直接嵌入到HTML代码中,使用<script>标签将JavaScript代码包…

    JavaScript 2023年5月27日
    00
  • Unicode中的CJK(中日韩统一表意文字)字符小结

    Unicode中的CJK(中日韩统一表意文字)字符小结 什么是CJK字符 CJK字符是指中文、日文、韩文等东亚文字的一种统称。CJK字符的特点是字形复杂,有很多笔画,而且其中有很多类似的字形。为了便于处理这些东亚文字,Unicode(标准化的字符编码系统)将CJK字符统一编码为一组字符集,称为CJK统一表意字符集。 CJK字符在Unicode中的编码 在Un…

    JavaScript 2023年5月19日
    00
  • 教你如何写出可维护的JS代码

    非常感谢您对“可维护的JS代码”的关注。以下是教你如何写出可维护的JS代码的完整攻略: 1. 命名规范 变量和函数命名要具有描述性:让人一眼就能明白变量或函数的用途,例如setBackgroundColor() 等。 使用清晰的命名风格:可以使用CamelCase或PascalCase风格,但是应该在整个项目中保持一致。 避免使用单个字符变量名称,因为这样会…

    JavaScript 2023年5月28日
    00
  • 为什么要使用 Rust 语言、Rust 语言有什么优势

    为什么要使用 Rust 语言、Rust 语言有什么优势 1. 什么是 Rust 语言? Rust 是一种多范式系统编程语言,旨在提供可靠的内存安全和高性能 abstractions 的开发体验。特别是,它解决了传统 C 和 C++ 语言中的一些缺陷,如空指针、缓冲区溢出等,同时通过所有权机制解决了内存安全问题。Rust 是 Mozilla Foundatio…

    JavaScript 2023年5月28日
    00
  • JS基于开关思想实现的数组去重功能【案例】

    JS基于开关思想实现的数组去重功能是一种常见的数组去重方法,其原理主要是利用一个开关数组来记录数组中每个元素是否出现过。下面是实现该功能的完整攻略: 1.原理说明 JS基于开关思想实现的数组去重功能采用以下步骤: 1.创建一个空的开关数组,其长度为原数组的长度 2.遍历原始数组,检查每个元素在开关数组中的对应位置是否为真 3.如果为真,则说明该元素已经出现过…

    JavaScript 2023年5月28日
    00
  • JavaScript基于inquirer封装一个控制台文件选择器

    下面我将详细讲解“JavaScript基于inquirer封装一个控制台文件选择器”的完整攻略。 简介 inquirer是一个流行的交互式命令行工具,它提供了很多强大的功能,包括询问用户输入、选择等功能。我们可以使用inquirer等库将一个控制台文件选择器封装起来,在命令行中方便用户选择文件。 步骤 下面是基于inquirer封装控制台文件选择器的完整步骤…

    JavaScript 2023年5月27日
    00
  • 一文搞懂JavaScript数组的特性

    前言 数组是几乎所有编程语言的基础语法,JavaScript因为语法特性,之前缺少一些集合类对象,对数组的使用就会更多一些,因此我们更需要理解数组知识。然而大部分人对数组都已经非常熟悉了,所以本文将不会介绍数组的基础语法和用法,而是从JavaScript中数组的一些特殊之处入手,通过这些少有特性的详细介绍,加深我们对数组的理解。 基本介绍 首先,作为开始,我…

    JavaScript 2023年4月24日
    00
合作推广
合作推广
分享本页
返回顶部