目次
サンプル・プログラムの実行例
サンプル・プログラムのダウンロード
getPrecipitation.php | サンプル・プログラム本体 |
pahooGeoCode.php | 住所・緯度・経度に関わるクラス pahooGeoCode。 使い方は「PHPで住所・ランドマークから最寄り駅を求める」「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.1 | 2023/07/09 | bug-fix |
6.3.0 | 2023/07/02 | getPointsGSI()追加 |
6.2.0 | 2023/07/02 | ip2address()追加 |
6.1.0 | 2022/12/30 | ip2address()追加 |
6.0.4 | 2022/12/13 | PHP8.2対応 |
バージョン | 更新日 | 内容 |
---|---|---|
1.3.0 | 2023/07/11 | roundFloat() 追加 |
1.2.0 | 2023/04/22 | exitIfLessVersion() 追加 |
1.1.2 | 2023/02/05 | validString() 修正 |
1.11 | 2022/07/03 | isCommandLine() 修正 |
1.1 | 2022/06/04 | getValidString() 修正 |
サンプル・プログラムの流れ
準備: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)の選択
52: //地図描画サービスの選択
53: // 0:Google
54: // 2:地理院地図・OSM
55: define('MAPSERVICE', 2);
56:
57: //住所検索サービスの選択
58: // 0:Google
59: // 1:Yahoo!JAPAN
60: // 11:HeartRails Geo API
61: // 12:OSM Nominatim Search API
62: // 13:国土地理院ジオコーディングAPI
63: define('GEOSERVICE', 11);
64:
65: //逆ジオコーディングサービスの選択
66: // 0:Google
67: // 1:Yahoo!JAPAN
68: // 11:HeartRails Geo API
69: // 21:簡易ジオコーディングサービス
70: define('REVGEOSERVICE', 1);
住所検索サービスは、Google、Yahoo!JAPAN、HeartRails Geo API、OSM Nominatim Search 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の使い方
1185: /**
1186: * 「YOLP 気象情報API」のリクエストURLを取得する
1187: * @param float $latitude 緯度(世界測地系)
1188: * @param float $longitude 経度(世界測地系)
1189: * @return string URL YOLP 標高API のURL
1190: */
1191: function getURL_YOLP_precipitation($latitude, $longitude) {
1192: $appID = $this->YAHOO_APPLICATION_ID;
1193:
1194: $url = "https://map.yahooapis.jp/weather/V1/place?appid={$appID}&coordinates={$longitude},{$latitude}&output=xml&past=2&interval=10";
1195:
1196: return $url;
1197: }
1199: /**
1200: * 「YOLP 気象情報API」を利用して降水量を求める
1201: * @param array $items 降水量を格納する配列
1202: * @param float $latitude 緯度(世界測地系)
1203: * @param float $longitude 経度(世界測地系)
1204: * @return bool TRUE/FALSE
1205: */
1206: function getPrecipitation(&$items, $latitude, $longitude) {
1207: $url = $this->getURL_YOLP_precipitation($latitude, $longitude);
1208: $this->webapi = $url;
1209:
1210: //PHP4用; DOM XML利用
1211: if ($this->isphp5over() == FALSE) {
1212: if (($dom = $this->read_xml($url)) == NULL) return FALSE;
1213: //レスポンス・チェック
1214: $node = $dom->get_elements_by_tagname('ResultInfo');
1215: $node = $node[0]->get_elements_by_tagname('Count');
1216: $rc = (int)$node[0]->get_content();
1217: if ($rc <= 0) return FALSE;
1218: //検索結果取りだし
1219: $node = $dom->get_elements_by_tagname('Feature');
1220: $node = $node[0]->get_elements_by_tagname('Property');
1221: $node = $node[0]->get_elements_by_tagname('WeatherList');
1222: $node = $node[0]->get_elements_by_tagname('Weather');
1223: foreach ($node as $val) {
1224: $n2 = $val->get_elements_by_tagname('Date');
1225: $dt = (string)$n2[0]->get_content();
1226: $n2 = $val->get_elements_by_tagname('Rainfall');
1227: $items[$dt]['Rainfall'] = (double)$n2[0]->get_content();
1228: $n2 = $val->get_elements_by_tagname('Type');
1229: $items[$dt]['Type'] = (string)$n2[0]->get_content();
1230: }
1231:
1232: //PHP5用; SimpleXML利用
1233: } else {
1234: $this->unknown_certificate();
1235: $xml = simplexml_load_file($url);
1236: //レスポンス・チェック
1237: if ($xml->ResultInfo->Count <= 0) return FALSE;
1238: //検索結果取りだし
1239: foreach ($xml->Feature->Property->WeatherList->Weather as $weather) {
1240: $dt = (string)$weather->Date;
1241: $items[$dt]['Rainfall'] = (double)$weather->Rainfall;
1242: $items[$dt]['Type'] = (string)$weather->Type;
1243: }
1244: }
1245:
1246: return TRUE;
1247: }
ユーザー関数 getPrecipitation 内では、ユーザー関数 getURL_YOLP_precipitation をコールしてリクエストURLを取得する。
参考サイト
- YOLP 気象情報API:Yahoo!デベロッパーネットワーク
- Google Geocoding API
- PHP で最寄り駅を求める:ぱふぅ家のホームページ
- PHPで YOLP API を利用して住所から降水量を求める:ぱふぅ家のホームページ
(2023年7月16日)検索キーの最小・最大長が指定できるようにした.
(2023年7月2日)国土地理院ジオコーディングAPIを利用できるようにした.