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

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

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

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

目次

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

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

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

圧縮ファイルの内容
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から変数を指定することで単独運用が可能な構造になっている。
たとえば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