PHPでGoogleを利用して緯度・経度や住所を求める

(1/1)
今回は、「PHP で Google を利用して住所から緯度・経度を求める」と「PHP で緯度・経度から住所を求める」の 2 つをマッシュアップし、Google マップに表示されている地点の緯度・経度や住所を求めるプログラムをつくってみることにする。

サンプル・プログラム

PHPでGoogleを利用して緯度・経度や住所を求める

ダウンロード(PHP4/5共用)

サンプル・プログラムの流れ

SVG-W3C ※上図を見るにはSVGビューワが必要です。
Corel SVG Viewer

GoogleMaps API key を取得する

GoogleMaps API を利用するためには、API key が必要だ。
まだお持ちでない方は、Google Maps API のページからサインアップして、API key を取得してほしい。

サンプル・プログラムの解説:初期設定

表示する Google マップの縦横サイズはユーザー変数 $GoogleMaps_width, $GoogleMaps_height に、GoogleMaps API はユーザー変数 $GoogleMapsID に設定しておくこと。

0015: //GoogleMapsの表示サイズ
0016: $GoogleMaps_width  = '600px';
0017: $GoogleMaps_height = '400px';
0018: 
0019: //自分自身の実行ファイル名
0020: $MySelf = basename($_SERVER['SCRIPT_NAME']);
0021: 
0022: /**
0023:  * 「GoogleMaps API」ID
0024:  * @global string $GoogleMapsID あなたのID
0025: */
0026: $GoogleMapsID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

サンプル・プログラムの解説:Googleマップの表示

住所から緯度・経度を求める PHP スクリプトは「PHP で Google を利用して住所から緯度・経度を求める」で紹介したものと同じである。
これを受けて Google マップを表示する JavaScript の部分である。
space
地図の移動終了(moveend)、拡大率の変更完了(zoomend)、地図タイプの変更(maptypechanged)といったイベントが発生する都度、地図情報(ズーム値、地図タイプ)と地図中央の緯度・経度を取得し表示させるために、JavaScript のユーザー関数 getPointData を用意している。

0290: <script language="JavaScript" type="text/javascript">
0291: <!--
0292: var map = new GMap2(document.getElementById("map"));
0293: map.addControl(new GLargeMapControl());
0294: map.addControl(new GMapTypeControl());
0295: map.addControl(new GScaleControl());
0296: map.setCenter(new GLatLng($lat$lng), $zm);
0297: map.addControl(new GOverviewMapControl(new GSize(150, 150)));
0298: map.setMapType($type);
0299: 
0300: GEvent.addListener(map, "moveend", getPointData) ;
0301: GEvent.addListener(map, "zoomend", getPointData) ;
0302: GEvent.addListener(map, "maptypechanged", getPointData) ;
0303: 
0304: document.getElementById("map").appendChild(overview); 
0305: 
0306: -->
0307: </script>

サンプル・プログラムの解説:緯度・経度情報の取得と表示

イベント GEvent 発生時に ユーザー関数 getPointData が呼び出される。
この関数は、地図情報(ズーム値、地図タイプ)と地図中央の緯度・経度を取得、表示すると共に、ユーザー関数 wgs84_tokyo を呼び出し、取得した世界測地系の緯度・経度を日本測地系に変換する。
世界測地系とに本則地形の違いについては「PHP で携帯電話の位置情報を調べる」を参照のこと。
space

0248: <script language="JavaScript">
0249: <!--
0250: //世界測地系を日本測地系に変換する
0251: function wgs84_tokyo() {
0252:     var lat = document.getElementById("lat").value * 1.0;
0253:     var lng = document.getElementById("lng").value * 1.0;
0254:     var lat_t = lat + lat * 0.00010696  - lng * 0.000017467 - 0.0046020;
0255:     var lng_t = lng + lat * 0.000046047 + lng * 0.000083049 - 0.010041;
0256: 
0257:     document.getElementById("lng_t").value = lng_t;
0258:     document.getElementById("lat_t").value = lat_t;
0259: }
0260: 
0261: //地図情報を取得する
0262: function getPointData() {
0263:     point = map.getCenter();
0264:     document.getElementById("lng").value = point.x;
0265:     document.getElementById("lat").value = point.y;
0266:     document.getElementById("zm").value  = map.getZoom();
0267: 
0268:     type = map.getCurrentMapType().getName(true);
0269: 
0270:     var types = {"G_NORMAL_MAP":"地図", "G_SATELLITE_MAP":"写真", "G_HYBRID_MAP":"両方" };
0271:     for (key in types) {
0272:         if (types[key] == type) {
0273:             document.getElementById("type").value  = key;
0274:             break;
0275:         }
0276:     }
0277:     wgs84_tokyo();
0278: }
0279: -->
0280: </script>

参考書籍

参考サイト

(この項おわり)
header