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

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

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

(2020 年 2 月 2 日)地図サイトの変更に対応し、プログラムを大幅改訂した。

目次

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

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

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

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

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

0255: // メイン・プログラム ======================================================
0256: $longlat = getParam('longlat', FALSEDEF_LONGLAT);
0257: $zm      = getParam('zm', FALSEDEF_ZM);
0258: $type    = getParam('type', FALSEDEF_TYPE);
0259: 
0260: //verification
0261: $errmsg = '';
0262: $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);
0263: $f2 = ($zm >= 2) && ($zm <= 12);
0264: $f3 = ($type >= 1) && ($type <= 4);
0265: if ($f1 == FALSE)       $errmsg = '経度・緯度の値が間違っています';
0266: else if ($f2 == FALSE)  $errmsg = '縮尺は2以上12以下の整数です';
0267: else if ($f3 == FALSE)  $errmsg = '地図の種類が間違っています';
0268: 
0269: //地図サイトへジャンプ
0270: if (isButton('exec') && ($errmsg == '')) {
0271:     //緯度経度の値を分解
0272:     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);
0273: 
0274:     switch ($type) {
0275:         case 1:      //MapFanWeb
0276:             $url = "https://www.mapfan.com/index.cgi?MAP={$longlat}&ZM={$zm}";
0277:             break;
0278:         case 2:      //Mapion
0279:             $el = sprintf("%f", $arr[1] + $arr[3] / 60 + $arr[5] / 3600 + $arr[7] / 36000);     //経度
0280:             $nl = sprintf('%f', $arr[8] + $arr[10] / 60 + $arr[12] / 3600 + $arr[14] / 36000);  //緯度
0281:             $url = "https://www.mapion.co.jp/m2/{$nl},{$el},{$zm}";
0282:             break;
0283:         case 3:      //国土地理院
0284:             $el = sprintf("%f", $arr[1] + $arr[3] / 60 + $arr[5] / 3600 + $arr[7] / 36000);     //経度
0285:             $nl = sprintf('%f', $arr[8] + $arr[10] / 60 + $arr[12] / 3600 + $arr[14] / 36000);  //緯度
0286:             $url = "https://maps.gsi.go.jp/#{$zm}/{$nl}/{$el}";
0287:             break;
0288:     }
0289:     //地図表示
0290:     header("Location: {$url}");
0291:     exit(0);
0292: }
0293: 
0294: $HtmlBody = makeCommonBody($longlat$zm$type$errmsg);
0295: 
0296: // 表示処理
0297: echo $HtmlHeader;
0298: echo $HtmlBody;
0299: 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