2012-03-06 5 views
10

scroll gmapsGoogleマップ:プログラムでのxピクセルのスクロールマップ

がプログラムxピクセルのGoogleの地図をスクロールする簡単な方法はありますか?

私はsetCenterを使用して考えることができますが、問題は、私はズームレベルに応じて、新しい場所(緯度/経度)を計算しなければならないということです...

あなたが何か他のものを考えることができますか?あなたがそれについてかなり確信しているなら、Google Map APIでは不可能であると私に伝えることは有効な答えです。

PS:あなたが宝石で、それは涼しいだろうことを行うための方法を考えることができますので、もし私が、Gmaps4railsを使用しています。 (マップのサブセットに境界を調整するように) 最終的に私の目標は、メニューがいくつかのマーカーを隠すのを防ぐことです。マップのビューポートを変更する必要があります。そうすれば、フルマップではなくオレンジ色の領域にマーカを合わせることができます。

fit markers


ソリューション:

@Shaneベスト、素晴らしい、アイデアが完璧に動作しますが、私はあなたのソリューションは、右、のGoogle API v2のためだったと思いますか?ここで私はV3のためにそれをやった方法は次のとおりです。

var point = map.getCenter(); 

var overlay = new google.maps.OverlayView(); 
overlay.draw = function() {}; 
overlay.setMap(map); 

var projection = overlay.getProjection(); 

var pixelpoint = projection.fromLatLngToDivPixel(point); 
pixelpoint.x += my_value; # or .y 

point = projection.fromDivPixelToLatLng(pixelpoint); 

map.setCenter(point); 

誰もがAPI v3のとのより良い解決策を知っている場合は、それについて教えて。

答えて

12

は、投影対象物を見てみましょう: http://code.google.com/apis/maps/documentation/javascript/reference.html#Projection

まずあなたがマップの中心を取得する必要があります。

var point = map.getCenter(); 

latinをポイント値に変換します。

var pixelpoint = projection.fromLatLngToPoint(point); 

あなたの値をポイント値に追加します。

pixelpoint.x = pixelpoint.x + yourvalue; 
//or 
pixelpoint.y = pixelpoint.y + yourvalue; 

latLngに戻します。

var newpoint = projection.fromPointToLatLng(pixelpoint); 

新しい値で新しい中心を設定します。

map.setCenter(newpoint); 

私は上記をテストしていませんが、動作するはずです。

+0

私はこれを試してみるつもりです、ありがとう。 – Robin

+0

あなたの写真を見て、あなたの問題をよりよく理解しようとしています。あなたはフィットバウンドでより良いかもしれません。 http://stackoverflow.com/a/2496558/787921 –

+0

さて、境界は私のマーカーで定義されています。与えられた一連のマーカーでは常に同じです。私ができないことは基本的に地図のビューポートを修正して、メニューの上部を除外して、地図のfitBoundsメソッドが自分の望むように仕事をすることができるようにすることです。 (私はすでにfitBoundsを使用していますが、いくつかのマーカーはメニューによって隠されている可能性があります)。 – Robin

3

私はあなたがこれを見ていると信じて:この場合

var panListener = google.maps.event.addListenerOnce(map, 'bounds_changed', function(event) { 
        map.panBy(0,-90); 
       }); 

setTimeout(function() { 
    google.maps.event.removeListener(panListener) 
}, 2000); 

、それは90PXで南のマップを移動します。

関連する問題