PHP+Mysql+jQuery中國地圖地區資料統計執行個體講解_php執行個體

來源:互聯網
上載者:User

今天我要給大家介紹在實際應用中,如何把資料載入到地圖中。本文結合執行個體,使用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; }

通過以上步驟,我們就可以看到一個不同省份不同背景色的中國地圖,根據不同顏色可以區分省份之間的活躍使用者數差異程度,達到預期目標,小夥伴們希望這篇文章對大家的學習有所協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.