Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android TileOverlay的资产文件的URL_Android_Url_Google Maps Android Api 2_Android Assets - Fatal编程技术网

Android TileOverlay的资产文件的URL

Android TileOverlay的资产文件的URL,android,url,google-maps-android-api-2,android-assets,Android,Url,Google Maps Android Api 2,Android Assets,我正在用谷歌地图API为Android开发TileOverlay。多亏了这篇文章(),我从一个png图像生成了一个tiles,并将它们放在Android资产文件夹的“tiles”文件夹下(assets/tiles/myTiles.png)。我不想在线上传png图片,我希望我的应用程序在没有互联网的情况下工作。我的平铺是根据以下模式命名的:x-y-zoom.png。 这是我的已于4月1日发布的: @Override public void onMapReady(GoogleMap googleMa

我正在用谷歌地图API为Android开发TileOverlay。多亏了这篇文章(),我从一个png图像生成了一个tiles,并将它们放在Android资产文件夹的“tiles”文件夹下(
assets/tiles/myTiles.png
)。我不想在线上传png图片,我希望我的应用程序在没有互联网的情况下工作。我的平铺是根据以下模式命名的:
x-y-zoom.png
。 这是我的
已于4月1日发布的

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    TileProvider tileProvider = new UrlTileProvider(256, 256) {
        @Override
        public URL getTileUrl(int x, int y, int zoom) {
            String url = "file:///android_asset/tiles/" + x + "-" + y + "-" + zoom + ".png";
            try {
                return new URL(url);
            } catch (MalformedURLException e) {
                // ignore
            }
            return null;
        }
    };

    TileOverlay tileOverlay = mMap.addTileOverlay(new TileOverlayOptions().tileProvider(tileProvider));
}
但当我启动应用程序时,地图会出现,但TileOverlay不会

我的尝试和发现:

  • 我试图记录
    url
    字符串,返回的字符串指向 现有文件
  • 我还尝试用一个著名的tile服务替换我的url(
    http://b.tile.openstreetmap.org/“+zoom+”/“+x+”/“+y+”.png
    )这一次,将显示TileOverlay
所以我认为给定的url不起作用。 在其他论坛()中,我了解到URL与
file:///android_asset/
仅适用于AndroidWebView

但我没有找到如何从资产文件创建URL。
我该怎么做呢?

如果有人还需要它,我会像安迪说的那样解决这个问题:

mMap = googleMap;

TileProvider tileProvider = new TileProvider() {
        @Override
        public Tile getTile(int x, int y, int zoom) {
            try {
                InputStream inputStream = getAssets().open(String.format("tiles/%d_%d_%d.png", zoom, x, y));
                byte[] buffer = new byte[8192];
                int bytesRead;
                ByteArrayOutputStream output = new ByteArrayOutputStream();

                while ((bytesRead = inputStream.read(buffer)) != -1) {
                    output.write(buffer, 0, bytesRead);
                }
                byte file[] = output.toByteArray();

                Tile result = new Tile(256, 256, file);

                return result;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    };

TileOverlay tileOverlay = mMap.addTileOverlay(new TileOverlayOptions().tileProvider(tileProvider));

在我的例子中,我将瓷砖放在资产上的“瓷砖”文件夹中。确保对其进行更改。

实现TileProvider并使用AssetManager获取InputStream,然后读取字节数据,如下所述:谢谢,它可以工作!我是新来的,我应该发布我的解决方案吗?恭喜-解决方案很好,所以发布吧!