2017-09-04 6 views
0

Ich habe die Karte aus einer Zip-Datei hochgeladen. Nach dem Laden, wenn Sie die Zoomstufe ändern, wird der Teil außerhalb des mobilen Bildschirms nicht korrekt geladen. Warum funktioniert es nicht? enter image description hereWarum wird die Karte nicht korrekt geladen?

Vielen Dank!

+0

Loaded Karte von Cache-Daten ist und die verbleibenden Laden wird nicht als Datenverbindung ausgeschaltet ist, Annahme nach Ihrem Screenshot. Haben Sie Internet-Berechtigungen in der Manifest-Datei? –

+0

Ok, wenn ich keine Verbindung zum Internet habe, wird es niemals aufgeladen ?? – marioerro

+1

Wie würden Sie erwarten, dass die Karte geladen wird, wenn Sie kein Internet haben? Sie können Offline-KML-Dateien verwenden, um die Karte ohne das Internet zu laden, bis das Internet ein Muss ist, um die Karte zu laden. –

Antwort

0

Tatsächliche Antwort, wenn keine Kacheln in .zip vorhanden sind, werden keine Kacheln in der Zoomstufe des Objekts angezeigt.

Aber wenn Sie bereits Kacheln von niedrigeren Zoomstufe gezeigt haben - ja, Sie können es versuchen!

Es ist eine Methode, die Sie mit Ihrem eigenen

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

Eine andere, vielleicht nicht so einfach Entscheidung versuchen kann, ist unten beschrieben.

Es sieht aus wie Sie `re mit einfachen Ansatz wie:

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

map.setTileSource(tileSource); 

Sie können jedoch auf die Schritte gehen, die komplizierter sind:

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

Frage - was ist ein MyMapTileFileArchiveProvider Klasse? Es ist nicht nur Unterklasse von MapTileFileArchiveProvider aber beide haben gemeinsames parent:

public class MyMapTileFileArchiveProvider extends MapTileFileStorageProviderBase {} 

An diesem Punkt, Sie sind von MapTileFileArchiveProvider Klasse zu Ihrer eigenen Klasse copy-paste Standardimplementierung gern gesehen, und für diese Methode aussehen:

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

Vielen Dank für Aufmerksamkeit :)

Verwandte Themen