
var weatherIcons = {
    up: ROOT_PATH + '/data/asset/img/arrow-up.png',
    down: ROOT_PATH + '/data/asset/img/arrow-down.png'
};

option = {
    title: {
        text: '降水量',
        subtext: '纯属虚构',
        left: 'center'
    },
    tooltip: {
        trigger: 'item'
    },
    visualMap: {
        min: 0,
        max: 1000,
        left: 'left',
        top: 'bottom',
        text: ['高','低'],
        calculable: true
    },
    toolbox: {
        show: true,
        orient: 'vertical',
        left: 'right',
        top: 'center',
        feature: {
            dataView: {readOnly: false},
            saveAsImage: {}
        }
    },
    animation: true,
    animationDurationUpdate: 1000,
    animationEasingUpdate: 'cubicInOut',
    series: [
        {
            name: 'a',
            type: 'map',
            mapType: 'china',
            roam: true,
            label: {
                show: true,
                formatter: function (params) {
                    if (!params.data) {
                        return;
                    }
                    var icon = params.data.value[1] ? 'up' : 'down';
                    var valueType = params.data.value[1] ? 'valueUp' : 'valueDown';
                    return params.name
                        + '：{' + valueType + '|' + params.value + '} {' + icon + '|}';
                },
                position: 'inside',
                backgroundColor: '#fff',
                padding: [4, 5],
                borderRadius: 3,
                borderWidth: 1,
                borderColor: 'rgba(0,0,0,0.5)',
                color: '#777',
                rich: {
                    valueUp: {
                        color: '#019D2D',
                        fontSize: 14
                    },
                    valueDown: {
                        color: 'red',
                        fontSize: 14
                    },
                    up: {
                        height: 14,
                        align: 'center',
                        backgroundColor: {
                            image: weatherIcons.up
                        }
                    },
                    down: {
                        height: 14,
                        align: 'center',
                        backgroundColor: {
                            image: weatherIcons.down
                        }
                    }
                }
            },
            data: [
                {name: '北京', value: randomData() },
                {name: '天津', value: randomData() },
                {name: '上海', value: randomData() },
                {name: '重庆', value: randomData() },
                {name: '河北', value: randomData() },
                {name: '河南', value: randomData() },
                {name: '云南', value: randomData() },
                {name: '辽宁', value: randomData() },
                {name: '黑龙江', value: randomData() },
                {name: '湖南', value: randomData() },
                {name: '安徽', value: randomData() },
                {name: '山东', value: randomData() },
                {name: '新疆', value: randomData() },
                {name: '江苏', value: randomData() },
                {name: '浙江', value: randomData() },
                {name: '江西', value: randomData() },
                {name: '湖北', value: randomData() },
                {name: '广西', value: randomData() },
                {name: '甘肃', value: randomData() },
                {name: '山西', value: randomData() },
                {name: '内蒙古', value: randomData() },
                {name: '陕西', value: randomData() },
                {name: '吉林', value: randomData() },
                {name: '福建', value: randomData() },
                {name: '贵州', value: randomData() },
                {name: '广东', value: randomData() },
                {name: '青海', value: randomData() },
                {name: '西藏', value: randomData() },
                {name: '四川', value: randomData() },
                {name: '宁夏', value: randomData() },
                {name: '海南', value: randomData() },
                {name: '台湾', value: randomData() },
                {name: '香港', value: randomData() },
                {name: '澳门', value: randomData() }
            ]
        }
    ]
};




function randomData() {
    return [Math.round(Math.random() * 1000), Math.random() > 0.6];
}

setTimeout(function () {

    myChart.on('mouseup', function (params) {
        if (!down) {
            return;
        }
        down = false;

        var e = params.event;

        var geoCoord = myChart.convertFromPixel('series', [e.offsetX, e.offsetY]);

        myChart.setOption({
            series: [{
                center: geoCoord,
                zoom: 4,
                animationDurationUpdate: 1000,
                animationEasingUpdate: 'cubicInOut'
            }]
        });
    });

    var down;
    myChart.on('mousedown', function () {
        down = true;
    });
    myChart.on('mousemove', function () {
        down = false;
    });

}, 0);
