サンプル・プログラムの実行例
サンプル・プログラム
viewmap1.php | サンプル・プログラム本体 |
サンプル・プログラムの解説
たとえばURLに "viewmap1.php?MAP=E139.33.50.1N35.41.58.1&ZM=7"と指定すれば、MapFanWebで、 東経139度33分50.1秒、北緯35度41分58.1秒 を中心とした地図を縮尺5万分の1で表示することができる
プログラムは大きく2つの部分に分かれる。
URLに変数が指定されていない場合は、以下の部分が実行され、フォームを使って緯度・経度・縮尺を入力する。
193: $HtmlBody = makeCommonBody($map, $res);
194:
195: // 表示処理
196: echo $HtmlHeader;
197: echo $HtmlBody;
198: echo $HtmlFooter;
MapFanWebの場合、経度・緯度は、たとえば「東経139度33分50.1秒、北緯35度41分58.1秒」なら、「E139.33.50.1N35.41.58.1」のように記述する。
178: if ($map != '') {
179: $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]*/", $map); //緯度経度の異常チェック
180: $f2 = ($zm >= 2) && ($zm <= 12); //縮尺の異常チェック
181:
182: if ($f1 == FALSE) {
183: $res = 'エラー > ' . $map . ' : 経度・緯度の値が間違っています。';
184: } else if ($f2 == FALSE) {
185: $res = 'エラー > ' . $zm . ' : 縮尺は2以上12以下の整数です。';
186: //MapFanサイトへジャンプ
187: } else {
188: $url = 'http://www.mapfan.com/index.cgi?MAP=' . $map .'&ZM=' . $zm;
189: header('Location: ' . $url);
190: }
191: }
ここでは、変数 map に対しては、東経・北緯しか入力されないことを前提に、関数 preg_match を使ってパターンマッチによるチェックを行っている。MapFanWebの場合、経度・緯度とも、度分まで入力しないと正常に表示されないようである。
また、変数 zm は、以下のような縮尺と対応している。そこで、入力値を整数化し、2以上12以下であることをチェックしている。
このプログラムではリストボックスから選択するので間違いはないはずだが、URLからダイレクトに ZM を入力するケースを想定し、このような入力チェックを行うこととした。
zm の値 | 縮尺 |
---|---|
0 | 全国 |
1 | ? |
2 | 160 万分の 1 |
3 | 80 万分の 1 |
4 | 40 万分の 1 |
5 | 20 万分の 1 |
6 | 10 万分の 1 |
7 | 5 万分の 1 |
8 | 2 万 5 千分の 1 |
9 | 1 万 2500 分の 1 |
10 | 6250 分の 1 |
11 | 3125 分の 1 |
12 | 1562 分の 1 |
現在は Googleマップを利用しているが、当初はMapFanWebを利用して表示していた。
今回は、経度・緯度と縮尺を与えると、MapFanWebを利用し、その地点の地図を表示するプログラムを紹介する。
(2021年3月27日)PHP8対応,リファラ・チェック改良。