简体   繁体   English

为什么地图不能正确充电?

[英]Why doesn't the map charge correctly?

I have uploaded the map from a zip file. 我已经从一个zip文件中上传了地图。 After loaded if you change the zoom level, the part that is outside the mobile screen is not loaded correctly. 加载后,如果您更改缩放级别,则无法正确加载移动屏幕外部的部件。 Why doesn't it work? 为什么不起作用? 在此处输入图片说明

Thanks! 谢谢!

Actual answer if there were no tiles in .zip no tiles will be shown on subject zoom level. 如果.zip中没有图块,则实际答案是不会在主题缩放级别上显示图块。

But if you already have tiles to be shown from lower zoom level - yes you can try! 但是,如果您已经可以从较低的缩放级别显示图块-是的,您可以尝试!

There is a method, which you can try by your own 有一种方法,您可以自己尝试

map.getTileProvider().rescaleCache({some parameters olso is here});

Another, maybe not so simple decision, is described below. 下面描述另一个可能不是那么简单的决定。

It looks like you`re using simple approach like: 看来您正在使用简单的方法,例如:

XYTileSource tileSource = new XYTileSource("map",
MIN_ZOOM_LEVEL, MAX_ZOOM_LEVEL, 256, ".png", new String[]{});

map.setTileSource(tileSource);

However you can go over to steps that are more complicated: 但是,您可以继续执行更复杂的步骤:

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);

Question - what is a MyMapTileFileArchiveProvider class? 问题-什么是MyMapTileFileArchiveProvider类? It's not just subClass of MapTileFileArchiveProvider but both of them have common parent: 它不仅是MapTileFileArchiveProvider的子类,而且它们都有共同的父代:

   public class MyMapTileFileArchiveProvider extends   MapTileFileStorageProviderBase {}

At this point you`re welcome to copy-paste default implementation of MapTileFileArchiveProvider class to your own class, and look for this method: 此时,欢迎您将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;
}

Thanks for paying attention:) 感谢您的关注:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM