加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Android Google Maps V2 – Sd卡作为Tile Provider

发布时间:2020-12-14 05:57:41 所属栏目:Java 来源:网络整理
导读:我正在使用谷歌地图API V2开发一个 Android应用程序,我必须使用离线图块,我在我的SD卡中拥有整个城市的所有图块(来自png格式的开放街道地图). 我已经尝试使用TileProvider接口,但没有工作. 我怎样才能做到这一点 ? 提前致谢. 解决方法 我修改了一些东西并且
我正在使用谷歌地图API V2开发一个 Android应用程序,我必须使用离线图块,我在我的SD卡中拥有整个城市的所有图块(来自png格式的开放街道地图).
我已经尝试使用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);

...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读