2011-01-04 20 views
2

私はそれにポイントの束を持ったマップを持っており、すべてのポイントが画面に収まるようにズームしたいです。このコードはかなり簡単です:GoogleマップAPIでGLatLngBounds(四角形)を10%増やすにはどうすればよいですか?

var bounds = new GLatLngBounds(); 

for (var n = 0; n < points.length; n++) { 
    bounds.extend(points[n].getLatLng()); 
} 

zoomLevel = map.getBoundsZoomLevel(bounds); 

ズームレベルを取得するには、境界オブジェクトを渡す必要があります。境界オブジェクトを作成するには、四角形のような2つの点を指定するか、またはその点を渡します。必要な場合は、上のようにポイントを組み込みます。

問題は、ポイントが画面の端に正しく表示されることです。境界のサイズを10%増やしたいと思います。私はbounds.getNorthEast();bounds.getSouthWest();を使って2つのポイントをオブジェクトから外に出すことができますが、境界のサイズの10%を増やすのは面倒です。私はtoSpan()を境界線のサイズを含むLatLngを与え、次にLatとLngの10%を与えて私の座標に加えました。しかし、それは動作していないようです。この試みのコードは、

var pointNorthEast = bounds.getNorthEast(); 
var pointSouthWest = bounds.getSouthWest(); 

var latAdjustment = ((pointNorthEast.lat() - pointSouthWest.lat()) * increasePercentage)/2; 
var lngAdjustment = ((pointNorthEast.lng() - pointSouthWest.lng()) * increasePercentage)/2; 


var newPointNorthEast = new GLatLng(pointNorthEast.lat() + latAdjustment, pointNorthEast.lng() + lngAdjustment); 
var newPointSouthWest = new GLatLng(pointSouthWest.lat() - latAdjustment, pointSouthWest.lng() - lngAdjustment); 


bounds = new GLatLngBounds(); 

bounds.extend(newPointNorthEast); 
bounds.extend(newPointSouthWest); 

私の計算では、境界は10%大きくなるはずです。私はそれがちょうど長方形を表しているかどうか、または座標データを保存しているかどうか確信していないので、私はそれを中央に保つために各側の増加の半分を加算/減算するチャンスを取らなかった。

しかし、1.1や1.5などのさまざまなincreasePercentage値を試しても、違いはありません。

したがって、私は自分の論理、私の数学、またはzoomLevelが滑らかなスケールではないという事実が、私の試みを妨害しているかのいずれかを起こしました。

私はちょうどzoomLevel -= 1をしなければならないかもしれないと思うし、それをやったが、誰かが最初にアイデアを持っていたかどうかを見たいと思った。

+0

この上の任意の更新を? –

+1

3年前のこと、私は昨晩の夕食に何があったのか覚えていません... – NibblyPig

+0

それは私が思ったものですが、 –

答えて

2

問題は、あなたの数学であり、ここにあなたが調整を計算する必要がある方法は次のとおりです。

var latAdjustment = ((pointNorthEast.lat() - pointSouthWest.lat()) * (increasePercentage - 1); 
var lngAdjustment = ((pointNorthEast.lng() - pointSouthWest.lng()) * (increasePercentage - 1); 
3

は、ここでは、現在のAPIバージョン(V3.0)を使用してコードを更新しています:

var increasePercentage = 1.10; //10% 
var pointSouthWest = mb.getSouthWest(); 
var latAdjustment = (pointNorthEast.lat() - pointSouthWest.lat()) * (increasePercentage - 1); 
var lngAdjustment = (pointNorthEast.lng() - pointSouthWest.lng()) * (increasePercentage - 1); 
var newPointNorthEast = new google.maps.LatLng(pointNorthEast.lat() + latAdjustment, pointNorthEast.lng() + lngAdjustment); 
var newPointSouthWest = new google.maps.LatLng(pointSouthWest.lat() - latAdjustment, pointSouthWest.lng() - lngAdjustment); 

bounds = new google.maps.LatLngBounds(); 
bounds.extend(newPointNorthEast); 
bounds.extend(newPointSouthWest); 
map.fitBounds(bounds); 
関連する問題