目次
サンプル・プログラムの実行例
サンプル・プログラムのダウンロード
getAltitude.php | サンプル・プログラム本体 |
pahooGeoCode.php | 住所・緯度・経度に関わるクラス pahooGeoCode。 使い方は「PHPで住所・ランドマークから最寄り駅を求める」「PHPで住所・ランドマークから緯度・経度を求める」などを参照。include_path が通ったディレクトリに配置すること。 |
pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
バージョン | 更新日 | 内容 |
---|---|---|
3.5.0 | 2023/07/16 | 国土地理院ジオコーディングAPIを追加,検索キーの最小・最大長の指定 |
3.4 | 2021/10/17 | PHP8対応,リファラ・チェック改良 |
3.3 | 2020/04/10 | OSM Nominatim Search API追加 |
3.21 | 2019/06/01 | 逆ジオコーディングサービスの選択肢を増やした |
3.2 | 2019/05/29 | 地理院地図、OpenStreetMapも利用できるようにした |
バージョン | 更新日 | 内容 |
---|---|---|
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)の選択
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 に値を設定すること。
YOLP 標高API
なお、同APIの解説によると、「国土地理院長の承認を得て、同院発行の基盤地図情報及び日本のジオイド2000を複製したものである。(承認番号 平成22業複、第485号)」そうなので、河川・湖沼や海上、海外の標高は求めることができない。
URL |
---|
https://map.yahooapis.jp/alt/V1/getAltitude |
フィールド名 | 要否 | 内 容 |
---|---|---|
appid | 必須 | Yahoo! JAPAN Webサービス アプリケーションID |
coordinates | 必須 | 経度、緯度の順で「,」で区切る。 緯度、経度はfloat型。 複数の緯度経度を指定する場合は「経度,緯度,経度,緯度,……」のように指定する。GETリクエストの場合は40点、POSTリクエストの場合は100点まで同時に指定できる。 |
output | 任意 | xml:XML形式【デフォルト】 json:JSON形式 |
callback | 任意 | outputパラメータがjsonのとき、JSONPとして出力する際のコールバック関数名を指定する。UTF-8でエンコードした文字列を指定する。 |
解説:YOLP 標高APIの使い方
1128: /**
1129: * 「YOLP 標高API」を利用して標高を求める
1130: * @param float $latitude 緯度(世界測地系)
1131: * @param float $longitude 経度(世界測地系)
1132: * @return float 標高(メートル)/FALSE
1133: */
1134: function getAltitude($latitude, $longitude) {
1135: $url = $this->getURL_YOLP_altitude($latitude, $longitude);
1136: $this->webapi = $url;
1137:
1138: //PHP4用; DOM XML利用
1139: if ($this->isphp5over() == FALSE) {
1140: if (($dom = $this->read_xml($url)) == NULL) return FALSE;
1141: $pagingInfo = $dom->get_elements_by_tagname('YDF');
1142: //レスポンス・チェック
1143: $rc = $pagingInfo[0]->get_elements_by_tagname('recordCount');
1144: $rc = (int)$rc[0]->get_content();
1145: if ($rc <= 0) return FALSE;
1146: //検索結果取りだし
1147: $hotels = $dom->get_elements_by_tagname('hotels');
1148: $hotel = $hotels[0]->get_elements_by_tagname('hotel');
1149: $cnt = 1;
1150: foreach ($hotel as $val) {
1151: foreach ($RakutenItems as $name) {
1152: $node = $val->get_elements_by_tagname('hotelBasicInfo');
1153: $node = $node[0]->get_elements_by_tagname($name);
1154: if ($node != NULL) {
1155: $items[$cnt][$name] = (string)$node[0]->get_content();
1156: }
1157: }
1158: $cnt++;
1159: }
1160:
1161: //PHP5用; SimpleXML利用
1162: } else {
1163: $this->unknown_certificate();
1164: $xml = simplexml_load_file($url);
1165: //レスポンス・チェック
1166: if ($xml == NULL) return FALSE;
1167: if ($xml->ResultInfo->Count <= 0) return FALSE;
1168: //検索結果取りだし
1169: $alt = (double)$xml->Feature[0]->Property->Altitude;
1170: }
1171:
1172: return $alt;
1173: }
解説:気圧を求める
1175: /**
1176: * 気圧を求める
1177: * @param float $altitude 標高(メートル)
1178: * @return float 気圧(ヘクトパスカル)
1179: */
1180: function getPressure($altitude) {
1181: return pow(10, (log10(1013.25) - ($altitude / 18410)));
1182: }
活用例
参考サイト
- YOLP 標高API:Yahoo!デベロッパーネットワーク
- PHP で最寄り駅を求める:ぱふぅ家のホームページ
- Yahoo!JAPAN デベロッパーネットワーク - WebAPIの登録方法:ぱふぅ家のホームページ
- 標高とポテトチップス袋の変化:ぱふぅ家のホームページ
- 地図・住所から標高/気圧/座標を調べる:みんなの知識 ちょっと便利帳
(2023年8月5日)国土地理院ジオコーディングAPIを利用できるようにした.検索キーの最小・最大長が指定できるようにした.