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 相关文章推荐
在同一窗体中使用PHP来处理多个提交任务
Oct 09 PHP
一个简单的自动发送邮件系统(三)
Oct 09 PHP
配置支持SSI
Nov 25 PHP
PHP 变量的定义方法
Jan 26 PHP
PHP 创建标签云函数代码
May 26 PHP
PHP session会话的安全性分析
Sep 08 PHP
探讨Hessian在PHP中的使用分析
Jun 13 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
May 08 PHP
PHP图片处理之图片旋转和图片翻转实例
Nov 19 PHP
Thinkphp实现自动验证和自动完成
Dec 19 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
Apr 06 PHP
PHP实现简单日历类编写
Aug 28 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生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
如何利用PHP执行.SQL文件
2013/07/05 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
2013/11/07 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
Thinkphp批量更新数据的方法汇总
2016/06/29 PHP
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
后台获取ZTREE选中节点的方法
2015/02/12 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
JS中判断null的方法分析
2016/11/21 Javascript
关于Vue.js一些问题和思考学习笔记(1)
2016/12/02 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
Node.js中环境变量process.env的一些事详解
2017/10/26 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
react+redux仿微信聊天界面
2019/06/21 Javascript
express中static中间件的具体使用方法
2019/10/17 Javascript
深入理解Python中字典的键的使用
2015/08/19 Python
python字符类型的一些方法小结
2016/05/16 Python
深入解析Python中的线程同步方法
2016/06/14 Python
解决python使用open打开文件中文乱码的问题
2017/12/29 Python
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
python石头剪刀布小游戏(三局两胜制)
2021/01/20 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
浅谈pyqt5在QMainWindow中布局的问题
2019/06/21 Python
HTML5录音实践总结(Preact)
2020/05/07 HTML / CSS
法国家具及室内配件店:home24
2017/01/21 全球购物
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
大学生四年生活自我鉴定
2013/11/21 职场文书
主题婚礼策划方案
2014/02/10 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书
2015年幼儿园保育员工作总结
2015/04/23 职场文书
Golang 实现获取当前函数名称和文件行号等操作
2021/05/08 Golang