【问题标题】:Why doesn't the map charge correctly?为什么地图不能正确充电?
【发布时间】:2017-09-04 15:15:46
【问题描述】:

我已从 zip 文件上传地图。加载后如果更改缩放级别,则无法正确加载移动屏幕之外的部分。 为什么它不起作用?

谢谢!

【问题讨论】:

  • 加载的地图来自缓存数据,剩余的地图没有加载,因为数据连接已关闭,假设根据您的屏幕截图。另外,Manifest 文件中是否有 Internet 权限?
  • 好的,如果我没有任何网络连接,它永远不会收费??
  • 如果您没有互联网,您希望如何加载地图?您可以使用离线 KML 文件在没有互联网的情况下加载地图,在此之前,必须通过互联网加载地图。
  • 另外,由于您使用 zip 文件加载地图,剩下的部分是您文件中没有的地图数据。

标签: java android tiles osmdroid


【解决方案1】:

如果 .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;
}

感谢关注:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多