サーバー側(Javaでコード化されている)のバウンディングボックスのGoogleマップのズームレベルを取得する必要がありますか?
2 に答える
@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 エンジンが、ページの読み込みを遅くし、ユーザー エクスペリエンスを悪化させる可能性のある複雑な (そして潜在的に無駄な) 計算から解放されることです。
Google マップは、クライアント側 (ブラウザ内) で実行される JavaScript ライブラリを介して使用されます。サーバー側でできることは何もありません。
ただし、javascript (クライアント側) でバウンディング ボックスのサイズを確認し、それに応じてズーム レベルを設定することができます。
興味があります: サーバー側で Google マップを使って何をしていますか?