Как установить максимальный зум в osmdroid? - PullRequest
1 голос
/ 03 января 2012

Я уже проверил этот ответ , но в примере ничего не сказано, кроме показать серые плитки (я в автономном режиме) для zoom уровень, превышающий установленный мной предел (4 в моем случае) ...

OnlineTileSourceBase source = new XYTileSource("tiles", ResourceProxy.string.offline_mode, 0, 4, 256, ".png", "");

Следующий код показывает maxZoom=4:

int zoomLevel = source.getMaximumZoomLevel();
Toast.makeText(this, "maxZoom=" + zoomLevel, Toast.LENGTH_SHORT).show();

Для уровней масштабирования от 0 до 4 мой код работает должным образом: он загружает фрагменты карты с SD-карты. Мое понимание проблемы состоит в том, что код показывает все плитки для каждого найденного увеличения, а когда другие масштабы не найдены, он все еще увеличивается.

API четко определяет настройку максимального уровня масштабирования в конструкторе XYTileSource (final int aZoomMaxLevel):

public XYTileSource(final String aName, final string aResourceId, final int aZoomMinLevel,
                        final int aZoomMaxLevel, final int aTileSizePixels, final String aImageFilenameEnding,
                        final String... aBaseUrl)

Есть ли обходные пути? Что я делаю неправильно? Как я могу заблокировать увеличение, чтобы пользователь не смог пройти уровень 4?

Ответы [ 3 ]

10 голосов
/ 09 марта 2012

Класс MapView определяет публичную функцию getMaxZoomLevel(). Тривиальное расширение MapView позволит вам переопределить эту функцию, чтобы она возвращала все, что вы хотите, без необходимости перекомпиляции источника osmdroid в JAR:

public class ZoomLimitMapView extends MapView
{
    /* snip the constructors */

    @Override
    public int getMaxZoomLevel()
    {
        return 4;
    }
}

Вам не нужен минимальный уровень масштабирования, но если вы это сделали, getMinZoomLevel() также является общедоступным и может быть переопределено. И очевидно, что использование константного литерала 4, вероятно, плохая идея; лучше загружать динамически с SharedPreferences, если вы не знаете, что ваши изображения никогда не изменятся.

3 голосов
/ 05 января 2012

Мы нашли обходной путь, чтобы глобально установить максимальный уровень масштабирования для всего приложения. Вам нужно изменить значение до желаемого уровня в файле OpenStreetMapTileProviderConstants в пакете org.osmdroid.tileprovider.constants в проекте osmdroid-android.Это не правильный путь, но у нас он работает очень хорошо!:)

1 голос
/ 21 февраля 2012

Подробную информацию о том, как создать банку, можно найти здесь здесь

Изменение MAXIMUM_ZOOMLEVEL в org.osmdroid.views.util.constants.MapViewConstants и org.osmdroid.tileprovider.constants.OpenStreetMapTileProviderConstants должен выполнять эту работу.

Получить источник osmdroid из SVN http://osmdroid.googlecode.com/svn/branches/release_3_0_5 Я рекомендую эту версию, поскольку в конечном итоге будет проще применить патч ограничения прокрутки рядом с пределом масштабирования.

...