Highcharts实现地图下钻功能

      项目有时候需要显示某个省到州的地图下钻,在每层地图可能需要展示一些业务信息。事实上Highcharts已经提供了完整的功能实现:jshare.com.cn/highmaps/FS…。他提供了全国到省州市的免费地图数据,而二级县的数据则是收费的。下面以云南省为例,如何本地开发一个省到州县的下钻功能。

获取数据

首先来看GEOJSON数据是如何获取的,我们从中国地图下钻的云南省数据获取地址为:data.jianshukeji.com/jsonp?filen…

可以看到其原始实现是一个JSONP的调用。那么我们本地实现的时候将这个调用结果保存到本地文件即可:主要是将上边链接返回结果剥离掉jQuery18307324838355276646_1536907807686(。为了便于演示我这里将数据保存到HTML,然后通过jQuery来加载。

代码实现

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="js/jquery-1.8.3.min.js"></script>
    <script src="js/highmaps.js"></script>
    <script src="js/drilldown.js"></script>
    <script src="js/exporting.js"></script>
</head>
<body>
<div id="container" style="height:600px;"></div>

<script>
    Highcharts.setOptions({
        credits: {
            enabled: false
        },
        lang: {
            drillUpText: '< 返回 “{series.name}”'
        }
    });
    var map = null, basePath = 'data/';
    $.get(basePath + 'yunnan.html', function (mapdata) {
        mapdata = JSON.parse(mapdata);
        var data = [];
        // 随机数据
        Highcharts.each(mapdata.features, function (md, index) {
            var tmp = {
                name: md.properties.name,
                value: Math.floor((Math.random() * 100) + 1) // 生成 1 ~ 100 随机值
            };
            //设置每个区域的区域底色
            //tmp.color = 'green';
            if (md.properties.drilldown) {
                tmp.drilldown = md.properties.drilldown;
            }
            data.push(tmp);
        });
        map = new Highcharts.Map('container', {
            chart: {
                events: {
                    drilldown: function (e) {
                        this.tooltip.hide();
                        console.log(e);
                        // 异步下钻
                        if (e.point.drilldown) {
                            var pointName = e.point.properties.fullname;
                            map.showLoading('下钻中,请稍后...');
                            // 获取二级行政地区数据并更新图表
                            $.get(basePath + e.point.drilldown + '.html', function (data) {
                                data = Highcharts.geojson(JSON.parse(data));
                                Highcharts.each(data, function (d) {
                                    if (d.properties.drilldown) {
                                        d.drilldown = d.properties.drilldown;
                                    }
                                    d.value = Math.floor((Math.random() * 100) + 1); // 生成 1 ~ 100 随机值
                                });
                                map.hideLoading();
                                map.addSeriesAsDrilldown(e.point, {
                                    name: e.point.name,
                                    data: data,
                                    dataLabels: {
                                        enabled: true,
                                        format: '{point.name}'
                                    }
                                });
                                map.setTitle({
                                    text: pointName
                                });
                            });
                        }
                    },
                    drillup: function () {
                        map.setTitle({
                            text: '云南省'
                        });
                    }
                }
            },
            title: {
                text: '指标数据'
            },
            subtitle: {
                useHTML: true,
                text: '指标数据'
            },
            mapNavigation: {
                enabled: true,
                buttonOptions: {
                    verticalAlign: 'bottom'
                }
            },
             tooltip: {
                 useHTML: true,
                 headerFormat: '<table><tr><td>{point.name}</td></tr>',
                 pointFormat: '<tr><td>全称</td><td>{point.properties.fullname}</td></tr>' +
                 '<tr><td>行政编号</td><td>{point.properties.areacode}</td></tr>' +
                 '<tr><td>父级</td><td>{point.properties.parent}</td></tr>' +
                 '<tr><td>经纬度</td><td>{point.properties.longitude},{point.properties.latitude}</td></tr>',
                 footerFormat: '</table>'
             },
            // colorAxis: {
            //     min: 0,
            //     minColor: '#fff',
            //     maxColor: '#006cee',
            //     labels:{
            //         style:{
            //             "color":"red","fontWeight":"bold"
            //         }
            //     }
            // },
            series: [{
                data: data,
                mapData: mapdata,
                joinBy: 'name',
                name: '指标',
                    states: {
                        hover: {
                            color: '#a4edba'
                        }
                    },
                dataLabels: {
                    enabled: true,
                    format: '{point.name}'
                }
            }]
        });
    });
</script>
</body>
</html>复制代码

实现很简单,其中basePath为地图数据所在相对路径。其他逻辑都很简单就不做赘述了。如果需要其他地域的地图,按照格式下载数据即可。

在线演示和代码:gongxufan.github.io/map/map.htm…


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在JavaScript中使用Highcharts实现3D饼图,你需要按照以下步骤进行配置和使用: 1. 首先,确保你已经引入了Highcharts库。你可以在HTML文件中通过使用`<script>`标签来引入Highcharts库的JavaScript文件。 2. 创建一个HTML容器来显示你的图表。在HTML文件中,你可以使用一个空的`<div>`元素,并为其指定一个唯一的ID,例如`<div id="chart-container"></div>`。这将是你的3D饼图的容器。 3. 在JavaScript文件中,你需要使用Highcharts的配置对象来定义你的3D饼图的设置。你可以通过创建一个名为`options`的对象来实现这一点。在`options`对象中,你可以指定图表的类型为`pie`,并设置`options.chart`属性为`{ type: 'pie', options3d: { enabled: true, alpha: 45, beta: 0 } }`以启用3D效果。 4. 在`options.series`属性中,你可以指定饼图的数据。每个数据点都是一个对象,包含`name`和`y`属性,分别表示数据点的名称和值。 5. 最后,你需要使用`Highcharts.chart`函数将图表绘制到指定的容器中。在JavaScript文件中,使用以下代码来创建和绘制3D饼图:`Highcharts.chart('chart-container', options);`。其中,`'chart-container'`是你在第2步中指定的容器的ID。 通过按照上述步骤进行配置和使用,你就能够在JavaScript实现3D饼图的效果了。记得在绘制图表之前,确保你已经引入了Highcharts库,并正确配置了相关的设置和数据。<span class="em">1</span> #### 引用[.reference_title] - *1* [在Vue中使用highCharts绘制3d饼图的方法](https://download.csdn.net/download/weixin_38656609/13206251)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值