核心提示:在项目开发中,遇到了这样一个需求:在百度地图中可以显示饼图在网上搜了比较久,都没有搜到仔细的答案,在查询一些API文档后自己笼统的做了一个.首先我们需要在地图上要有一个可识别到的p,该p需要有个id给...
在项目开发中,遇到了这样一个需求:在百度地图中可以显示饼图
在网上搜了比较久,都没有搜到仔细的答案,在查询一些API文档后自己笼统的做了一个.
首先我们需要在地图上要有一个可识别到的p,该p需要有个id给我们引用来作图,就是这么简单。
那么我们可以自定义覆盖物,让覆盖物作为一个p并赋予id,
var pieChar = null;
/**
* 百度地图对象
*/
var map = new BMap.Map("allmap");
map.centerAndZoom(new BMap.Point(116.3964,39.9093), 15);
map.addControl(new BMap.NavigationControl());
map.addControl(new BMap.ScaleControl());
map.enableScrollWheelZoom();//启用地图滚轮放大缩小
var pNumber = 1;
// 自定义覆盖物,point为添加覆盖物的点位置
function ComplexCustomOverlay(point){
this._point = point;
}
ComplexCustomOverlay.prototype = new BMap.Overlay();
ComplexCustomOverlay.prototype.initialize = function(map){
this._map = map;
//生成p
var p = this._p = document.createElement("p");
//赋id
p.id = 'p'+pNumber;
pNumber++;
p.style.backgroundColor = "#EE5D5B";
p.style.border = "1px solid #BC3B3A";
p.style.zIndex = BMap.Overlay.getZIndex(this._point.lat);
p.style.width = "50px";
p.style.height = "50px";
//将该覆盖物添加到标签覆盖物列表
map.getPanes().labelPane.appendChild(p);
//下面是饼图的生成代码,每个人作图的方法都不同,这里就不详细叙述了
pieChar = new PieChar({
//title: '会员购买生命周期分布',
id: p.id
});
.....
.....
.....
.....
return p;
}
ComplexCustomOverlay.prototype.draw = function(){
var map = this._map;
//饼图的位置设置,需要获取该地图点的像素位置x,y
var pixel = map.pointToOverlayPixel(this._point);
this._p.style.left = pixel.x +"px";
this._p.style.top = pixel.y - 30 + "px";
}
var myCompOverlay = new ComplexCustomOverlay(new BMap.Point(116.407845,39.914101));
var myCompOverlay2 = new ComplexCustomOverlay(new BMap.Point(116.407845,39.914110));
map.addOverlay(myCompOverlay);
map.addOverlay(myCompOverlay2);
结果如下所示:

作的饼图有点小,在哪个东城区下面两个就是作出来的饼图.


