利用echarts实现的地图下钻功能,悬浮显示tooltip信息
- 效果图
- 代码地址
地图三级下钻demo的GitHub地址
代码详解
<html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>地图下钻</title> <meta http-equiv="X-UA-Compatible" content="IE=100" /> <style> body { margin: 0; padding: 0; background-color: #333; } </style> </head> <body> <!-- 放地图echarts的容器 --> <div id="map" style="height: 600px;width: 800px"></div> <script src="./js/jquery-1.11.2.min.js"></script> <!-- cityMap中是市级地点对应的编码,用这个编码来查找json文件 --> <script src="./js/cityMap.js"></script> <script src="./js/echarts.min.js"></script> <script src="./js/app.js"></script> </body></html>
//地图容器var chart = echarts.init(document.getElementById("map"));//34个省、市、自治区的名字拼音映射数组var provinces = { //23个省 台湾: "taiwan", 河北: "hebei", 山西: "shanxi", 辽宁: "liaoning", 吉林: "jilin", 黑龙江: "heilongjiang", 江苏: "jiangsu", 浙江: "zhejiang", 安徽: "anhui", 福建: "fujian", 江西: "jiangxi", 山东: "shandong", 河南: "henan", 湖北: "hubei", 湖南: "hunan", 广东: "guangdong", 海南: "hainan", 四川: "sichuan", 贵州: "guizhou", 云南: "yunnan", 陕西: "shanxi1", 甘肃: "gansu", 青海: "qinghai", //5个自治区 新疆: "xinjiang", 广西: "guangxi", 内蒙古: "neimenggu", 宁夏: "ningxia", 西藏: "xizang", //4个直辖市 北京: "beijing", 天津: "tianjin", 上海: "shanghai", 重庆: "chongqing", //2个特别行政区 香港: "xianggang", 澳门: "aomen"};//直辖市和特别行政区-只有二级地图,没有三级地图var special = ["北京", "天津", "上海", "重庆", "香港", "澳门"];//绘制全国地图$.getJSON("./json/china.json", function(data) { console.log("加载全国地图执行了"); //注册地图 echarts.registerMap("中国", data); var d = []; for (var i = 0; i < data.features.length; i++) { d.push({ name: data.features[i].properties.name }); } //绘制地图 renderMap("中国", d);});//地图点击事件chart.on("click", function(params) { //点击事件输出获取到的数据 //如果点击的这个地方的name省份的列表中,绘制二级地图 if (params.name in provinces) { //如果点击的是34个省、市、自治区,绘制选中地区的二级地图 //json的路径进行拼接 console.log("第一级下钻到第二级"); $.getJSON("./json/province/" + provinces[params.name] + ".json", function( data ) { echarts.registerMap(params.name, data); var d = []; for (var i = 0; i < data.features.length; i++) { d.push({ name: data.features[i].properties.name }); } renderMap(params.name, d); }); } else if (params.seriesName in provinces) { //如果是【直辖市/特别行政区】只有二级下钻 if (special.indexOf(params.seriesName) >= 0) { renderMap("中国"); } else { //排除直接点击省份,和特殊地区这两种情况,点击的事件就是点击了二级地图 //显示县级地图 console.log("第二级下钻到第三级"); $.getJSON("./json/city/" + cityMap[params.name] + ".json", function( data ) { echarts.registerMap(params.name, data); var d = []; for (var i = 0; i < data.features.length; i++) { d.push({ name: data.features[i].properties.name }); } renderMap(params.name, d); }); } } else { //排除上面的三种情况,到达三级地图之后,再点击就是重绘全国地图 $.getJSON("./json/china.json", function(data) { console.log("加载全国地图执行了"); //注册地图 echarts.registerMap("中国", data); var d = []; for (var i = 0; i < data.features.length; i++) { d.push({ name: data.features[i].properties.name }); } //绘制地图 renderMap("中国", d); }); }});//初始化绘制全国地图配置var option = { // backgroundColor: '#091C3D', tooltip: { trigger: "item", formatter: function(d) { return d.name + "</br>数据1:" + 9.1 + "</br>数据2:" + 1.9 + "</br>"; } }};function renderMap(map, data) { //数组,name为地区名称,value为值 option.title = { text: map, textStyle: { color: "#fff", fontSize: 30 }, left: 300, top: 50 }; option.series = [ { z: 1, name: map, type: "map", map: map, right: "2%", top: 10, height: "98%", width: "98%", zoom: 1, label: { normal: { show: true, textStyle: { color: "#fff", fontSize: 12 } }, emphasis: { show: true, textStyle: { color: "#fff", fontSize: 16 } } }, itemStyle: { normal: { areaColor: "#323c48", borderColor: "dodgerblue", borderWidth: 2, shadowColor: "rgba(63, 218, 255, 0.5)", shadowBlur: 20 }, emphasis: { areaColor: "#CBAAAA" } }, //roam: true, data: data } ]; //渲染地图 chart.setOption(option);}