echarts地图钻取方案的实现

    地图钻取是一级一级的深入进去的,返回的时候是一级一级的返回的,使用堆栈存储地理信息的层级数据额外合适。我们默认展示的是世界地图,当点击下一级地理数据时,如果下一级地理数据有名称,将下一级地理数据压入堆栈。

    获取下一级的名称对应的地图基础数据json,如果下一级因为名称对应的地图基础数据json不存在,则无法钻入,则将堆栈出栈一个,保证这次点击没有对堆栈数据造成影响。因为中国和世界地图在全局的js中有,不用再去动态获取地理信息数据json文件了。

    这样一级一级的深入进去,地图的层级数据就会保存在堆栈里,堆栈保留任何一个地理单元的所有层级数据,用于传参时使用。

    当点击返回按钮时,将堆栈数据出栈,数据数据层级便少了最后一级。返回按钮只有在层级数量多余一级时使用,可以保证第一级地图(世界地图)不会有返回按钮的存在了。

    var mapArray = ['world'];//存储地理信息的堆栈

    /** 加载设备分布世界地图 * */
function load_world_map() {
var middleMap = mapArray[mapArray.length - 1];
if(middleMap == 'world' || middleMap == '中国'){
draw_map();
}
else{
$.get(Global.assets+'/resource/thirdparty/echarts4/json/province/' + middleMap + '.json').done(function (geoJson) {
echarts.registerMap(middleMap, geoJson);
draw_map();
}).fail(function(){
mapArray.pop(); 
   });
}
}


function draw_map(){
//传入地理信息参数
params['country'] = (mapArray.length > 1)?compute_basecode(mapArray[1],'world'):"";
params['province'] = (mapArray.length > 2)?compute_basecode(mapArray[2],'china'):"";
params['city'] = (mapArray.length > 3)?compute_basecode(mapArray[3],'china'):"";
//先销毁前面的实例,避免缩放产生效果影响后面的地图
var lastChart = echarts.getInstanceByDom(document.getElementById('world_map'));
if(lastChart != null){
echarts.dispose(lastChart);
}
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('world_map'),global_theme);
myChart.showLoading();
//控制返回按钮是否显示
var graphics = [];
var backMap = function(){
if(mapArray.length > 1){
        mapArray.pop();
        load_world_map();
        }
}
if(mapArray.length > 1){
graphics = [{
       id: 'left-btn',
       type: 'circle',
       shape: { r: 20 },
       style: {
           text: '<',
           fill: '#eee'
       },
       left: 17,
       top: 0,
       onclick: backMap
   }, {
       id: 'right-btn',
       type: 'text',
       style: {
           text: '返回上一级',
           fill: '#eee'
       },
       left: 10,
       top: 44,
       onclick: backMap
   }];
}
$.get(decorateUrl(world_map_data_address,params)).done(function(data) {
var current = mapArray[mapArray.length-1];
var method = 'china_point';
if(current == 'world'){method = 'world_point';}
var data = compose_echarts(data,method);
myChart.hideLoading();
myChart.setOption({
graphic: graphics,
   tooltip: {
       trigger: 'item'
   },
   dataRange: {
    show:false,
       min: data.min,
       max: data.max,
       x: 'left',
       y: 'bottom',
       text:['高','低'],           // 文本,默认为数值文本
       calculable : true
   },
   series: [
       {
           name: '在线设备数',
           type: 'map',
           mapType: (current=='中国')?'china':current,
           roam: true,
           itemStyle:{
               emphasis:{label:{show:true}}
           },
           data:data.data,
           nameMap:data.nameMap
       }
   ]
});
myChart.off('click');
myChart.on('click',function(param){
var address = param.name;
if(address!=null && address != ""){
mapArray.push(address);
load_world_map();
}
});

});

        //下面放联动部分的代码即可。

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值