サンプル・プログラムの実行例
サンプル・プログラム
wreturn.php | サンプル・プログラム本体 |
pahooGeoCode.php | 住所・緯度・経度に関わるクラス pahooGeoCode。 使い方は「PHPで住所・ランドマークから最寄り駅を求める」などを参照。include_path が通ったディレクトリに配置すること。 |
測地系の違い
明治初期、当時の東京天文台(東京都港区麻布台2-18-1)で行った観測によって日本経緯度原点が定められた。ここを基準にした三角測量によって全国の緯度・経度が測定された。これが日本測地系である。
一方、GPS衛星で測量している世界測地系の一種を WGS-84 と呼ぶ。
日本測地系では、1841年(天保11年)に定められたベッセル楕円体の地球の長半径(6,377,397.155m)を用いてきた。一方の世界措置系では、1980年(昭和55年)に定められたGRS80地球楕円体の長半径(6,378,137m)を利用している。同じ地点でも、測地系が違うと、緯度・経度にして12秒の差が生じするのである。
測地系変換プログラム
122: /**
123: * 世界測地系を日本測地系に変換する
124: * @param double $latitude 緯度(世界測地系)
125: * @param double $longitude 経度(世界測地系)
126: * @return double array(緯度,経度)(日本測地系)
127: */
128: function wgs84_tokyo($latitude, $longitude) {
129: $lat_tokyo = $latitude + $latitude * 0.00010696 - $longitude * 0.000017467 - 0.0046020;
130: $lng_tokyo = $longitude + $latitude * 0.000046047 + $longitude * 0.000083049 - 0.010041;
131:
132: return array($lat_tokyo, $lng_tokyo);
133: }
135: /**
136: * 日本測地系を世界測地系に変換する
137: * @param double $lat_tokyo 緯度(日本測地系)
138: * @param double $lng_tokyo 経度(日本測地系)
139: * @return double array(経度,緯度)(世界測地系)
140: */
141: function tokyo_wgs84($lat_tokyo, $lng_tokyo) {
142: $latitude = $lat_tokyo - $lat_tokyo * 0.00010695 + $lng_tokyo * 0.000017464 + 0.0046017;
143: $longitude = $lng_tokyo - $lat_tokyo * 0.000046038 - $lng_tokyo * 0.000083043 + 0.010040;
144:
145: return array($latitude, $longitude);
146: }
いずれも、緯度・経度を引数とし、変換後の緯度・経度を戻す。
ここで問題なのが、2つの戻り値があるということだ。
通常、PHPの関数は return 文で1つの値を返す。これを2つ返すためにどうしたらいいか。
ここでは配列を用いることにした。ユーザー関数側で array を使い、呼び出した側では list を使って受け取るのである。
配列を使うメリットは、戻り値が3つ、4つ‥‥いくつあっても戻すことができる点である。
準備:pahooGeoCode クラス
73: //住所・緯度・経度に関わるクラス:include_pathが通ったディレクトリに配置
74: require_once('pahooGeoCode.php');
349: //pahooGeoCodeクラス
350: $pgc = new pahooGeoCode();
クラスについては「PHPでクラスを使ってテキストの読みやすさを調べる」を参照されたい。
Yahoo! JAPAN Webサービスを利用するには Yahoo! JAPAN Webサービス アプリケーションIDが必要で、その入手方法は「Yahoo!JAPAN デベロッパーネットワーク - WebAPIの登録方法」を参照されたい。
また、地図としてGoogleマップを利用するのであれば、Google Cloud Platform APIキー が必要で、その入手方法は「Google Cloud Platform - WebAPIの登録方法」を参照されたい。また、Googleマップで経路探索を行う場合は、DirectionsService APIを有効にする必要がある。課金率が高いので留意されたい。
準備:地図サービス(WebAPI)の選択
34: //地図サービス(WebAPI)の選択
35: // 0:Google
36: // 2:地理院地図・OSM
37: define('MAPSERVICE', 2);
あらかじめ、定数 MAPSERVICE に値を設定すること。
参考サイト
- 天文経緯度と測地経緯度:塩屋天体観測所
今回は座標変換を例に、2つの値を戻す関数を作ってみることにする。
(2021年2月13日)PHP8対応