search
Homephp教程php手册PHP+Mysql+jQuery实现中国地图区域数据统计

使用raphael.js绘制中国地图 》文章中,我给大家介绍了如何使用raphael.js绘制中国地图,今天我要给大家介绍在实际应用中,如何把数据载入到地图中。本文结合实例,使用PHPMysqljQuery实现中国地图各省份数据统计效果。 本例以统计某产品在各省份的活跃用户

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

PHP+Mysql+jQuery实现中国地图区域数据统计

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

HTML

和本站上篇文章《使用raphael.js绘制中国地图》一样,首先在head部分载入raphael.js库文件和chinamapPath.js路径信息文件。

Html代码 PHP+Mysql+jQuery实现中国地图区域数据统计 PHP+Mysql+jQuery实现中国地图区域数据统计PHP+Mysql+jQuery实现中国地图区域数据统计

  1. script type="text/javascript" src="jquery.js">script>    
  2. script type="text/javascript" src="raphael.js">script>    
  3. script type="text/javascript" src="chinamapPath.js">script>  

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

Html代码 PHP+Mysql+jQuery实现中国地图区域数据统计 PHP+Mysql+jQuery实现中国地图区域数据统计PHP+Mysql+jQuery实现中国地图区域数据统计

  1. div id="map">div>   

 PHP

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

[php] view plaincopy

  1. $host="localhost";//主机   
  2. $db_user="root";//数据库用户名   
  3. $db_pass="";//密码   
  4. $db_name="demo";//数据库名称   
  5.    
  6. $link=mysql_connect($host,$db_user,$db_pass);//连接数据库   
  7. mysql_select_db($db_name,$link);   
  8. mysql_query("SET names UTF8");   
  9.    
  10. $sql = "select active from mapdata order by id asc";//查询   
  11. $query = mysql_query($sql);   
  12.    
  13. while($row=mysql_fetch_array($query)){   
  14.     $arr[] = $row['active'];   
  15. }   
  16. echo json_encode($arr);//JSON格式   
  17. mysql_close($link);//关闭连接   

 

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

jQuery

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

Js代码 PHP+Mysql+jQuery实现中国地图区域数据统计 PHP+Mysql+jQuery实现中国地图区域数据统计PHP+Mysql+jQuery实现中国地图区域数据统计

  1. $(function(){    
  2.     $.get("json.php",function(json){    
  3.         ...    
  4.     });    
  5. });  

 

获取到json数据后,我们先要将json数据转换为数组,然后我们遍历整个数组,根据json数据中各省份活跃用户数的多少,我们作一个等级区分,这里我将等级分为0-5六个等级,活跃用户数越大背景颜色越深,这样在地图上显示就会一目了然的看出不同省份的数据等级程度。绘制地图的时候和本站上篇文章《使用raphael.js绘制中国地图》介绍的基本一样,不同之处在于给每个不同省份填充对应的颜色,请看整理好的代码:

Js代码 PHP+Mysql+jQuery实现中国地图区域数据统计 PHP+Mysql+jQuery实现中国地图区域数据统计PHP+Mysql+jQuery实现中国地图区域数据统计

  1. $(function(){    
  2.     $.get("json.php",function(json){//获取数据    
  3.     var data = string2Array(json);//转换数组    
  4.         
  5.     var flag;    
  6.     var arr = new Array();//定义新数组,对应等级    
  7.     for(var i=0;i
  8.         var d = data[i];    
  9.         if(d
  10.             flag = 0;    
  11.         }else if(d>=100 && d
  12.             flag = 1;    
  13.         }else if(d>=500 && d
  14.             flag = 2;    
  15.         }else if(d>=2000 && d
  16.             flag = 3;    
  17.         }else if(d>=5000 && d
  18.             flag = 4;    
  19.         }else{    
  20.             flag = 5;    
  21.         }    
  22.         arr.push(flag);    
  23.     }    
  24.     //定义颜色    
  25.     var colors = ["#d7eef8","#97d6f5","#3fbeef","#00a2e9","#0084be","#005c86"];    
  26.         
  27.     //调用绘制地图方法    
  28.     var R = Raphael("map", 600, 500);    
  29.     paintMap(R);    
  30.         
  31.     var textAttr = {    
  32.         "fill""#000",    
  33.         "font-size""12px",    
  34.         "cursor""pointer"    
  35.     };    
  36.                 
  37.     var i=0;    
  38.     for (var state in china) {    
  39.         china[state]['path'].color = Raphael.getColor(0.9);    
  40.         (function (st, state) {    
  41.                 
  42.             //获取当前图形的中心坐标    
  43.             var xx = st.getBBox().x + (st.getBBox().width / 2);    
  44.             var yy = st.getBBox().y + (st.getBBox().height / 2);    
  45.                 
  46.             //修改部分地图文字偏移坐标    
  47.             switch (china[state]['name']) {    
  48.                 case "江苏":    
  49.                     xx += 5;    
  50.                     yy -= 10;    
  51.                     break;    
  52.                 case "河北":    
  53.                     xx -= 10;    
  54.                     yy += 20;    
  55.                     break;    
  56.                 case "天津":    
  57.                     xx += 10;    
  58.                     yy += 10;    
  59.                     break;    
  60.                 case "上海":    
  61.                     xx += 10;    
  62.                     break;    
  63.                 case "广东":    
  64.                     yy -= 10;    
  65.                     break;    
  66.                 case "澳门":    
  67.                     yy += 10;    
  68.                     break;    
  69.                 case "香港":    
  70.                     xx += 20;    
  71.                     yy += 5;    
  72.                     break;    
  73.                 case "甘肃":    
  74.                     xx -= 40;    
  75.                     yy -= 30;    
  76.                     break;    
  77.                 case "陕西":    
  78.                     xx += 5;    
  79.                     yy += 10;    
  80.                     break;    
  81.                 case "内蒙古":    
  82.                     xx -= 15;    
  83.                     yy += 65;    
  84.                     break;    
  85.                 default:    
  86.             }    
  87.             //写入文字    
  88.             china[state]['text'] = R.text(xx, yy, china[state]['name']).attr(textAttr);    
  89.                 
  90.             var fillcolor = colors[arr[i]];//获取对应的颜色    
  91.                 
  92.             st.attr({fill:fillcolor});//填充背景色    
  93.                 
  94.             st[0].onmouseover = function () {    
  95.                 st.animate({fill: "#fdd", stroke: "#eee"}, 500);    
  96.                 china[state]['text'].toFront();    
  97.                 R.safari();    
  98.             };    
  99.             st[0].onmouseout = function () {    
  100.                 st.animate({fill: fillcolor, stroke: "#eee"}, 500);    
  101.                 china[state]['text'].toFront();    
  102.                 R.safari();    
  103.             };    
  104.                         
  105.          })(china[state]['path'], state);    
  106.          i++;    
  107.     }    
  108.     });    
  109. });   

 

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

Js代码

  1. function string2Array(string) {     
  2.     eval("var result = " + decodeURI(string));     
  3.     return result;     
  4. }   

 

这样,我们可以看到一个不同省份不同背景色的中国地图,根据不同颜色可以区分省份之间的活跃用户数差异程度,达到预期目标。

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
如何在PHP中实现SEO优化如何在PHP中实现SEO优化May 20, 2023 pm 01:30 PM

随着互联网的发展,SEO(SearchEngineOptimization,搜索引擎优化)已经成为了网站优化的重要一环。如果您想要使您的PHP网站在搜索引擎中获得更高的排名,就需要对SEO的内容有一定的了解了。本文将会介绍如何在PHP中实现SEO优化,内容包括网站结构优化、网页内容优化、外部链接优化,以及其他相关的优化技巧。一、网站结构优化网站结构对于S

如何在PHP中实现ERP系统如何在PHP中实现ERP系统May 20, 2023 pm 06:21 PM

随着电子商务和企业管理的发展,许多企业开始寻找更好的方法来处理其日常业务流程。ERP系统是一种能够整合企业各种业务流程的软件工具。它提供了全面的功能,包括生产、销售、采购、库存、财务等方面,帮助企业提高效率、控制成本和提高客户满意度。而在PHP编程语言中,也能够实现ERP系统,这就需要我们掌握一些基本的知识和技术。下面,我们将深入探讨如何在PHP中实现ERP

在PHP中如何实现物联网开发?在PHP中如何实现物联网开发?May 12, 2023 am 11:51 AM

随着物联网技术的发展和普及,越来越多的应用场景需要使用PHP语言进行物联网开发。PHP作为一种广泛应用于Web开发的脚本语言,它的易学易用、开发速度快、可扩展性强等特点,使其成为开发物联网应用的一种优秀选择。本文将介绍在PHP中实现物联网开发的常用技术和方法。一、传输协议和数据格式物联网设备通常使用TCP/IP或UDP协议进行数据传输,而HTTP协议是一个优

如何在PHP中实现CRM系统如何在PHP中实现CRM系统May 20, 2023 pm 12:31 PM

随着企业的发展,客户管理变得越来越重要。为了提高客户满意度和忠诚度,越来越多的企业采用客户关系管理系统(CRM)来帮助其管理客户关系。而PHP是一种流行的编程语言,因其简单易学、灵活和强大而被广泛应用于Web开发。那么,如何在PHP中实现CRM系统呢?本文将为您介绍实现CRM系统的步骤和技巧。Step1:需求分析在开始开发CRM系统之前,您需要进行需求分析

如何在PHP中实现轮播图如何在PHP中实现轮播图May 22, 2023 am 08:25 AM

随着互联网的发展,轮播图已经成为了网页设计中必不可少的一部分。在很多网页中,轮播图经常被用作展示企业文化、最新产品或是推广活动等场景。本篇文章将会分享如何使用PHP来实现轮播图的功能。一、轮播图的概念轮播图是网页中一种常见的视觉效果,一般由多个图片组成,在页面中自动或手动进行切换,展示多个内容。可以添加符合业务要求的动画效果,有助于引起用户的关注和提高网站的

如何在PHP中实现验证码如何在PHP中实现验证码May 20, 2023 am 11:31 AM

随着互联网的不断发展,越来越多的网站需要使用验证码来保证安全性。验证码是一种借助人类能力而无法被计算机破解的认证技术,广泛应用于网站注册、登录、找回密码等功能中。下面将介绍如何使用PHP实现验证码功能。一、生成验证码图片验证码图片的生成是验证码功能的核心,需要生成一个随机字符,并将其渲染为图像展示给用户。在PHP中,可以使用GD库来生成图片。GD库是一种用于

在PHP中如何实现智能合约?在PHP中如何实现智能合约?May 12, 2023 am 08:09 AM

智能合约(SmartContract)是一种基于区块链的自动化交易程序,可以实现自动化执行、验证和执行交易。智能合约可以减少交易中的人为干扰,提高交易的安全性和效率。在不同的区块链中,智能合约的实现方式略有不同。本文将介绍在PHP中如何实现智能合约。PHP是一种广泛使用的编程语言,特别适合Web开发。PHP有着成熟的开源生态系统,以及许多可靠的框架和库。在

PHP微信开发:如何实现JSAPI支付PHP微信开发:如何实现JSAPI支付May 13, 2023 pm 07:21 PM

随着移动互联网的发展,微信已经成为了人们生活中不可或缺的一部分,越来越多的商家选择在微信平台上开展业务。实现微信支付功能对于商家来说是非常必要的。本文将介绍如何使用PHP实现JSAPI支付。首先,我们需要了解什么是JSAPI支付。JSAPI是微信公众号支付功能的一种,通过JS调用微信支付接口实现支付。JSAPI支付的优点在于用户只需要在微信中进行支付,不需要

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),