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程序员编程注意事项
Apr 10 PHP
PHP分多步骤填写发布信息的简单方法实例代码
Sep 23 PHP
PHP 万年历实现代码
Oct 18 PHP
php中生成随机密码的自定义函数代码
Oct 21 PHP
Thinkphp中import的几个用法详细介绍
Jul 02 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
Sep 23 PHP
PHP实现图片裁剪、添加水印效果代码
Oct 01 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
May 06 PHP
24条货真价实的PHP代码优化技巧
Jul 28 PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 PHP
thinkPHP商城公告功能开发问题分析
Dec 01 PHP
laravel 出现command not found问题的解决方案
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
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
PHP 无限分类三种方式 非函数的递归调用!
2011/08/26 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
php如何实现只替换一次或N次
2015/10/29 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
prototype class详解
2006/09/07 Javascript
深入认识JavaScript中的函数
2007/01/22 Javascript
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
JavaScript的21条基本知识点
2014/03/04 Javascript
jQuery Masonry瀑布流插件使用详解
2014/11/17 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
Vue-Router进阶之滚动行为详解
2017/09/13 Javascript
在vue-cli项目中使用bootstrap的方法示例
2018/04/21 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
2018/05/26 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
简单实现vue中的依赖收集与响应的方法
2019/02/18 Javascript
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
Python实现的爬取百度文库功能示例
2019/02/16 Python
Python学习笔记之Django创建第一个数据库模型的方法
2019/08/07 Python
python的链表基础知识点
2020/09/13 Python
HTML5在canvas中绘制复杂形状附效果截图
2014/06/23 HTML / CSS
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
澳大利亚汽车零部件、音响及配件超市:Automotive Superstore
2018/06/19 全球购物
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
学校联谊活动方案
2014/02/15 职场文书
公司保洁员岗位职责
2015/02/13 职场文书
学校运动会感想
2015/08/10 职场文书
市级三好生竞选稿
2015/11/21 职场文书