package com.nutiteq.advancedmap3.datasource; import com.nutiteq.core.MapTile; import com.nutiteq.core.TileData; import com.nutiteq.datasources.TileDataSource; /** * A custom raster tile data source that loads tiles from two sources: uses second one if tile does not exist in first. * Useful for offline-online hybrid source - if tile is not in offline, use online data, for example: * hybridDataSource = new OfflineOnlineTileDataSource(new PackageManagerTileDataSource(packageManager), new NutiteqOnlineTileDataSource("nutiteq.osm")); */ public class OfflineOnlineTileDataSource extends TileDataSource { private TileDataSource dataSource1; private TileDataSource dataSource2; public OfflineOnlineTileDataSource(TileDataSource dataSource1, TileDataSource dataSource2) { super(Math.min(dataSource1.getMinZoom(), dataSource2.getMinZoom()), Math.max(dataSource1.getMaxZoom(), dataSource2.getMaxZoom())); this.dataSource1 = dataSource1; this.dataSource2 = dataSource2; } public TileData loadTile(MapTile tile) { TileData tileData1 = dataSource1.loadTile(tile); if (tileData1 == null || tileData1.getData() == null || tileData1.isReplaceWithParent()) { return dataSource2.loadTile(tile); } else { return tileData1; } } }