PHPでMapFanWebを利用する

(1/1)
インターネット上では、無料で利用できる地図サービスが数多くある。「ぱふぅ家のホームページ」の絵日記コーナーでも、こうしたサービスを利用させてもらい、目的地付近の地図を表示している。
現在は Google マップを利用しているが、当初はMapFanWebを利用して表示していた。
今回は、経度・緯度と縮尺を与えると、MapFanWebを利用し、その地点の地図を表示するプログラムを紹介する。

サンプル・プログラム

プログラムを実行する

ダウンロード(PHP4/5共用)

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

このプログラムは、他のコンテンツから利用することを考慮して、URL に変数MAP(経度・緯度)と変数ZM(縮尺)を渡すことで地図が表示できるようになっている。
たとえば URL に "viewmap1.php?MAP=E139.33.50.1N35.41.58.1&ZM=7"と指定すれば、MapFanWebで、 東経139 度 33 分 50.1秒、北緯35 度 41 分 58.1秒 を中心とした地図を縮尺 5 万分の 1 で表示することができる
space
プログラムは大きく 2 つの部分に分かれる。
URL に変数が指定されていない場合は、以下の部分が実行され、フォームを使って緯度・経度・縮尺を入力する。

0014: // 入力処理 =================================================================
0015: if (isset($_GET["MAP"]) == FALSE) {
0016: echo <<< EOF
0017: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
0018:  "http://www.w3.org/TR/html4/loose.dtd">
0019: <html lang="ja">
0020: <head>
0021: <meta http-equiv="Content-Type" content="text/html; charset=$InternalEncoding" />
0022: <title>MapFanビューワ</title>
0023: <meta name="author" content="studio pahoo" />
0024: <meta name="copyright" content="studio pahoo" />
0025: <meta name="ROBOTS" content="NOINDEX,NOFOLLOW" />
0026: </head>
0027: <body>
0028: <h1>■MapFanビューワ</h1>
0029: <form method="get" action="{$MySelf}">
0030: <table border="0">
0031: <tr>
0032: <td>経度・緯度を入力></td>
0033: <td><input name="MAP" type="text" size="80" /></td>
0034: </tr>
0035: <tr>
0036: <td></td>
0037: <td>例:E139.33.50.1N35.41.58.1(東経139度33分50.1秒、北緯35度41分58.1秒)</td>
0038: </tr>
0039: <tr>
0040: <td>縮尺を選択></td>
0041: <td>
0042: <select name="ZM">
0043: <option value="2">160万分の1</option>
0044: <option value="3">80万分の1</option>
0045: <option value="4">40万分の1</option>
0046: <option value="5">20万分の1</option>
0047: <option value="6">10万分の1</option>
0048: <option value="7">5万分の1</option>
0049: <option value="8">2万5千分の1</option>
0050: <option value="9" selected>1万2500分の1</option>
0051: <option value="10">6250分の1</option>
0052: <option value="11">3125分の1</option>
0053: <option value="12">1562分の1</option>
0054: </select>
0055: </td>
0056: </tr>
0057: <tr>
0058: <td>&nbsp;</td>
0059: <td align="center"><input type="submit" name="Submit" value="地図表示" /></td>
0060: </tr>
0061: <tr>
0062: <td></td>
0063: <td align="right">Powerd by <img src="http://www.mapfan.com/images/mfweb.gif" border="0" /></td>
0064: </tr>
0065: </table>
0066: </form>
0067: </body>
0068: </html>
0069: 
0070: EOF;

変数が渡されている場合は、以下の部分が実行され、MapFanWeb の該当地点を表示する。
MapFanWebの場合、経度・緯度は、たとえば「東経139 度 33 分 50.1秒、北緯35 度 41 分 58.1秒」なら、「E139.33.50.1N35.41.58.1」のように記述する。

0071: // 地図表示処理 =============================================================
0072: else {
0073: $map = $_GET['MAP'];                                            //緯度経度
0074: $zm  = (isset($_GET['ZM'])  == TRUE) ? intval($_GET['ZM']) : 9;   //縮尺
0075: 
0076: $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);  //緯度経度の異常チェック
0077: $f2 = ($zm >= 2) && ($zm <= 12);     //縮尺の異常チェック
0078: 
0079: if ($f1 == FALSE) {
0080:     echo $map . ' : 経度・緯度の値が間違っています。';
0081: else if ($f2 == FALSE) {
0082:     echo $zm . ' : 縮尺は2以上12以下の整数です。';
0083: 
0084: //MapFanサイトへジャンプ
0085: else {
0086:     $str = 'http://www.mapfan.com/index.cgi?MAP=' . $map .'&ZM=' . $zm;
0087:     header('Location: ' . $str);
0088: }
0089: }

このように何か値を入力すると何かアクションを起こすプログラムの場合、入力した値が間違っていないかどうか事前にチェックする必要がある。とくにインターネットの場合、クロスサイトスクリプティング*SQL インジェクション といった悪意のある入力もあり得るので、しっかりと入力チェックを行っておきたい。
space
ここでは、変数 MAP に対しては、東経・北緯しか入力されないことを前提に、関数  preg_match  を使ってパターンマッチによるチェックを行っている。MapFanWebの場合、経度・緯度とも、度分まで入力しないと正常に表示されないようである。
space
また、変数 ZM は、以下のような縮尺と対応している。そこで、入力値を整数化し、2 以上12 以下であることをチェックしている。
このプログラムではリストボックスから選択するので間違いはないはずだが、URL からダイレクトに ZM を入力するケースを想定し、このような入力チェックを行うこととした。
space
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

space
これらの入力チェックをクリアした場合のみ、MapFanWeb に必要なパラメータを渡し、関数  header  を利用してジャンプする。
(この項おわり)
header