// 获取百度地图实例,使用百度地图自带的控件 var bmap = myChart.getModel().getComponent('bmap').getBMap(); bmap.setMapStyle({style:'normal'}); bmap.addControl(new BMap.MapTypeControl()); bmap.addControl(new BMap.ScaleControl()); bmap.addControl(new BMap.NavigationControl({anchor: BMAP_ANCHOR_BOTTOM_RIGHT})); bmap.enableAutoResize(); //调用百度的方法,使用bmap对象 if (center_x == 0) { var point = new BMap.Point(116.404, 39.915); bmap.centerAndZoom(point, 4.5); } else { var point = new BMap.Point(center_x, center_y); bmap.centerAndZoom(point, zoomvalue); } var RegionData = [];//清空上一次的数据 var AreaData = []; bmap.addEventListener("zoomend", function () { console.log(this.getZoom());//这句为了每次打印每次缩放完后的等级,但只打印一次,说明从新setOption后,给地图实例注册的监听事件会丢失 $.each(dataJson, function (index, item) { var Location = [item["经度"], item["纬度"], 170]; if (AreaData.length < dataJson.length) AreaData.push({ id: item.AreaID, name: item["区域名称"], value: Location, itemStyle: { normal: { color: '#00c6ff' } } }); //获取第一个区域的经纬度做为经济带的经纬度 var RegionIsExist = false; for (var i = 0; i < RegionData.length; i++) { if (RegionData[i].name == item["经济带名称"]) { RegionIsExist = true; break; } } if (RegionIsExist) { return true;//继续下一个循环 } if (RegionData.length < 4) RegionData.push({ id: item.RegionID, name: item["经济带名称"], value: Location, itemStyle: { normal: { color: '#00c6ff' } } }); }); if (this.getZoom() < 8) { option.series[0].data = RegionData; myChart.setOption(option, true,true); } else { option.series[0].data = AreaData; myChart.setOption(option, true, true); } });
这个监听只能监听一次,因此不理想,不知道是否是跟第一行代码获取百度实例的方式有关系.但愿有经验的大神能够告知.ide