ECharts地图绘制和钻取简易接口详解


Posted in Javascript onJuly 12, 2019

1.地图绘制过程原理

给定范围边界经纬度数据,再给它个名字就构成了绘制地图的基础。也就是说,你可以绘制任意形状的地图版块。

2.地图数据生成

中国以及省市县等地图的基础数据可以从这里生成与下载。

http://datav.aliyun.com/tools/atlas

有了地图范围数据,在 echarts 中通过 registerMap 给这块注册个名字,即可为后续绘制使用,以下代码以最简形式绘制一幅中国地图。

$.getJSON('https://geo.datav.aliyun.com/areas/bound/100000_full.json', function (data) {
 var name = "中国地图";
 // 注册一个地图名称
 echarts.registerMap(name, data); 
 
 var myChart = echarts.init(document.getElementById('map')); 
 var mapOption = { 
  series: [ 
  { 
   type: 'map', // 指明地图类型
   map: name,  // 指明取的名称
   label: {show:true},
   roam: true  // 可缩放
  } ]
 }; 
 myChart.setOption(mapOption, true); 
});

ECharts地图绘制和钻取简易接口详解

3.封装形成简易接口

3.1接口定义

从使用方式与期望结果出发来定义接口。期望给定区域名称,指定绘制位置(DOM元素)即可完成工作。同时希望能控制是否支持钻取,这就形成了最基础的接口定义。

/** 根据名称加载地图
 * @param elementId : DOM 元素ID
 * @param name  : 地图名称(仅已定义的地区名称)
 * @param drill  : 是否支持钻取
 */
ChinaMap.loadMap = function(elementId, name, drill) {...}

3.2接口实现

(1)支持多地图图表绘制,定义 ChartList 来记录每个DOM元素对应的图表对象。

(2)支持钻取,建立省市名称的层级关系,市编码前两位为省编码。

ChinaMap.provinceCodes={'13':'河北','14':'山西',...}
ChinaMap.cityCodes={"石家庄市":"130100","唐山市":"130200",...}

(3)动态加载相应名称的数据绘制地图,形如第2节中的示例。

(4)扩展方法:取地图层级路径。如得到“中国-湖南-长沙市”的路径,且相应的名称可点击跳转。

详细实现代码请访问:https://github.com/triplestudio/helloworld/tree/master/china_map

4.达成应用效果

4.1可钻取的中国地图

使用以下代码即可在指定的元素中绘制一幅可钻取的中国地图。

ChinaMap.loadMap('map', 'china', true);

方法 ChinaMap.loadMap 后会返回 echarts 图表对象,可以进一步进行操作。这里,使用以下代码在钻取时得到层级路径,以便达到可向上跳转的效果。

ChinaMap.loadMap('map', 'china', true).on('click', function(param){ 
 $("#path").html(ChinaMap.formatPath('map', param.name));
});

ECharts地图绘制和钻取简易接口详解

4.2各省地图

由于只需要指定名称和显示元素ID,那么遍历各省名称即可快速完成各省地图的绘制。

for(var prov in ChinaMap.provinces){
  $("#main").append("<div id='" + ChinaMap.provinces[prov] + "' class='box'></div>");
  ChinaMap.loadMap(ChinaMap.provinces[prov], prov);
}

ECharts地图绘制和钻取简易接口详解

相关代码与数据可在此下载:https://github.com/triplestudio/helloworld/releases

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
html5 canvas js(数字时钟)实例代码
Dec 23 Javascript
Javascript中的String对象详谈
Mar 03 Javascript
字段太多jquey快速清空表单内容方法
Aug 21 Javascript
php,js,css字符串截取的办法集锦
Sep 26 Javascript
js css实现垂直方向自适应的三角提示菜单
Jun 26 Javascript
老生常谈Javascript中的原型和this指针
Oct 09 Javascript
vue项目中v-model父子组件通信的实现详解
Dec 10 Javascript
vue生命周期实例小结
Aug 15 Javascript
nuxt配置通过指定IP和端口访问的实现
Jan 08 Javascript
详解小程序横屏方案对比
Jun 28 Javascript
JavaScript实现简单日历效果
Sep 11 Javascript
Vue实现圆环进度条的示例
Feb 06 Vue.js
vue cli安装使用less的教程详解
Jul 12 #Javascript
Js通过AES加密后PHP用Openssl解密的方法
Jul 12 #Javascript
django js 实现表格动态标序号的实例代码
Jul 12 #Javascript
JavaScript中的连续赋值问题实例分析
Jul 12 #Javascript
微信小程序开发常见问题及解决方案
Jul 11 #Javascript
使用vue for时为什么要key【推荐】
Jul 11 #Javascript
利用Angular7开发一个Radio组件的全过程
Jul 11 #Javascript
You might like
php打造属于自己的MVC框架
2012/03/07 PHP
PHP爆绝对路径方法收集整理
2012/09/17 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
PHP实现时间日期友好显示实现代码
2019/09/08 PHP
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
从零开始学习jQuery (六) jquery中的AJAX使用
2011/02/23 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
关于js日期转化为毫秒数“节省20%的效率和和节省9个字符“问题
2012/03/01 Javascript
JavaScript实现自己的DOM选择器原理及代码
2013/03/04 Javascript
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
微信开发 微信授权详解
2016/10/21 Javascript
Bootstrap简单表单显示学习笔记
2016/11/15 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
python使用PyFetion来发送短信的例子
2014/04/22 Python
Python的Flask框架中实现简单的登录功能的教程
2015/04/20 Python
使用Python编写基于DHT协议的BT资源爬虫
2016/03/19 Python
Python使用redis pool的一种单例实现方式
2016/04/16 Python
python将unicode转为str的方法
2017/06/21 Python
利用Python读取txt文档的方法讲解
2018/06/23 Python
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
浅谈keras保存模型中的save()和save_weights()区别
2020/05/21 Python
Python实现Keras搭建神经网络训练分类模型教程
2020/06/12 Python
军训教官感言
2014/03/02 职场文书
科技馆观后感
2015/06/08 职场文书
商务信函英语问候语
2015/11/10 职场文书
python中sys模块的介绍与实例
2021/04/17 Python
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers