模拟攻击图

描述:当前是关于Echarts图表中的 路径图 示例。
 
            var geoCoordMap = {
    '宝安区':[113.888821,22.560663],
    '南山区':[113.935121,22.538606],
    '福田区':[114.059878,22.527924],
    '罗湖区':[114.138551,22.555724],
    '龙华区':[114.04148,22.75794],
    '盐田区':[114.242126,22.563172],
    '坪山区':[114.35366,22.715809],
    '龙岗区':[114.252474,22.72701]
};
//模拟数据
var attackedData1 = [
    [{ name: '南山区' }, { name: '宝安区', value: 95 }],
    [{ name: '南山区' }, { name: '福田区', value: 90 }],
    [{ name: '南山区' }, { name: '罗湖区', value: 80 }],
    [{ name: '南山区' }, { name: '龙华区', value: 70 }],
    [{ name: '南山区' }, { name: '盐田区', value: 50 }],
    [{ name: '南山区' }, { name: '坪山区', value: 40 }],
    [{ name: '南山区' }, { name: '龙岗区', value: 30 }]
];
var planePath = 'path://M410.642 383.967l-119.088 42.143c-34.382 12.167-47.186-3.357-27.037-35.227l219.78-347.616c19.906-31.486 52.821-31.872 72.969 0l219.78 347.617c19.906 31.486 8.045 47.642-27.037 35.227l-119.088-42.143-89.078 559.012c-11.632 72.997-30.474 73.105-42.123 0l-89.078-559.012z';
 /**
 * lines的数据格式化
 *
 * @param    {object}  geoData     中心城市对应的地理坐标数据
 * @param    {object}  data        
 * @param    {boolean}  origin  false(default)-> 中心点作为终点;true -> 中心点作为起点;
 * @returns  {object} {origin:起点,destination:终点,coord:对应的坐标}
 *
 */
function convertLinesData(geoData, data, origin) {
    var tGeoDt = [];
    var centerName,therName;
    var i = 0, 
    len = data.length;
    if (origin) {
        for (i; i < len; i++) {
            centerName = data[i][0].name;
            otherName= data[i][1].name;
            if (centerName != otherName) {
                tGeoDt.push({
                    origin:centerName,
                    destination:otherName,
                    coords: [geoData[centerName], geoData[otherName]]//[起点,终点]
                });
                
            }
        }
    } else {
        for (i; i < len; i++) {
            centerName = data[i][0].name;
            otherName= data[i][1].name;
            if (centerName != otherName) {
                tGeoDt.push({
                    origin:otherName,
                    destination:centerName,
                    coords: [geoData[otherName], geoData[centerName]]//[起点,终点]
                });
                
            }
        }
    }
    return tGeoDt;
}

/**
 * scatter的数据格式化
 *
 * @param    {object}  geoData     中心城市对应的地理坐标数据
 * @param    {object}  data        
 * @param    {string}  centerName    中心点
 * @returns  {object}
 *
 */
function convertScatterData(geoData, data, centerName) {
    var tGeoDt = [];
    for (var i = 0, len = data.length; i < len; i++) {
        var tName = data[i][1].name
        if (centerName != tName) {
            tGeoDt.push({
                name: tName,
                value: [geoData[tName][0],geoData[tName][1],data[i][1].value]
            });
        }

    }
    tGeoDt.push({
        name: centerName,
        value: geoData[centerName],
        symbolSize: 15,
        itemStyle: {
            normal: {
                color: '#ff0000',
                borderColor: '#000'
            }
        }
    });
    return tGeoDt;
}
 
//多个被攻击点颜色设置
var color = ['#ffffff', '#ffa022', '#46bee9'];
var series = [];
[['南山区', attackedData1]].forEach(function (item, i) {
    series.push(
        //设置尾迹效果
        {
            name: item[0],
            type: 'lines',
             coordinateSystem: 'bmap',
            zlevel: 1,
            //线特效的配置
            effect: {
                show: true,
                //特效动画的时间
                period: 6,
                //特效尾迹的长度
                trailLength: 0.7,
                //特效尾迹的顔色
                color: '#fff',
                symbolSize: 3
            },
            lineStyle: {
                normal: {
                    color: color[i],
                    width: 0,
                    //边的曲度
                    curveness: 0.2
                }
            },
            data: convertLinesData(geoCoordMap, item[1])
        },
        //设置飞机图标
        {
            name: item[0],
            //用于带有起点和终点信息的线数据的绘制
            type: 'lines',
             coordinateSystem: 'bmap',
            zlevel: 2,
            //线两端的标记类型
            symbol: ['none', 'none'],
            symbolSize: 10,
            effect: {
                show: true,
                period: 6,
                trailLength: 0,
                //特效图形的标记
                symbol: planePath,
                symbolSize: 15
            },
            lineStyle: {
                normal: {
                    color: '#00ffff',
                    width: 1,
                    opacity: 0.6,
                    curveness: 0.2
                }
            },
            data: convertLinesData(geoCoordMap, item[1])
        },
        {
            name: item[0],
            //带有涟漪特效动画
            type: 'effectScatter',
            //该系列使用的坐标系
            coordinateSystem: 'bmap',
            zlevel: 2,
            //涟漪特效相关配置
            rippleEffect: {
                //波纹的绘制方式
                brushType: 'stroke'
            },
            //图形上的文本标签
            label: {
                normal: {
                    show: true,
                    position: 'right',
                    formatter: '{b}'
                }
            },
            symbolSize: function (val) {
                return val[2] / 5; ////比例
            },
            itemStyle: {
                normal: {
                    areaColor: '#031525',
                    color: color[i]
                }
            },
            data: convertScatterData(geoCoordMap, item[1], item[0])
        }
    );
}); 
console.log(series);
var option = {
    title: {
        text: '深圳市攻击图 - 基于百度地图',
        left: 'center',
        textStyle: {
            color: '#fff'
        }
    },
    bmap: {
        center: [114.059781,22.65369], // 中心位置坐标
        zoom: 11, // 地图缩放比例
        roam: true, // 开启用户缩放
        mapStyle: {
            'styleJson': [{
                'featureType': 'water',
                'elementType': 'all',
                'stylers': {
                    'color': '#031628'
                }
            }, {
                'featureType': 'land',
                'elementType': 'geometry',
                'stylers': {
                    'color': '#000102'
                }
            }, {
                'featureType': 'highway',
                'elementType': 'all',
                'stylers': {
                    'visibility': 'off'
                }
            }, {
                'featureType': 'arterial',
                'elementType': 'geometry.fill',
                'stylers': {
                    'color': '#000000'
                }
            }, {
                'featureType': 'arterial',
                'elementType': 'geometry.stroke',
                'stylers': {
                    'color': '#0b3d51'
                }
            }, {
                'featureType': 'local',
                'elementType': 'geometry',
                'stylers': {
                    'color': '#000000'
                }
            }, {
                'featureType': 'railway',
                'elementType': 'geometry.fill',
                'stylers': {
                    'color': '#000000'
                }
            }, {
                'featureType': 'railway',
                'elementType': 'geometry.stroke',
                'stylers': {
                    'color': '#08304b'
                }
            }, {
                'featureType': 'subway',
                'elementType': 'geometry',
                'stylers': {
                    'lightness': -70
                }
            }, {
                'featureType': 'building',
                'elementType': 'geometry.fill',
                'stylers': {
                    'color': '#000000'
                }
            }, {
                'featureType': 'all',
                'elementType': 'labels.text.fill',
                'stylers': {
                    'color': '#857f7f'
                }
            }, {
                'featureType': 'all',
                'elementType': 'labels.text.stroke',
                'stylers': {
                    'color': '#000000'
                }
            }, {
                'featureType': 'building',
                'elementType': 'geometry',
                'stylers': {
                    'color': '#022338'
                }
            }, {
                'featureType': 'green',
                'elementType': 'geometry',
                'stylers': {
                    'color': '#062032'
                }
            }, {
                'featureType': 'boundary',
                'elementType': 'all',
                'stylers': {
                    'color': '#465b6c'
                }
            }, {
                'featureType': 'manmade',
                'elementType': 'all',
                'stylers': {
                    'color': '#022338'
                }
            }, {
                'featureType': 'label',
                'elementType': 'all',
                'stylers': {
                    'visibility': 'off'
                }
            },{
                    "featureType": "district",
                    "elementType": "labels.text.fill",
                    "stylers": {
                              "color": "#ffffffff"
                    }
          },
          {
                    "featureType": "district",
                    "elementType": "labels.text.stroke",
                    "stylers": {
                              "color": "#ff0000ff"
                    }
          }]
        }
    },
    series: series
};