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

サンプル・プログラムのダウンロード
getAltitude.php | サンプル・プログラム本体 |
pahooGeoCode.php | 住所・緯度・経度に関わるクラス pahooGeoCode。 使い方は「PHPで住所・ランドマークから最寄り駅を求める」「PHPで住所・ランドマークから緯度・経度を求める」などを参照。include_path が通ったディレクトリに配置すること。 |
pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
バージョン | 更新日 | 内容 |
---|---|---|
3.5.1 | 2024/09/23 | 参考URL |
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 | 逆ジオコーディングサービスの選択肢を増やした |
バージョン | 更新日 | 内容 |
---|---|---|
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 に値を設定すること。
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の使い方
1132: /**
1133: * 「YOLP 標高API」を利用して標高を求める
1134: * @param float $latitude 緯度(世界測地系)
1135: * @param float $longitude 経度(世界測地系)
1136: * @return float 標高(メートル)/FALSE
1137: */
1138: function getAltitude($latitude, $longitude) {
1139: $url = $this->getURL_YOLP_altitude($latitude, $longitude);
1140: $this->webapi = $url;
1141:
1142: //PHP4用; DOM XML利用
1143: if ($this->isphp5over() == FALSE) {
1144: if (($dom = $this->read_xml($url)) == NULL) return FALSE;
1145: $pagingInfo = $dom->get_elements_by_tagname('YDF');
1146: //レスポンス・チェック
1147: $rc = $pagingInfo[0]->get_elements_by_tagname('recordCount');
1148: $rc = (int)$rc[0]->get_content();
1149: if ($rc <= 0) return FALSE;
1150: //検索結果取りだし
1151: $hotels = $dom->get_elements_by_tagname('hotels');
1152: $hotel = $hotels[0]->get_elements_by_tagname('hotel');
1153: $cnt = 1;
1154: foreach ($hotel as $val) {
1155: foreach ($RakutenItems as $name) {
1156: $node = $val->get_elements_by_tagname('hotelBasicInfo');
1157: $node = $node[0]->get_elements_by_tagname($name);
1158: if ($node != NULL) {
1159: $items[$cnt][$name] = (string)$node[0]->get_content();
1160: }
1161: }
1162: $cnt++;
1163: }
1164:
1165: //PHP5用; SimpleXML利用
1166: } else {
1167: $this->unknown_certificate();
1168: $xml = simplexml_load_file($url);
1169: //レスポンス・チェック
1170: if ($xml == NULL) return FALSE;
1171: if ($xml->ResultInfo->Count <= 0) return FALSE;
1172: //検索結果取りだし
1173: $alt = (double)$xml->Feature[0]->Property->Altitude;
1174: }
1175:
1176: return $alt;
1177: }
解説:気圧を求める
1179: /**
1180: * 気圧を求める
1181: * @param float $altitude 標高(メートル)
1182: * @return float 気圧(ヘクトパスカル)
1183: */
1184: function getPressure($altitude) {
1185: return pow(10, (log10(1013.25) - ($altitude / 18410)));
1186: }
活用例
参考サイト
- YOLP 標高API:Yahoo!デベロッパーネットワーク
- PHP で最寄り駅を求める:ぱふぅ家のホームページ
- Yahoo!JAPAN デベロッパーネットワーク - WebAPIの登録方法:ぱふぅ家のホームページ
- 標高とポテトチップス袋の変化:ぱふぅ家のホームページ
- 地図・住所から標高/気圧/座標を調べる:みんなの知識 ちょっと便利帳
(2023年8月5日)国土地理院ジオコーディングAPIを利用できるようにした.検索キーの最小・最大長が指定できるようにした.