Плитки карты в Osmdroid предоставляются провайдерами листов карты.Поставщик плиток по умолчанию, используемый Osmdroid: MapTileProviderBasic .Этот провайдер расширяет MapTileProviderArray , что означает, что он является массивом нескольких других провайдеров плиток - при запросе плитки у этих провайдеров листов один за другим запрашивается изображение плитки, пока один из них не предоставит его.Взгляните на конструктор MapTileProviderBasic
:
public MapTileProviderBasic(final IRegisterReceiver pRegisterReceiver,
final INetworkAvailablityCheck aNetworkAvailablityCheck,
final ITileSource pTileSource) {
super(pTileSource, pRegisterReceiver);
final TileWriter tileWriter = new TileWriter();
final MapTileFilesystemProvider fileSystemProvider =
new MapTileFilesystemProvider(pRegisterReceiver, pTileSource);
mTileProviderList.add(fileSystemProvider);
final MapTileFileArchiveProvider archiveProvider =
new MapTileFileArchiveProvider(pRegisterReceiver, pTileSource);
mTileProviderList.add(archiveProvider);
final MapTileDownloader downloaderProvider =
new MapTileDownloader(pTileSource, tileWriter, aNetworkAvailablityCheck);
mTileProviderList.add(downloaderProvider);
}
В массив провайдеров добавлено три провайдера листов карты в следующем порядке:
MapTileFilesystemProvider
-предоставляет плитки из файловой системы (каталог SD-карты) MapTileFileArchiveProvider
- предоставляет плитки из архива в файловой системе MapTileDownloader
- предоставляет плитки путем загрузки их из Интернета (например, из OSM)серверы)
Таким образом, MapTileProviderBasic
сначала ищет данную плитку в файловой системе, если плитка недоступна, она ищет ее в архивных файлах и снова, если она там недоступна,загружает плитку из Интернета.
Хорошо, это механизм по умолчанию.Если вы хотите изменить этот механизм для поиска плиток, хранящихся в БД, вы можете создать свой собственный класс, подобный MapTileProviderBasic
.Таким образом, ваш класс может также расширить MapTileProviderArray
и просто использовать других провайдеров в конструкторе.В Osmdroid есть класс DatabaseFileArchive , который, вероятно, может помочь вам в чтении плиток из БД.
После создания собственного провайдера плиток вы должны использовать его вместо стандартного.Поставщики листов карты прикреплены к MapView
.Некоторые из конструкторов MapView
принимают MapTileProviderBase
в качестве аргумента - вы можете использовать один из них для присоединения вашего собственного провайдера.