サンプル・プログラムの実行例

サンプル・プログラムのダウンロード
viewmap2.php | サンプル・プログラム本体 |
サンプル・プログラムの解説
0264: // メイン・プログラム ======================================================
0265: $longlat = getParam('longlat', FALSE, DEF_LONGLAT);
0266: $zm = getParam('zm', FALSE, DEF_ZM);
0267: $type = getParam('type', FALSE, DEF_TYPE);
0268:
0269: //verification
0270: $errmsg = '';
0271: $f1 = 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]*/", $longlat);
0272: $f2 = ($zm >= 2) && ($zm <= 12);
0273: $f3 = ($type >= 1) && ($type <= 4);
0274: if ($f1 == FALSE) $errmsg = '経度・緯度の値が間違っています';
0275: else if ($f2 == FALSE) $errmsg = '縮尺は2以上12以下の整数です';
0276: else if ($f3 == FALSE) $errmsg = '地図の種類が間違っています';
0277:
0278: //地図サイトへジャンプ
0279: if (isButton('exec') && ($errmsg == '')) {
0280: //緯度経度の値を分解
0281: 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]*)/", $longlat, $arr);
0282:
0283: switch ($type) {
0284: case 1: //MapFanWeb
0285: $url = "https://www.mapfan.com/index.cgi?MAP={$longlat}&ZM={$zm}";
0286: break;
0287: case 2: //Mapion
0288: $el = sprintf("%f", $arr[1] + $arr[3] / 60 + $arr[5] / 3600 + $arr[7] / 36000); //経度
0289: $nl = sprintf('%f', $arr[8] + $arr[10] / 60 + $arr[12] / 3600 + $arr[14] / 36000); //緯度
0290: $url = "https://www.mapion.co.jp/m2/{$nl},{$el},{$zm}";
0291: break;
0292: case 3: //国土地理院
0293: $el = sprintf("%f", $arr[1] + $arr[3] / 60 + $arr[5] / 3600 + $arr[7] / 36000); //経度
0294: $nl = sprintf('%f', $arr[8] + $arr[10] / 60 + $arr[12] / 3600 + $arr[14] / 36000); //緯度
0295: $url = "https://maps.gsi.go.jp/#{$zm}/{$nl}/{$el}";
0296: break;
0297: }
0298: //地図表示
0299: header("Location: {$url}");
0300: exit(0);
0301: }
0302:
0303: $HtmlBody = makeCommonBody($longlat, $zm, $type, $errmsg);
0304:
0305: // 表示処理
0306: echo $HtmlHeader;
0307: echo $HtmlBody;
0308: echo $HtmlFooter;
たとえばURLに
viewmap2.php?longlat=E139.33.50.1N35.41.58.1&zm=4&type=1
と指定すれば、MapFanで、東経139度33分50.1秒、北緯35度41分58.1秒を中心とした地図を縮尺7万5千分の1で表示することができる。変数 longlat は経度・緯度を表す文字列、zm は縮尺を表す整数、type は地図の種類を表す整数である。

関数 preg_match を用いて、MapFanWeb形式の緯度・経度値を分解し、変数 $arr に代入する。次に、関数 sprintf によって、国土地理院やMapionの緯度・経度書式に変換している。
参考サイト
- PHPで住所から緯度経度を求める:ぱふぅ家のホームページ
- PHPでGoogleを利用して住所から緯度・経度を求める:ぱふぅ家のホームページ
- PHPでGoogleを利用して緯度・経度や住所を求める:ぱふぅ家のホームページ
今回紹介するプログラムは、前回のMapFanWebに加え、Mapion、国土地理院地図、Mapionの4種類から表示したい地図を選べるようになっている。
(2021年3月27日)PHP8対応,リファラ・チェック改良。