目次
サンプル・プログラム:実行例
サンプル・プログラム
| searchLibrary.php | サンプル・プログラム本体 |
| .pahooEnv | クラウドサービスを利用するためのアカウント情報などを記入する .env ファイル。 使い方は「各種クラウド連携サービス(WebAPI)の登録方法」を参照。include_path が通ったディレクトリに配置すること。 |
| pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
| pahooGeoCode.php | 住所・緯度・経度に関わるクラス pahooGeoCode。 使い方は「PHPで住所・ランドマークから最寄り駅を求める」「PHPで住所・ランドマークから緯度・経度を求める」などを参照。include_path が通ったディレクトリに配置すること。 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 2.6.0 | 2025/08/14 | .pahooEnv導入 |
| 2.5.0 | 2023/07/16 | 検索キーの最小・最大長の指定 |
| 2.4.0 | 2023/07/16 | 国土地理院ジオコーディングAPIを追加 |
| 2.3 | 2021/10/17 | PHP8対応,リファラ・チェック改良 |
| 2.2 | 2020/04/04 | OSM Nominatim Search API追加 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 2.0.1 | 2025/08/11 | getParam() bug-fix |
| 2.0.0 | 2025/08/11 | pahooLoadEnv() 追加 |
| 1.9.0 | 2025/07/26 | getParam() 引数に$trim追加 |
| 1.8.1 | 2025/03/15 | validRegexPattern() debug |
| 1.8.0 | 2024/11/12 | validRegexPattern() 追加 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 6.8.0 | 2025/08/10 | アクセスキーなどを ".env" に分離 |
| 6.7.1 | 2025/07/26 | jsLine_Gmap() - bug-fix |
| 6.7.0 | 2025/07/20 | drawJSmap,drawGMap -- 引数 $markerLevel 追加 |
| 6.6.0 | 2025/07/19 | drawJSmap,drawGMap,drawLeaflet -- マップ中心マーカー表示引数を追加 |
| 6.5.0 | 2025/06/14 | GoogleMaps JavaScript APIの変更に対応 |
サンプル・プログラムの流れ
準備:PHP の https対応
Windowsでは、"php.ini" の下記の行を有効化する。
extension=php_openssl.dllLinuxでは --with-openssl=/usr オプションを付けて再ビルドする。→OpenSSLインストール手順
これで準備は完了だ。
準備:pahooInputData 関数群
また、各種クラウドサービスに登録したときに取得するアカウント情報、アプリケーションパスワードなどを登録した .pahooEnv ファイルから読み込む関数 pahooLoadEnv を備えている。こちらについては、「各種クラウド連携サービス(WebAPI)の登録方法」をご覧いただきたい。
準備:pahooGeoCode クラス
pahooGeoCode.php
40: class pahooGeoCode {
41: public $items; // 検索結果格納用
42: public $error; // エラー・フラグ
43: public $errmsg; // エラー・メッセージ
44: public $hits; // 検索ヒット件数
45: public $webapi; // 直前に呼び出したWebAPI URL
46:
47: // -- 以下のデータは .env ファイルに記述可能
48: // Google Cloud Platform APIキー
49: // https://cloud.google.com/maps-platform/
50: // ※Google Maps APIを利用しないのなら登録不要
51: public $GOOGLE_API_KEY_1 = ''; // HTTPリファラ用
52: public $GOOGLE_API_KEY_2 = ''; // IP制限用
53: public $GOOGLE_MAP_ID = ''; // GoogleMaps ID
54:
55: // Yahoo! JAPAN Webサービス アプリケーションID
56: // https://e.developer.yahoo.co.jp/register
57: // ※Yahoo! JAPAN Webサービスを利用しないのなら登録不要
58: public $YAHOO_APPLICATION_ID = '';
59:
60: // OSM Nominatim Search API利用時に知らせるメールアドレス
61: // https://wiki.openstreetmap.org/wiki/JA:Nominatim#.E6.A4.9C.E7.B4.A2
62: // ※OSM Nominatim Search APIを利用しないのなら登録不要
63: public $NOMINATIM_EMAIL = '';
64:
65: // IP2Location.io APIキー
66: // https://www.ip2location.io/
67: // ※IP2Location.ioを利用しないのなら登録不要
68: public $IP2LOCATION_API_KEY = '';
PHPのクラスについては「PHPでクラスを使ってテキストの読みやすさを調べる」を参照されたい。
地図や住所検索として Google を利用するのであれば Google Cloud Platform APIキー とマップID が必要で、その入手方法は「Google Cloud Platform - WebAPIの登録方法」を、Yahoo!JAPAN を利用するのであれば Yahoo! JAPAN Webサービス アプリケーションIDが必要で、その入手方法は「Yahoo!JAPAN デベロッパーネットワーク - WebAPIの登録方法」を、IP2Location.ioを利用するのであれば「PHPでIPアドレスやホスト名から住所を求める」を、それぞれ参照されたい。
PHPのクラスについては「PHPでクラスを使ってテキストの読みやすさを調べる」を参照されたい。
準備:地図サービスの選択
weatherMap.php
65: // 地図描画サービスの選択
66: // 0:Google
67: // 2:地理院地図・OSM
68: define('MAPSERVICE', 2);
69:
70: // マップの表示サイズ(単位:ピクセル)
71: define('MAP_WIDTH', 600);
72: define('MAP_HEIGHT', 480);
73: // マップID
74: define('MAPID', 'map_id');
75: // 初期値
76: define('DEF_LATITUDE', 35.0); // 緯度
77: define('DEF_LONGITUDE', 137.0); // 経度
78: define('DEF_TYPE', 'GSISTD'); // マップタイプ
79: define('DEF_ZOOM', 4); // ズーム
80:
81: define('SEMICIRCLE', 30); // 半円を代替する多角形頂点数
住所検索サービスは、Google、Yahoo!JAPAN、HeartRails Geo API、OSM Nominatim Search API から選べる。あらかじめ、定数 GEOSERVICE に値を設定すること。
準備:カーリル・アプリケーションキーの取得
searchLibrary.php
75: // 「カーリル図書館API」アプリケーションID
76: // https://calil.jp/api/dashboard/ から入手
77: // .pahooEnvに書くか、下記に直接記入してください
78: if (isset($_ENV['PAHOO_CALIL_APPLICATIONID'])) {
79: define('APPLICATION_KEY', $_ENV['PAHOO_CALIL_APPLICATIONID']);
80: } else {
81: define('APPLICATION_KEY', '********************************');
82: }
入手したアプリケーションキーを、.aphooEnv ファイルの PAHOO_CALIL_APPLICATIONID にセットするか、直接、定数 APPLICATION_KEY に格納してください。
カーリル図書館API:図書館データベース
| URL |
|---|
| https://api.calil.jp/library |
| フィールド名 | 要否 | 内 容 |
|---|---|---|
| appkey | 必須 | カーリル図書館APIのアプリケーションキー。 |
| pref | 任意 | 検索に都道府県名を指定する。UTF-8エンコード。 |
| city | 任意 | 検索に市区町村名を指定する。UTF-8エンコード。 |
| systemid | 任意 | 検索に図書館システムIDを指定する。 |
| geocode | 任意 | 検索に緯度、経度(世界測地系)を指定する。例:136.7163027,35.390516 |
| format | 任意 | 出力形式で、xmlまたはjsonを指定する。デフォルトはxml。 |
| callback | 任意 | JSONPのcallback関数名を指定します。デフォルトはcallback。 |
| limit | 任意 | 図書館の取得件数を指定する。 |
解説:図書館検索
searchLibrary.php
194: /**
195: * カーリル図書館検索APIのURLを取得する
196: * @param double $latitude 緯度(世界測地系)
197: * @param double $longitude 経度(世界測地系)
198: * @return string URL 図書館検索APIのURL
199: */
200: function getURL_searchLibraly($latitude, $longitude) {
201: $appkey = APPLICATION_KEY;
202:
203: return "https://api.calil.jp/library?appkey={$appkey}&format=xml&geocode={$longitude},{$latitude}";
204: }
searchLibrary.php
206: /**
207: * カーリル図書館検索APIを利用して指定座標の近くにある図書館検索する
208: * @param double $latitude 緯度(世界測地系)
209: * @param double $longitude 経度(世界測地系)
210: * @param array $items 情報を格納する配列
211: * @return int ヒットした施設数/FALSE
212: */
213: function searchLibraly($latitude, $longitude, &$items) {
214: $url = getURL_searchLibraly($latitude, $longitude);
215: $xml = @simplexml_load_file($url);
216: if ($xml == '' || $xml == FALSE)
217: return array(FALSE, 'カーリル図書館検索APIの不具合', FALSE);
218:
219: // 検索結果取りだし
220: $cnt = 1;
221: $libraries = $xml->Library;
222: foreach ($libraries as $library) {
223: $items[$cnt]['id'] = num2alpha($cnt);
224: $items[$cnt]['title'] = (string)$library->formal; // 正式名称
225: $items[$cnt]['libid'] = (string)$library->libid; // 図書館ID
226: $items[$cnt]['url'] = (string)$library->url_pc; // PC版サイト
227: $items[$cnt]['address'] = (string)$library->address; // 住所
228: preg_match('/([0-9|\.]+)\,([0-9|\.]+)/', (string)$library->geocode, $arr);
229: $items[$cnt]['longitude'] = (double)$arr[1]; // 経度
230: $items[$cnt]['latitude'] = (double)$arr[2]; // 緯度
231: $items[$cnt]['description'] =<<< EOT
232: <span class="small"><a href="{$items[$cnt]['url']}" target="_blank">{$items[$cnt]['title']}</a><br />({$items[$cnt]['address']})</span>
233: EOT;
234: $cnt++;
235: }
236: if ($cnt == 1)
237: return array(FALSE, '検索結果なし', FALSE);
238:
239: return array($cnt - 1, '', $url);
240: }
参考サイト
- 図書館API:カーリル
- PHP で最寄り駅を求める:ぱふぅ家のホームページ
- PHPで YOLP API を利用して住所から降水量を求める:ぱふぅ家のホームページ

(2025年8月14日).pahooEnv導入
(2025年6月14日)GoogleMaps JavaScript APIの変更に対応した.
(2023年8月5日)国土地理院ジオコーディングAPIを利用できるようにした.検索キーの最小・最大長が指定できるようにした.