PHPで様々な地図を表示する

(1/1)
前回に引き続き、PHPを使ってインターネット上の地図サービスを利用するプログラムを紹介する。

今回紹介するプログラムは、前回のMapFanWebに加え、Mapion国土地理院地図Mapionの4種類から表示したい地図を選べるようになっている。

(2021年3月27日)PHP8対応,リファラ・チェック改良。

目次

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

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

サンプル・プログラムのダウンロード

圧縮ファイルの内容
viewmap2.phpサンプル・プログラム本体

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

0264: // メイン・プログラム ======================================================
0265: $longlat = getParam('longlat', FALSEDEF_LONGLAT);
0266: $zm      = getParam('zm', FALSEDEF_ZM);
0267: $type    = getParam('type', FALSEDEF_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から変数を指定することで単独運用が可能な構造になっている。
たとえば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の緯度・経度書式に変換している。

参考サイト

(この項おわり)
header