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

サンプル・プログラム
wreturn.php | サンプル・プログラム本体 |
pahooGeoCode.php | 住所・緯度・経度に関わるクラス pahooGeoCode。 使い方は「PHPで住所・ランドマークから最寄り駅を求める」などを参照。include_path が通ったディレクトリに配置すること。 |
pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
バージョン | 更新日 | 内容 |
---|---|---|
1.2.0 | 2025/08/22 | .pahooEnv 導入 |
1.1 | 2021/02/13 | PHP8対応 |
1.0 | 2015/11/22 | 初版 |
バージョン | 更新日 | 内容 |
---|---|---|
6.8.0 | 2025/08/10 | アクセスキーなどを ".env" に分離 |
6.7.1 | 2025/07/26 | jsLine_Gmap() - bug-fix |
6.7.0 | 2025/07/20 | drawJSmap,drawGMap -- 引数 $markerLevel 追加 |
6.6.0 | 2025/07/19 | drawJSmap,drawGMap,drawLeaflet -- マップ中心マーカー表示引数を追加 |
6.5.0 | 2025/06/14 | GoogleMaps JavaScript APIの変更に対応 |
バージョン | 更新日 | 内容 |
---|---|---|
2.0.1 | 2025/08/11 | getParam() bug-fix |
2.0.0 | 2025/08/11 | pahooLoadEnv() 追加 |
1.9.0 | 2025/07/26 | getParam() 引数に$trim追加 |
1.8.1 | 2025/03/15 | validRegexPattern() debug |
1.8.0 | 2024/11/12 | validRegexPattern() 追加 |
測地系の違い

明治初期、当時の東京天文台(東京都港区麻布台2-18-1)で行った観測によって日本経緯度原点が定められた。ここを基準にした三角測量によって全国の緯度・経度が測定された。これが日本測地系である。
一方、GPS衛星で測量している世界測地系の一種を WGS-84 と呼ぶ。
日本測地系では、1841年(天保11年)に定められたベッセル楕円体の地球の長半径(6,377,397.155m)を用いてきた。一方の世界措置系では、1980年(昭和55年)に定められたGRS80地球楕円体の長半径(6,378,137m)を利用している。同じ地点でも、測地系が違うと、緯度・経度にして12秒の差が生じするのである。
測地系変換プログラム
wreturn.php
127: /**
128: * 世界測地系を日本測地系に変換する
129: * @param double $latitude 緯度(世界測地系)
130: * @param double $longitude 経度(世界測地系)
131: * @return double array(緯度,経度)(日本測地系)
132: */
133: function wgs84_tokyo($latitude, $longitude) {
134: $lat_tokyo = $latitude + $latitude * 0.00010696 - $longitude * 0.000017467 - 0.0046020;
135: $lng_tokyo = $longitude + $latitude * 0.000046047 + $longitude * 0.000083049 - 0.010041;
136:
137: return array($lat_tokyo, $lng_tokyo);
138: }
wreturn.php
140: /**
141: * 日本測地系を世界測地系に変換する
142: * @param double $lat_tokyo 緯度(日本測地系)
143: * @param double $lng_tokyo 経度(日本測地系)
144: * @return double array(経度,緯度)(世界測地系)
145: */
146: function tokyo_wgs84($lat_tokyo, $lng_tokyo) {
147: $latitude = $lat_tokyo - $lat_tokyo * 0.00010695 + $lng_tokyo * 0.000017464 + 0.0046017;
148: $longitude = $lng_tokyo - $lat_tokyo * 0.000046038 - $lng_tokyo * 0.000083043 + 0.010040;
149:
150: return array($latitude, $longitude);
151: }
いずれも、緯度・経度を引数とし、変換後の緯度・経度を戻す。
ここで問題なのが、2つの戻り値があるということだ。

通常、PHPの関数は return 文で1つの値を返す。これを2つ返すためにどうしたらいいか。
ここでは配列を用いることにした。ユーザー関数側で array を使い、呼び出した側では list を使って受け取るのである。

配列を使うメリットは、戻り値が3つ、4つ‥‥いくつあっても戻すことができる点である。
準備:PHP の https対応


Windowsでは、"php.ini" の下記の行を有効化する。
extension=php_openssl.dllLinuxでは --with-openssl=/usr オプションを付けて再ビルドする。→OpenSSLインストール手順

これで準備は完了だ。
準備:pahooInputData 関数群

また、各種クラウドサービスに登録したときに取得するアカウント情報、アプリケーションパスワードなどを登録した .pahooEnv ファイルから読み込む関数 pahooLoadEnv を備えている。こちらについては、「各種クラウド連携サービス(WebAPI)の登録方法」をご覧いただきたい。
準備:pahooGeoCode クラス
pahooGeoCode.php
40: class pahooGeoCode {
41: public $items; // 検索結果格納用
42: public $error; // エラー・フラグ
43: public $errmsg; // エラー・メッセージ
44: public $hits; // 検索ヒット件数
45: public $webapi; // 直前に呼び出したWebAPI URL
46:
47: // -- 以下のデータは .env ファイルに記述可能
48: // Google Cloud Platform APIキー
49: // https://cloud.google.com/maps-platform/
50: // ※Google Maps APIを利用しないのなら登録不要
51: public $GOOGLE_API_KEY_1 = ''; // HTTPリファラ用
52: public $GOOGLE_API_KEY_2 = ''; // IP制限用
53: public $GOOGLE_MAP_ID = ''; // GoogleMaps ID
54:
55: // Yahoo! JAPAN Webサービス アプリケーションID
56: // https://e.developer.yahoo.co.jp/register
57: // ※Yahoo! JAPAN Webサービスを利用しないのなら登録不要
58: public $YAHOO_APPLICATION_ID = '';
59:
60: // OSM Nominatim Search API利用時に知らせるメールアドレス
61: // https://wiki.openstreetmap.org/wiki/JA:Nominatim#.E6.A4.9C.E7.B4.A2
62: // ※OSM Nominatim Search APIを利用しないのなら登録不要
63: public $NOMINATIM_EMAIL = '';
64:
65: // IP2Location.io APIキー
66: // https://www.ip2location.io/
67: // ※IP2Location.ioを利用しないのなら登録不要
68: public $IP2LOCATION_API_KEY = '';

地図や住所検索として Google を利用するのであれば Google Cloud Platform APIキー とマップID が必要で、その入手方法は「Google Cloud Platform - WebAPIの登録方法」を、Yahoo!JAPAN を利用するのであれば Yahoo! JAPAN Webサービス アプリケーションIDが必要で、その入手方法は「Yahoo!JAPAN デベロッパーネットワーク - WebAPIの登録方法」を、IP2Location.ioを利用するのであれば「PHPでIPアドレスやホスト名から住所を求める」を、それぞれ参照されたい。

PHPのクラスについては「PHPでクラスを使ってテキストの読みやすさを調べる」を参照されたい。
準備:地図サービス(WebAPI)の選択
wreturn.php
52: // 各種定数(START) ===========================================================
53:
54: // 地図描画サービスの選択
55: // 0:Google
56: // 2:地理院地図・OSM
57: define('MAPSERVICE', 2);
58:
59: // マップの表示サイズ(単位:ピクセル)
60: define('MAP_WIDTH', 600);
61: define('MAP_HEIGHT', 400);
62: // マップID
63: define('MAPID', 'map_id');
64: // 初期値
65: define('DEF_LATITUDE', 35.4658); // 緯度
66: define('DEF_LONGITUDE', 139.6223); // 経度
67: define('DEF_TYPE', 'roadmap'); // マップタイプ
68: define('DEF_ZOOM', 13); // ズーム
69:
70: // 各種定数(END) ===============================================================
あらかじめ、定数 MAPSERVICE に値を設定すること。
参考サイト
- 天文経緯度と測地経緯度:塩屋天体観測所
今回は座標変換を例に、2つの値を戻す関数を作ってみることにする。
(2025年8月22日).pahooEnv 導入
(2025年6月14日)GoogleMaps JavaScript APIの変更に対応した.