3

サーバー側(Javaでコード化されている)のバウンディングボックスのGoogleマップのズームレベルを取得する必要がありますか?

4

2 に答える 2

7

@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 の 320x320 ピクセルの正方形の Google マップでうまく機能しました。この式は、どの正方形の Google マップでも正しく機能するはずです。log_2 が使用されている理由は、ズーム レベルが 1 増加するたびに Google マップのサイズが 2 倍になるためです。また、ポイントが互いにほぼ一致する (zoomLevel = 21) エッジ ケースと、地球全体が目的のズーム (zoomLevel = 1) です。

このサーバー側で行うことの良い点は、JavaScript エンジンが、ページの読み込みを遅くし、ユーザー エクスペリエンスを悪化させる可能性のある複雑な (そして潜在的に無駄な) 計算から解放されることです。

于 2013-05-21T09:45:34.293 に答える
1

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

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

興味があります: サーバー側で Google マップを使って何をしていますか?

于 2010-11-24T13:21:44.473 に答える