2016-08-03 5 views
2

Я огляделся и не могу найти ответ на то, что, надеюсь, довольно просто, чтобы достичь this вопрос казался похожим, но ответа не получено! Так что проблема в этом; У меня отсутствует тайлов на андроид устройства здесь:OSMdroid - невозможно загрузить офлайн-карту из пользовательского местоположения

/sdcard/application-name/uuid/tiles 

и я поставил кэш OSM так:

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

Затем я создал TileSource:

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

и TileProvider:

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

Когда я запускаю мое приложение, я получаю последовательность эти:

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) 

Предположительно, потому что местные плитки не найдены, и в конечном счете MapTileProviderBasic падает на MapTileDownloader и barfs, потому что нет онлайн плиток.

Любые предложения с благодарностью получены! Спасибо.

+0

вы пробовали писать путь самостоятельно, чтобы увидеть, что происходит? –

+0

Я не думаю, что путь - это проблема, когда я его жестко запрограммировал, но все равно не удалось.Я думаю, что проблема связана с Источником или Провайдером. – Nome

+0

Я вернусь к вам через пару часов, если увижу что-нибудь, мне придется сравнить с моим кодом, потому что я чувствую, что мой не сильно отличается от вашего. –

ответ

2

Так что я в конце концов сортируюсь на это, используя расположение OSMDroid по умолчанию на устройстве

/sdcard/osmdroid/uuid/tiles 

и установить источник плитки, как так

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

osmdroid выглядит внутри каталог UUID для подкаталога «плитки», хотя тип документации говорит вам об этом, он не очень явный. Я думаю, вы могли бы использовать любое местоположение на SD-карте, используя этот подход, я просто решил использовать простейшее решение.

2

У меня была эта проблема на устройстве, у которого нет дефолтной «uuid» папки (8 «Samsung Tab 4») при попытке использовать файл .zip, созданный MOBAC. Я нашел решение по ссылке ниже, но суть заключается в следующем:

  1. Распакуйте MOBAC сгенерированный файл .zip, и повторно зип только каталог, который содержит подкаталоги плитки увеличение уровня (например, те, маркированные «10», «11» и т.д.)
  2. Поместите новый почтовый в каталоге osmdroid. НЕ в osmdroid\tiles\.
  3. в коде, ссылки на конкретные TileSourceFactory суб тип для источника, который вы использовали для создания атласа. Это работает для меня (при использовании общественного транспорта слоя OpenStreetMap): map.setTileSource(TileSourceFactory.PUBLIC_TRANSPORT);

Это может быть использовано в сочетании с проверкой, чтобы убедиться, что устройство имеет соединение для передачи данных:

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

Вот является ссылка:

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