2016-08-03 158 views
2

我环顾四周,无法找到答案,我希望是一个相当简单的事情来实现this问题似乎相似,但没有回复!所以问题是这样的;我有Android设备在这里我的离线地图图块: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

我不认为路径是问题,当我对它进行硬编码时,它仍然失败。我认为问题在于Source或提供者。 – Nome

+0

如果我看到任何东西,我会在几个小时内回复给您,因为我觉得我的和我的代码没什么区别,所以我必须与我的代码进行比较。 –

回答

2

所以我最终整理了这一点,通过使用设备

/sdcard/osmdroid/uuid/tiles 

在OSMDroid默认位置,并设置瓷砖源像这样

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

osmdroid看起来目录UUID内一个名为的子目录'瓷砖',虽然文档类型告诉你这一点,但它不是很明确。我想你可以使用这种方法在SD卡上使用任何位置,我只是决定使用最简单的解决方案。

2

当我尝试使用MOBAC生成的.zip文件时,我在没有默认“uuid”文件夹(8“Samsung Tab 4)的设备上出现过此问题。要旨是这样的:

  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/