配置项如下
var districts = {
"宝安区": {
"lat": 22.5896850000,
"lng": 113.8631380000
},
"南山区": {
"lat": 22.5296850000,
"lng": 113.9331380000
},
"福田区": {
"lat": 22.5381230000,
"lng": 114.0687750000
},
"罗湖区": {
"lat": 22.5621550000,
"lng": 114.1394890000
},
"盐田区": {
"lat": 22.5760380000,
"lng": 114.2389500000
},
"龙岗区": {
"lat": 22.7158600000,
"lng": 114.2343500000
}
};
var allData = {
"穆斯林影响系数": {
"district_count": [{
"district": "宝安区",
"count": 0.2
},{
"district": "南山区",
"count": 0.3
},{
"district": "福田区",
"count": 0.4
},{
"district": "罗湖区",
"count": 0.4
},{
"district": "盐田区",
"count": 0.2
},{
"district": "龙岗区",
"count": 0.2
}]
},
"外来人口影响系数": {
"district_count": [{
"district": "宝安区",
"count": 0.3
},{
"district": "南山区",
"count": 0.3
},{
"district": "福田区",
"count": 0.4
},{
"district": "罗湖区",
"count": 0.26
},{
"district": "盐田区",
"count": 0.28
},{
"district": "龙岗区",
"count": 0.33
}]
},
"失业率影响系数": {
"district_count": [{
"district": "宝安区",
"count": 0.1
},{
"district": "南山区",
"count": 0.2
},{
"district": "福田区",
"count": 0.1
},{
"district": "罗湖区",
"count": 0.1
},{
"district": "盐田区",
"count": 0.2
},{
"district": "龙岗区",
"count": 0.2
}]
},
"低收入影响系数": {
"district_count": [{
"district": "宝安区",
"count": 0.18
},{
"district": "南山区",
"count": 0.15
},{
"district": "福田区",
"count": 0.1
},{
"district": "罗湖区",
"count": 0.1
},{
"district": "盐田区",
"count": 0.2
},{
"district": "龙岗区",
"count": 0.24
}]
}
};
var option = {
// color: ['#85b6b2', '#6d4f8d','#cd5e7e', '#e38980','#f7db88'],
bmap: {
center: [114.1039166260,22.5902744004],
zoom: 12,
roam: true,
enableMapClick: false,
mapStyle: {
styleJson: [{
"featureType": "all",
"elementType": "all"
}, {
"featureType": "poi",
"elementType": "all",
"stylers": {
"visibility": "on"
}
}]
}
},
legend: {
show: false,
orient: 'vertical',
right: 20,
top: 15,
padding: 10,
backgroundColor: "rgba(255,255,255,0.8)",
data: []
},
series: [{
type: 'pie',
data: []
}]
};
myChart.setOption(option);
myChart.on('legendselectchanged', function (params) {
console.log(params.name);
for(var prop in districtChart){
districtChart[prop].dispatchAction({
type: 'legendToggleSelect',
name:params.name
});
}
});
setTimeout(init, 0);
function init() {
initMap();
initPieDistrict(myChart, getMap());
showPie(["穆斯林影响系数", "外来人口影响系数", "失业率影响系数", "低收入影响系数"]);
//showPie(["直接访问", "联盟广告", "视频广告"]);
}
function initMap() {
var top_left_navigation = new BMap.NavigationControl({
//type: BMAP_NAVIGATION_CONTROL_SMALL
});
var map = getMap();
//map.centerAndZoom("苏州", 13);
map.addControl(top_left_navigation);
map.disableDoubleClickZoom();
map.removeEventListener("click");
return map;
}
function getMap() {
return myChart.getModel().getComponent('bmap').getBMap();
}
var districtPoint = districts;
var districtChart = {};
var districtLabels = [];
var parentChart = null;
var initPieDistrict = function(chart, map) {
parentChart = chart;
var count = 0;
for (var prop in districtPoint) {
var district = prop;
var position = districtPoint[prop];
var id = "districtPoint" + count++;
districtLabels.push(district);
districtChart[district] = initPieMarker(map, id, district, position);
}
//console.log(districtLabels);
//console.log(districtChart);
}
function initPieMarker(map, id, district, position) {
var htm = '<div id="' + id + '" style="width:100px;height:100px;"></div>';
var point = new BMap.Point(position.lng, position.lat);
var myRichMarkerObject = new BMapLib.RichMarker(htm, point, {
"anchor": new BMap.Size(-30, -30),
barkground: "transparent"
});
map.addOverlay(myRichMarkerObject);
document.getElementById(id).parentNode.style.backgroundColor = "transparent";
document.getElementById(id).parentNode.style.zIndex = "1";
var myChart = echarts.init(document.getElementById(id), "macarons");
var option = {
tooltip: {
trigger: 'item',
formatter: "{a} <br/>{b}: {c} ({d}%)"
},
title: {
left: "center",
top: "center",
textStyle: {
fontSize: 14,
fontWeight: "bold"
}
},
series: [{
name: district,
type: 'pie',
avoidLabelOverlap: false,
label: {
normal: {
show: false,
position: 'center',
formatter: "{a}"
}
},
radius: ['25', '40'],
data: []
}]
}
myChart.setOption(option);
return myChart;
}
function showPie(arr) {
let obj = {};
console.log(arr.length, "len")
districtLabels.forEach((i) => {
obj[i] = {};
arr.forEach((j) => {
console.log(j, "xxx")
obj[i][j] = 0;
});
});
console.log(obj, "AA")
//数据降维
for (let prop in allData) {
allData[prop].district_count.forEach((i) => {
if (obj[i.district][prop] === 0) {
obj[i.district][prop] = i.count;
}
});
}
console.log(obj);
setData(obj, arr);
}
var placeHolderStyle = {
normal : {
color: 'rgba(255,255,255,0.8)',
label: {show:false},
labelLine: {show:false}
},
emphasis : {
color: 'rgba(0,0,0,0)'
}
};
function setData(data, label) {
districtLabels.forEach((district) => {
var count = 0;
var dt = (data[district]);
var newPieData = [];
for (let prop in dt) {
newPieData.push({
name: prop,
value: dt[prop]
});
count += dt[prop];
}
console.log(newPieData);
if (count === 0) {
newPieData = [];
}
districtChart[district].setOption({
title: {
show: count > 0,
text: district
},
legend: {
show: false,
data: label
},
series: [{
data: newPieData
}, {
tooltip:{show:false},
type: 'pie',
radius: [0, 25],
data: [{
value: 0,
itemStyle : placeHolderStyle
}]
}]
})
});
let labelName = label.map((i) => {
return {
name: i
};
});
//修改parentChart
parentChart.setOption({
legend: {
show: (label.length > 0),
data: label
},
series: [{
data: labelName
}]
});
}