<!DOCTYPE html>
<!--
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">
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <script src="lib/esl.js"></script>
        <script src="lib/config.js"></script>
        <script src="lib/jquery.min.js"></script>
        <script src="lib/facePrint.js"></script>
        <script src="lib/testHelper.js"></script>
        <!-- <script src="ut/lib/canteen.js"></script> -->
        <link rel="stylesheet" href="lib/reset.css" />
    </head>
    <body>
        <style>
        </style>



        <div id="main_geo_svg_organ"></div>
        <div id="main_geo_svg_regions"></div>
        <div id="main_geo_svg_line_path"></div>
        <div id="main_geo_svg_heatmap"></div>
        <div id="main_geo_svg_building"></div>
        <div id="main_geo_svg_traffic"></div>




        <script>
            function listenAndPrintEvent(chart) {
                if (!chart) {
                    return;
                }
                const out = {
                };
                chart.on('geoselectchanged', function (params) {
                    out.geoselectechanged = {
                        allSelected: params.allSelected
                    };
                    console.log('geoselectechanged', params);
                    chart.__testHelper.updateInfo(out, 'event');
                });
                chart.on('selectchanged', function (params) {
                    out.selectechanged = {
                        selected: params.selected
                    };
                    console.log('selectechanged', params);
                    chart.__testHelper.updateInfo(out, 'event');
                });
                chart.on('click', function (params) {
                    out.click = {
                        componentIndex: params.componentIndex,
                        componentType: params.componentType,
                        geoIndex: params.geoIndex,
                        name: params.name
                    };
                    console.log('click', params);
                    chart.__testHelper.updateInfo(out, 'event');
                });
            }
        </script>






        <script>
        require(['echarts'/*, 'map/js/china' */], function (echarts) {
            var option;
            $.ajax({
                url: 'data/svg/Veins_Medical_Diagram_clip_art.svg',
                dataType: 'text'
            }).done(function (svg) {

                echarts.registerMap('seatmap', {
                    svg: svg
                });

                option = {
                    tooltip: {
                    },
                    geo: {
                        left: 10,
                        right: '50%',
                        map: 'seatmap',
                        roam: true,
                        selectedMode: 'multiple',
                        // height: 100,
                        // zoom: 1.5
                        emphasis: {
                            focus: 'self',
                            itemStyle: {
                                color: null
                            },
                            label: {
                                position: 'bottom',
                                distance: 20,
                                textBorderColor: '#fff',
                                textBorderWidth: 2
                            }
                        },
                        blur: {
                        },
                        select: {
                            itemStyle: {
                                color: '#b50205'
                            },
                            label: {
                                show: false,
                                textBorderColor: '#fff',
                                textBorderWidth: 2
                            }
                        }
                    },
                    grid: {
                        left: '60%'
                    },
                    xAxis: {
                        splitLine: {
                            show: false
                        }
                    },
                    yAxis: {
                        data: ['heart', 'large-intestine', 'small-intestine', 'spleen', 'kidney', 'lung', 'liver']
                    },
                    series: [{
                        type: 'bar',
                        emphasis: {
                            focus: 'self'
                        },
                        data: [121, 321, 141, 52, 198, 289, 139]
                    }]
                };

                var chart = testHelper.create(echarts, 'main_geo_svg_organ', {
                    title: [
                        'pure geo component with svg resource',
                        'click seat: check **allSelected** correct.'
                    ],
                    option: option,
                    info: {},
                    infoKey: 'event',
                    height: 500
                    // buttons: [{text: 'btn-txt', onclick: function () {}}],
                    // recordCanvas: true,
                });

                listenAndPrintEvent(chart);

                if (chart) {
                    chart.on('mouseover', { seriesIndex: 0 }, function (event) {
                        chart.dispatchAction({
                            type: 'highlight',
                            geoIndex: 0,
                            name: event.name
                        });
                    });
                    chart.on('mouseout', { seriesIndex: 0 }, function (event) {
                        chart.dispatchAction({
                            type: 'downplay',
                            geoIndex: 0,
                            name: event.name
                        });
                    });
                    // chart.on('mouseover', { geoIndex: 0 }, function (event) {
                    //     chart.dispatchAction({
                    //         type: 'highlight',
                    //         seriesIndex: 0,
                    //         name: event.name
                    //     });
                    // });
                    // chart.on('mouseout', { geoIndex: 0 }, function (event) {
                    //     chart.dispatchAction({
                    //         type: 'downplay',
                    //         seriesIndex: 0,
                    //         name: event.name
                    //     });
                    // });
                }

            });

        });
        </script>







        <script>
        require(['echarts'/*, 'map/js/china' */], function (echarts) {
            var option;

            $.ajax({
                url: 'data/svg/Sicily_prehellenic_topographic_map.svg',
                dataType: 'text'
            }).done(function (svg) {

                echarts.registerMap('sicily', {
                    svg: svg
                });

                option = {
                    tooltip: {
                    },
                    geo: [{
                        map: 'sicily',
                        roam: true,
                        selectedMode: 'multiple',
                        itemStyle: {
                            color: null
                        },
                        tooltip: {
                            show: true,
                            confine: true,
                            formatter: function (params) {
                                return [
                                    'This is the introduction:',
                                    'xxxxxxxxxxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxxxxxxxxxx'
                                ].join('<br>');
                            }
                        },
                        emphasis: {
                            label: {
                                show: false
                            }
                        },
                        select: {
                            itemStyle: {
                                color: '#b50205'
                            },
                            label: {
                                show: false
                            }
                        },
                        regions: [{
                            name: 'Sikeloi',
                            tooltip: {
                                formatter: [
                                    'Sikeloi:',
                                    'xxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxx',
                                ].join('<br>'),
                                textStyle: { color: '#555' },
                                backgroundColor: '#ccc'
                            }
                        }, {
                            name: 'Sikanoi',
                            tooltip: {
                                formatter: [
                                    'Sikanoi',
                                    'xxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxx',
                                ].join('<br>'),
                                textStyle: { color: '#555' },
                                backgroundColor: '#ccc'
                            }
                        }, {
                            name: 'Elymoi',
                            tooltip: {
                                formatter: [
                                    'Elymoi',
                                    'xxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxx',
                                ].join('<br>'),
                                textStyle: { color: '#555' },
                                backgroundColor: '#ccc'
                            }
                        }],
                        z: 0
                    }]
                };

                var chart = testHelper.create(echarts, 'main_geo_svg_regions', {
                    title: [
                        'symbol and label use the same name in SVG.',
                        'Hover each symbol and text, tooltip should be displayed.',
                        'Hover the three area, tooltip should be displayed.',
                        'Click, check **selected**.'
                    ],
                    option: option,
                    info: {},
                    infoKey: 'event',
                    height: 500
                });

                listenAndPrintEvent(chart);

            });

        });
        </script>










        <script>
        require(['echarts'/*, 'map/js/china' */], function (echarts) {
            var option;
            fetch('data/svg/Map_of_Iceland.svg').then(response => response.text()).then((svg) => {

                echarts.registerMap('Map_of_Iceland', {
                    svg: svg
                });

                option = {
                    tooltip: {
                        alwaysShowContent: true,
                        enterable: true,
                        extraCssText: 'user-select: text'
                    },
                    geo: [{
                        map: 'Map_of_Iceland',
                        roam: true,
                        selectedMode: 'single',
                        tooltip: {
                            show: true,
                            // confine: true
                        },
                        label: {
                            fontSize: 20,
                            textBorderColor: '#fff',
                            textBorderWidth: 2
                        },
                        emphasis: {
                            itemStyle: {
                                color: null,
                                borderColor: '#b50805',
                                borderWidth: 5
                            }
                        },
                        select: {
                            itemStyle: {
                                color: null,
                                borderColor: '#b50205',
                                borderWidth: 5
                            }
                        },
                        regions: [{
                            name: 'trip1',
                            label: {
                                formatter: 'Western Trip'
                            },
                            tooltip: {
                                position: 'right',
                                formatter: [
                                    'Western Trip:',
                                    'xxxxxxxxxxxxxxxxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxxxxxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxxxxxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxxxxxxxxxxxxxxxx',
                                    'xxxxxxxxxxxxxxxxxxxxxxxxxxx'
                                ].join('<br>')
                            }
                        }, {
                            name: 'trip2',
                            label: {
                                formatter: 'Eastern Trip'
                            },
                            tooltip: {
                                position: 'left',
                                formatter: [
                                    'Western Trip:',
                                    'xxxxxxxxxxxx',
                                    'xxxxxxxxxxxx',
                                    'xxxxxxxxxxxx',
                                    'xxxxxxxxxxxx',
                                    'xxxxxxxxxxxx',
                                    'xxxxxxxxxxxx',
                                    'xxxxxxxxxxxx',
                                    'xxxxxxxxxxxx',
                                    'xxxxxxxxxxxx',
                                    'xxxxxxxxxxxx',
                                    'xxxxxxxxxxxx'
                                ].join('<br>')
                            }
                        }]
                    }]
                };

                var chart = testHelper.create(echarts, 'main_geo_svg_line_path', {
                    title: [
                        'Select some route in SVG via API.',
                        'Some route should be highlighted (check selectedMode **single**).',
                        'label should be displayed.'
                    ],
                    option: option,
                    info: {},
                    infoKey: 'event',
                    height: 500,
                    buttons: [{
                        text: 'highlight trip1',
                        onclick: function () {
                            chart.dispatchAction({
                                type: 'geoSelect',
                                geoIndex: 0,
                                name: 'trip1'
                            });
                            chart.dispatchAction({
                                type: 'showTip',
                                geoIndex: 0,
                                name: 'trip1'
                            });
                        }
                    }, {
                        text: 'highlight trip2',
                        onclick: function () {
                            chart.dispatchAction({
                                type: 'geoSelect',
                                geoIndex: 0,
                                name: 'trip2'
                            });
                            chart.dispatchAction({
                                type: 'showTip',
                                geoIndex: 0,
                                name: 'trip2'
                            });
                        }
                    }]
                });

                listenAndPrintEvent(chart);

            });

        });
        </script>












        <script>
        require(['echarts'/*, 'map/js/china' */], function (echarts) {
            var option;
            fetch('data/svg/Beef_cuts_France.svg').then(response => response.text()).then((svg) => {



                echarts.registerMap('Beef_cuts_France', {
                    svg: svg
                });

                // seminar_room
                // reading_room
                option = {
                    tooltip: {
                    },
                    visualMap: {
                        top: 'middle',
                        left: 20,
                        min: 5,
                        max: 100,
                        text: ['Price'],
                        realtime: true,
                        calculable: true,
                        inRange: {
                            color: ['#dbac00', '#db6e00', '#cf0000']
                        }
                    },
                    series: [{
                        name: 'French Beef Cuts',
                        type: 'map',
                        map: 'Beef_cuts_France',
                        roam: true,
                        emphasis: {
                            label: {
                                show: false
                            }
                        },
                        data: [
                            { name: 'Queue', value: 15 },
                            { name: 'Langue', value: 35 },
                            { name: 'Plat de joue', value: 15 },
                            { name: 'Gros bout de poitrine', value: 25 },
                            { name: 'Jumeau à pot-au-feu', value: 45 },
                            { name: 'Onglet', value: 85 },
                            { name: 'Plat de tranche', value: 25 },
                            { name: 'Araignée', value: 15 },
                            { name: 'Gîte à la noix', value: 55 },
                            { name: 'Bavette d\'aloyau', value: 25 },
                            { name: 'Tende de tranche', value: 65 },
                            { name: 'Rond de gîte', value: 45 },
                            { name: 'Bavettede de flanchet', value: 85 },
                            { name: 'Flanchet', value: 35 },
                            { name: 'Hampe', value: 75 },
                            { name: 'Plat de côtes', value: 65 },
                            { name: 'Tendron Milieu de poitrine', value: 65 },
                            { name: 'Macreuse à pot-au-feu', value: 85 },
                            { name: 'Rumsteck', value: 75 },
                            { name: 'Faux-filet', value: 65 },
                            { name: 'Côtes Entrecôtes', value: 55 },
                            { name: 'Basses côtes', value: 45 },
                            { name: 'Collier', value: 85 },
                            { name: 'Jumeau à biftek', value: 15 },
                            { name: 'Paleron', value: 65 },
                            { name: 'Macreuse à bifteck', value: 45 },
                            { name: 'Gîte', value: 85 },
                            { name: 'Aiguillette baronne', value: 65 },
                            { name: 'Filet', value: 95 },
                        ]
                    }]
                };

                var chart = testHelper.create(echarts, 'main_geo_svg_heatmap', {
                    title: [
                        'Select some route in SVG via API.',
                    ],
                    option: option,
                    height: 500
                });

            });

        });
        </script>










        <script>
        require(['echarts'/*, 'map/js/china' */], function (echarts) {
            var option;
            fetch('data/svg/MacOdrum-LV5-floorplan-web.svg').then(response => response.text()).then((svg) => {

                echarts.registerMap('MacOdrum-LV5-floorplan-web', {
                    svg: svg
                });

                // seminar_room
                // reading_room
                option = {
                    title: {
                        text: 'Visit Route',
                        left: 'center',
                        bottom: 10
                    },
                    tooltip: {
                    },
                    geo: {
                        map: 'MacOdrum-LV5-floorplan-web',
                        roam: true,
                        // height: 100,
                        // zoom: 1.5
                        emphasis: {
                            itemStyle: {
                                color: null
                            },
                            label: {
                                show: false
                            }
                        }
                    },
                    series: [{
                        name: 'Route',
                        type: 'lines',
                        coordinateSystem: 'geo',
                        geoIndex: 0,
                        emphasis: {
                            label: {
                                show: false
                            }
                        },
                        polyline: true,
                        lineStyle: {
                            color: '#c46e54',
                            width: 5,
                            opacity: 1
                        },
                        zlevel: 1,
                        effect: {
                            show: true,
                            period: 8,
                            color: '#a10000',
                            constantSpeed: 80,
                            trailLength: 0.0001,
                            symbolSize: [20, 12],
                            symbol: 'path://M35.5 40.5c0-22.16 17.84-40 40-40s40 17.84 40 40c0 1.6939-.1042 3.3626-.3067 5H35.8067c-.2025-1.6374-.3067-3.3061-.3067-5zm90.9621-2.6663c-.62-1.4856-.9621-3.1182-.9621-4.8337 0-6.925 5.575-12.5 12.5-12.5s12.5 5.575 12.5 12.5a12.685 12.685 0 0 1-.1529 1.9691l.9537.5506-15.6454 27.0986-.1554-.0897V65.5h-28.7285c-7.318 9.1548-18.587 15-31.2715 15s-23.9535-5.8452-31.2715-15H15.5v-2.8059l-.0937.0437-8.8727-19.0274C2.912 41.5258.5 37.5549.5 33c0-6.925 5.575-12.5 12.5-12.5S25.5 26.075 25.5 33c0 .9035-.0949 1.784-.2753 2.6321L29.8262 45.5h92.2098z'
                        },
                        data: [{
                            coords: [
                                [110.6189462165178, 456.64349563895087],
                                [124.10988522879458, 450.8570048730469],
                                [123.9272226116071, 389.9520693708147],
                                [61.58708083147317, 386.87942320312504],
                                [61.58708083147317, 72.8954315876116],
                                [258.29514854771196, 72.8954315876116],
                                [260.75457021484374, 336.8559607533482],
                                [280.5277985253906, 410.2406672084263],
                                [275.948185765904, 528.0254369698661],
                                [111.06907909458701, 552.795792593471],
                                [118.87138231445309, 701.365737015904],
                                [221.36468155133926, 758.7870354617745],
                                [307.86195445452006, 742.164737297712],
                                [366.8489324762834, 560.9895157073103],
                                [492.8750778390066, 560.9895157073103],
                                [492.8750778390066, 827.9639780566406],
                                [294.9255269587053, 827.9639780566406],
                                [282.79803391043527, 868.2476088113839]
                            ]
                        }]
                    }]
                };

                var chart = testHelper.create(echarts, 'main_geo_svg_building', {
                    title: [
                        'Select some route in SVG via API.',
                    ],
                    option: option,
                    height: 700,
                    infoKey: 'SVG coord',
                    info: {}
                });

                if (chart) {
                    chart.getZr().on('click', function (event) {
                        var x = event.offsetX;
                        var y = event.offsetY;
                        console.log(x, y);
                        var svgCoord = chart.convertFromPixel({ geoIndex: 0 }, [x, y]);
                        console.log(svgCoord);
                        chart.__testHelper.updateInfo(
                            {x: svgCoord[0], y: svgCoord[1]},
                            'SVG coord'
                        );
                    });
                }
            });

        });
        </script>





        <script>
        require(['echarts'/*, 'map/js/china' */], function (echarts) {
            var option;
            fetch('data/svg/ksia-ext-plan-min.svg').then(response => response.text()).then((svg) => {

                echarts.registerMap('ksia-ext-plan', {
                    svg: svg
                });

                // seminar_room
                // reading_room
                option = {
                    tooltip: {
                    },
                    geo: {
                        map: 'ksia-ext-plan',
                        roam: true,
                        // left: 0,
                        // right: 0,
                        // top: 0,
                        // bottom: 0,
                        // height: 100,
                        // zoom: 1.5
                        emphasis: {
                            itemStyle: {
                                color: null
                            },
                            label: {
                                show: false
                            }
                        }
                    },
                    series: [{
                        name: 'Route',
                        type: 'lines',
                        coordinateSystem: 'geo',
                        geoIndex: 0,
                        emphasis: {
                            label: {
                                show: false
                            }
                        },
                        polyline: true,
                        lineStyle: {
                            color: '#c46e54',
                            width: 0
                        },
                        effect: {
                            show: true,
                            period: 8,
                            color: '#a10000',
                            // constantSpeed: 80,
                            trailLength: 0,
                            symbolSize: [12, 30],
                            symbol: 'path://M87.1667 3.8333L80.5.5h-60l-6.6667 3.3333L.5 70.5v130l10 10h80l10 -10v-130zM15.5 190.5l15 -20h40l15 20zm75 -65l-15 5v35l15 15zm-80 0l15 5v35l-15 15zm65 0l15 -5v-40l-15 20zm-50 0l-15 -5v-40l15 20zm 65,-55 -15,25 c -15,-5 -35,-5 -50,0 l -15,-25 c 25,-15 55,-15 80,0 z'
                        },
                        z: 100,
                        data: [{
                            effect: {
                                color: '#a10000',
                                constantSpeed: 100,
                                delay: 0,
                            },
                            coords: [
                                [50.875133928571415, 242.66287667410717],
                                [62.03696428571425, 264.482421875],
                                [72.63357421874997, 273.62779017857144],
                                [92.78291852678569, 285.869140625],
                                [113.43637834821425, 287.21854073660717],
                                [141.44788783482142, 288.92947823660717],
                                [191.71686104910714, 289.5507114955357],
                                [198.3060072544643, 294.0673828125],
                                [204.99699497767858, 304.60288783482144],
                                [210.79177734375003, 316.7373046875],
                                [212.45179408482142, 329.3656529017857],
                                [210.8885267857143, 443.3925083705358],
                                [215.35936941964286, 453.00634765625],
                                [224.38761997767858, 452.15087890625],
                                [265.71490792410714, 452.20179966517856],
                                [493.3408844866072, 453.77525111607144],
                                [572.8892940848216, 448.77992466517856],
                                [608.9513755580358, 448.43366350446433],
                                [619.99099609375, 450.8778599330358],
                                [624.2479715401787, 456.2194475446429],
                                [628.1434095982145, 463.9899553571429],
                                [629.8492550223216, 476.0276227678571],
                                [631.2750362723216, 535.7322126116071],
                                [624.6757059151787, 546.6496233258929],
                                [617.1801702008929, 552.6480887276786],
                                [603.7269056919645, 554.5066964285714],
                                [588.0178515625, 557.5517578125],
                                [529.4386104910716, 556.2991071428571],
                                [422.1994921875001, 551.38525390625],
                                [291.66921875, 552.5767996651786],
                                [219.4279380580357, 547.4949079241071],
                                [209.53912667410714, 541.5931919642858],
                                [206.70793247767858, 526.1947544642858],
                                [206.70793247767858, 507.4049944196429],
                                [206.12234375000003, 468.7663225446429],
                                [204.48778738839286, 459.44782366071433],
                                [197.56256417410714, 452.8943219866071],
                                [170.31995814732142, 456.27546037946433],
                                [1.8078906249999704, 460.5935407366071]
                            ]
                        }, {
                            effect: {
                                color: '#00067d',
                                constantSpeed: 80,
                                delay: 0,
                            },
                            coords: [
                                [779.4595368303574, 287.98744419642856],
                                [689.07009765625, 291.0477818080357],
                                [301.83300223214286, 290.49783761160717],
                                [229.31165736607142, 291.73011997767856],
                                [220.73660156250003, 297.4077845982143],
                                [214.74832031250003, 308.52378627232144],
                                [213.82156250000003, 421.35400390625],
                                [213.19523716517858, 443.0564313616071],
                                [222.31005301339286, 455.95465959821433],
                                [271.71846540178575, 454.37611607142856],
                                [359.64843191964286, 455.9393833705358],
                                [580.2524358258929, 448.11286272321433],
                                [627.7156752232145, 460.7463030133929],
                                [632.3290959821429, 536.6386021205358],
                                [628.9123130580358, 548.4776785714286],
                                [612.5667494419645, 556.8235909598214],
                                [543.7167912946429, 555.4741908482143],
                                [429.1756361607143, 551.9402901785714],
                                [293.42089285714286, 551.2172154017858],
                                [226.20039899553575, 556.0699637276786],
                                [215.49176339285714, 562.7253069196429],
                                [213.21051339285714, 591.6024693080358],
                                [212.00878348214286, 625.6735491071429],
                                [197.43017020089286, 645.0743582589286],
                                [187.41405691964286, 647.0857282366071],
                                [101.79589285714286, 649.0207170758929],
                                [69.96023437499997, 650.1613420758929],
                                [56.48150948660714, 656.8268694196429],
                                [51.11446149553569, 665.2542550223214]
                            ]
                        }, {
                            effect: {
                                color: '#997405',
                                constantSpeed: 60,
                                delay: 0,
                            },
                            coords: [
                                [2.5920703124999704, 450.66908482142856],
                                [204.0651450892857, 453.13364955357144],
                                [378.72844029017864, 453.13874162946433],
                                [551.1817745535716, 456.1532505580358],
                                [578.3734598214287, 456.91196986607144],
                                [601.2317885044645, 458.9895368303571],
                                [614.1503850446429, 462.1669921875],
                                [618.99294921875, 479.68882533482144],
                                [620.0826534598216, 513.5969587053571],
                                [615.6932840401787, 528.7306082589286],
                                [608.4829045758929, 533.2625558035714],
                                [592.7127455357145, 534.9582170758929],
                                [583.09890625, 527.5492466517858],
                                [578.6535239955358, 516.4077845982143],
                                [578.6535239955358, 498.36146763392856],
                                [577.9966462053571, 477.0613141741071],
                                [575.3691350446429, 469.1940569196429],
                                [569.0753292410716, 462.63037109375],
                                [553.9518638392858, 460.6444614955358],
                                [298.10051060267864, 465.61432756696433],
                                [193.49908761160714, 460.1759905133929],
                                [116.40505859374997, 465.78236607142856],
                                [3.5137360491071092, 463.47565569196433]
                            ]
                        }]
                    }]
                };

                var chart = testHelper.create(echarts, 'main_geo_svg_traffic', {
                    title: [
                        'Select some route in SVG via API.',
                    ],
                    option: option,
                    height: 700,
                    // infoKey: 'SVG coord',
                    // info: {}
                });

                if (chart) {
                    chart.getZr().on('click', function (event) {
                        var x = event.offsetX;
                        var y = event.offsetY;
                        var svgCoord = chart.convertFromPixel({ geoIndex: 0 }, [x, y]);
                        console.log(svgCoord);
                    });
                }
            });

        });
        </script>








    </body>
</html>

