PHPで様々な地図を利用する

(1/1)
前回に引き続き、PHP を使ってインターネット上の地図サービスを利用するプログラムを紹介する。
space
今回紹介するプログラムは、前回のMapFanWebに加え、国土地理院2 万 5 千分の 1 地図Mapion 標準MapionBBの 4種類から表示したい地図を選べるようになっている。 なお、国土地理院2 万 5 千分の 1 地図を選択した場合に限り、指定した縮尺は無視される。

サンプル・プログラム

プログラムを実行する

ダウンロード(PHP4/5共用)

サンプル・プログラムの解説

0099: //地図サイトへジャンプ
0100: else {
0101:     preg_match("/E([0-9]+[0-9]?[0-9]?)(\.)?([0-9]+[0-9]?)(\.)?([0-9]?[0-9]?)(\.)?([0-9]*)N([0-9]+[0-9]?)(\.)?([0-9]+[0-9]?)(\.)?([0-9]?[0-9]?)(\.)?([0-9]*)/", $map$arr);      //緯度経度の値を分解
0102:     //MapFan のZM とMapionBBのsclの対応表
0103:     $mapion = array(
0104:         500000, 500000, 500000, 250000, 250000,
0105:          70000,  70000,  70000,  25000,  25000,
0106:          25000,  10000,  10000,  10000,  10000);
0107: 
0108:     switch ($type) {
0109:         case 1:      //MapFanWeb
0110:             $url = "http://www.mapfan.com/index.cgi?MAP=$map&ZM=$zm";
0111:             break;
0112:         case 2:      //国土地理院 2万5千分の1
0113:             $l = sprintf("%3d%2d%2d.%d", $arr[1]$arr[3]$arr[5]$arr[7]);       //経度
0114:             $b = sprintf("%2d%2d%2d.%d", $arr[8]$arr[10]$arr[12]$arr[14]);    //緯度
0115:             $url = "http://watchizu.gsi.go.jp/watchizu.aspx?b=$b&l=$l&r=2";
0116:             break;
0117:         case 3:      //Mapion 標準
0118:             $zm = $mapion[$zm];
0119:             $el = sprintf("%d/%d/%d.%d", $arr[1]$arr[3]$arr[5]$arr[7]);        //経度
0120:             $nl = sprintf("%d/%d/%d.%d", $arr[8]$arr[10]$arr[12]$arr[14]); //緯度
0121:             $url = "http://www.mapion.co.jp/c/f?uc=1&grp=all&el=$el&nl=$nl&uc=1&scl=$zm&bid=Mlink";
0122:             break;
0123:         case 4:      //Mapion BB
0124:             $zm = $mapion[$zm];
0125:             $el = sprintf("%d/%d/%d.%d", $arr[1]$arr[3]$arr[5]$arr[7]);        //経度
0126:             $nl = sprintf("%d/%d/%d.%d", $arr[8]$arr[10]$arr[12]$arr[14]); //緯度
0127:             $url = "http://www.mapion.co.jp/c/f?el=$el&nl=$nl&uc=1&grp=MapionBB&scl=$zm";
0128:             break;
0129:     }
0130:     header("Location: {$url}");
0131: }
0132: }

このサンプル・プログラムは、URL から変数を指定することで単独運用が可能な構造になっている。
たとえば URL に
viewmap2.php?map=E139.33.50.1N35.41.58.1&zm=4&type=4
と指定すれば、MapionBB で、東経139 度 33 分 50.1秒、北緯35 度 41 分 58.1秒を中心とした地図を縮尺 7 万 5 千分の 1 で表示することができる。変数 map と zm は MapFanWeb と同じ形式である。type は地図の種類。1 がMapFanWeb、2 が国土地理院2 万 5 千分の 1 地図、3 がMapion 標準、4 がMapionBBである。
space
MapFanWeb と他の地図では緯度経度の指定の方法が異なるので、PHP プログラムによって変換している。
まず、関数  preg_match  を用いて、MapFanWeb 形式の緯度・経度値を分解し、変数$arr に代入する。次に、関数  preg_match  によって、国土地理院や Mapion の緯度・経度書式に変換している。
縮尺の考え方は、MapWebFan と Mapion でまったく異なるので、変換テーブルで処理している。選択した場合に限り、指定した縮尺は無視される。

参考書籍

参考サイト

(この項おわり)
header