サンプル・プログラムの実行例
サンプル・プログラムのダウンロード
viewmap2.php | サンプル・プログラム本体 |
サンプル・プログラムの解説
264: // メイン・プログラム ======================================================
265: $longlat = getParam('longlat', FALSE, DEF_LONGLAT);
266: $zm = getParam('zm', FALSE, DEF_ZM);
267: $type = getParam('type', FALSE, DEF_TYPE);
268:
269: //verification
270: $errmsg = '';
271: $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);
272: $f2 = ($zm >= 2) && ($zm <= 12);
273: $f3 = ($type >= 1) && ($type <= 4);
274: if ($f1 == FALSE) $errmsg = '経度・緯度の値が間違っています';
275: else if ($f2 == FALSE) $errmsg = '縮尺は2以上12以下の整数です';
276: else if ($f3 == FALSE) $errmsg = '地図の種類が間違っています';
277:
278: //地図サイトへジャンプ
279: if (isButton('exec') && ($errmsg == '')) {
280: //緯度経度の値を分解
281: 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);
282:
283: switch ($type) {
284: case 1: //MapFanWeb
285: $url = "https://www.mapfan.com/index.cgi?MAP={$longlat}&ZM={$zm}";
286: break;
287: case 2: //Mapion
288: $el = sprintf("%f", $arr[1] + $arr[3] / 60 + $arr[5] / 3600 + $arr[7] / 36000); //経度
289: $nl = sprintf('%f', $arr[8] + $arr[10] / 60 + $arr[12] / 3600 + $arr[14] / 36000); //緯度
290: $url = "https://www.mapion.co.jp/m2/{$nl},{$el},{$zm}";
291: break;
292: case 3: //国土地理院
293: $el = sprintf("%f", $arr[1] + $arr[3] / 60 + $arr[5] / 3600 + $arr[7] / 36000); //経度
294: $nl = sprintf('%f', $arr[8] + $arr[10] / 60 + $arr[12] / 3600 + $arr[14] / 36000); //緯度
295: $url = "https://maps.gsi.go.jp/#{$zm}/{$nl}/{$el}";
296: break;
297: }
298: //地図表示
299: header("Location: {$url}");
300: exit(0);
301: }
302:
303: $HtmlBody = makeCommonBody($longlat, $zm, $type, $errmsg);
304:
305: // 表示処理
306: echo $HtmlHeader;
307: echo $HtmlBody;
308: 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対応,リファラ・チェック改良。