我正在使用谷歌地图API V2开发一个
Android应用程序,我必须使用离线图块,我在我的SD卡中拥有整个城市的所有图块(来自png格式的开放街道地图).
我已经尝试使用TileProvider接口,但没有工作.
我怎样才能做到这一点 ?
提前致谢.
我已经尝试使用TileProvider接口,但没有工作.
我怎样才能做到这一点 ?
提前致谢.
解决方法
我修改了一些东西并且有效.这是代码:
CustomMapTileProvider.java
public class CustomMapTileProvider implements TileProvider { private static final int TILE_WIDTH = 256; private static final int TILE_HEIGHT = 256; private static final int BUFFER_SIZE = 16 * 1024; Override public Tile getTile(int x,int y,int zoom) { byte[] image = readTileImage(x,y,zoom); return image == null ? null : new Tile(TILE_WIDTH,TILE_HEIGHT,image); } private byte[] readTileImage(int x,int zoom) { FileInputStream in = null; ByteArrayOutputStream buffer = null; try { in = new FileInputStream(getTileFile(x,zoom)); buffer = new ByteArrayOutputStream(); int nRead; byte[] data = new byte[BUFFER_SIZE]; while ((nRead = in .read(data,BUFFER_SIZE)) != -1) { buffer.write(data,nRead); } buffer.flush(); return buffer.toByteArray(); } catch (IOException e) { e.printStackTrace(); return null; } catch (OutOfMemoryError e) { e.printStackTrace(); return null; } finally { if ( in != null) try { in .close(); } catch (Exception ignored) {} if (buffer != null) try { buffer.close(); } catch (Exception ignored) {} } } private File getTileFile(int x,int zoom) { File sdcard = Environment.getExternalStorageDirectory(); String tileFile = "/TILES_FOLDER/" + zoom + '/' + x + '/' + y + ".png"; File file = new File(sdcard,tileFile); return file; } }
将TileOverlay添加到您的GoogleMap实例
... map.setMapType(GoogleMap.MAP_TYPE_NONE); TileOverlayOptions tileOverlay = new TileOverlayOptions(); tileOverlay.tileProvider(new CustomMapTileProvider()); map.addTileOverlay(tileOverlay).setZIndex(0); ...