如何使用highmaps制作中国地图

带你走进 Highmaps ,本篇介绍highmap的基本用法

起初因为highmaps对中国地图的支持不够友好,没有台湾,澳门等,你懂的,政治问题。于是放弃了highmaps ,使用了echart的maps,毕竟国产功能也很齐全,但相比highmap,感觉echart相对比较臃肿,而且没有highmap流畅舒服。随着highmaps不断完善,highmaps已经解决了所谓的政治地域问题,特意为中国地图出了三个js版本。
China 、China with Hong Kong and Macau、China with Hong Kong, Macau, and Taiwan 
先来个预览图:
全国地图

北京市地图展开详情


Highmaps 所需文件

http://code.highcharts.com/maps/highmaps.js
地图渲染的核心文件 必须引用)
http://code.highcharts.com/maps/modules/data.js
地图数据拼接及解析的核心文件 必须引用)
http://code.highcharts.com/maps/modules/drilldown.js
(地图 展开明细的核心插件,若需要点击显示省市则需要引用,反之则不需要引用)
http://sandbox.runjs.cn/uploads/rs/228/zroo4bdf/cn-china-by-peng8.js
(*中国地图主要省会的坐标及相关数据插件 必须引用,另外这个文件由本人汉化,增加drill-key 用来钻取城市地图,增加cn-name 字段用来显示中文明显,若不需要可以下载官方的 点击此处

地图初始化代码

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
$(function () {    Highcharts.setOptions({        lang:{            drillUpText:"返回 > {series.name}"        }    });    var data = Highcharts.geojson(Highcharts.maps['countries/cn/custom/cn-all-china']),small = $('#container').width() < 400;    // 给城市设置随机数据    $.each(data, function (i) {        this.drilldown = this.properties['drill-key'];        this.value = i;    });    //初始化地图    $('#container').highcharts('Map', {        chart : {            events: {                drilldown: function (e) {                    if (!e.seriesOptions) {                        var chart = this;                                                     var cname=e.point.properties["cn-name"];                        chart.showLoading('<i class="icon-spinner icon-spin icon-3x"></i>');                        // 加载城市数据                        $.ajax({                            type: "GET",                            url: "http://data.hcharts.cn/jsonp.php?filename=GeoMap/json/"+ e.point.drilldown+".geo.json",                            contentType: "application/json; charset=utf-8",                            dataType:'jsonp',                            crossDomain: true,                            success: function(json) {                                data = Highcharts.geojson(json);                                $.each(data, function (i) {                                    this.value = i;                                });                                chart.hideLoading();

                                chart.addSeriesAsDrilldown(e.point, {                                    name: e.point.name,                                    data: data,                                    dataLabels: {                                        enabled: true,                                        format: '{point.name}'                                    }                                });                            },                            error: function (XMLHttpRequest, textStatus, errorThrown) {

                            }                        });                    }

                    this.setTitle(null, { text: cname });                },                drillup: function () {                    this.setTitle(null, { text: '中国' });                }            }        },        credits:{            href:"http://www.peng8.net/",            text:"www.peng8.net"        },        title : {            text : 'highmap中国地图By peng8'        },        subtitle: {            text: '中国',            floating: true,            align: 'right',            y: 50,            style: {                fontSize: '16px'            }        },        legend: small ? {} : {            layout: 'vertical',            align: 'right',            verticalAlign: 'middle'        },        //tooltip:{        //pointFormat:"{point.properties.cn-name}:{point.value}"        //},        colorAxis: {            min: 0,            minColor: '#E6E7E8',            maxColor: '#005645'        },        mapNavigation: {            enabled: true,            buttonOptions: {                verticalAlign: 'bottom'            }        },        plotOptions: {            map: {                states: {                    hover: {                        color: '#EEDD66'                    }                }            }        },        series : [{            data : data,            name: '中国',            dataLabels: {                enabled: true,                format: '{point.properties.cn-name}'            }        }],        drilldown: {

            activeDataLabelStyle: {                color: '#FFFFFF',                textDecoration: 'none',                textShadow: '0 0 3px #000000'            },            drillUpButton: {                relativeTo: 'spacingBox',                position: {                    x: 0,                    y: 60                }            }        }    });});

highmaps 渲染讲解

看完上面的代码,基本和highchart图表渲染的方式一样 ,说说几个需要注意的地方

  • Highcharts.maps['countries/cn/custom/cn-all-china'] 这段代码用来获取引入文件cn-china-by-peng8.js的核心json数据。
  • Highcharts.geojson 方法将 json数据转换成map需要的json格式供地图解析用。
  • 地图数据构造,这里我用了假数据,data 由引入的js文件获得,然后遍历获得所有省会的信息,并给valuedrilldown 赋值,注意了,这里this.drilldown 是用来点击地图传值用的,例子用的是hc-key 节点,当然也可以自己随意定义

    1234
    $.each(data, function (i) {    this.drilldown = this.properties['drill-key'];    this.value = i; });
  • 接着重点说说点击地图的事件drilldowndrilldown里需要重新获取对应省会的所有市县的json信息。这就是为什么上面需要定义drilldown 属性,根据不用的省会动态获取不同的json文件。例如我点击 北京 事件传过去的值就是 cn-bj。那接下来去请求市的信息。

    123456789101112131415161718192021222324
    $.ajax({	type: "GET",	url: "http://data.hcharts.cn/jsonp.php?filename=GeoMap/json/"+ e.point.drilldown+".geo.json",	contentType: "application/json; charset=utf-8",	dataType:'jsonp',	crossDomain: true,	success: function(json) {		data = Highcharts.geojson(json);		$.each(data, function (i) {			this.value = i;		});		chart.hideLoading();
    
    		chart.addSeriesAsDrilldown(e.point, {			name: e.point.name,			data: data,			dataLabels: {				enabled: true,				format: '{point.name}'			}		});	},	error: function (XMLHttpRequest, textStatus, errorThrown) {}});

可以看到上面这段代码我根据drilldown传过来的值 请求不同的文件的json文件

highmaps 中国各城市坐标的json文件

官方只提供省会的坐标文件,但没有提供中国各市的坐标。因此我在网上fork一份中国各市坐标的json文件,需要的朋友可以下载。
点击此处前往下载

highmaps 线上DEMO

这里我把代码分享给大家 点击此处前往DEMO预览

如何使用highmaps制作中国地图的更多相关文章

  1. 使用highmaps制作中国地图

    Highmaps 所需文件 http://code.highcharts.com/maps/highmaps.js(地图渲染的核心文件 必须引用)http://code.highcharts.com/ ...

  2. D3.js 制作中国地图 .net 公共基础类

    D3.js 制作中国地图 from:  http://d3.decembercafe.org/pages/map/index.html GeoJSON is a format for encoding ...

  3. 使用echarts简单制作中国地图,echarts中国地图

    网站需要一张中国地图,并且鼠标经过某个省份,该省份的省份名字显示,而且该省份的地区会变色显示. 第一种方法: 将每个省份的图片定位(先隐藏),拼合成一张中国地图,然后再定位省份名称,鼠标经过省份名字, ...

  4. 用echarts.js制作中国地图,点击对应的省市链接到指定页面

    这里使用的是ECharts 2,因为用EChart 3制作的地图上的省市文字标识会有重叠,推测是引入的地图文件china.js,绘制文字的坐标方面的问题,所以,这里还是使用老版本. ECharts 2 ...

  5. echarts.制作中国地图,点击对应的省市链接到该省份的详细介绍

    今天花了一天的时间,用echart弄了一个效果,是从中国地图点进去身份并把改省份的数据渲染出来的效果,刚开始完全没有头绪,只能硬着头皮去看百度echart的api,和博客,看了半天,好家伙,终于给我找 ...

  6. 用Python制作中国地图、地球平面图及球形图

    绘制地图在python中主要用到的 basemap 库,这个库是 matplotlib 库中一个用于在 Python 中绘制地图上的 2D 数据的工具包. 首先安装库: 1.安装 geos 库:Pyt ...

  7. D3.js 制作中国地图

    from:  http://d3.decembercafe.org/pages/map/index.html GeoJSON is a format for encoding a variety of ...

  8. echarts.js制作中国地图

    一.准备 1.  打开sublime,新建一个echarts文件夹,新建echarts.html文件 2.  在echarts.html文件中,为ECharts准备一个Dom(id是china-map ...

  9. 中国地图(Highmaps)

    1.中国地图省份和市 调用的包( <script src="https://img.hcharts.cn/jquery/jquery-1.8.3.min.js">< ...

随机推荐

  1. JDK核心包学习

    StringBuffer   线程安全.可变字符序列 StringBuilder   非线程安全.可变字符序列,比StringBuffer更快 Boolean 使用valueOf产生Boolean实例 ...

  2. Java实验报告五:Java网络编程及安全

    Java实验报告五:Java网络编程及安全                                                                               ...

  3. sqlserver中常用的全局变量

    变量 Transact-SQL语言中有两种形式的变量,一种是用户自己定义的局部变量,另外一种是系统提供的全局变量.局部变量 局部变量是一个能够拥有特定数据类型的对象,它的作用范围仅限制在程序内部.局部 ...

  4. Oracle一些基本操作

    查看表以及列: Select * From all_tables where owner = 'userName' ---注意,这里需要区分大小写! select * from user_tab_co ...

  5. Windows 一键安装OpenSSL

    原理:OpenSSL在github上有开源项目,我们只需要把代码克隆到本地,在本地编译一下就好了 注意事项: 1->在github上获取源码,必须要安装git for windows,网址 ht ...

  6. Wordpress页面判断

    is_single() 判断是否是文章页面 is_single('2')/is_single(2)判断是否是具体文章(id=2)的页面 is_single('')判断是否是具体文章(标题为Beef S ...

  7. 通过定位position="fixed"实现网页内容的固定层效果

    在网页的顶部或者底部导航栏中经常需要使用到固定层的效果,即紧挨浏览器窗口的顶部或底部而网页其他内容的影响. 一.实现 主要通过设置导航栏元素的位置属性position="fixed" ...

  8. Candies---hdu3159(spfa+差分约束)

    题目链接:http://poj.org/problem?id=3159 题意:有n个小孩,m个关系格式是A B C 表示小孩 B 的糖果数最多比小孩A多C个,相当于B-A<=C; 有m个这样的关 ...

  9. iOS NSURLSession 下载

    周五的时候,有个新的需求,要下载脚本,帮助玩家自动打怪,应该也是挂机的意思吧! 组长让我设计界面,让汤老师设计数据等.我觉得数据的挑战性更大一点,然后就接过来了. 自己还没有形成互联网思维,所以弄了一 ...

  10. TestNG学习-002-annotaton 注解概述及其执行顺序

    此文主要讲述用 TestNG 基础的 annotation (注解)知识,及其执行的顺序,并通过一个 TestNG 简单的实例演示 annotation 的执行顺序. 希望能对初学 TestNG 测试 ...