Android TileOverlay的资产文件的URL
我正在用谷歌地图API为Android开发TileOverlay。多亏了这篇文章(),我从一个png图像生成了一个tiles,并将它们放在Android资产文件夹的“tiles”文件夹下(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
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,然后读取字节数据,如下所述:谢谢,它可以工作!我是新来的,我应该发布我的解决方案吗?恭喜-解决方案很好,所以发布吧!