ホームページ  >  記事  >  バックエンド開発  >  PHP はマップ エリア データ統計を実装します - Ajax データの読み込み_PHP チュートリアル

PHP はマップ エリア データ統計を実装します - Ajax データの読み込み_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:44:201191ブラウズ

この例は、各州の特定の製品のアクティブ ユーザー数のカウントに基づいており、データは各州のアクティブ ユーザー数に従って、さまざまなレベルとアクティビティ レベルに分けられます。各州のデータは、実際のアプリケーション要件に合わせて異なる背景色で表示されます。

効果は以下の通りです

HTML

このサイトの以前の記事でraphael.jsを使用して中国の地図を描画したのと同じように、最初にraphael.jsライブラリファイルとchimamapPath.jsパス情報ファイルをheadセクションに読み込みます。

PHP
コードは次のとおりです コードをコピー



次に、マップを配置する必要がある本文内の場所に div#map を配置します。

mapdata という名前の mysql テーブルを用意します。このテーブルには各州の製品のアクティブ ユーザー データが保存されます。 PHP を使用して mysql テーブルのデータを読み取り、読み取ったデータを json 形式で出力し、PHP ファイルに json.php という名前を付けます。

コードは次のとおりです$host="localhost";//ホスト まず、jqueryのget()メソッドを使用してjsonデータを取得します。
コードをコピー
$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 名は UTF8");
$sql = "id asc によるマップデータ順序からアクティブを選択";//クエリ
$query = mysql_query($sql);
while($row=mysql_fetch_array($query)){
$arr[] = $row['アクティブ']
; }
echo json_encode($arr);//JSON形式
mysql_close($link);//接続を閉じます




読み取られたデータが地図内の州に対応できるように、mapdata テーブル内の州を chimamapPath.js ファイル内の州と同じ順序で並べ替える必要があることに注意してください。

jQuery


コードは次のとおりです

コードをコピー $.get("json.php",function(json){ … }); });tru​​e
$(関数(){


json データを取得した後、まず json データを配列に変換し、json データ内の各州のアクティブ ユーザー数に応じて、グレードを分けます。 0 ~ 5 のレベルに分けられます。アクティブ ユーザーの数が多いほど、背景色が濃くなり、マップ上に表示されると、さまざまな地域のデータ レベルがはっきりとわかります。地図を描くときは、このサイトの以前の記事で raphael.js を使用して中国の地図を描く方法の紹介と基本的に同じです。異なる点は、各州が対応する色で塗りつぶされることです。コード:

コードをコピー
コードは次のとおりです コードをコピー
$(関数(){
$.get("json.php",function(json){//データを取得する
var data = string2Array(json) //配列を変換します
;
変数フラグ
var arr = new Array();//レベルに対応する新しい配列を定義します
for(var i=0;i var d = データ[i]; If(d フラグ = 0; }else if(d>=100 && d フラグ = 1; }else if(d>=500 && d フラグ = 2; }else if(d>=2000 && d フラグ = 3; }else if(d>=5000 && d フラグ = 4; }その他{
フラグ = 5; }
arr.push(フラグ); }
//色を定義します
var Colors = ["#d7eef8","#97d6f5","#3fbeef","#00a2e9","#0084be","#005c86"];
//地図描画メソッドを呼び出す
var R = ラファエル("マップ", 600, 500); ペイントマップ(R);
var textAttr = {
"fill": "#000"、
"font-size": "12px",
"カーソル": "ポインタ"
};                                                 変数 i=0; for (中国の州) {
china[state]['path'].color = Raphael.getColor(0.9); (関数 (st, 状態) {
                                                // 現在のグラフィックの中心座標を取得します
var xx = st.getBBox().x + (st.getBBox().width / 2); var yy = st.getBBox().y + (st.getBBox().height / 2);                                                 //一部の地図テキストのオフセット座標を変更します
switch (中国[州]['名前']) {
ケース「江蘇省」:
xx += 5; yy -= 10; 休憩
ケース「河北」:
xx -= 10; yy += 20; 休憩
ケース「天津」:
xx += 10; yy += 10; 休憩
ケース「上海」:
xx += 10; 休憩
ケース「広東省」:
yy -= 10; 休憩
ケース「マカオ」:
yy += 10; 休憩
ケース「香港」:
xx += 20; yy += 5; 休憩
ケース「ガンス」:
xx -= 40; yy -= 30; 休憩
ケース「陝西省」:
xx += 5; yy += 10; 休憩
ケース「内モンゴル」:
xx -= 15; yy += 65; 休憩
デフォルト:
                                                                             //テキストを書く
中国[州]['テキスト'] = R.text(xx, yy, 中国[州]['名前']).attr(textAttr);                                                 var fillcolor = Colors[arr[i]];// 対応する色を取得します
                                                st.attr({fill:fillcolor});//背景色を塗りつぶす
                                                st[0].onmouseover = function () {
st.animate({fill: "#fdd", ストローク: "#eee"}, 500);china[state]['text'].toFront(); R.safari();
st[0].onmouseout = function () {
st.animate({fill: fillcolor, ストローク: "#eee"}, 500); china[state]['text'].toFront(); R.safari();
                                                               })(中国[州]['パス'], 州
);
; }
}); });


上記のコードでは、var fillcolor = Colors[arr[i]]; を使用して対応するレベルの色の値を取得し、st.attr({fill:fillcolor}); を通じて対応する州ブロックに色を塗りつぶします。 。さらに、string2Array() 関数は文字列を配列に変換します。



コードは次のとおりです

関数 string2Array(string) { このようにして、中国の地図を各省ごとに異なる背景色で見ることができ、異なる色に従って、各省間のアクティブユーザー数の違いを区別し、期待される目標を達成することができます。
eval("var result = " + decodeURI(string)); 結果を返します。 }


ダウンロードアドレスの例: http://file.bKjia.c0m/upload/2013/12/chinamap-data.zip

http://www.bkjia.com/PHPjc/633107.html


www.bkjia.com

http://www.bkjia.com/PHPjc/633107.html

技術記事

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。