2016-08-03 26 views
2

nicht laden Ich habe mich umgesehen und kann keine Antwort auf was ich hoffe, ist eine ziemlich einfache Sache zu erreichen this Frage schien ähnlich, aber hat keine Antworten! Also das Problem ist das; Ich habe meine Offline-Karte Fliesen auf das Android-Gerät hier:OSMdroid - Offline-Kartenkacheln vom benutzerdefinierten Speicherort

/sdcard/application-name/uuid/tiles 

und ich habe die OSM-Cache wie so gesetzt:

File applicationDir = new File(Environment.getExternalStorageDirectory(), File.separator + "application-name" + File.separator + "uuid" + File.separator); 
OpenStreetMapTileProviderConstants.setCachePath(applicationDir.getAbsolutePath()); 

I aufgebaut dann die TileSource:

ITileSource tileSource = new XYTileSource ("tiles", 0, 18, 256, ".png", new String[]{}); 

und der TileProvider:

tileProvider = new MapTileProviderBasic(getActivity()); 
tileProvider.setTileSource(tileSource); 

Wenn ich meine app laufen lasse, erhalte ich eine Folge davon:

Error downloading MapTile: /15/16000/9960 
java.lang.IllegalArgumentException: n <= 0: 0 
at java.util.Random.nextInt(Random.java:175) 
at org.osmdroid.tileprovider.tilesource.OnlineTileSourceBase.getBaseUrl(OnlineTileSourceBase.java:33) 
at org.osmdroid.tileprovider.tilesource.XYTileSource.getTileURLString(XYTileSource.java:19) 
at org.osmdroid.tileprovider.modules.MapTileDownloader$TileLoader.loadTile(MapTileDownloader.java:171) 
at org.osmdroid.tileprovider.modules.MapTileModuleProviderBase$TileLoader.run(MapTileModuleProviderBase.java:291) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
at java.lang.Thread.run(Thread.java:841) 

Vermutlich, weil die lokalen Fliesen nicht gefunden werden und die MapTileProviderBasic fällt schließlich auf die MapTileDownloader und es barfs, weil es keine Online-Fliesen sind.

Alle Vorschläge dankbar erhalten! Danke.

+0

Haben Sie versucht, den Pfad zu schreiben selbst zu sehen, was passiert? –

+0

Ich glaube nicht, dass der Pfad das Problem ist, als ich es fest codierte, scheiterte es immer noch. Ich denke, das Problem liegt bei der Quelle oder dem Provider. – Nome

+0

Ich werde in ein paar Stunden zu dir zurückkommen, wenn ich etwas sehe, muss mit meinem Code vergleichen, weil ich denke, dass meins sich nicht viel von deinem unterscheidet. –

Antwort

2

So schließlich sortiert ich dies aus, indem die innerhalb des Verzeichnisses Uuid

ITileSource tileSource = new XYTileSource(uuid, 0, 17, 256, ".png", new String[0]); 

osmdroid sieht aus wie so OSMDroid Verwendung für ein Unterverzeichnis Standardposition auf dem Gerät

/sdcard/osmdroid/uuid/tiles 

und stellen Sie die Kachel Quelle genannt 'Kacheln', obwohl die Art der Dokumentation dies sagt, ist es nicht sehr explizit. Ich denke, Sie könnten wahrscheinlich jeden Ort auf der SD-Karte mit diesem Ansatz verwenden, ich habe mich einfach entschieden, die einfachste Lösung zu verwenden.

2

Ich hatte dieses Problem auf einem Gerät, das nicht einen Standard "UUID" Ordner (8 "Samsung Tab 4) bei der Verwendung einer MOBAC-generierten ZIP-Datei. Ich habe eine Lösung unter dem Link unten, aber dies das Wesentliche ist:

  1. entpacken Sie die MOBAC generierte ZIP-Datei, und re-zip nur das Verzeichnis, das Kachel-Zoom-Ebene Verzeichnisse enthält (zB diejenigen, die mit „10“, „11“ usw.)
  2. Setzen Sie die neue RV im osmdroid Verzeichnis. NICHT in osmdroid\tiles\.
  3. in Ihrem Code der spezifischen TileSourceFactory Unter Referenz -Typ für die Quelle, mit der Sie den Atlas generiert haben. Dieser arbeitete für mich (wenn die OpenStreetMap öffentliche Transportschicht verwendet wird): map.setTileSource(TileSourceFactory.PUBLIC_TRANSPORT);

Dies könnte mit einem Scheck in Verbindung verwendet werden, um zu sehen, ob das Gerät eine Datenverbindung hat:

// Check for data connection and use offline map if necessary 
    if (Main.deviceIsOnline()) { 
     map.setTileSource(TileSourceFactory.MAPNIK); 
     //map.setTileSource(TileSourceFactory.USGS_SAT); 
     //map.setTileSource(TileSourceFactory.USGS_TOPO); 
    } else { 
     map.setTileSource(TileSourceFactory.PUBLIC_TRANSPORT); 
    } 

Hier ist die Link:

https://mobiledevstories.wordpress.com/2014/02/27/osmdroid-mobile-atlas-creator-tutorial/