サンプル・プログラムの実行例
サンプル・プログラム
getlatlng.php | サンプル・プログラム本体 |
pahooGeoCode.php | 住所・緯度・経度に関わるクラス pahooGeoCode。 使い方は「PHPで住所・ランドマークから最寄り駅を求める」「PHPで住所・ランドマークから緯度・経度を求める」などを参照。include_path が通ったディレクトリに配置すること。 |
pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
バージョン | 更新日 | 内容 |
---|---|---|
2.7.0 | 2023/07/16 | 検索キーの最小・最大長の指定 |
2.6.0 | 2023/07/02 | 国土地理院ジオコーディングAPIを追加 |
2.5 | 2021/10/10 | PHP8対応,リファラ・チェック改良など |
2.4 | 2020/04/18 | Yahoo! JavaScriptマップ,地理院地図、OpenStreetMapに対応。逆ジオコーディングサービスの選択肢を増やした。 |
2.3 | 2017/08/23 | GoogleMaps API呼び出しに region=JP 追加 |
バージョン | 更新日 | 内容 |
---|---|---|
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)の選択
48: //地図描画サービスの選択
49: // 0:Google
50: // 2:地理院地図・OSM
51: define('MAPSERVICE', 2);
52:
53: //住所検索サービスの選択
54: // 0:Google
55: // 1:Yahoo!JAPAN
56: // 11:HeartRails Geo API
57: // 12:OSM Nominatim Search API
58: // 13:国土地理院ジオコーディングAPI
59: define('GEOSERVICE', 12);
60:
61: //逆ジオコーディングサービスの選択
62: // 0:Google
63: // 1:Yahoo!JAPAN
64: // 11:HeartRails Geo API
65: // 21:簡易ジオコーディングサービス
66: define('REVGEOSERVICE', 21);
住所検索サービスは、Google、Yahoo!JAPAN、HeartRails Geo API、OSM Nominatim Search API から選べる。あらかじめ、定数 GEOSERVICE に値を設定すること。
逆ジオコーディングサービスは、Google、Yahoo!JAPAN、HeartRails Geo API、簡易ジオコーディングサービスから選べる。あらかじめ、定数 REVGEOSERVICE に値を設定すること。
解説:初期設定
68: //マップの表示サイズ(単位:ピクセル)
69: define('MAP_WIDTH', 600);
70: define('MAP_HEIGHT', 400);
71: //マップID
72: define('MAPID', 'map_id');
73: //初期値
74: define('DEF_LATITUDE', 35.67); //緯度
75: define('DEF_LONGITUDE', 139.78); //経度
76: define('DEF_TYPE', 'roadmap'); //マップタイプ
77: define('DEF_ZOOM', 8); //ズーム
78: define('DEF_CATEGORY', 'address'); //カテゴリ
79:
80: //検索キーの最小文字長
81: define('QUERY_MIN_LEN', 3);
82:
83: //検索キーの最大文字長
84: define('QUERY_MAX_LEN', 99);
解説:測地系変換
599: /**
600: * 世界測地系を日本測地系に変換する
601: * @param float $long 経度(世界測地系)
602: * @param float $lat 緯度(世界測地系)
603: * @return float array(経度,緯度)(日本測地系)
604: */
605: function wgs84_tokyo($long, $lat) {
606: $glong = $long + $lat * 0.000046047 + $long * 0.000083049 - 0.010041;
607: $glat = $lat + $lat * 0.00010696 - $long * 0.000017467 - 0.0046020;
608: return array($glong, $glat);
609: }
解説:リージョン
これを回避するためには、API呼び出しでパラメータ "region=JP" を追加してやる必要がある。気持ちが悪い方は、下記のようにAPI呼び出しを修正してほしい。
893: <script src="https://maps.googleapis.com/maps/api/js?key={$key}&callback=initMap&region=JP" async defer></script>
894: <script>
895: function initMap() {
参考サイト
- Google Geocoding API
- 緯度・経度算出(For GoogleMap)
- PHPの関数で複数の値を戻す:ぱふぅ家のホームページ
- PHPで住所・ランドマークから緯度・経度を求める:ぱふぅ家のホームページ
- PHPで緯度・経度から住所を求める:ぱふぅ家のホームページ
- PHPでクラウド連携:参考書籍:ぱふぅ家のホームページ
(2023年7月14日)検索キーの最小・最大長が指定できるようにした.
(2023年7月2日)国土地理院ジオコーディングAPIを利用できるようにした.