extends ../layouts/basic

block extra_head
    title 地图下载 - Apache ECharts (incubating)
    link(rel='stylesheet', type='text/css', href='#{cdnPayRoot}/#{ecWWWLang}/vendors/prettify/prettify.css?_v_=#{cdnPayVersion}')

block content
    nav(class='navbar navbar-default navbar-fixed-top')
        include ../components/nav

    .page-main
        .page-info
            h1 地图下载
            p （暂不提供地图下载）
            p.page-info-echarts Apache ECharts (incubating)<sup>TM</sup>
            //- p ECharts 提供世界、中国、各省地图，数据来自第三方

        .page-content(style='text-align: left; min-height: 300px; margin-top: 30px;', class='container')
            p ECharts 之前提供下载的矢量地图数据来自第三方，由于部分数据不符合国家《测绘法》规定，目前暂时停止下载服务。
            p 建议大家使用以百度地图为底图的形式，参考<a href="#{host}/examples/zh/editor.html?c=map-polygon">例子</a>。

        //- .page-content#map-download
        //-     #maps
        //-         #map-list.container
        //-             .row
        //-                 .col-md-5.col-md-offset-1.col-xs-6
        //-                     h3 中国地图
        //-                         span China
        //-                     a(href="asset/map/json/china.json" download="china.json" target="_blank")
        //-                         img(src="asset/map/thumb/china.png" alt="")
        //-                     .links
        //-                         a(href="asset/map/js/china.js" download="china.js" target="_blank") JS
        //-                         a(href="asset/map/json/china.json" download="china.json" target="_blank") JSON
        //-                 .col-md-5.col-xs-6
        //-                     h3 世界地图
        //-                         span world
        //-                     a(href="asset/map/json/world.json" download="world.json" target="_blank")
        //-                         img(src="asset/map/thumb/world.png" alt="")
        //-                     .links
        //-                         a(href="asset/map/js/world.js" download="world.js" target="_blank") JS
        //-                         a(href="asset/map/json/world.json" download="world.json" target="_blank") JSON

        //-             .row
        //-                 .col-md-11.col-md-offset-1
        //-                     h3 各省地图
        //-                         span province
        //-             .row
        //-                 each provinceName, idx in province
        //-                     if idx % 5 === 0
        //-                         .col-md-2.col-md-offset-1.col-sm-3.col-xs-4.province
        //-                             a(href="asset/map/json/province/#{provincePinyin[idx]}.json" download="#{provincePinyin[idx]}.json" target="_blank")
        //-                                 img(src="asset/map/thumb/#{provincePinyin[idx]}.png" alt="")
        //-                             h5 #{provinceName}
        //-                             div.links
        //-                                 a(href="asset/map/js/province/#{provincePinyin[idx]}.js" download="#{provincePinyin[idx]}.js" target="_blank") JS
        //-                                 a(href="asset/map/json/province/#{provincePinyin[idx]}.json" download="#{provincePinyin[idx]}.json" target="_blank") JSON
        //-                     else
        //-                         .col-md-2.col-sm-3.col-xs-4.province
        //-                             a(href="asset/map/json/province/#{provincePinyin[idx]}.json" download="#{provincePinyin[idx]}.json" target="_blank")
        //-                                 img(src="asset/map/thumb/#{provincePinyin[idx]}.png" alt="")
        //-                             h5 #{provinceName}
        //-                             div.links
        //-                                 a(href="asset/map/js/province/#{provincePinyin[idx]}.js" download="#{provincePinyin[idx]}.js" target="_blank") JS
        //-                                 a(href="asset/map/json/province/#{provincePinyin[idx]}.json" download="#{provincePinyin[idx]}.json" target="_blank") JSON

        //-         section.section-bg
        //-             a.btn.btn-main.btn-thirdary.more-btn(href='https://ecomfe.github.io/echarts-map-tool/') 地图定制
        //-             p 可在线选择生成省、市、县各级地图

        //-         .container
        //-             #map-example
        //-                 h4 JavaScript 引入示例
        //-                 pre(class="html").
        //-                     &lt;script src="echarts.js"&gt;&lt;/script&gt;
        //-                     &lt;script src="map/js/china.js"&gt;&lt;/script&gt;
        //-                     &lt;script&gt;
        //-                     var chart = echarts.init(document.getElementById('main'));
        //-                     chart.setOption({
        //-                         series: [{
        //-                             type: 'map',
        //-                             map: 'china'
        //-                         }]
        //-                     });
        //-                     &lt;/script&gt;

        //-                 h4 JSON 引入示例
        //-                 pre(class="js").
        //-                     $.get('map/json/china.json', function (chinaJson) {
        //-                         echarts.registerMap('china', chinaJson);
        //-                         var chart = echarts.init(document.getElementById('main'));
        //-                         chart.setOption({
        //-                             series: [{
        //-                                 type: 'map',
        //-                                 map: 'china'
        //-                             }]
        //-                         });
        //-                     });

        include ../components/footer

block extra_js
    script(src="#{cdnThirdParty.prettifyJS}")
    script(src="#{cdnThirdParty.prettifyCSSHandlerJS}")
    script.
        document.getElementById('nav-download').className = 'active';
        $('pre').addClass('prettyprint');
        prettyPrint();