highcharts-Highmaps 动态传入城市名称

做前端按地区(地图)分布监控数据展示用了 HIGHMAPS JAVASCRIPT MAPS 控件,很好很强大。

基础实现是这样的:调用插件动态传入需要展示的数据(data),插件会在地图数据(mapdata)中找到对应的区域,把值丢进去,然后在页面上渲染展示带有数据的区域数据分布地图。

mapdata 数据结构(已简化):

1 [
2     {‘hc-key‘ : ‘cn-sh‘, ‘name‘ : ‘上海‘},
3     {‘hc-key‘ : ‘cn-zj‘, ‘name‘ : ‘浙江‘}
4 ]

data 数据结构:

1 [
2     { ‘hc-key‘ : ‘cn-sh‘, ‘value‘ : 113 },
3     { ‘hc-key‘ : ‘cn-zj‘, ‘value‘ : 44 }
4 ]

(这里值得注意的是,value 值不能带上引号如:‘value‘ : ‘44‘ 就会导致插件报错无法渲染。)

插件通过 data 里的这个 hc-key 值去 mapdata (该数据存放在一个 js 文件内) 捞对应的区域信息详情,其中就包括地区的中文名称信息如:上海。就是这里出了一点小麻烦,我的中文名称可能会发生变动,譬如有时候是「上海」,但可能下一次下下次又会是 「上海 1」 ,「上海 2」。

常规思路是直接改数据源,重新加载数据源就好了。可是这个 mapdata 如我上面括号备注所说,是存在文件里的,那么一个人必须是疯了才会想去在前端动态修改保存一个文件吧,所以这条路不用想就直接跳过。
再想一下既然 data 里的 value 能进去 mapdata ,那么 name 一样也能进去。于是就这么愉快的决定,前端动态传 data 的时候根据需要带上(或不带则还是使用 mapdata 里默认的名称) name 属性。

解决方案:

动态传入 data 的数据结构:

1 [
2     { ‘hc-key‘ : ‘cn-sh‘, ‘value‘ : 113, ‘name‘ : ‘上海‘ },
3     { ‘hc-key‘ : ‘cn-zj‘, ‘value‘ : 44 }
4 ]

接下来就是改造插件,能够接受我传入的 name 属性,在插件中(highmaps.js)找到 mapdata 数据渲染之前这段:

 1    if (mapData) {
 2      ...
 3
 4                 if (options.allAreas) {
 5
 6                     data = data || [];
 7
 8                     // Registered the point ...
 9                     if (joinBy[1]) {
10                         each(data, function (point) {
11                             dataUsed.push(point[joinBy[1]]);
12                         });
13                     }
14
15                     // 放这里 o(≧v≦)o
16
17                     // Add those map points ...
18                     dataUsed = ‘|‘ + dataUsed.join(‘|‘) + ‘|‘;
19            ...
20                 }
21             }

在 「// 放这里 o(≧v≦)o 」 这个位置加入下面这个赋值改写 mapdata 的 name 属性的方法:

1 each(data, function (dataItem) {
2   if (dataItem["name"]) {
3     each(mapData, function (mapdataItem) {
4       mapdataItem.name = mapdataItem[joinBy[0]] == dataItem[joinBy[0]] ? dataItem.name : mapdataItem.name;
5    });
6  }
7 });

搞定。

highcharts-Highmaps 动态传入城市名称,布布扣,bubuko.com

时间: 2024-10-26 09:09:20

highcharts-Highmaps 动态传入城市名称的相关文章

highcharts 柱状图 动态加载

highcharts柱状图动态加载 (1):导入样式 <script type="text/javascript" src="<%=request.getContextPath()%>/boot_js/jquery/jquery-1.8.3.min.js"></script><script type="text/javascript" src="<%=request.getContextP

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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 function https_request($url,$data = null){     $curl = curl_init();          curl_setopt($cur

后台接口,动态生成测试用例名称,测试用例请求数据

做自动化测试刚入门的时候,我们一般用Jemter配置请求url/port,请求方式,然后编写一条条case, 将对应的case中创建符合的请求body_sample 一般的后台接口,需要考虑的无非是如下: 正确的请求,验证数据库中对应的数据被创建/更新,验证Response中返回码匹配 异常的请求,对应下面的图 必传字段,一一验证,请求传入的必传字段1未传请求传入的必传字段2未传... 必传字段传空,一一验证,请求传入的必传字段1传空,验证返回xxx请求传入的必传字段2传空,验证返回xxx 请求

美国地名大全(美国城市名称英文、中文)

近期在做某个项目要用到美国的地名,上网查了一圈都没有比較具体的.专业的,仅仅好自己复制了一个大概有500多个城市.城镇的英文,用谷歌翻译一下,结果例如以下: 谷歌翻译结果,非常多是错误的,边用边改 http://blog.csdn.net/aminfo/article/details/7858403 英文 中文 Birmingham 伯明翰 Montgomery 蒙哥马利 Mobile 莫比尔县 Anniston 安尼斯顿 Gadsden 加兹登 Phoenix 凤凰城 Scottsdale 斯

RF--执行案例时动态传入参数方法

通过在运行界面的设定-v 参数值来动态传入:

修改OpenSSL默认编译出的动态库文件名称

在 Windows 平台上调用动态链接库 dll 文件时,有两种方式:a) 隐式的加载时链接:使用 *.lib (导入库)文件,在 IDE 的链接器相关设置中加入导入库 lib 文件的名称,或在程序中加入预编译指令 #pragma comment (lib,”*.lib”).b) 显式的运行时链接.不使用 *.lib (导入库)文件,使用 Load Library(),GetProcAddress() 函数来加载动态库中的函数.要注意的是在导入库 lib 文件内部包含了其对应 dll 文件的名称

ios项目开发(天气预报项目):通过经纬度获取当前城市名称

 1 . 在项目里添加 CoreLocation.framework 2 .在 .h 文件输入如下: 1.#import <CoreLocation/CLLocation.h> 2.#import <CoreLocation/CLLocationManager.h> 3.#import <coreLocation/CLGeocoder.h> 4.#import <coreLocation/CLPlacemark.h> 3 . 在 .m文件输入如下: 1.

能否在函数内动态获取函数名称 ?(亲测,居然真的可以)

C++ 可以用宏定义 __FUNCTION__ 或__func__ 获取所在的函数.方便调试. #define LOG(fmt, args...) printf("%s:"fmt,__FUNCTION__,##args) Delphi是否也能呢 ?Delphi 如何动态获取函数名称,而不是每个函数log都打一遍函数名. C++ Builder 是否像 C++ 也提供这种支持 ? 可以通过一些调试信息获取,请研究jclDebug.ProcByLevel 32 位系统不错.64 位系统的获

IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息

IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息 /**当获取到定位的坐标后,回调函数*/ - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation{ BMKCoordinateRegion region; region.center.latitude  = userLocation.location.coordinate.latitude; region.center.longitude = userLoca