2010-11-24 15 views

答えて

1

Googleマップは、クライアント側(ブラウザ内)で動作するjavascriptライブラリを介して使用されます。サーバー側では何もできません。

ただし、javascript(クライアント側)のバウンディングボックスのサイズを確認し、それに応じてズームレベルを設定することはできます。

私は不思議です:あなたはサーバー側でGoogleマップで何をやっていますか?

+0

しかし、どのようにズームしますか? – elvenbyte

6

@Peter実際には、Javaを使用してサーバー側で実行できることがあります。あなたのバウンディングボックスからの最小値と最大緯度/経度の値を計算し、次のコードを使用することができます。

int zoomLevel; 
double latDiff = latMax - latMin; 
double lngDiff = lngMax - lngMin; 

double maxDiff = (lngDiff > latDiff) ? lngDiff : latDiff; 
if (maxDiff < 360/Math.pow(2, 20)) { 
    zoomLevel = 21; 
} else { 
    zoomLevel = (int) (-1*((Math.log(maxDiff)/Math.log(2)) - (Math.log(360)/Math.log(2)))); 
    if (zoomLevel < 1) 
     zoomLevel = 1; 
} 

これはZOOM_SCALING_FACTOR = 0.3838で、320×320ピクセルの私の正方形のGoogleマップのためによく働きました。この数式はすべての正方形のGoogleマップで正しく機能するはずです。 log_2が使用されているのは、ズームレベルが1ずつ増加するたびにGoogleマップのサイズが2倍になるということです。ポイントがほぼ一致するエッジケース(zoomLevel = 21)と、グローブ全体目的のズーム(zoomLevel = 1)です。

このサーバー側では、JavaScriptのエンジンが複雑で(無駄になる可能性のある)数学から解放され、ページの読み込みが遅くなり、ユーザーエクスペリエンスが悪化する可能性があります。

+0

ありがとうございました。 – Blamkin86

関連する問題