
<!--
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>
        <script src="lib/jquery.min.js"></script>
    </head>
    <body>
        <style>
            html, body, #main {
                width: 100%;
                height: 100%;
                margin: 0;
            }
        </style>
        <div id="main"></div>
        <script>

            require([
                'echarts',
                './data/map/json/world.json'
            ], function (echarts, worldJson) {


                // Test for label calculation.
                worldJson.features.forEach(feature => {
                    feature.properties && (feature.properties.cp = null);
                });

                echarts.registerMap('world', worldJson);

                var chart = echarts.init(document.getElementById('main'), null, {

                });

                var itemStyle = {
                    normal:{
                        borderWidth: 0.5,
                        borderColor: 'black'
                    },
                    emphasis:{
                        label:{show:true}
                        // shadowOffsetX: 0,
                        // shadowOffsetY: 0,
                        // shadowBlur: 20,
                        // shadowColor: 'rgba(0, 0, 0, 0.3)'
                    }
                };

                chart.setOption({
                    title : {
                        text: 'World Population (2010)',
                        subtext: 'from United Nations, Total population, both sexes combined, as of 1 July (thousands)',
                        sublink : 'http://esa.un.org/wpp/Excel-Data/population.htm',
                        left: 'center',
                        top: 'top'
                    },
                    tooltip : {
                        trigger: 'item',
                        formatter : function (params) {
                            var value = (params.value + '').split('.');
                            value = value[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, '$1,')
                                    + '.' + value[1];
                            return params.seriesName + '<br/>' + params.name + ' : ' + value;
                        }
                    },
                    visualMap: {
                        min: 0,
                        max: 1000000,
                        text:['High','Low'],
                        realtime: true,
                        calculable : true,
                        color: ['orangered','yellow','lightskyblue']
                    },
                    series : [
                        {
                            name: 'World Population (2010)',
                            type: 'map',
                            map: 'world',
                            roam: true,
                            top: 60,
                            width: '80%',
                            label: {
                                show: true,
                                textBorderColor: '#fff',
                                textBorderWidth: 1
                            },
                            itemStyle: itemStyle,
                            data:[
                                {name : 'Afghanistan', value : 28397.812},
                                {name : 'Angola', value : 19549.124},
                                {name : 'Albania', value : 3150.143},
                                {name : 'United Arab Emirates', value : 8441.537},
                                {name : 'Argentina', value : 40374.224},
                                {name : 'Armenia', value : 2963.496},
                                {name : 'French Southern and Antarctic Lands', value : 268.065},
                                {name : 'Australia', value : 22404.488},
                                {name : 'Austria', value : 8401.924},
                                {name : 'Azerbaijan', value : 9094.718},
                                {name : 'Burundi', value : 9232.753},
                                {name : 'Belgium', value : 10941.288},
                                {name : 'Benin', value : 9509.798},
                                {name : 'Burkina Faso', value : 15540.284},
                                {name : 'Bangladesh', value : 151125.475},
                                {name : 'Bulgaria', value : 7389.175},
                                {name : 'The Bahamas', value : 66402.316},
                                {name : 'Bosnia and Herzegovina', value : 3845.929},
                                {name : 'Belarus', value : 9491.07},
                                {name : 'Belize', value : 308.595},
                                {name : 'Bermuda', value : 64.951},
                                {name : 'Bolivia', value : 716.939},
                                {name : 'Brazil', value : 195210.154},
                                {name : 'Brunei', value : 27.223},
                                {name : 'Bhutan', value : 716.939},
                                {name : 'Botswana', value : 1969.341},
                                {name : 'Central African Republic', value : 4349.921},
                                {name : 'Canada', value : 34126.24},
                                {name : 'Switzerland', value : 7830.534},
                                {name : 'Chile', value : 17150.76},
                                {name : 'China', value : 1359821.465},
                                {name : 'Ivory Coast', value : 60508.978},
                                {name : 'Cameroon', value : 20624.343},
                                {name : 'Democratic Republic of the Congo', value : 62191.161},
                                {name : 'Republic of the Congo', value : 3573.024},
                                {name : 'Colombia', value : 46444.798},
                                {name : 'Costa Rica', value : 4669.685},
                                {name : 'Cuba', value : 11281.768},
                                {name : 'Northern Cyprus', value : 1.468},
                                {name : 'Cyprus', value : 1103.685},
                                {name : 'Czech Republic', value : 10553.701},
                                {name : 'Germany', value : 83017.404},
                                {name : 'Djibouti', value : 834.036},
                                {name : 'Denmark', value : 5550.959},
                                {name : 'Dominican Republic', value : 10016.797},
                                {name : 'Algeria', value : 37062.82},
                                {name : 'Ecuador', value : 15001.072},
                                {name : 'Egypt', value : 78075.705},
                                {name : 'Eritrea', value : 5741.159},
                                {name : 'Spain', value : 46182.038},
                                {name : 'Estonia', value : 1298.533},
                                {name : 'Ethiopia', value : 87095.281},
                                {name : 'Finland', value : 5367.693},
                                {name : 'Fiji', value : 860.559},
                                {name : 'Falkland Islands', value : 49.581},
                                {name : 'France', value : 63230.866},
                                {name : 'Gabon', value : 1556.222},
                                {name : 'United Kingdom', value : 62066.35},
                                {name : 'Georgia', value : 4388.674},
                                {name : 'Ghana', value : 24262.901},
                                {name : 'Guinea', value : 10876.033},
                                {name : 'Gambia', value : 1680.64},
                                {name : 'Guinea Bissau', value : 10876.033},
                                {name : 'Equatorial Guinea', value : 696.167},
                                {name : 'Greece', value : 11109.999},
                                {name : 'Greenland', value : 56.546},
                                {name : 'Guatemala', value : 14341.576},
                                {name : 'French Guiana', value : 231.169},
                                {name : 'Guyana', value : 786.126},
                                {name : 'Honduras', value : 7621.204},
                                {name : 'Croatia', value : 4338.027},
                                {name : 'Haiti', value : 9896.4},
                                {name : 'Hungary', value : 10014.633},
                                {name : 'Indonesia', value : 240676.485},
                                {name : 'India', value : 1205624.648},
                                {name : 'Ireland', value : 4467.561},
                                {name : 'Iran', value : 240676.485},
                                {name : 'Iraq', value : 30962.38},
                                {name : 'Iceland', value : 318.042},
                                {name : 'Israel', value : 7420.368},
                                {name : 'Italy', value : 60508.978},
                                {name : 'Jamaica', value : 2741.485},
                                {name : 'Jordan', value : 6454.554},
                                {name : 'Japan', value : 127352.833},
                                {name : 'Kazakhstan', value : 15921.127},
                                {name : 'Kenya', value : 40909.194},
                                {name : 'Kyrgyzstan', value : 5334.223},
                                {name : 'Cambodia', value : 14364.931},
                                {name : 'South Korea', value : 51452.352},
                                {name : 'Kosovo', value : 97.743},
                                {name : 'Kuwait', value : 2991.58},
                                {name : 'Laos', value : 6395.713},
                                {name : 'Lebanon', value : 4341.092},
                                {name : 'Liberia', value : 3957.99},
                                {name : 'Libya', value : 6040.612},
                                {name : 'Sri Lanka', value : 20758.779},
                                {name : 'Lesotho', value : 2008.921},
                                {name : 'Lithuania', value : 3068.457},
                                {name : 'Luxembourg', value : 507.885},
                                {name : 'Latvia', value : 2090.519},
                                {name : 'Morocco', value : 31642.36},
                                {name : 'Moldova', value : 103.619},
                                {name : 'Madagascar', value : 21079.532},
                                {name : 'Mexico', value : 117886.404},
                                {name : 'Macedonia', value : 507.885},
                                {name : 'Mali', value : 13985.961},
                                {name : 'Myanmar', value : 51931.231},
                                {name : 'Montenegro', value : 620.078},
                                {name : 'Mongolia', value : 2712.738},
                                {name : 'Mozambique', value : 23967.265},
                                {name : 'Mauritania', value : 3609.42},
                                {name : 'Malawi', value : 15013.694},
                                {name : 'Malaysia', value : 28275.835},
                                {name : 'Namibia', value : 2178.967},
                                {name : 'New Caledonia', value : 246.379},
                                {name : 'Niger', value : 15893.746},
                                {name : 'Nigeria', value : 159707.78},
                                {name : 'Nicaragua', value : 5822.209},
                                {name : 'Netherlands', value : 16615.243},
                                {name : 'Norway', value : 4891.251},
                                {name : 'Nepal', value : 26846.016},
                                {name : 'New Zealand', value : 4368.136},
                                {name : 'Oman', value : 2802.768},
                                {name : 'Pakistan', value : 173149.306},
                                {name : 'Panama', value : 3678.128},
                                {name : 'Peru', value : 29262.83},
                                {name : 'Philippines', value : 93444.322},
                                {name : 'Papua New Guinea', value : 6858.945},
                                {name : 'Poland', value : 38198.754},
                                {name : 'Puerto Rico', value : 3709.671},
                                {name : 'North Korea', value : 1.468},
                                {name : 'Portugal', value : 10589.792},
                                {name : 'Paraguay', value : 6459.721},
                                {name : 'Qatar', value : 1749.713},
                                {name : 'Romania', value : 21861.476},
                                {name : 'Russia', value : 21861.476},
                                {name : 'Rwanda', value : 10836.732},
                                {name : 'Western Sahara', value : 514.648},
                                {name : 'Saudi Arabia', value : 27258.387},
                                {name : 'Sudan', value : 35652.002},
                                {name : 'South Sudan', value : 9940.929},
                                {name : 'Senegal', value : 12950.564},
                                {name : 'Solomon Islands', value : 526.447},
                                {name : 'Sierra Leone', value : 5751.976},
                                {name : 'El Salvador', value : 6218.195},
                                {name : 'Somaliland', value : 9636.173},
                                {name : 'Somalia', value : 9636.173},
                                {name : 'Republic of Serbia', value : 3573.024},
                                {name : 'Suriname', value : 524.96},
                                {name : 'Slovakia', value : 5433.437},
                                {name : 'Slovenia', value : 2054.232},
                                {name : 'Sweden', value : 9382.297},
                                {name : 'Swaziland', value : 1193.148},
                                {name : 'Syria', value : 7830.534},
                                {name : 'Chad', value : 11720.781},
                                {name : 'Togo', value : 6306.014},
                                {name : 'Thailand', value : 66402.316},
                                {name : 'Tajikistan', value : 7627.326},
                                {name : 'Turkmenistan', value : 5041.995},
                                {name : 'East Timor', value : 10016.797},
                                {name : 'Trinidad and Tobago', value : 1328.095},
                                {name : 'Tunisia', value : 10631.83},
                                {name : 'Turkey', value : 72137.546},
                                {name : 'United Republic of Tanzania', value : 44973.33},
                                {name : 'Uganda', value : 33987.213},
                                {name : 'Ukraine', value : 46050.22},
                                {name : 'Uruguay', value : 3371.982},
                                {name : 'United States of America', value : 312247.116},
                                {name : 'Uzbekistan', value : 27769.27},
                                {name : 'Venezuela', value : 236.299},
                                {name : 'Vietnam', value : 89047.397},
                                {name : 'Vanuatu', value : 236.299},
                                {name : 'West Bank', value : 13.565},
                                {name : 'Yemen', value : 22763.008},
                                {name : 'South Africa', value : 51452.352},
                                {name : 'Zambia', value : 13216.985},
                                {name : 'Zimbabwe', value : 13076.978}
                            ]
                        }
                    ]
                });
            });

        </script>
    </body>
</html>