如何使用highmaps制作中国地图
如何使用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文件获得,然后遍历获得所有省会的信息,并给
value和drilldown赋值,注意了,这里this.drilldown是用来点击地图传值用的,例子用的是hc-key节点,当然也可以自己随意定义1234
$.each(data, function (i) { this.drilldown = this.properties['drill-key']; this.value = i; });接着重点说说点击地图的事件
drilldown,drilldown里需要重新获取对应省会的所有市县的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制作中国地图的更多相关文章
- 使用highmaps制作中国地图
Highmaps 所需文件 http://code.highcharts.com/maps/highmaps.js(地图渲染的核心文件 必须引用)http://code.highcharts.com/ ...
- D3.js 制作中国地图 .net 公共基础类
D3.js 制作中国地图 from: http://d3.decembercafe.org/pages/map/index.html GeoJSON is a format for encoding ...
- 使用echarts简单制作中国地图,echarts中国地图
网站需要一张中国地图,并且鼠标经过某个省份,该省份的省份名字显示,而且该省份的地区会变色显示. 第一种方法: 将每个省份的图片定位(先隐藏),拼合成一张中国地图,然后再定位省份名称,鼠标经过省份名字, ...
- 用echarts.js制作中国地图,点击对应的省市链接到指定页面
这里使用的是ECharts 2,因为用EChart 3制作的地图上的省市文字标识会有重叠,推测是引入的地图文件china.js,绘制文字的坐标方面的问题,所以,这里还是使用老版本. ECharts 2 ...
- echarts.制作中国地图,点击对应的省市链接到该省份的详细介绍
今天花了一天的时间,用echart弄了一个效果,是从中国地图点进去身份并把改省份的数据渲染出来的效果,刚开始完全没有头绪,只能硬着头皮去看百度echart的api,和博客,看了半天,好家伙,终于给我找 ...
- 用Python制作中国地图、地球平面图及球形图
绘制地图在python中主要用到的 basemap 库,这个库是 matplotlib 库中一个用于在 Python 中绘制地图上的 2D 数据的工具包. 首先安装库: 1.安装 geos 库:Pyt ...
- D3.js 制作中国地图
from: http://d3.decembercafe.org/pages/map/index.html GeoJSON is a format for encoding a variety of ...
- echarts.js制作中国地图
一.准备 1. 打开sublime,新建一个echarts文件夹,新建echarts.html文件 2. 在echarts.html文件中,为ECharts准备一个Dom(id是china-map ...
- 中国地图(Highmaps)
1.中国地图省份和市 调用的包( <script src="https://img.hcharts.cn/jquery/jquery-1.8.3.min.js">< ...
随机推荐
- nrf51822-主从通信分析2
解决第三个问题:如何使能从机上的特征值的 notify功能,使其能通过notify方式发送数据 使能从机的notify功能是通过写0x0001到从机的那个具有notify功能的特征值的CCCD描述 ...
- 【转】Servlet与web.xml的配置
Web.xml常用元素<web-app><display-name></display-name>定义了WEB应用的名字<description>< ...
- 20145211 《Java程序设计》第3周学习总结——绝知此事要躬行
教材学习内容总结 4.1何为面向对象 面向对象,面向过程都是一种思想,没有高低之分.面向对象,就像是对冰箱操作,冰箱是一个介质,用法就像是c语言中的结构体,功能定义在对象上.面向对象,角色转变,让我们 ...
- 如何对抗 WhatsApp「蓝色双勾」-- 3 个方法让你偷偷看讯息
WhatsApp 强制推出新功能「蓝色双勾 (✔✔)」 ,让对方知道你已经看过讯息.一众用户反应极大,因为以后不能再藉口说未看到讯息而不回覆.究竟以后 WhatsApp 是否真的「更难用」? 幸好还有 ...
- JS事件分析
1.注册事件 1.1 使用HTML元素的事件属性 <div id='myDiv' style="width:100px;height:100px;background-color:re ...
- TortoiseGit 的使用
日常用法 (1) 创建新库 在文件夹中按右键, 选择Git Create repository here 就可以创建库了. 在出现的窗口中, 不勾选选项, 直接按OK 在目录中就会出现一个名为.git ...
- SQL判断字符串里不包含字母
Oracle: 方法一:通过To_Number 函数异常来判断,因为这个函数在转换不成功的时候是报错,所以只能用存储过程包装起来. CREATE OR REPLACE FUNCTION Is_Numb ...
- Inside Kolla - 02 Kolla 是什么
Kolla 是什么? Kolla 项目 Kolla 是 OpenStack 里面的一个项目,在源代码的 README.md 里面的解析是: The Kolla project is part of t ...
- jquery-cookie插件怎么读写json数据
需要先转换下jsonvar jsonStr = JSON.stringify(obj);把jsonStr存进cookie用的时候取出来 obj=JSON.parse(jsonStr);
- 百度地图API 简单示例
百度地图API2.0需要申请AK javascript引用百度地图API 设置地图DIV样式 javascript设置地图DIV 如下图代码: <!DOCTYPE html> <ht ...