我正在使用适用于Android的Google Maps API处理TileOverlay。感谢这篇文章(here)我从png图像生成了图块,并将它们放在“tiles”文件夹(assets/tiles/myTiles.png
)下的Android资源文件夹中。我不想在线上传png图块,我希望我的应用程序在没有Internet的情况下工作。我的图块根据此模式命名:x-y-zoom.png
。
这是我的onMapReady
:
@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
字符串和返回的字符串指向日志
existant file。http://b.tile.openstreetmap.org/" + zoom + "/" + x + "/" + y + ".png
)替换我的网址,这次出现了TileOverlay。所以我认为这是给定的网址不起作用。
在其他论坛(like here)上,我了解到使用file:///android_asset/
的网址只适用于AndroidWebView。
但我找不到如何从资产文件创建URL。 我怎么能这样做?
答案 0 :(得分:0)
如果有人仍然需要它,我像安迪所说的那样解决了这个问题:
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));
就我而言,我是将磁贴放在资产的“平铺”文件夹中。确保更改它。