/*
title: Rich Text Labels on Map
category: map
titleCN: 地图上的富文本标签
*/


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);
