goo blog サービス終了のお知らせ 

DEVELOPMENTOR*LEARNING RESOURCE LAB.

ソフトウェア開発現場の視点からソフトウェアと開発者の価値を高める「ホットな何か」をお届けします。(休止)

Google Mapsの測地系をYahoo!地図情報の測地系に変換するYGLatLng

2007年01月25日 | Web 2.0

Yahoo!地図情報(Webサービス)のサンプルを使ってみました。」の続きです。

今まで作ってきたGoogle MapsのAjaxアプリをYahoo!地図情報に移植しようとしましたが、Google MapsとYahoo!地図情報では測地系(緯度経度)が異なるため、Google Mapsの測地系をYahoo!地図情報の測地系に変換する必要がありました。

そこでGoogle Mapsの測地系をYahoo!地図情報の測地系に変換するYGLatLngクラスを用意してみました。その結果は↓こんな感じです。


View example

Google Mapsは世界測地系、Yahoo!地図情報は日本測地系(Tokyo 97?)を採用しています。そのため今回のケースでは、世界測地系を日本測地系に変換すればよいということ。

YGLatLagクラスのJavaScriptコードは次のとおりです。Google MapsのGLatLngクラスと同じように使えます。YGLatLagクラスを初期化すると、世界測地系を日本測地系に変換した後、YLLPointクラスを生成して返却します。

var YGLatLng = function(lat, lng) {
  return new YLLPoint(
    // http://blog.gpso.info/2006/08/post_2.html
    lat + lat * 0.00010696 - lng * 0.000017467 - 0.0046020,
    lng + lat * 0.000046047 + lng * 0.000083049 - 0.010041
  );
}

なお、世界測地系から日本測地系への変換は「Gpso.info 開発ブログ: 経度・緯度の表し方と変換」の計算式を使いました。ありがとうございます。その他にもいろいろな計算式が公開されていますので、とても役立ちます。

YGLatLngクラスの使い方は↓こんな感じです。Google Mapsをスクロールすると、Yahoo!地図情報のスクロールも追随するようにしてみましたので、YGLatLngクラスの妥当性を試すときにお使いください。

  var ymap = new YahooMapsCtrl("ymap", new YGLatLng(35.660347, 139.729121), 2);

  var gmap = new GMap2($('gmap'));
  gmap.addControl(new GSmallMapControl());
  gmap.addControl(new GMapTypeControl());
  gmap.setCenter(new GLatLng(35.660347, 139.729121), 17);
  GEvent.addListener(gmap, 'moveend', function() {
    var center = gmap.getCenter();
	ymap.moveTo(new YGLatLng(center.lat(), center.lng()));
  });

これで今まで作ってきたGoogle MapsのAjaxアプリをYahoo!地図情報に移植できそうです。


最新の画像もっと見る