目次
サンプル・プログラム:実行例

サンプル・プログラム
searchLibrary.php | サンプル・プログラム本体 |
pahooGeoCode.php | 住所・緯度・経度に関わるクラス pahooGeoCode。 使い方は「PHPで住所・ランドマークから最寄り駅を求める」「PHPで住所・ランドマークから緯度・経度を求める」などを参照。include_path が通ったディレクトリに配置すること。 |
pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
バージョン | 更新日 | 内容 |
---|---|---|
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.11 | 2019/09/01 | 逆ジオコーディングサービスの選択肢を増やした |
バージョン | 更新日 | 内容 |
---|---|---|
6.3.3 | 2024/09/14 | $this->NOMINATIM_EMAIL 追加 |
6.3.2 | 2024/02/14 | getStaticMap() -- bug-fix |
6.3.1 | 2023/07/09 | bug-fix |
6.3.0 | 2023/07/02 | getPointsGSI()追加 |
6.2.0 | 2023/07/02 | ip2address()追加 |
バージョン | 更新日 | 内容 |
---|---|---|
1.5.0 | 2024/01/28 | exitIfExceedVersion() 追加 |
1.4.2 | 2024/01/28 | exitIfLessVersion() メッセージ修正 |
1.4.1 | 2023/09/30 | コメントの訂正 |
1.4.0 | 2023/09/09 | $_GET, $_POST参照をfilter_input()関数に置換 |
1.3.0 | 2023/07/11 | roundFloat() 追加 |
サンプル・プログラムの流れ

準備:pahooGeoCode クラス
37: class pahooGeoCode {
38: var $items; //検索結果格納用
39: var $error; //エラー・フラグ
40: var $errmsg; //エラー・メッセージ
41: var $hits; //検索ヒット件数
42: var $webapi; //直前に呼び出したWebAPI URL
43:
44: //Google Cloud Platform APIキー
45: //https://cloud.google.com/maps-platform/
46: //※Google Maps APIを利用しないのなら登録不要
47: var $GOOGLE_API_KEY_1 = '**************************'; //HTTPリファラ用
48: var $GOOGLE_API_KEY_2 = '**************************'; //IP制限用
49:
50: //Yahoo! JAPAN Webサービス アプリケーションID
51: //https://e.developer.yahoo.co.jp/register
52: //※Yahoo! JAPAN Webサービスを利用しないのなら登録不要
53: var $YAHOO_APPLICATION_ID = '*****************************';
クラスについては「PHPでクラスを使ってテキストの読みやすさを調べる」を参照されたい。

地図や住所検索として Google を利用するのであれば、Google Cloud Platform APIキー が必要で、その入手方法は「Google Cloud Platform - WebAPIの登録方法」を、Yahoo!JAPAN を利用するのであれば、Yahoo! JAPAN Webサービス アプリケーションIDが必要で、その入手方法は「Yahoo!JAPAN デベロッパーネットワーク - WebAPIの登録方法」を、それぞれ参照されたい。
準備:地図サービスの選択
51: //地図描画サービスの選択
52: // 0:Google
53: // 2:地理院地図・OSM
54: define('MAPSERVICE', 2);
55:
56: //住所検索サービスの選択
57: // 0:Google
58: // 1:Yahoo!JAPAN
59: // 11:HeartRails Geo API
60: // 12:OSM Nominatim Search API
61: // 13:国土地理院ジオコーディングAPI
62: define('GEOSERVICE', 11);
63:
64: //逆ジオコーディングサービスの選択
65: // 0:Google
66: // 1:Yahoo!JAPAN
67: // 11:HeartRails Geo API
68: // 21:簡易ジオコーディングサービス
69: define('REVGEOSERVICE', 1);
住所検索サービスは、Google、Yahoo!JAPAN、HeartRails Geo API、OSM Nominatim Search API、国土地理院ジオコーディングAPI から選べる。あらかじめ、定数 GEOSERVICE に値を設定すること。
逆ジオコーディングサービスは、Google、Yahoo!JAPAN、HeartRails Geo API、簡易ジオコーディングサービスから選べる。あらかじめ、定数 REVGEOSERVICE に値を設定すること。
準備:カーリル・アプリケーションキーの取得
72: //「カーリル図書館API」アプリケーションID
73: // https://calil.jp/api/dashboard/ から入手
74: define('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 | 任意 | 図書館の取得件数を指定する。 |
解説:図書館検索
188: /**
189: * カーリル図書館検索APIのURLを取得する
190: * @param double $latitude 緯度(世界測地系)
191: * @param double $longitude 経度(世界測地系)
192: * @return string URL 図書館検索APIのURL
193: */
194: function getURL_searchLibraly($latitude, $longitude) {
195: $appkey = APPLICATION_KEY;
196:
197: return "https://api.calil.jp/library?appkey={$appkey}&format=xml&geocode={$longitude},{$latitude}";
198: }
200: /**
201: * カーリル図書館検索APIを利用して指定座標の近くにある図書館検索する
202: * @param double $latitude 緯度(世界測地系)
203: * @param double $longitude 経度(世界測地系)
204: * @param array $items 情報を格納する配列
205: * @return int ヒットした施設数/FALSE
206: */
207: function searchLibraly($latitude, $longitude, &$items) {
208: $url = getURL_searchLibraly($latitude, $longitude);
209: $xml = @simplexml_load_file($url);
210: if ($xml == '' || $xml == FALSE)
211: return array(FALSE, 'カーリル図書館検索APIの不具合', FALSE);
212:
213: //検索結果取りだし
214: $cnt = 1;
215: $libraries = $xml->Library;
216: foreach ($libraries as $library) {
217: $items[$cnt]['id'] = num2alpha($cnt);
218: $items[$cnt]['title'] = (string)$library->formal; //正式名称
219: $items[$cnt]['libid'] = (string)$library->libid; //図書館ID
220: $items[$cnt]['url'] = (string)$library->url_pc; //PC版サイト
221: $items[$cnt]['address'] = (string)$library->address; //住所
222: preg_match('/([0-9|\.]+)\,([0-9|\.]+)/', (string)$library->geocode, $arr);
223: $items[$cnt]['longitude'] = (double)$arr[1]; //経度
224: $items[$cnt]['latitude'] = (double)$arr[2]; //緯度
225: $items[$cnt]['description'] =<<< EOT
226: <span class="small"><a href="{$items[$cnt]['url']}" target="_blank">{$items[$cnt]['title']}</a><br />({$items[$cnt]['address']})</span>
227: EOT;
228: $cnt++;
229: }
230: if ($cnt == 1)
231: return array(FALSE, '検索結果なし', FALSE);
232:
233: return array($cnt - 1, '', $url);
234: }
参考サイト
- 図書館API:カーリル
- PHP で最寄り駅を求める:ぱふぅ家のホームページ
- PHPで YOLP API を利用して住所から降水量を求める:ぱふぅ家のホームページ
(2023年8月5日)国土地理院ジオコーディングAPIを利用できるようにした.検索キーの最小・最大長が指定できるようにした.