highcharts-Highmaps 动态传入城市名称
做前端按地区(地图)分布监控数据展示用了 HIGHMAPS JAVASCRIPT MAPS 控件,很好很强大。
基础实现是这样的:调用插件动态传入需要展示的数据(data),插件会在地图数据(mapdata)中找到对应的区域,把值丢进去,然后在页面上渲染展示带有数据的区域数据分布地图。
mapdata 数据结构(已简化):
[
{'hc-key' : 'cn-sh', 'name' : '上海'},
{'hc-key' : 'cn-zj', 'name' : '浙江'}
]
data 数据结构:
[
{ 'hc-key' : 'cn-sh', 'value' : 113 },
{ 'hc-key' : 'cn-zj', 'value' : 44 }
]
(这里值得注意的是,value 值不能带上引号如:'value' : '44' 就会导致插件报错无法渲染。)
插件通过 data 里的这个 hc-key 值去 mapdata (该数据存放在一个 js 文件内) 捞对应的区域信息详情,其中就包括地区的中文名称信息如:上海。就是这里出了一点小麻烦,我的中文名称可能会发生变动,譬如有时候是「上海」,但可能下一次下下次又会是 「上海 1」 ,「上海 2」。
常规思路是直接改数据源,重新加载数据源就好了。可是这个 mapdata 如我前面所说,是存在文件里的,那么一个人必须是疯了才会想去在前端动态修改保存一个文件吧,所以这条路不用想就直接跳过。
再想一下既然 data 里的 value 能进去 mapdata ,那么 name 一样也能进去。于是就这么愉快的决定,前端动态传 data 的时候根据需要带上(或不带则还是使用 mapdata 里默认的名称) name 属性。
解决方案:
动态传入 data 的数据结构:
[
{ 'hc-key' : 'cn-sh', 'value' : 113, 'name' : '上海' },
{ 'hc-key' : 'cn-zj', 'value' : 44 }
]
接下来就是改造插件,能够接受我传入的 name 属性,在插件中(highmaps.js)找到 mapdata 数据渲染之前这段:
if (mapData) {
2 ... if (options.allAreas) { data = data || []; // Registered the point ...
if (joinBy[1]) {
each(data, function (point) {
dataUsed.push(point[joinBy[1]]);
});
} // 放这里 o(≧v≦)o // Add those map points ...
dataUsed = '|' + dataUsed.join('|') + '|';
19 ...
}
}
在 「// 放这里 o(≧v≦)o 」 这个位置加入下面这个赋值改写 mapdata 的 name 属性的方法:
each(data, function (dataItem) {
if (dataItem["name"]) {
each(mapData, function (mapdataItem) {
mapdataItem.name = mapdataItem[joinBy[0]] == dataItem[joinBy[0]] ? dataItem.name : mapdataItem.name;
5 });
6 }
});
搞定。
highcharts-Highmaps 动态传入城市名称的更多相关文章
- highcharts 柱状图 动态加载
highcharts柱状图动态加载 (1):导入样式 <script type="text/javascript" src="<%=request.getCo ...
- Python_动态参数、名称空间、作用域、作用域链、加载顺序、函数的嵌套、global、nonlocal
1.动态参数 当实参数量与形参数量相等时,参数传递正常. def func1(a, b, c): pass func1(1, 2, 3) 当实参数量与形参数量不相等时,则会报错. def func1( ...
- ip获取所在城市名称等信息接口,及函数
函数: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 ...
- MyBatis动态传入表名,字段名参数的解决办法---statementType用法
statementType="STATEMENT" 要实现动态传入表名.列名,需要做如下修改 添加属性statementType="STATEMENT" 同时s ...
- Oracle列转行 参数动态传入iBatis使用示例
Oracle行转列 参数动态传入iBatis使用示例 最近做了一个需求,需要获取工作流数据的各个节点的渠道数量信息,各渠道的费用信息~ 之前的需求是只需要获取渠道数据,所以做了渠道兼容,每个渠道数量的 ...
- Mybatis动态传入tableName--非预编译(STATEMENT)
在使用Mybatis过程中,你可以体会到它的强大与灵活之处,由衷的为Mybatis之父点上999个赞!在使用过程中经常会遇到这样一种情况,我查询数据的时候,表名称是动态的从程序中传入的,比如我们通过m ...
- IOS百度地图获取所在的城市名称
笔者的app要实现定位所在省和城市名称,借此总结巩固一下! @interface VenueListVC : BasePageTableViewVC<BMKLocationServiceDele ...
- MyBatis,动态传入表名,字段名的解决办法
转载:http://luoyu-ds.iteye.com/blog/1517607 今天做项目,遇到的问题就是需求修改数据表的记录,而且字段名都不是固定的,也就是说是需要通过参数传入的, 本来这也不是 ...
- 修改OpenSSL默认编译出的动态库文件名称
在 Windows 平台上调用动态链接库 dll 文件时,有两种方式:a) 隐式的加载时链接:使用 *.lib (导入库)文件,在 IDE 的链接器相关设置中加入导入库 lib 文件的名称,或在程序中 ...
随机推荐
- Spring各种注解标签作用详解
@Autowired和@Resource等注解是将Spring容器中的bean注入到属性,而@Component等注解是将bean放入Spring容器中管理. @Autowired spring2.1 ...
- MySQL linux二进制安装
200 ? "200px" : this.width)!important;} --> 介绍 1.创建用户和目录 groupadd mysql useradd -r -g m ...
- HAProxy 基本翻译
REF:http://cbonte.github.io/haproxy-dconv/1.5/configuration.html Proxy configuration can be located ...
- 2014年到期的myeclipse5.5.1注冊码
假设点击Myeclipse的载入项目到server的图标没有反应,这就是MyEclipse过期了,下面是还能用一年的注冊码: subscriber: axin Serial:nLR8ZC-85557 ...
- 关于编译Lambda时报告返回的为void的错误
这个错误的信息是这样的: a lambda that has been specified to have a void return type cannot return a value 报告错误的 ...
- Android仿微信UI布局视图(圆角布局的实现)
圆角button.或布局能够在xml文件里实现,但也能够使用图片直接达到所需的效果,曾经版本号的微信就使用了这样的方法. 实现效果图: watermark/2/text/aHR0cDovL2Js ...
- pcap文件格式
pcap文件格式 pcap文件格式是bpf保存原始数据包的格式,很多软件都在使用,比如tcpdump.wireshark等等,了解pcap格式可以加深对原始数据包的了解,自己也可以手工构造任意的数 ...
- 字符串匹配算法-BM
在用于查找子字符串的算法中,BM(Boyer-Moore)算法是当前有效且应用比较广泛的一种算法,各种文本编辑器的“查找”功能(Ctrl+F),大多采用Boyer-Moore算法.比我们学习的KMP算 ...
- win2003 安装itunes ----iphone4s
工具包下载:http://download.csdn.net/detail/trassion/5852663 在windows 2003 上安装itunes 8.2.0.10 ,会提示 AppleMo ...
- 怎样查看MySql数据库物理文件存放位置
想导出mysql中的数据库文件,死活找不到,网上说在配置文件中有路径,可是我打开我的配置文件,里边的代码全都是注释掉的,没有一句有用的.后来在某一论坛上找到解决方法了,记录下来. 使用如下命令: my ...