目次
サンプル・プログラムの実行例
サンプル・プログラムのダウンロード
| getPrecipitation.php | サンプル・プログラム本体 |
| pahooGeoCode.php | 住所・緯度・経度に関わるクラス pahooGeoCode。 使い方は「PHPで住所・ランドマークから最寄り駅を求める」「PHPで住所・ランドマークから緯度・経度を求める」などを参照。include_path が通ったディレクトリに配置すること。 |
| pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 3.5.0 | 2023/07/16 | 検索キーの最小・最大長の指定 |
| 3.4.0 | 2023/07/02 | 国土地理院ジオコーディングAPIを追加 |
| 3.3 | 2021/10/17 | PHP8対応,リファラ・チェック改良 |
| 3.2 | 2020/04/11 | OSM Nominatim Search API追加 |
| 3.11 | 2019/06/01 | 逆ジオコーディングサービスの選択肢を増やした |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 6.5.0 | 2025/06/14 | GoogleMaps JavaScript APIの変更に対応 |
| 6.4.0 | 2025/03/01 | makeYOLP_GeoSelectCategory()--引数$flagWorld追加 |
| 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 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 1.8.1 | 2025/03/15 | validRegexPattern() -- debug |
| 1.8.0 | 2024/11/12 | validRegexPattern() 追加 |
| 1.7.0 | 2024/10/09 | validURL() validEmail() 追加 |
| 1.6.0 | 2024/10/07 | isButton() -- buttonタグに対応 |
| 1.5.0 | 2024/01/28 | exitIfExceedVersion() 追加 |
サンプル・プログラムの流れ
準備: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でクラスを使ってテキストの読みやすさを調べる」を参照されたい。
準備:地図サービス(WebAPI)の選択
getPrecipitation.php
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', 1);
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 に値を設定すること。
WebAPI:YOLP 気象情報API
| リクエストURL |
|---|
| https://map.yahooapis.jp/weather/V1/place |
| フィールド名 | 要否 | 内 容 |
|---|---|---|
| appid | 必須 | Yahoo! JAPAN Webサービス アプリケーションID |
| coordinates | 必須 | 経度、緯度の順で「,」で区切る。 緯度、経度はfloat型。 複数の緯度経度を指定する場合は「経度,緯度,経度,緯度,……」のように指定する。GETリクエストの場合は40点、POSTリクエストの場合は100点まで同時に指定できる。 |
| output | 任意 | xml:XML形式【デフォルト】 json:JSON形式 |
| callback | 任意 | outputパラメータがjsonのとき、JSONPとして出力する際のコールバック関数名を指定する。UTF-8でエンコードした文字列を指定する。 |
| date | 任意 | 日時を指定(YYYYMMDDHHMI形式)。 現在から2時間前までの日時を指定可能。 |
| past | 任意 | 過去の降水強度実測値を取得する場合に指定する。 0 - 取得しない【デフォルト】 1 - 1時間前までの降水強度実測値を取得する 2 - 2時間前までの降水強度実測値を取得する |
| interval | 任意 | 過去の降水強度実測値を取得する場合に指定する。 10 - 10分毎【デフォルト】 5 - 5分毎 |
解説:YOLP 気象情報APIの使い方
pahooGeoCode.php
1201: /**
1202: * 「YOLP 気象情報API」のリクエストURLを取得する
1203: * @param float $latitude 緯度(世界測地系)
1204: * @param float $longitude 経度(世界測地系)
1205: * @return string URL YOLP 標高API のURL
1206: */
1207: function getURL_YOLP_precipitation($latitude, $longitude) {
1208: $appID = $this->YAHOO_APPLICATION_ID;
1209:
1210: $url = "https://map.yahooapis.jp/weather/V1/place?appid={$appID}&coordinates={$longitude},{$latitude}&output=xml&past=2&interval=10";
1211:
1212: return $url;
1213: }
pahooGeoCode.php
1215: /**
1216: * 「YOLP 気象情報API」を利用して降水量を求める
1217: * @param array $items 降水量を格納する配列
1218: * @param float $latitude 緯度(世界測地系)
1219: * @param float $longitude 経度(世界測地系)
1220: * @return bool TRUE/FALSE
1221: */
1222: function getPrecipitation(&$items, $latitude, $longitude) {
1223: $url = $this->getURL_YOLP_precipitation($latitude, $longitude);
1224: $this->webapi = $url;
1225:
1226: // PHP4用; DOM XML利用
1227: if ($this->isphp5over() == FALSE) {
1228: if (($dom = $this->read_xml($url)) == NULL) return FALSE;
1229: // レスポンス・チェック
1230: $node = $dom->get_elements_by_tagname('ResultInfo');
1231: $node = $node[0]->get_elements_by_tagname('Count');
1232: $rc = (int)$node[0]->get_content();
1233: if ($rc <= 0) return FALSE;
1234: // 検索結果取りだし
1235: $node = $dom->get_elements_by_tagname('Feature');
1236: $node = $node[0]->get_elements_by_tagname('Property');
1237: $node = $node[0]->get_elements_by_tagname('WeatherList');
1238: $node = $node[0]->get_elements_by_tagname('Weather');
1239: foreach ($node as $val) {
1240: $n2 = $val->get_elements_by_tagname('Date');
1241: $dt = (string)$n2[0]->get_content();
1242: $n2 = $val->get_elements_by_tagname('Rainfall');
1243: $items[$dt]['Rainfall'] = (double)$n2[0]->get_content();
1244: $n2 = $val->get_elements_by_tagname('Type');
1245: $items[$dt]['Type'] = (string)$n2[0]->get_content();
1246: }
1247:
1248: // PHP5用; SimpleXML利用
1249: } else {
1250: $this->unknown_certificate();
1251: $xml = simplexml_load_file($url);
1252: // レスポンス・チェック
1253: if ($xml->ResultInfo->Count <= 0) return FALSE;
1254: // 検索結果取りだし
1255: foreach ($xml->Feature->Property->WeatherList->Weather as $weather) {
1256: $dt = (string)$weather->Date;
1257: $items[$dt]['Rainfall'] = (double)$weather->Rainfall;
1258: $items[$dt]['Type'] = (string)$weather->Type;
1259: }
1260: }
1261:
1262: return TRUE;
1263: }
ユーザー関数 getPrecipitation 内では、ユーザー関数 getURL_YOLP_precipitation をコールしてリクエストURLを取得する。
参考サイト
- YOLP 気象情報API:Yahoo!デベロッパーネットワーク
- PHP で最寄り駅を求める:ぱふぅ家のホームページ
- PHPで YOLP API を利用して住所から降水量を求める:ぱふぅ家のホームページ

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