前段时间需要做一个中国地图的页面,要求是展示各地产品的销量,我就在网上搜了很多ECharts的资料,学习了一下怎么使用。

本着互相学习,共同进步的原则,特此分享一下自己的学习经验以及使用技巧。如果有用的话可以给老弟点个赞~

首先先展示一下成品:(利用JavaScript在HTML页面绘制),表格利用bootstrap.min.css样式,当然你也可以自己编写样式实现。本文重点介绍如何使用ECharts绘制中国地图并打入地区散点。

话不多说直接上干货!!

首先ECharts 是一个使用 JavaScript 实现的开源可视化库,涵盖各行业图表,满足各种需求;
在中国地图上实现打点,我们需要引入两个文件:
  1. echarts.js 官网地址下载:快速上手 - Handbook - Apache ECharts

  1. chain.js 这个官网已经找不到了,需要自行搜寻下载

  1. 也可以直接从我的网盘下载:

链接:https://pan.baidu.com/s/136Ip3mpcp9xhsTjfLCgfzw 提取码:ltc7 --来自百度网盘超级会员V4的分享

下载完这两个文件后,导入自己的编辑器,我是用IDEA,下面是文件的结构;我们只需要编写两个文件
  1. index.html 启动页面

  1. RobotSales.json 写入我们需要省市的经纬度坐标和说明信息(自定义)

接下来我将详细介绍这两个文件的内容

RobotSales.json


我将地区的数据信息封装到了一个json文件中,我们只需要请求该文件就能获取地区数据,包括:地名、坐标、销量、其他文本等信息;

我们知道json文件的格式是 “key”:value 格式;作为在地图上打点(定位)的依据,这里我们最少要写两点:name和value

n其中ame是地区名字! value是该地区的经纬度坐标; 其他信息根据自己的需要自行添加就行~。

[{"name": "深圳","value": [114.271522, 22.753644],"Sales": "2台","text": "机器人1"},{"name": "南京","value": [118.46, 32.02],"Sales": "2台","text": "机器人1"},{"name": "重庆","value": [106.54, 29.59],"Sales": "1台","text": "机器人1"},{"name": "北京","value": [116.24, 39.55],"Sales": "3台","text": "机器人1"},{"name": "荆州","value": [113.41, 29.59],"Sales": "2台","text": "机器人1"}
]

ps:经纬度可以百度

index.html文件


我们已经编写完JSON文件,下边就是我们的index.html内容。代码稍多,没有耐心的老哥可以下滑到最后直接复制粘贴(详情已写入注解)

首先dataValue是我们自己编写的json数据,中国地图可以直接使用,但是如果要展示某一个地区比如荆州,就需要我们查询这个地区的经纬度坐标,然后传给ECharts。

下边我主要介绍一下是如何提取json数据的,以及ECharts使用过程中自己的薄见,若有瑕疵欢迎留言:

提取json文件的数据

因为我们将地区信息封装到json文件了,我们需要请求该文件提取出来信息才能使用!这里我使用的是ajax请求,请求成功后的数据res传入 dealWithData(res)函数中。

 $.ajax({url: "HTML/json/RobotSales.json",//json文件位置,文件名type: "GET",dataType: "json",success: function(data) {letres=[];//自定义一个空数组接收请求回来的json数据for(leti=0;i<data.length;i++){res.push({name:data[i].name,value: data[i].value,sales:data[i].Sales//若json文件中自己定义了其他信息,在下边直接以k:v形式进行罗列即可;但是主要“,”});};//重点:将封装的json数据传递到dealWithData函数中进行渲染处理使用dealWithData(res);//===销售表格===letrow=[];for (leti=0; i<data.length; i++) {letname=data[i].name;letsales=data[i].Sales;lettext=data[i].text;//拼接表格的行和列row.push("<tr><td>"+name+"</td>"+'<td>'+sales+'</td>'+text+'</tr>');}table.append(row.join());//追加到table表格中}});

涟漪特效

涟漪特效就是像这种跟水纹一样; 看起来非常高大上吧!! 我们一起来看看怎么实现的

 //涟漪特效{name: "产品销量",type: "effectScatter",coordinateSystem: "geo",data:dataValue,//传入的地图点数据symbolSize: 6,//涟漪大小showEffectOn: "render",//涟漪效应rippleEffect: {brushType: "stroke",color: "#f13434",period: 10,//周期scale: 10//规模},hoverAnimation: true,//悬停动画//地图点样式label: {formatter: "{b}",position: "top",show: true,fontSize: "10",},itemStyle: {color: "#f13434",shadowBlur: 2,shadowColor: "#333"},//鼠标点击散点的下弹框tooltip: {show: true,triggerOn:"click",formatter: function(data1) {console.log(data1)let data2 = data1.data;return "<b>销量<b><br>"+data2.name+data2.sales}},zlevel: 1}

看完涟漪特效我们还要再看一个ECharts配置!

tooltip 配置

 tooltip: {show: true, // 是否显示trigger: 'axis', // 触发类型  'item'图形触发:散点图,饼图等无类目轴的图表中使用; 'axis'坐标轴触发;'none':什么都不触发。axisPointer: { // 坐标轴指示器配置项。type: 'shadow', // 'line' 直线指示器  'shadow' 阴影指示器  'none' 无指示器  'cross' 十字准星指示器。axis: 'auto', // 指示器的坐标轴。 snap: true, // 坐标轴指示器是否自动吸附到点上},showContent: true, //是否显示提示框浮层,默认显示。triggerOn: 'mouseover', // 触发时机  'mouseover'鼠标移动时触发。     'click'鼠标点击时触发。  'mousemove|click'同时鼠标移动和点击时触发。enterable: false, // 鼠标是否可进入提示框浮层中,默认为false,如需详情内交互,如添加链接,按钮,可设置为 true。renderMode: 'html', // 浮层的渲染模式,默认以 'html 即额外的 DOM 节点展示 tooltip;backgroundColor: 'rgba(50,50,50,0.7)', // 提示框浮层的背景颜色。borderColor: '#333', // 提示框浮层的边框颜色。borderWidth: 0, // 提示框浮层的边框宽。padding: 5, // 提示框浮层内边距,textStyle: { // 提示框浮层的文本样式。color: '#fff',fontStyle: 'normal',fontWeight: 'normal',fontFamily: 'sans-serif',fontSize: 14,},extraCssText: 'box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);', // 额外附加到浮层的 css 样式confine: false, // 是否将 tooltip 框限制在图表的区域内。formatter: '{b} 的成绩是 {c}'formatter: function(arg) {return arg[0].name + '的分数是:' + arg[0].data}}

为了弄明白我们formatter 配置,我们可以在散点函数的tooltip中打印出data1参数

 //我们的散点{name: '销量',type: 'scatter',coordinateSystem: 'geo',//坐标系统data: dataValue,//地图点的样式;颜色,大小symbolSize: 12,itemStyle: {color: "#f13434",shadowBlur: 2,shadowColor: "#333"},//鼠标点击散点的下弹框tooltip: {show: true,triggerOn:"click",formatter: function(data1) {//打印回调函数中的参数console.log(data1)}},},

把回调函数的参数打印出来看看

可以看到我们想要的数据在data中!!

最后再介绍一下地图的点击事件

点击事件

点击事件就是我们在使用地图界面鼠标点击后触发某些事件;为了设计点击事件,我们先得看看点击函数中的param都有什么

 //点击事件myChart.on('click', function(param) {console.log("点击")console.log(param)});

运行后点击一个散点

当我们点击散点可以从日志中观察到param包括我们编写的json数据---data;那这好说了!,我们直接从data中取出我们想要的数据然后进行后边处理就行啦!

 //点击事件myChart.on('click', function(param) {let data = param.data;if (data){console.log("城市:"+data.name+";坐标:"+data.value+";销量:"+data.sales);}});

好了,下边就是该页面全部代码,光看是没用的,大家可以复制粘贴运行试试!本人还在学习java后端,对于前端知识了解不深刻的地方,欢迎大家在评论区讨论,共同进步!

 <!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><title>机器人销量地图</title><scriptsrc="HTML/js/echarts.js"></script><scriptsrc="HTML/js/chain.js"></script><scriptsrc="HTML/js/jquery-3.5.1.js"></script><linkrel="stylesheet"href="HTML/css/bootstrap.min.css"><style>tablethead, tbodytr {display:table;width:100%;table-layout:fixed;}/*表格文字属性;居中,字体宽度和字体大小*/trth{text-align: center;font-weight:bold;font-size: larger;}/*将表头缩进1.2em*/tablethead {width: calc( 100% - 1.2em )}/*表头数据格式:颜色和文字居中*/trtd{color: #FFFFFF;text-align: center;}/*表格设置滚动*/tabletbody{display:block;height:115px;overflow-y:scroll;}</style></head>​<bodystyle="background-color: #2c313a"><divclass="container"style="height: 100% ;width: 100%"><!--这里利用bootstrap的样式:一个页面布局为12份,id=main的代码块展示我们的中国地图;class:col-md-9 代表这个div占9份;col-md-3 占3份--><divid= "content-left"class="col-md-9"  style="margin-top: 20px"><divid="main"style="width: 100%;height:800px"></div></div>​<divclass="col-md-3 table-responsive"><!--            表格展示销量--><tableclass="table table-bordered"style="margin-top: 20px"><thead><tr><thstyle="color: #FFFFFF">地区</th><thstyle="color: #FFFFFF">销量(台)</th><!--                    <th style="color: #FFFFFF">类型</th>      ?--></tr></thead><tbodyid="tbody"></tbody></table></div>​</div>​</body><script><!--    echarts初始化:获取myChart对象-->varmyChart=echarts.init(document.getElementById('main'));​$(function(){//获取表格对象lettable=$("#tbody");//发生ajax请求,到json文件,data为返回的数据,将数据封装到空数组中;直接拿来用即可$.ajax({url: "HTML/json/RobotSales.json",//json文件位置,文件名type: "GET",dataType: "json",success: function(data) {letres=[];//自定义一个空数组接收请求回来的json数据for(leti=0;i<data.length;i++){res.push({name:data[i].name,value: data[i].value,sales:data[i].Sales//若json文件中自己定义了其他信息,在下边直接以k:v形式进行罗列即可;但是主要“,”});};//重点:将封装的json数据传递到dealWithData函数中进行渲染处理使用dealWithData(res);//===销售表格===letrow=[];for (leti=0; i<data.length; i++) {letname=data[i].name;letsales=data[i].Sales;lettext=data[i].text;//拼接表格的行和列row.push("<tr><td>"+name+"</td>"+'<td>'+sales+'</td>'+text+'</tr>');}table.append(row.join());//追加到table表格中}});})​​functiondealWithData(data){letdataValue=data;option= {//设置一个标题title: {text: '设备销量',x: 'center',textStyle: {color: '#fff',fontSize:"40"}},//鼠标划过省份下弹框tooltip: {show: true,triggerOn:'click'//点击生效},geo: {map: 'china',//必须写roam:false,// 拖拽功能;自选关闭开启zoom: 1.235,//地图缩放比例center: [105, 36],//地图位置//地图省份的样式;包括板块颜色和边框颜色itemStyle: {areaColor: '#f5f2f2',borderColor: "#835f5f",},//省份字体样式;包括是否展示,字体大小和颜色label: {normal: {show:true,fontSize: "11.5",color: "rgb(107,102,102)"}},//鼠标划过的高亮设置;包括省份板块颜色和字体等emphasis: {itemStyle: {areaColor: '#d0a3a3',},label: {show: true,color:"rgb(255,255,255)"}}},​series: [//我们的散点{name: '销量',type: 'scatter',coordinateSystem: 'geo',//坐标系统data: dataValue,//地图点的样式;颜色,大小symbolSize: 12,itemStyle: {color: "#f13434",shadowBlur: 2,shadowColor: "#333"},//鼠标点击散点的下弹框tooltip: {show: true,triggerOn:"click",formatter: function(data1) {letdata2=data1.data;return"<b>销量<b><br>"+data2.name+data2.sales}},},​//涟漪特效{name: "产品销量",type: "effectScatter",coordinateSystem: "geo",data:dataValue,//传入的地图点数据symbolSize: 6,//涟漪大小showEffectOn: "render",//涟漪效应rippleEffect: {brushType: "stroke",color: "#f13434",period: 10,//周期scale: 10//规模},hoverAnimation: true,//悬停动画//地图点样式label: {formatter: "{b}",position: "top",show: true,fontSize: "10",},itemStyle: {color: "#f13434",shadowBlur: 2,shadowColor: "#333"},//鼠标点击散点的下弹框tooltip: {show: true,triggerOn:"click",formatter: function(data1) {console.log(data1)letdata2=data1.data;return"<b>销量<b><br>"+data2.name+data2.sales}},zlevel: 1}]};myChart.setOption(option);}​​//点击事件myChart.on('click', function(param) {letdata=param.data;if (data){console.log("城市:"+data.name+";坐标:"+data.value+";销量:"+data.sales);}});​</script></html>

ECharts--中国地图(无敌详细)相关推荐

  1. 【echarts 中国地图射线版本】vue实现中国地图航线动画效果,地图上添加散点效果【详细注释,通俗易懂】

    先上效果图 前置条件,必看 首先你需要安装echarts并引入 然后你需要下载china.json文件并注册引入,不然不生效 当然很多新手可能不知道china.json在哪里下载,因为官方已经没有了, ...

  2. Echarts中国地图各省份区域设置不同的颜色

    摘要: 接着<Echarts引入中国地图>续写,我们的项目需求是要求地图的背景颜色要各省份不同.看了文档同时也看了相关官网例子,写出来总结下吧,以便以后需要. 实现: 1.在series中 ...

  3. echarts 中国地图 世界地图

    最近项目中用到了echarts 中国地图 世界地图,特在这记录一下. world.js 下载链接(world_new.js带有中国地区名称,另一个只是用来显示中国地图) 链接:https://pan. ...

  4. Echarts中国地图三级钻取

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站:https://www.captainai.net/dongkelun 前言 最近其实一直在用Echa ...

  5. Echarts中国地图背景颜色渐变

    摘要:关于Echarts地图的问题,在第一篇就说过引入等相关问题(如还有疑惑请先看之前的文章传送门).地图的背景颜色如何实现渐变呢?主要利用的是Echarts中的geo和visualMap结合实现.v ...

  6. VUE 中实现echarts中国地图 人口迁徙

    VUE 中实现echarts中国地图 人口迁徙 效果图: 安装Echarts依赖 要在vue中使用Echarts 需要先安装依赖 npm install echarts --save 这是我的Echa ...

  7. HTML中地图根据数据变色,echarts中国地图根据数据对省份渲染不同的颜色

    echarts中国地图 .centerItem { width: 856px; height: 640px; background-color: #fff; margin: 110px auto 0 ...

  8. 【echarts 中国地图增加南海九段线】

    echarts 中国地图增加南海九段线 最近在开发echarts 中国地图时,客户提出中国地图要完整,需要增加南海九段线. 这是个政治任务,但是echarts里面的文档没有关于南海诸岛九段线的相关配置 ...

  9. Echarts中国地图修改

    前言 在使用Echarts图表时需要修改中国地图中的样式以及内容,在网上查找了一些资料并且整理了一下. Echarts中国地图 地图样式修改 标题修改 数值功能删除,但保留数据计算 按钮功能去除 地图 ...

  10. echarts 中国地图散点图渲染

    准备 echarts 中国地图的json(在最后) GitHub的demo地址,可以直接拉下来 先注册地图 import * as echarts from 'echarts'; import { d ...

最新文章

  1. ux设计_从UX设计人员的角度来看Microsoft Build 2018
  2. javascript --- Object.create的阅读
  3. 基于MVC的网站和在线教育系统
  4. 【转】ABP源码分析二十三:Authorization
  5. 用Word2007查找和替换功能批量设置图片位置
  6. Linux内核分析 - 网络[十四]:IP选项
  7. 迪斯尼首次取代苹果公司 成“美国人最亲密品牌”
  8. java入门申请,《java入门如此简单》——基础知识1
  9. CRM客户关系管理系统项目总结
  10. java 鼠标驱动模拟,dd虚拟键盘鼠标模拟软件
  11. My97DatePicker事件无效,触发事件calendar.js,datepicker.css等文件无法加载
  12. 详解万向锁,欧拉旋转角,slam中万向锁的理解
  13. CF891D Sloth
  14. PHP支付宝支付开发流程
  15. 【JAVA】滴滴-2021校招在线笔试-DE数据开发试卷-0913
  16. C语言赋值被截断,c语言中赋值截断
  17. 腾讯广告终于迎来全面整合
  18. Hive坑之Where语句的“不等于”
  19. 个人编译移动内核时遇到的一些问题报错及处理方法【不定时更新2021.1.3】
  20. 逻辑电路复杂?我们用Logisim一键解决

热门文章

  1. 惯性导航的精度和误差解说
  2. 最详细的JavaWeb服务器端通过海康SDK实现对摄像机的控制。
  3. 2018-2019-2 20189212 《网络攻防技术》第九周作业
  4. 5g和远程医疗的关系_远程医疗,未来和不断变化的习惯
  5. 2012-10-09傻可樂《新概念三笔记》…
  6. android 获取手机电话号码和短信内容
  7. ICCV2019 最佳论文解读:SinGAN从单幅图像学习生成模型
  8. tensor搭建--windows 10 64bit下安装Tensorflow+Keras+VS2015+CUDA8.0 GPU加速
  9. classic words
  10. 酷我音乐for linux,在ubuntu 14.04 64bit上安装酷我音乐盒Linux客户端kwplayer