
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<html>
    <head>
        <meta charset="utf-8">
        <script src="lib/simpleRequire.js"></script>
        <script src="lib/config.js"></script>
        <link rel="stylesheet" href="lib/reset.css" />
    </head>
    <body>
        <style>
            .split {
                line-height: 60px;
                height: 60px;
                background: #333;
                text-align: center;
                font-weight: bold;
                font-size: 20px;
                color: #fff;
            }
            .block {
                position: relative;
            }
            body {
                background: #555;
            }
            body .main {
                height: 550px;
                margin-right: 300px;
                margin-left: 20px;
            }
            .panel {
                position: absolute;
                top: 0;
                right: 0;
                bottom: 0;
                width: 280px;
                background: #555;
                color: #fff;
                font-size: 14px;
                font-weight: normal;
                padding: 10px;
            }
            ul.panel-desc {
                padding-left: 20px;
                padding-bottom: 10px;
                border-bottom: 1px solid #777;
            }
            ul.panel-desc li {
                margin-bottom: 5px;
            }
            h3 {
                font-size: 14px;
            }

            #main2 {
                height: 450px;
            }
            #main2-st {
                position: relative;
                height: 200px;
                margin-right: 220px;
                margin-left: 20px;
            }
            strong {
                background: yellow;
                padding: 0 2px;
                border-radius: 2px;
                color: #000;
            }

            #main1-st {
                position: absolute;
                top: 0;
                right: 300px;
                height: 550px;
                width: 400px;
                z-index: 999;
            }

            .sm-settings {
                border-bottom: 1px solid #777;
                padding-bottom: 15px;
            }
            .sm-settings input {
                max-width: 50px;
            }
        </style>

        <div class="split">Scatter</div>
        <div class="block">
            <div id="main2" class="main"></div>
            <div id="main2-st"></div>
            <div class="panel">
                <ul class="panel-desc">
                    <li>bar and pie are individual ec instances.</li>
                    <li><strong>CHECK</strong>: brush an area and drag dataZoom.</li>
                </ul>
                <div id="panel2"></div>
            </div>
        </div>


        <div class="split">Scatter in Map</div>
        <div class="block">
            <div id="main1" class="main"></div>
            <div id="main1-st"></div>
            <div class="panel">
                <ul class="panel-desc">
                    <li>bar and scatter are in the same ec instances and use setOption in brushSelected event.</li>
                </ul>
                <div class="sm-settings">
                    <div>
                        seperatedEChartsInstance:
                        <input onclick="smChange.seperatedEChartsInstance(true)" type="radio" name="seperatedEChartsInstance"/>Y
                        <input onclick="smChange.seperatedEChartsInstance(false)" type="radio" name="seperatedEChartsInstance" checked="checked"/>N
                    </div>
                    <div>
                        DIFF with previous selected:
                        <input onclick="smChange.diff(true)" type="radio" name="diff"/>Y
                        <input onclick="smChange.diff(false)" type="radio" name="diff" checked="checked"/>N
                    </div>
                    <div>
                        animation:
                        <input onclick="smChange.animation(true)" type="radio" name="animation" checked="checked"/>Y
                        <input onclick="smChange.animation(false)" type="radio" name="animation" />N
                    </div>
                    <div>
                        animationDurationUpdate:
                        <input value="1000" onblur="smChange.animationDurationUpdate(this)" type="text" />
                    </div>
                    <div>
                        throttleDelay:
                        <input value="300" onblur="smChange.throttleDelay(this)" type="text" />
                    </div>
                    <div>
                        throttleType:
                        <input onclick="smChange.throttleType('debounce')" type="radio" name="throttleType" checked="checked"/>debounce
                        <input onclick="smChange.throttleType('fixRate')" type="radio" name="throttleType" />fixRate
                    </div>
                </div>
                <div id="panel1"></div>
            </div>
        </div>


        <div class="split">Stacked Bar (rect-polygon intersect)</div>
        <div class="block">
            <div id="main4" class="main"></div>
            <div class="panel">
                <ul class="panel-desc">
                    <li><strong>CHECK</strong>: rect-polygon intersect.</li>
                </ul>
                <div id="panel4"></div>
            </div>
        </div>







        <!-- =================== 1 ===================== -->







        <script type="text/javascript">
            require(['echarts'], function (echarts) {

                var main = document.getElementById('main2');
                var panel = document.getElementById('panel2');
                if (!main) {
                    return;
                }
                var chart = echarts.init(main);
                var chart2St = echarts.init(document.getElementById('main2-st'));

                var dataList = [[], [], []];

                var MAX_DIM2 = 300;
                var MAX_DIM3 = 20000;

                var itemStyle = {
                    normal: {
                        opacity: 0.8,
                        shadowBlur: 10,
                        shadowOffsetX: 0,
                        shadowOffsetY: 0,
                        shadowColor: 'rgba(0, 0, 0, 0.5)'
                    }
                };

                for (var i = 0; i < 60; i++) {
                    dataList[0].push(genDataItem());
                    dataList[1].push(genDataItem());
                    dataList[2].push(genDataItem());
                }

                function genDataItem() {
                    return [
                        Math.random() * 5,
                        Math.random() * 4,
                        Math.random() * MAX_DIM2,
                        Math.random() * MAX_DIM3
                    ];
                }

                var option = {
                    color: ['#555', '#555'],
                    backgroundColor: '#fff',
                    toolbox: {
                        feature: {
                            dataZoom: {}
                        }
                    },
                    brush: {
                    },
                    legend: {
                        top: 20,
                        data: ['scatter0', 'scatter1', 'scatter2']
                    },
                    grid: [
                        {
                            top: 100,
                            bottom: 60,
                            left: 150
                        }
                    ],
                    xAxis: [
                        {
                            type: 'value',
                            splitLine: {show: false}
                        }
                    ],
                    yAxis: [
                        {
                            type: 'value',
                            splitLine: {show: false}
                        }
                    ],
                    animationDurationUpdate: 10,
                    visualMap: [
                        {
                            show: true,
                            top: 'center',
                            left: 30,
                            itemHeight: 400,
                            min: 0,
                            max: MAX_DIM2,
                            range: [20, MAX_DIM2 - 30],
                            calculable: true,
                            dimension: 2,
                            inRange: {
                                color: ['blue', 'orange', 'yellow']
                            },
                            outOfRange: {
                                color: ['blue', 'orange', 'yellow'],
                                opacity: 0.1
                            }
                        },
                        {
                            show: false,
                            min: 0,
                            max: MAX_DIM3,
                            dimension: 3,
                            inRange: {
                                symbolSize: [3, 40]
                            },
                            outOfRange: {
                                symbolSize: [3, 40]
                            }
                        }
                    ],
                    dataZoom: [
                        {
                            type: 'slider',
                            start: 40
                        },
                        {
                            type: 'inside',
                            start: 40
                        }
                    ],
                    series: [
                        {
                            name: 'scatter0',
                            type: 'scatter',
                            symbol: 'circle',
                            itemStyle: itemStyle,
                            data: dataList[0]
                        },
                        {
                            name: 'scatter1',
                            type: 'scatter',
                            symbol: 'diamond',
                            itemStyle: itemStyle,
                            data: dataList[1]
                        },
                        {
                            name: 'scatter2',
                            type: 'scatter',
                            symbol: 'rect',
                            itemStyle: itemStyle,
                            data: dataList[2]
                        }
                    ]
                };

                chart.on('brushSelected', renderBrushed);
                window.onresize = function () {
                    chart.resize();
                    chart2St.resize();
                };

                var dim2SumTrack = [];
                var dim3SumTrack = [];
                var trackNums = [];
                var trackNum = 0;
                var trackMax = 30;

                chart.setOption(option);
                chart.setOption({});

                chart.dispatchAction({type: 'brush', areas: [
                    {brushType: 'rect', range: [[200, 300], [100, 350]]}
                ]});

                function renderBrushed(params) {
                    var brushed = [];
                    var dim2Sum = 0;
                    var dim3Sum = 0;
                    var countBySeries = [];
                    var brushComponent = params.batch[0];

                    for (var sIdx = 0; sIdx < brushComponent.selected.length; sIdx++) {
                        var rawIndices = brushComponent.selected[sIdx].dataIndex;
                        brushed.push('[Series ' + sIdx + '] ' + rawIndices.join(', '));
                        for (var i = 0; i < rawIndices.length; i++) {
                            dim2Sum += dataList[sIdx][rawIndices[i]][2];
                            dim3Sum += dataList[sIdx][rawIndices[i]][3];
                        }
                        countBySeries[sIdx] = {
                            name: 'series-' + sIdx,
                            value: rawIndices.length
                        };
                    }

                    dim2SumTrack.push(dim2Sum);
                    dim3SumTrack.push(dim3Sum);
                    trackNums.push(trackNum++);
                    if (trackNums.length > trackMax) {
                        dim2SumTrack.shift();
                        dim3SumTrack.shift();
                        trackNums.shift();
                    }

                    panel.innerHTML = [
                        '<h3>STATISTICS:</h3>',
                        'DIM2 SUM: ' + dim2Sum.toFixed(4) + '<br>',
                        'DIM3 SUM: ' + dim3Sum.toFixed(4) + '<br>',
                        '<br>',
                        '<br>',
                        '<h3>BRUSHED RAW INDICES:</h3>',
                        brushed.join('<br><br>'),
                    ].join(' ');

                    chart2St.setOption({
                        backgroundColor: '#fff',
                        title: [
                            {
                                // text: 'Selected\nCount',
                                text: 'SSSSS',
                                // text: 'SSSSS\nSSSSS\nSSSSS\nSSSSS',
                                textStyle: {
                                    fontSize: 14
                                },
                                textAlign: 'center',
                                // textVeritalAlign:
                                // textBaseline: 'bottom',
                                left: '75%',
                                top: '50%'
                            }
                        ],
                        grid: {
                            left: 20,
                            top: 50,
                            bottom: 20,
                            containLabel: true,
                            width: '50%'
                        },
                        xAxis: {
                            type: 'category',
                            scale: true,
                            boundaryGap: false,
                            splitLine: {show: false},
                            data: trackNums
                        },
                        yAxis: [
                            {
                                type: 'value',
                                name: 'dim2 sum',
                                splitNumber: 5,
                                axisLine: {onZero: false, lineStyle: {color: '#c23531'}},
                                axisTick: {show: false}
                            },
                            {
                                type: 'value',
                                name: 'dim3 sum',
                                splitNumber: 5,
                                axisLine: {onZero: false, lineStyle: {color: '#61a0a8'}},
                                axisTick: {show: false}
                            }
                        ],
                        series: [
                            {
                                type: 'pie',
                                center: ['75%', '50%'],
                                radius: [50, 70],
                                data: countBySeries
                            },
                            {
                                type: 'line',
                                symbol: 'none',
                                lineStyle: {normal: {color: '#c23531'}},
                                data: dim2SumTrack
                            },
                            {
                                type: 'line',
                                symbol: 'none',
                                lineStyle: {normal: {color: '#61a0a8'}},
                                yAxisIndex: 1,
                                data: dim3SumTrack
                            }
                        ]
                    });
                }
            })
        </script>









        <!-- =================== 2 ===================== -->









        <script>

            require(['echarts', 'map/js/china'], function (echarts) {

                var data = [ {name: '海门', value: 9}, {name: '鄂尔多斯', value: 12}, {name: '招远', value: 12}, {name: '舟山', value: 12}, {name: '齐齐哈尔', value: 14}, {name: '盐城', value: 15}, {name: '赤峰', value: 16}, {name: '青岛', value: 18}, {name: '乳山', value: 18}, {name: '金昌', value: 19}, {name: '泉州', value: 21}, {name: '莱西', value: 21}, {name: '日照', value: 21}, {name: '胶南', value: 22}, {name: '南通', value: 23}, {name: '拉萨', value: 24}, {name: '云浮', value: 24}, {name: '梅州', value: 25}, {name: '文登', value: 25}, {name: '上海', value: 25}, {name: '攀枝花', value: 25}, {name: '威海', value: 25}, {name: '承德', value: 25}, {name: '厦门', value: 26}, {name: '汕尾', value: 26}, {name: '潮州', value: 26}, {name: '丹东', value: 27}, {name: '太仓', value: 27}, {name: '曲靖', value: 27}, {name: '烟台', value: 28}, {name: '福州', value: 29}, {name: '瓦房店', value: 30}, {name: '即墨', value: 30}, {name: '抚顺', value: 31}, {name: '玉溪', value: 31}, {name: '张家口', value: 31}, {name: '阳泉', value: 31}, {name: '莱州', value: 32}, {name: '湖州', value: 32}, {name: '汕头', value: 32}, {name: '昆山', value: 33}, {name: '宁波', value: 33}, {name: '湛江', value: 33}, {name: '揭阳', value: 34}, {name: '荣成', value: 34}, {name: '连云港', value: 35}, {name: '葫芦岛', value: 35}, {name: '常熟', value: 36}, {name: '东莞', value: 36}, {name: '河源', value: 36}, {name: '淮安', value: 36}, {name: '泰州', value: 36}, {name: '南宁', value: 37}, {name: '营口', value: 37}, {name: '惠州', value: 37}, {name: '江阴', value: 37}, {name: '蓬莱', value: 37}, {name: '韶关', value: 38}, {name: '嘉峪关', value: 38}, {name: '广州', value: 38}, {name: '延安', value: 38}, {name: '太原', value: 39}, {name: '清远', value: 39}, {name: '中山', value: 39}, {name: '昆明', value: 39}, {name: '寿光', value: 40}, {name: '盘锦', value: 40}, {name: '长治', value: 41}, {name: '深圳', value: 41}, {name: '珠海', value: 42}, {name: '宿迁', value: 43}, {name: '咸阳', value: 43}, {name: '铜川', value: 44}, {name: '平度', value: 44}, {name: '佛山', value: 44}, {name: '海口', value: 44}, {name: '江门', value: 45}, {name: '章丘', value: 45}, {name: '肇庆', value: 46}, {name: '大连', value: 47}, {name: '临汾', value: 47}, {name: '吴江', value: 47}, {name: '石嘴山', value: 49}, {name: '沈阳', value: 50}, {name: '苏州', value: 50}, {name: '茂名', value: 50}, {name: '嘉兴', value: 51}, {name: '长春', value: 51}, {name: '胶州', value: 52}, {name: '银川', value: 52}, {name: '张家港', value: 52}, {name: '三门峡', value: 53}, {name: '锦州', value: 54}, {name: '南昌', value: 54}, {name: '柳州', value: 54}, {name: '三亚', value: 54}, {name: '自贡', value: 56}, {name: '吉林', value: 56}, {name: '阳江', value: 57}, {name: '泸州', value: 57}, {name: '西宁', value: 57}, {name: '宜宾', value: 58}, {name: '呼和浩特', value: 58}, {name: '成都', value: 58}, {name: '大同', value: 58}, {name: '镇江', value: 59}, {name: '桂林', value: 59}, {name: '张家界', value: 59}, {name: '宜兴', value: 59}, {name: '北海', value: 60}, {name: '西安', value: 61}, {name: '金坛', value: 62}, {name: '东营', value: 62}, {name: '牡丹江', value: 63}, {name: '遵义', value: 63}, {name: '绍兴', value: 63}, {name: '扬州', value: 64}, {name: '常州', value: 64}, {name: '潍坊', value: 65}, {name: '重庆', value: 66}, {name: '台州', value: 67}, {name: '南京', value: 67}, {name: '滨州', value: 70}, {name: '贵阳', value: 71}, {name: '无锡', value: 71}, {name: '本溪', value: 71}, {name: '克拉玛依', value: 72}, {name: '渭南', value: 72}, {name: '马鞍山', value: 72}, {name: '宝鸡', value: 72}, {name: '焦作', value: 75}, {name: '句容', value: 75}, {name: '北京', value: 79}, {name: '徐州', value: 79}, {name: '衡水', value: 80}, {name: '包头', value: 80}, {name: '绵阳', value: 80}, {name: '乌鲁木齐', value: 84}, {name: '枣庄', value: 84}, {name: '杭州', value: 84}, {name: '淄博', value: 85}, {name: '鞍山', value: 86}, {name: '溧阳', value: 86}, {name: '库尔勒', value: 86}, {name: '安阳', value: 90}, {name: '开封', value: 90}, {name: '济南', value: 92}, {name: '德阳', value: 93}, {name: '温州', value: 95}, {name: '九江', value: 96}, {name: '邯郸', value: 98}, {name: '临安', value: 99}, {name: '兰州', value: 99}, {name: '沧州', value: 100}, {name: '临沂', value: 103}, {name: '南充', value: 104}, {name: '天津', value: 105}, {name: '富阳', value: 106}, {name: '泰安', value: 112}, {name: '诸暨', value: 112}, {name: '郑州', value: 113}, {name: '哈尔滨', value: 114}, {name: '聊城', value: 116}, {name: '芜湖', value: 117}, {name: '唐山', value: 119}, {name: '平顶山', value: 119}, {name: '邢台', value: 119}, {name: '德州', value: 120}, {name: '济宁', value: 120}, {name: '荆州', value: 127}, {name: '宜昌', value: 130}, {name: '义乌', value: 132}, {name: '丽水', value: 133}, {name: '洛阳', value: 134}, {name: '秦皇岛', value: 136}, {name: '株洲', value: 143}, {name: '石家庄', value: 147}, {name: '莱芜', value: 148}, {name: '常德', value: 152}, {name: '保定', value: 153}, {name: '湘潭', value: 154}, {name: '金华', value: 157}, {name: '岳阳', value: 169}, {name: '长沙', value: 175}, {name: '衢州', value: 177}, {name: '廊坊', value: 193}, {name: '菏泽', value: 194}, {name: '合肥', value: 229}, {name: '武汉', value: 273}, {name: '大庆', value: 279}];

                var geoCoordMap = { '海门':[121.15,31.89], '鄂尔多斯':[109.781327,39.608266], '招远':[120.38,37.35], '舟山':[122.207216,29.985295], '齐齐哈尔':[123.97,47.33], '盐城':[120.13,33.38], '赤峰':[118.87,42.28], '青岛':[120.33,36.07], '乳山':[121.52,36.89], '金昌':[102.188043,38.520089], '泉州':[118.58,24.93], '莱西':[120.53,36.86], '日照':[119.46,35.42], '胶南':[119.97,35.88], '南通':[121.05,32.08], '拉萨':[91.11,29.97], '云浮':[112.02,22.93], '梅州':[116.1,24.55], '文登':[122.05,37.2], '上海':[121.48,31.22], '攀枝花':[101.718637,26.582347], '威海':[122.1,37.5], '承德':[117.93,40.97], '厦门':[118.1,24.46], '汕尾':[115.375279,22.786211], '潮州':[116.63,23.68], '丹东':[124.37,40.13], '太仓':[121.1,31.45], '曲靖':[103.79,25.51], '烟台':[121.39,37.52], '福州':[119.3,26.08], '瓦房店':[121.979603,39.627114], '即墨':[120.45,36.38], '抚顺':[123.97,41.97], '玉溪':[102.52,24.35], '张家口':[114.87,40.82], '阳泉':[113.57,37.85], '莱州':[119.942327,37.177017], '湖州':[120.1,30.86], '汕头':[116.69,23.39], '昆山':[120.95,31.39], '宁波':[121.56,29.86], '湛江':[110.359377,21.270708], '揭阳':[116.35,23.55], '荣成':[122.41,37.16], '连云港':[119.16,34.59], '葫芦岛':[120.836932,40.711052], '常熟':[120.74,31.64], '东莞':[113.75,23.04], '河源':[114.68,23.73], '淮安':[119.15,33.5], '泰州':[119.9,32.49], '南宁':[108.33,22.84], '营口':[122.18,40.65], '惠州':[114.4,23.09], '江阴':[120.26,31.91], '蓬莱':[120.75,37.8], '韶关':[113.62,24.84], '嘉峪关':[98.289152,39.77313], '广州':[113.23,23.16], '延安':[109.47,36.6], '太原':[112.53,37.87], '清远':[113.01,23.7], '中山':[113.38,22.52], '昆明':[102.73,25.04], '寿光':[118.73,36.86], '盘锦':[122.070714,41.119997], '长治':[113.08,36.18], '深圳':[114.07,22.62], '珠海':[113.52,22.3], '宿迁':[118.3,33.96], '咸阳':[108.72,34.36], '铜川':[109.11,35.09], '平度':[119.97,36.77], '佛山':[113.11,23.05], '海口':[110.35,20.02], '江门':[113.06,22.61], '章丘':[117.53,36.72], '肇庆':[112.44,23.05], '大连':[121.62,38.92], '临汾':[111.5,36.08], '吴江':[120.63,31.16], '石嘴山':[106.39,39.04], '沈阳':[123.38,41.8], '苏州':[120.62,31.32], '茂名':[110.88,21.68], '嘉兴':[120.76,30.77], '长春':[125.35,43.88], '胶州':[120.03336,36.264622], '银川':[106.27,38.47], '张家港':[120.555821,31.875428], '三门峡':[111.19,34.76], '锦州':[121.15,41.13], '南昌':[115.89,28.68], '柳州':[109.4,24.33], '三亚':[109.511909,18.252847], '自贡':[104.778442,29.33903], '吉林':[126.57,43.87], '阳江':[111.95,21.85], '泸州':[105.39,28.91], '西宁':[101.74,36.56], '宜宾':[104.56,29.77], '呼和浩特':[111.65,40.82], '成都':[104.06,30.67], '大同':[113.3,40.12], '镇江':[119.44,32.2], '桂林':[110.28,25.29], '张家界':[110.479191,29.117096], '宜兴':[119.82,31.36], '北海':[109.12,21.49], '西安':[108.95,34.27], '金坛':[119.56,31.74], '东营':[118.49,37.46], '牡丹江':[129.58,44.6], '遵义':[106.9,27.7], '绍兴':[120.58,30.01], '扬州':[119.42,32.39], '常州':[119.95,31.79], '潍坊':[119.1,36.62], '重庆':[106.54,29.59], '台州':[121.420757,28.656386], '南京':[118.78,32.04], '滨州':[118.03,37.36], '贵阳':[106.71,26.57], '无锡':[120.29,31.59], '本溪':[123.73,41.3], '克拉玛依':[84.77,45.59], '渭南':[109.5,34.52], '马鞍山':[118.48,31.56], '宝鸡':[107.15,34.38], '焦作':[113.21,35.24], '句容':[119.16,31.95], '北京':[116.46,39.92], '徐州':[117.2,34.26], '衡水':[115.72,37.72], '包头':[110,40.58], '绵阳':[104.73,31.48], '乌鲁木齐':[87.68,43.77], '枣庄':[117.57,34.86], '杭州':[120.19,30.26], '淄博':[118.05,36.78], '鞍山':[122.85,41.12], '溧阳':[119.48,31.43], '库尔勒':[86.06,41.68], '安阳':[114.35,36.1], '开封':[114.35,34.79], '济南':[117,36.65], '德阳':[104.37,31.13], '温州':[120.65,28.01], '九江':[115.97,29.71], '邯郸':[114.47,36.6], '临安':[119.72,30.23], '兰州':[103.73,36.03], '沧州':[116.83,38.33], '临沂':[118.35,35.05], '南充':[106.110698,30.837793], '天津':[117.2,39.13], '富阳':[119.95,30.07], '泰安':[117.13,36.18], '诸暨':[120.23,29.71], '郑州':[113.65,34.76], '哈尔滨':[126.63,45.75], '聊城':[115.97,36.45], '芜湖':[118.38,31.33], '唐山':[118.02,39.63], '平顶山':[113.29,33.75], '邢台':[114.48,37.05], '德州':[116.29,37.45], '济宁':[116.59,35.38], '荆州':[112.239741,30.335165], '宜昌':[111.3,30.7], '义乌':[120.06,29.32], '丽水':[119.92,28.45], '洛阳':[112.44,34.7], '秦皇岛':[119.57,39.95], '株洲':[113.16,27.83], '石家庄':[114.48,38.03], '莱芜':[117.67,36.19], '常德':[111.69,29.05], '保定':[115.48,38.85], '湘潭':[112.91,27.87], '金华':[119.64,29.12], '岳阳':[113.09,29.37], '长沙':[113,28.21], '衢州':[118.88,28.97], '廊坊':[116.7,39.53], '菏泽':[115.480656,35.23375], '合肥':[117.27,31.86], '武汉':[114.31,30.52], '大庆':[125.03,46.58]};

                var convertData = function (data) {
                    var res = [];
                    for (var i = 0; i < data.length; i++) {
                        var geoCoord = geoCoordMap[data[i].name];
                        if (geoCoord) {
                            res.push({
                                name: data[i].name,
                                value: geoCoord.concat(data[i].value)
                            });
                        }
                    }
                    return res;
                };
                var convertedData = [
                    convertData(data),
                    convertData(data.slice().sort(function (a, b) {
                        return b.value - a.value;
                    }).slice(0, 6))
                ];

                var chart = echarts.init(document.getElementById('main1'));
                var elSt = document.getElementById('main1-st');
                var chartSt = echarts.init(document.getElementById('main1-st'));
                elSt.style.visibility = 'hidden';
                panel = document.getElementById('panel1');


                var smSettings = {
                    seperatedEChartsInstance: false,
                    diff: false,
                    animation: true,
                    animationDurationUpdate: 1000,
                    throttleDelay: 300,
                    throttleType: 'debounce'
                };

                window.smChange = {
                    seperatedEChartsInstance: function (val) {
                        smSettings.seperatedEChartsInstance = val;
                        restart();
                    },
                    diff: function (val) {
                        smSettings.diff = val;
                        restart();
                    },
                    animation: function (val) {
                        smSettings.animation = val;
                        restart();
                    },
                    animationDurationUpdate: function (el) {
                        smSettings.animationDurationUpdate = +el.value;
                        restart();
                    },
                    throttleDelay: function (el) {
                        smSettings.throttleDelay = +el.value;
                        restart();
                    },
                    throttleType: function (val) {
                        smSettings.throttleType = val;
                        restart();
                    }
                };


                restart();


                function restart() {
                    chart.off();
                    chartSt.off();

                    var option = {
                        backgroundColor: '#404a59',
                        animation: smSettings.animation,
                        animationDurationUpdate: smSettings.animationDurationUpdate,
                        title: [{
                            text: '全国主要城市空气质量',
                            subtext: 'data from PM25.in',
                            sublink: 'http://www.pm25.in',
                            left: 'center',
                            textStyle: {
                                color: '#fff'
                            }
                        }, {
                            text: '地图数据来源：天地图 cloudcenter.tianditu.gov.cn',
                            subtext: '仅作为功能测试使用，线上产品应从天地图获取最新地图数据并申请审图号',
                            link: 'https://cloudcenter.tianditu.gov.cn/',
                            bottom: 15,
                            left: 15,
                            textStyle: {
                                color: '#ccc',
                                fontSize: 12
                            },
                            subtextStyle: {
                                color: '#aaa',
                                fontSize: 12
                            }
                        }],
                        toolbox: {
                            iconStyle: {
                                normal: {
                                    borderColor: '#fff'
                                },
                                emphasis: {
                                    borderColor: '#b1e4ff'
                                }
                            }
                        },
                        brush: {
                            outOfBrush: {
                                color: '#abc'
                            },
                            brushStyle: {
                                borderWidth: 2,
                                color: 'rgba(0,0,0,0.2)',
                                borderColor: 'rgba(0,0,0,0.5)',
                            },
                            seriesIndex: [0, 1],
                            throttleType: smSettings.throttleType,
                            throttleDelay: smSettings.throttleDelay,
                            geoIndex: 0
                        },
                        geo: {
                            map: 'china',
                            left: '10',
                            right: '35%',
                            center: [117.98561551896913, 31.205000490896193],
                            zoom: 4.177248169415658,
                            label: {
                                emphasis: {
                                    show: false
                                }
                            },
                            roam: true,
                            itemStyle: {
                                normal: {
                                    areaColor: '#323c48',
                                    borderColor: '#111'
                                },
                                emphasis: {
                                    areaColor: '#2a333d'
                                }
                            },
                            regions: [{
                                name: '新疆维吾尔自治区附近境界线',
                                itemStyle: {
                                    borderColor: '#404a59'
                                }
                            }]
                        },
                        series : [
                            {
                                name: 'pm2.5',
                                type: 'scatter',
                                coordinateSystem: 'geo',
                                data: convertedData[0],
                                symbolSize: function (val) {
                                    return val[2] / 10;
                                },
                                label: {
                                    normal: {
                                        formatter: '{b}',
                                        position: 'right',
                                        show: false
                                    },
                                    emphasis: {
                                        show: true
                                    }
                                },
                                itemStyle: {
                                    normal: {
                                        color: '#ddb926'
                                    }
                                }
                            },
                            {
                                name: 'Top 5',
                                type: 'effectScatter',
                                coordinateSystem: 'geo',
                                data: convertedData[1],
                                symbolSize: function (val) {
                                    return val[2] / 10;
                                },
                                showEffectOn: 'emphasis',
                                rippleEffect: {
                                    brushType: 'stroke'
                                },
                                hoverAnimation: true,
                                label: {
                                    normal: {
                                        formatter: '{b}',
                                        position: 'right',
                                        show: true
                                    }
                                },
                                itemStyle: {
                                    normal: {
                                        color: '#f4e925',
                                        shadowBlur: 10,
                                        shadowColor: '#333'
                                    }
                                },
                                zlevel: 1
                            }
                        ]
                    };

                    var optionSt = {
                        animation: smSettings.animation,
                        animationDurationUpdate: smSettings.animationDurationUpdate,
                        tooltip : {
                            trigger: 'item'
                        },
                        grid: {
                            right: 20,
                            top: 50,
                            left: 80,
                            bottom: 20,
                            width: null
                        },
                        xAxis: {
                            type: 'value',
                            scale: true,
                            boundaryGap: false,
                            splitLine: {show: false},
                            axisLine: {show: false, lineStyle: {color: '#ddd'}},
                            axisTick: {show: false},
                            axisLabel: {textStyle: {color: '#ddd'}},
                        },
                        yAxis: {
                            type: 'category',
                            name: 'PM 2.5',
                            axisLine: {show: false, lineStyle: {color: '#ddd'}},
                            axisTick: {show: false, lineStyle: {color: '#ddd'}},
                            axisLabel: {interval: 0, textStyle: {color: '#ddd'}},
                            data: []
                        },
                        series: [
                            {
                                id: 'bar',
                                zlevel: 2,
                                type: 'bar',
                                symbol: 'none',
                                itemStyle: {
                                    normal: {
                                        color: '#ddb926'
                                    }
                                },
                                data: []
                            }
                        ]
                    };

                    if (!smSettings.seperatedEChartsInstance) {
                        for (var key in optionSt) {
                            if (key !== 'series') {
                                option[key] = optionSt[key];
                            }
                        }
                        option.series.push(optionSt.series[0]);
                        option.grid.left = null;
                        option.grid.width = '30%';
                    }

                    var oldCategoryData = [];
                    var oldBarData = [];

                    chart.on('brushSelected', renderBrushed);
                    chart.setOption(option, true);
                    chart.dispatchAction({
                        type: 'brush',
                        areas: [
                            // {
                            //     geoIndex: 0,
                            //     brushType: 'polygon',
                            //     range: [[482,130],[481,130],[470,123],[406,100],[387,94],[377,88],[374,83],[373,81],[366,76],[360,74],[355,73],[346,79],[337,83],[323,84],[301,84],[297,84],[281,88],[265,92],[265,93],[258,120],[265,144],[272,148],[297,168],[319,192],[324,200],[324,201],[325,205],[337,229],[342,240],[343,242],[343,243],[344,247],[345,250],[350,261],[354,268],[355,274],[355,281],[347,300],[342,319],[336,352],[333,388],[336,424],[351,442],[364,451],[375,455],[392,466],[401,474],[409,483],[419,493],[432,502],[453,502],[487,484],[521,436],[536,364],[539,322],[539,309],[537,305],[537,304],[536,295],[517,273],[511,264],[511,264]]
                            // }
                            {
                                geoIndex: 0,
                                brushType: 'polygon',
                                // coordRange: [[121.15,31.89], [120.95,31.39], [112.91,27.87], [118.78,32.04]]
                                coordRange: [[121.15, 31.89], [121.15, 31.89], [109.781327, 39.608266], [120.38, 37.35], [122.207216, 29.985295], [123.97, 47.33]]
                                // geoRange: [[117.27,31.86], [114.31,30.52], [126.57,43.87]]
                            }
                        ]
                    });


                    if (smSettings.seperatedEChartsInstance) {
                        elSt.style.visibility = 'visible';
                        chartSt.setOption(optionSt, true);
                    }
                    else {
                        elSt.style.visibility = 'hidden';
                    }

                    function renderBrushed(params) {
                        var brushed = [];
                        var top = 0;
                        var topWhere;
                        var sum = 0;
                        var count = 0;
                        var brushComponent = params.batch[0];
                        var selectedItems = [];

                        for (var sIdx = 0; sIdx < brushComponent.selected.length; sIdx++) {
                            var rawIndices = brushComponent.selected[sIdx].dataIndex;
                            var placesBySeries = [];
                            for (var i = 0; i < rawIndices.length; i++) {
                                var rawIndex = rawIndices[i];
                                var item = convertedData[sIdx][rawIndex];
                                var value = item.value[2];
                                sum += value;
                                count++;
                                if (value > top) {
                                    top = value;
                                    topWhere = item.name;
                                }
                                if (sIdx === 0) {
                                    selectedItems.push(item);
                                }
                                placesBySeries.push(item.name);
                            }
                            brushed.push('[Series ' + sIdx + '] ' + placesBySeries.join(', '));
                        }


                        panel.innerHTML = [
                            '<h3>STATISTICS:</h3>',
                            'PM2.5 TOP: ' + topWhere + ' ' + top.toFixed(4) + '<br>',
                            'PM2.5 AVERAGE: ' + (sum / count).toFixed(4) + '<br>',
                            '<br>',
                            '<br>',
                            '<h3>BRUSHED:</h3>',
                            brushed.join('<br><br>'),
                        ].join(' ');

                        selectedItems.sort(function (a, b) {
                            return a.value[2] - b.value[2];
                        });

                        var categoryData = [];
                        var barData = [];
                        var max = 30;

                        for (var i = 0; i < Math.min(selectedItems.length, max); i++) {
                            categoryData.push(selectedItems[i].name);
                            barData.push(selectedItems[i].value[2]);
                        }

                        var isDiff = checkDiff(categoryData, oldCategoryData)
                            || checkDiff(barData, oldBarData);
                        oldCategoryData = categoryData;
                        oldBarData = barData;

                        if (!smSettings.diff || isDiff) {
                            var targetName = smSettings.seperatedEChartsInstance ? 'chart2' : 'mainChart';
                            smSettings.diff
                                ? console.log('diff checked and setOption to ' + targetName)
                                : console.log('do not check diff and setOption' + targetName);

                            (smSettings.seperatedEChartsInstance ? chartSt : chart).setOption({
                                yAxis: {data: categoryData},
                                series: {id: 'bar', data: barData}
                            });
                        }
                    }

                    function checkDiff(list, oldList) {
                        if (list.length !== oldList.length) {
                            return true;
                        }
                        else {
                            for (var i = 0; i < list.length; i++) {
                                if (list[i] !== oldList[i]) {
                                    return true;
                                }
                            }
                        }
                    }
                }
            });

        </script>










        <!-- =================== 3 ===================== -->










        <script type="text/javascript">

            require(['echarts'], function (echarts) {

                var main = document.getElementById('main4');
                var panel = document.getElementById('panel4');
                if (!main) {
                    return;
                }
                var chart = echarts.init(main);

                var xAxisData = [];
                var data1 = [];
                var data2 = [];
                var data3 = [];
                var data4 = [];

                for (var i = 0; i < 10; i++) {
                    xAxisData.push('Class' + i);

                    if (i === 1) {
                        // Test null data.
                        data1.push(null);
                    }
                    else {
                        data1.push((Math.random() * 2).toFixed(2));
                    }

                    data2.push(-Math.random().toFixed(2));
                    data3.push((Math.random() * 5).toFixed(2));
                    data4.push((Math.random() + 0.3).toFixed(2));
                }

                var itemStyle = {
                    normal: {
                        label: {
                            show: true,
                            position: 'outside'
                        }
                    },
                    emphasis: {
                        label: {
                            position: 'outside'
                        },
                        barBorderWidth: 1,
                        shadowBlur: 10,
                        shadowOffsetX: 0,
                        shadowOffsetY: 0,
                        shadowColor: 'rgba(0,0,0,0.5)'
                    }
                };

                var option = {
                    backgroundColor: '#eee',
                    legend: {
                        data: ['bar', 'bar2', 'bar3', 'bar4'],
                        align: 'left',
                        left: 10
                    },
                    brush: {
                        xAxisIndex: 0
                    },
                    toolbox: {
                        feature: {
                            magicType: {
                                type: ['line', 'bar', 'stack', 'tiled']
                            },
                            dataView: {}
                        }
                    },
                    tooltip: {},
                    xAxis: {
                        data: xAxisData,
                        name: 'X Axis',
                        silent: false,
                        axisLine: {onZero: true},
                        splitLine: {show: false},
                        splitArea: {show: false}
                    },
                    yAxis: {
                        inverse: true,
                        splitArea: {show: false}
                    },
                    grid: {
                        left: 100
                    },
                    visualMap: {
                        type: 'continuous',
                        dimension: 1,
                        text: ['High', 'Low'],
                        inverse: true,
                        itemHeight: 200,
                        calculable: true,
                        min: -2,
                        max: 6,
                        top: 60,
                        left: 10
                    },
                    series: [
                        {
                            name: 'bar',
                            type: 'bar',
                            stack: 'one',
                            itemStyle: itemStyle,
                            data: data1
                        },
                        {
                            name: 'bar2',
                            type: 'bar',
                            stack: 'one',
                            itemStyle: itemStyle,
                            data: data2
                        },
                        {
                            name: 'bar3',
                            type: 'bar',
                            stack: 'two',
                            itemStyle: itemStyle,
                            data: data3
                        },
                        {
                            name: 'bar4',
                            type: 'bar',
                            stack: 'two',
                            itemStyle: itemStyle,
                            data: data4
                        }
                    ]
                };

                chart.on('brushSelected', renderBrushed);
                window.onresize = function () {
                    chart.resize();
                };

                chart.setOption(option);

                function renderBrushed(params) {
                    var brushed = [];
                    var brushComponent = params.batch[0];

                    for (var sIdx = 0; sIdx < brushComponent.selected.length; sIdx++) {
                        var rawIndices = brushComponent.selected[sIdx].dataIndex;
                        brushed.push('[Series ' + sIdx + '] ' + rawIndices.join(', '));
                    }

                    panel.innerHTML = [
                        '<h3>BRUSHED RAW INDICES:</h3>',
                        brushed.join('<br><br>'),
                    ].join(' ');
                }
            });
        </script>






    </body>
</html>