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 相关文章推荐
生成sessionid和随机密码的例子
Oct 09 PHP
PHP3 safe_mode 失效漏洞
Oct 09 PHP
菜鸟学PHP之Smarty入门
Jan 04 PHP
php设计模式 Interpreter(解释器模式)
Jun 26 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
php之Smarty模板使用方法示例详解
Jul 08 PHP
PHP cURL初始化和执行方法入门级代码
May 28 PHP
JavaScript实现删除电脑的关机键
Jul 26 PHP
PHP的反射机制实例详解
Mar 29 PHP
设定php简写功能的方法
Nov 28 PHP
PHP实现一个按钮点击上传多个图片操作示例
Jan 23 PHP
php封装的page分页类完整实例代码
Feb 01 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
融入意大利的咖啡文化
2021/03/03 咖啡文化
杏林同学录(七)
2006/10/09 PHP
PHP __autoload()方法真的影响性能吗?
2012/03/30 PHP
php-cli简介(不会Shell语言一样用Shell)
2013/06/03 PHP
async和DOM Script文件加载比较
2014/07/20 PHP
使用PHP uniqid函数生成唯一ID
2015/11/18 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
location.href语句与火狐不兼容的问题
2010/07/04 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/06 Javascript
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
jQuery技巧总结
2011/01/01 Javascript
Jquery 模拟用户点击超链接或者按钮的方法
2013/10/25 Javascript
js 鼠标移动显示图片的简单实例
2013/12/25 Javascript
JS实现选中当前菜单后高亮显示的导航条效果
2015/10/15 Javascript
微信小程序实战之仿android fragment可滑动底部导航栏(4)
2020/04/16 Javascript
基于react后端渲染模板引擎noox发布使用
2018/01/11 Javascript
webpack热模块替换(HMR)/热更新的方法
2018/04/05 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
2019/08/21 Javascript
小程序最新获取用户昵称和头像的方法总结
2019/09/23 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
Python OpenCV调用摄像头检测人脸并截图
2020/08/20 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
2020/02/06 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
编写python代码实现简单抽奖器
2020/10/20 Python
Canvas实现贝赛尔曲线轨迹动画的示例代码
2019/04/25 HTML / CSS
伯利陶器:Burleigh Pottery
2018/01/03 全球购物
小学毕业典礼主持词
2014/03/27 职场文书
社会实践的活动方案
2014/08/22 职场文书
赔偿协议书
2015/01/27 职场文书
材料采购员岗位职责
2015/04/03 职场文书
导游词之河北野三坡
2019/12/11 职场文书
SQL SERVER中常用日期函数的具体使用
2021/04/08 SQL Server
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL