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

サンプル・プログラムのダウンロード
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.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の登録方法」を、それぞれ参照されたい。
準備:地図サービス(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 に値を設定すること。
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の使い方
1189: /**
1190: * 「YOLP 気象情報API」のリクエストURLを取得する
1191: * @param float $latitude 緯度(世界測地系)
1192: * @param float $longitude 経度(世界測地系)
1193: * @return string URL YOLP 標高API のURL
1194: */
1195: function getURL_YOLP_precipitation($latitude, $longitude) {
1196: $appID = $this->YAHOO_APPLICATION_ID;
1197:
1198: $url = "https://map.yahooapis.jp/weather/V1/place?appid={$appID}&coordinates={$longitude},{$latitude}&output=xml&past=2&interval=10";
1199:
1200: return $url;
1201: }
1203: /**
1204: * 「YOLP 気象情報API」を利用して降水量を求める
1205: * @param array $items 降水量を格納する配列
1206: * @param float $latitude 緯度(世界測地系)
1207: * @param float $longitude 経度(世界測地系)
1208: * @return bool TRUE/FALSE
1209: */
1210: function getPrecipitation(&$items, $latitude, $longitude) {
1211: $url = $this->getURL_YOLP_precipitation($latitude, $longitude);
1212: $this->webapi = $url;
1213:
1214: //PHP4用; DOM XML利用
1215: if ($this->isphp5over() == FALSE) {
1216: if (($dom = $this->read_xml($url)) == NULL) return FALSE;
1217: //レスポンス・チェック
1218: $node = $dom->get_elements_by_tagname('ResultInfo');
1219: $node = $node[0]->get_elements_by_tagname('Count');
1220: $rc = (int)$node[0]->get_content();
1221: if ($rc <= 0) return FALSE;
1222: //検索結果取りだし
1223: $node = $dom->get_elements_by_tagname('Feature');
1224: $node = $node[0]->get_elements_by_tagname('Property');
1225: $node = $node[0]->get_elements_by_tagname('WeatherList');
1226: $node = $node[0]->get_elements_by_tagname('Weather');
1227: foreach ($node as $val) {
1228: $n2 = $val->get_elements_by_tagname('Date');
1229: $dt = (string)$n2[0]->get_content();
1230: $n2 = $val->get_elements_by_tagname('Rainfall');
1231: $items[$dt]['Rainfall'] = (double)$n2[0]->get_content();
1232: $n2 = $val->get_elements_by_tagname('Type');
1233: $items[$dt]['Type'] = (string)$n2[0]->get_content();
1234: }
1235:
1236: //PHP5用; SimpleXML利用
1237: } else {
1238: $this->unknown_certificate();
1239: $xml = simplexml_load_file($url);
1240: //レスポンス・チェック
1241: if ($xml->ResultInfo->Count <= 0) return FALSE;
1242: //検索結果取りだし
1243: foreach ($xml->Feature->Property->WeatherList->Weather as $weather) {
1244: $dt = (string)$weather->Date;
1245: $items[$dt]['Rainfall'] = (double)$weather->Rainfall;
1246: $items[$dt]['Type'] = (string)$weather->Type;
1247: }
1248: }
1249:
1250: return TRUE;
1251: }
ユーザー関数 getPrecipitation 内では、ユーザー関数 getURL_YOLP_precipitation をコールしてリクエストURLを取得する。
参考サイト
- YOLP 気象情報API:Yahoo!デベロッパーネットワーク
- Google Geocoding API
- PHP で最寄り駅を求める:ぱふぅ家のホームページ
- PHPで YOLP API を利用して住所から降水量を求める:ぱふぅ家のホームページ
(2023年7月16日)検索キーの最小・最大長が指定できるようにした.
(2023年7月2日)国土地理院ジオコーディングAPIを利用できるようにした.