我环顾四周,无法找到答案,我希望这是一件非常简单的事情this问题似乎相似但没有回复!所以问题是这个;我在Android设备上有我的离线地图图块:
/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 :(得分:3)
所以我最终通过使用设备上的OSMDroid默认位置
对其进行了排序/sdcard/osmdroid/uuid/tiles
并像这样设置磁贴源
ITileSource tileSource = new XYTileSource(uuid, 0, 17, 256, ".png", new String[0]);
osmdroid在目录uuid中查找名为“tiles”的子目录,虽然文档类型告诉你这个,它不是很明确。我想你可以使用这种方法在SD卡上使用任何位置,我只是决定使用最简单的解决方案。
答案 1 :(得分:2)
我在没有默认设备的设备上遇到此问题&#34; uuid&#34;尝试使用MOBAC生成的.zip文件时,文件夹(8&#34; Samsung Tab 4)。我在下面的链接中找到了一个解决方案,但要点是:
osmdroid
目录。不在osmdroid\tiles\
。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/