4

私は、シークバーの移動に基づいて設定されたマップのズームレベルが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 を掛けてメーターに変換します。しかし、私のすべての結果は正しくありません。事前に感謝します。

4

0 に答える 0