<!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/simpleRequire.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',
                'data/svg/Veins_Medical_Diagram_clip_art.svg'
            ], function (echarts, svg) {
                var option;
                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',
                'data/svg/Sicily_prehellenic_topographic_map.svg'
            ], function (echarts, svg) {
                var option;
                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',
                'data/svg/Map_of_Iceland.svg'
            ], function (echarts, svg) {
                var option;
                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',
                'data/svg/Beef_cuts_France.svg'
            ], function (echarts, svg) {
                var option;

                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',
                'data/svg/MacOdrum-LV5-floorplan-web.svg'
            ], function (echarts, svg) {
                var option;
                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',
                'data/svg/ksia-ext-plan-min.svg'
            ], function (echarts, svg) {
                var option;

                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>

