如果 .zip 中没有图块,则实际答案不会在主题缩放级别上显示图块。
但是,如果您已经有要从较低缩放级别显示的图块 - 是的,您可以尝试!
有一种方法,你可以自己试试
map.getTileProvider().rescaleCache({some parameters olso is here});
下面描述了另一个可能不是那么简单的决定。
看起来您正在使用简单的方法,例如:
XYTileSource tileSource = new XYTileSource("map",
MIN_ZOOM_LEVEL, MAX_ZOOM_LEVEL, 256, ".png", new String[]{});
map.setTileSource(tileSource);
但是您可以继续执行更复杂的步骤:
XYTileSource tileSource = new XYTileSource("map",
MIN_ZOOM_LEVEL, MAX_ZOOM_LEVEL,256, ".png", new String[]{});
SimpleRegisterReceiver simpleRegisterReceiver =
new SimpleRegisterReceiver(getContext());
MapTileModuleProviderBase[] mapTileModuleProviderBases =
new MapTileModuleProviderBase[1];
mapTileModuleProviderBases[0] =
new MyMapTileFileArchiveProvider(simpleRegisterReceiver,
tileSource, mapArchiveFiles);
//mapArchiveFiles - your Array of IArchiveFile
//IArchiveFile iArchiveFile = ArchiveFileFactory.getArchiveFile(file);
//file - your .zip
MapTileProviderArray mapTileProviderArray =
new MapTileProviderArray(tileSource,
simpleRegisterReceiver, mapTileModuleProviderBases);
map.setTileProvider(mapTileProviderArray);
问题 - 什么是 MyMapTileFileArchiveProvider 类?
它不仅是 MapTileFileArchiveProvider 的子类,而且它们都有共同的父类:
public class MyMapTileFileArchiveProvider extends MapTileFileStorageProviderBase {}
此时欢迎您将 MapTileFileArchiveProvider 类的默认实现复制粘贴到您自己的类中,并查找此方法:
private synchronized InputStream getInputStream(final MapTile pTile,
final ITileSource tileSource) {
for (final IArchiveFile archiveFile : mArchiveFiles) {
if (archiveFile!=null) {final InputStream in =
archiveFile.getInputStream(tileSource, pTile);
if (in != null) {
if (Configuration.getInstance().isDebugMode()) {
Log.d(IMapView.LOGTAG, "Found tile " + pTile + " in " + archiveFile);
}
return in;
}
}
}
//Good place for your logic (as we call it - crutch)
//to look for available tiles for subject area on lower zoom level
//Do not surrender before return null!
return null;
}
感谢关注:)