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 相关文章推荐
消息持续发送的完整例子
Oct 09 PHP
PHP 采集获取指定网址的内容
Jan 05 PHP
PHP用GD库生成高质量的缩略图片
Mar 09 PHP
php导出word文档与excel电子表格的简单示例代码
Mar 08 PHP
php页面缓存方法小结
Jan 10 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
Nov 14 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
thinkPHP框架中执行原生SQL语句的方法
Oct 25 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
PHP日志LOG类定义与用法示例
Sep 06 PHP
Yii2 queue的队列使用详解
Jul 19 PHP
laravel清除视图缓存的代码
Oct 23 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
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
php可应用于面包屑导航的递归寻找家谱树实现方法
2015/02/02 PHP
php中实现获取随机数组列表的自定义函数
2015/04/02 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
js 提交和设置表单的值
2008/12/19 Javascript
javaScript 利用闭包模拟对象的私有属性
2011/12/29 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
原生js获取元素样式的简单方法
2016/08/06 Javascript
jQuery模拟下拉框选择对应菜单的内容
2017/03/07 Javascript
weex slider实现滑动底部导航功能
2017/08/28 Javascript
Angularjs中date过滤器失效的问题及解决方法
2018/07/06 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
JavaScript进制转换实现方法解析
2020/01/18 Javascript
vuex页面刷新导致数据丢失的解决方案
2020/12/10 Vue.js
详解Python中的正则表达式的用法
2015/04/09 Python
Python实现自动添加脚本头信息的示例代码
2016/09/02 Python
Python简单遍历字典及删除元素的方法
2016/09/18 Python
python数据清洗系列之字符串处理详解
2017/02/12 Python
Python入门_条件控制(详解)
2017/05/16 Python
python绘制规则网络图形实例
2019/12/09 Python
css3 media 响应式布局的简单实例
2016/08/03 HTML / CSS
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
NBA德国官方网上商店:NBA Store德国
2018/04/13 全球购物
杭州龙健科技笔试题.net部分笔试题
2016/01/24 面试题
学校运动会开幕演讲稿
2014/01/04 职场文书
教师档案管理制度
2014/01/23 职场文书
《生命 生命》教学反思
2014/04/19 职场文书
2014年实习期工作总结
2014/11/27 职场文书
上班迟到检讨书范文
2015/05/06 职场文书
运动会运动员赞词
2015/07/22 职场文书
毕业班班主任工作总结2015
2015/07/23 职场文书
某学校的2019年度工作报告范本
2019/10/11 职场文书