私は、シークバーの移動に基づいて設定されたマップのズームレベルが10マイルであると言うアプリケーションに取り組んでおり、モバイル画面マップで10マイルの距離をカバーするマップの正確なズームレベルを計算します。添付画像の詳細説明
私のシークバーの初期位置は1マイルで、シークバーの最大位置を移動すると最大位置は50マイルです。たとえば、50マップは30 kmエリアのみをカバーし、80 kmエリアをカバーする必要があります。これを達成するためにコードを使用しています-
private int zoomLevel(double _distance) {
int newzoomlevel = 1;
double distance = _distance * 1609.34;
double equatorLength = 40075004; // in meters
double widthInPixels = screenWidth();
double metersPerPixel = equatorLength / 256;
int zoomLevel = 1;
while ((metersPerPixel * widthInPixels) > distance) {
metersPerPixel /= 2;
++zoomLevel;
}
Log.i("current zoom level", "zoom level = " + zoomLevel);
if (zoomLevel <=19) {
newzoomlevel = zoomLevel;
} else {
newzoomlevel = zoomLevel - 2;
}
return newzoomlevel;
}
メソッドではマイル単位であるため、パラメーターとしてシークパー位置を渡します。1609.34 を掛けてメーターに変換します。しかし、私のすべての結果は正しくありません。事前に感謝します。