PHP+Mysql+jQuery中国地图区域数据统计实例讲解


Posted in PHP onOctober 10, 2015

今天我要给大家介绍在实际应用中,如何把数据载入到地图中。本文结合实例,使用PHP+Mysql+jQuery实现中国地图各省份数据统计效果。

PHP+Mysql+jQuery中国地图区域数据统计实例讲解

本例以统计某产品在各省份的活跃用户数为背景,数据来源于mysql数据库,根据各省份的活跃用户数,分成不同等级,并以不同的背景色显示各省份的活跃程度,符合实际应用需求。

HTML

首先在head部分载入raphael.js库文件和chinamapPath.js路径信息文件。

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript" src="raphael.js"></script> 
<script type="text/javascript" src="chinamapPath.js"></script>

然后在body中需要放置地图的位置放置div#map。

<div id="map"></div>

PHP

我们准备一张mysql表名为mapdata,这张表存储的是产品在各个省份的活跃用户数据。我们使用PHP读取mysql表中的数据,并将读取的数据以json格式输出,并将PHP文件命名为json.php。

$host="localhost";//主机 
$db_user="root";//数据库用户名 
$db_pass="";//密码 
$db_name="demo";//数据库名称 
 
$link=mysql_connect($host,$db_user,$db_pass);//连接数据库 
mysql_select_db($db_name,$link); 
mysql_query("SET names UTF8"); 
 
$sql = "select active from mapdata order by id asc";//查询 
$query = mysql_query($sql); 
 
while($row=mysql_fetch_array($query)){ 
  $arr[] = $row['active']; 
} 
echo json_encode($arr);//JSON格式 
mysql_close($link);//关闭连接

值得注意的是,我们要把mapdata表中各省份的排序与chinamapPath.js文件中的各省份顺序一致,这样才能保证读取的数据能和地图中的省份对应上。

jQuery

首先我们使用jquery的get()方法获取json数据。

$(function(){ 
  $.get("json.php",function(json){ 
    ... 
  }); 
});

获取到json数据后,我们先要将json数据转换为数组,然后我们遍历整个数组,根据json数据中各省份活跃用户数的多少,我们作一个等级区分,这里我将等级分为0-5六个等级,活跃用户数越大背景颜色越深,这样在地图上显示就会一目了然的看出不同省份的数据等级程度。

请看整理好的代码:

$(function(){ 
 $.get("json.php",function(json){//获取数据 
 var data = string2Array(json);//转换数组 
  
 var flag; 
 var arr = new Array();//定义新数组,对应等级 
 for(var i=0;i<data.length;i++){ 
  var d = data[i]; 
  if(d<100){ 
   flag = 0; 
  }else if(d>=100 && d<500){ 
   flag = 1; 
  }else if(d>=500 && d<2000){ 
   flag = 2; 
  }else if(d>=2000 && d<5000){ 
   flag = 3; 
  }else if(d>=5000 && d<10000){ 
   flag = 4; 
  }else{ 
   flag = 5; 
  } 
  arr.push(flag); 
 } 
 //定义颜色 
 var colors = ["#d7eef8","#97d6f5","#3fbeef","#00a2e9","#0084be","#005c86"]; 
  
 //调用绘制地图方法 
 var R = Raphael("map", 600, 500); 
 paintMap(R); 
  
 var textAttr = { 
  "fill": "#000", 
  "font-size": "12px", 
  "cursor": "pointer" 
 }; 
    
 var i=0; 
 for (var state in china) { 
  china[state]['path'].color = Raphael.getColor(0.9); 
  (function (st, state) { 
    
   //获取当前图形的中心坐标 
   var xx = st.getBBox().x + (st.getBBox().width / 2); 
   var yy = st.getBBox().y + (st.getBBox().height / 2); 
    
   //修改部分地图文字偏移坐标 
   switch (china[state]['name']) { 
    case "江苏": 
     xx += 5; 
     yy -= 10; 
     break; 
    case "河北": 
     xx -= 10; 
     yy += 20; 
     break; 
    case "天津": 
     xx += 10; 
     yy += 10; 
     break; 
    case "上海": 
     xx += 10; 
     break; 
    case "广东": 
     yy -= 10; 
     break; 
    case "澳门": 
     yy += 10; 
     break; 
    case "香港": 
     xx += 20; 
     yy += 5; 
     break; 
    case "甘肃": 
     xx -= 40; 
     yy -= 30; 
     break; 
    case "陕西": 
     xx += 5; 
     yy += 10; 
     break; 
    case "内蒙古": 
     xx -= 15; 
     yy += 65; 
     break; 
    default: 
   } 
   //写入文字 
   china[state]['text'] = R.text(xx, yy, china[state]['name']).attr(textAttr); 
    
   var fillcolor = colors[arr[i]];//获取对应的颜色 
    
   st.attr({fill:fillcolor});//填充背景色 
    
   st[0].onmouseover = function () { 
    st.animate({fill: "#fdd", stroke: "#eee"}, 500); 
    china[state]['text'].toFront(); 
    R.safari(); 
   }; 
   st[0].onmouseout = function () { 
    st.animate({fill: fillcolor, stroke: "#eee"}, 500); 
    china[state]['text'].toFront(); 
    R.safari(); 
   }; 
      
   })(china[state]['path'], state); 
   i++; 
 } 
 }); 
});

上述代码中,使用var fillcolor = colors[arr[i]];获取对应等级的颜色值,然后通过st.attr({fill:fillcolor});将颜色填充到对应的省份区块中。此外string2Array()函数是将字符串转换为数组。

function string2Array(string) { 
  eval("var result = " + decodeURI(string)); 
  return result; 
}

通过以上步骤,我们就可以看到一个不同省份不同背景色的中国地图,根据不同颜色可以区分省份之间的活跃用户数差异程度,达到预期目标,小伙伴们希望这篇文章对大家的学习有所帮助。

PHP 相关文章推荐
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
Apr 18 PHP
PHP 日,周,月点击排行统计
Jan 11 PHP
说说PHP的autoLoad自动加载机制
Sep 27 PHP
php另类上传图片的方法(PHP用Socket上传图片)
Oct 30 PHP
php中的字符编码转换函数用法示例
Oct 20 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
Apr 08 PHP
php显示时间常用方法小结
Jun 05 PHP
PHP模板引擎Smarty中的保留变量用法分析
Apr 11 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
Oct 20 PHP
PHP单例模式详解及实例代码
Dec 21 PHP
php实现通过soap调用.Net的WebService asmx文件
Feb 27 PHP
PHP实现本地图片转base64格式并上传
May 29 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
Oct 10 #PHP
刷新PHP缓冲区为你的站点加速
Oct 10 #PHP
PHP和Mysql中转UTF8编码问题汇总
Oct 10 #PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
Oct 10 #PHP
PHP内存使用情况如何获取
Oct 10 #PHP
PHP中Session和Cookie是如何操作的
Oct 10 #PHP
PHP中JSON的应用技巧
Oct 10 #PHP
You might like
一个PHP分页类的代码
2011/05/18 PHP
PHP循环结构实例讲解
2014/02/10 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
2019/05/30 PHP
javascript 对象的定义方法
2007/01/10 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
2013/07/04 Javascript
js简单的弹出框有关闭按钮
2014/05/05 Javascript
jQuery filter函数使用方法
2014/05/19 Javascript
关于JS数组追加数组采用push.apply的问题
2014/06/09 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
2015/11/15 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
jQuery代码实现表格中点击相应行变色功能
2016/05/09 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
vue select组件的使用与禁用实现代码
2018/04/10 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
浅谈Fetch 数据交互方式
2018/12/20 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
python实现视频读取和转化图片
2019/12/10 Python
Keras之自定义损失(loss)函数用法说明
2020/06/10 Python
复古服装:RetroStage
2019/05/10 全球购物
网络方面基础面试题
2012/11/16 面试题
什么是Linux虚拟文件系统VFS
2015/08/25 面试题
为什么Runtime.exec(“ls”)没有任何输出?
2014/10/03 面试题
文化建设工作方案
2014/05/12 职场文书
电子专业自荐信
2014/07/01 职场文书
标准单位租车协议书
2014/09/23 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
2015年高三教学工作总结
2015/07/21 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
创业计划书之密室逃脱
2019/11/08 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers