「Yahoo!地図情報(Webサービス)のサンプルを使ってみました。」の続きです。
今まで作ってきたGoogle MapsのAjaxアプリをYahoo!地図情報に移植しようとしましたが、Google MapsとYahoo!地図情報では測地系(緯度経度)が異なるため、Google Mapsの測地系をYahoo!地図情報の測地系に変換する必要がありました。
そこでGoogle Mapsの測地系をYahoo!地図情報の測地系に変換するYGLatLngクラスを用意してみました。その結果は↓こんな感じです。
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!地図情報に移植できそうです。