快捷搜索: 王者荣耀 脱发

Echarts结合百度地图API绘制热力图

最近项目中需要使用echarts与百度地图API结合来绘制事故发生热力图,在将其与百度地图结合的过程中遇到了一些问题,现将其过程与解决方案记录下,以供日后参考。echarts中结合百度地图API的热力图demo:http://gallery.echartsjs.com/editor.html?c=xSJNKs7EX

使用步骤

1.引用echarts与百度地图扩展js文件

<!--引入百度地图的jssdk,这里需要使用你在百度地图开发者平台申请的 ak-->
<script src="http://api.map.baidu.com/api?v=2.0&ak="></script>
<!-- 引入 ECharts -->
<script src="dist/echarts.min.js"></script>
<!-- 引入百度地图扩展 -->
<script src="dist/extension/bmap.min.js"></script>

其实有个简单的方法直接在下载demo中的HTML页面即可,会以http形式引入相关文件,直接拿来用就好。

2.获取dom以及echarts初始化

需要获取放置地图div的dom元素,然后将echarts初始化,假如有多个js功能文件都要用到绘图的,这部分最后在主页面HTML中进行,相关代码如下:

var dom = document.getElementById("map");
var myChart = echarts.init(dom);

3.设置option绘制图形

使用echarts画图都需要定义好option配置项,然后调用函数进行设置,这部分最好单独放入一个函数中,方便后续其他需要绘图的调用,相关代码如下:

function drawHeatMap(points) {
          
   
//		var dom = document.getElementById("contentD");
//		var myChart = echarts.init(dom);
//		var app = {};
		option = null;
//		app.title = 热力图与百度地图扩展;
		
	    myChart.setOption(option = {
          
   
		        animation: false,
		        bmap: {
          
   
		            center: [117.282699092,31.8669422607],
		            zoom: 12,
		            roam: true
		        },
		        visualMap: {
          
   
		            show: false,
		            top: top,
		            min: 0,
		            max: 100,
		            seriesIndex: 0,
		            calculable: true,
		            inRange: {
          
   
		                color: [blue, blue, green, yellow, red]
		            }
		        },
		        series: [{
          
   
		            type: heatmap,
		            coordinateSystem: bmap,
		            data: points,
		            pointSize: 5,
		            blurSize: 6
		        }]
		    });
//		    if (!app.inNode) {
          
   
//		        // 添加百度地图插件
//		        var map = myChart.getModel().getComponent(bmap).getBMap();
//		        map.addControl(new BMap.MapTypeControl());
//		    }
		    
			if (option && typeof option === "object") {
          
   
			    myChart.setOption(option, true);
			}
	}

4.获取百度地图扩展

最后需要获取地图对象,以便后续调用百度地图API,相关代码如下:

var map = myChart.getModel().getComponent(bmap).getBMap();
map.addControl(new BMap.MapTypeControl());
map.centerAndZoom("合肥",12);
map.enableScrollWheelZoom(true);

注意后续如果需要使用百度地图API中的函数画图,需要每次先调用上述代码第一行获取map对象,否则无法绘制。

5.最终结果

总结与感想

(1)项目中使用的是ajax获取数据,由于Ajax是异步的,所以需要把绘图的函数放入ajax的回调函数中,不然可能在还没获取完数据时,就已经执行了绘图代码。

(2)注意引入js文件的顺序,第一次画不出来就是因为没有把百度地图ak的sj文件放到echarts前面

(3)学会发现问题,定位问题以及解决问题。其实很多代码有bug没有想象中的那复杂,很多时候主体思路和框架都对了,就是一两行细节的问题,这时就需要反复利用调式手段,不断尝试,发现问题所在,不然前面可能都功亏一篑了。

参考:https://github.com/apache/incubator-echarts/tree/master/extension/bmap

http://gallery.echartsjs.com/editor.html?c=xSJNKs7EX

经验分享 程序员 微信小程序 职场和发展