2012-01-03 4 views
1

я уже проверил this answer, но пример не делает ничего больше, чем показывают серые плитки (я в автономном режиме) для уровня масштабирования больше, чем предел дарю (4 в моем случае) ...Как установить максимальное увеличение в osmdroid?

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-карты. Мое понимание проблемы заключается в том, что код показывает все плитки для каждого масштаба он находит и при отсутствии других масштабирование не будут найдены все еще увеличивает масштаб

The API clearly specifies setting the max zoom level в конструкторе 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?

+0

даже имейте следующий osmdroid, позвольте мне завязать, если у вас получится обходной путь, возможно, он получил smthn, чтобы сделать wit управления зуммированием, когда v использовать mapview.setBuiltinZoomControls() .. –

ответ

3

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

+0

это означает, что мне нужно добавить проект osmdroid в качестве библиотеки проект (т. е. не как файл jar), не так ли? Не могли бы вы подробно рассказать о процессе, чтобы я мог принять ответ? –

+0

На данный момент наш проект имеет зависимость от osmdroid-андроида. Если вы хотите реализовать этот проект как банку, я предлагаю вам изменить его и впоследствии экспортировать как новую банку. – Dominik

+0

Остерегайтесь делать это, так как OSMDroid - LGPL. Если вы измените источник и опубликуете, что вы обязаны опубликовать в LGPL и включить измененный источник. –

1

Вы можете найти подробную intruction, как построить флягу здесь here

Изменение 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 Я рекомендую эту версию, потому что будет проще использовать патч с ограничениями прокрутки рядом с пределом масштабирования.

10

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

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

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

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

+0

дорогой jatowler. где именно я должен был бы поставить этот код? – birgit

+0

Это именно то, что я искал. Благодаря! – jbc25

+0

Это прекрасно работает. Я думаю, что это должен быть принятый ответ. Просто помните, что вам нужно также перейти на перегруженный класс в ваших файлах макетов. –