Android 如何下载特定国家/地区的脱机地图
我正在开发一个Android应用程序。我想要一个特定的区域地图,我可以将其添加到我的应用程序中,并将其用于离线导航。怎么可能呢 我没有找到解决办法。我正在使用下面的链接,但它不起作用 我展示一张卫星地图。我已将平铺文件放在资产文件夹中,但它对我不起作用Android 如何下载特定国家/地区的脱机地图,android,google-maps-android-api-2,Android,Google Maps Android Api 2,我正在开发一个Android应用程序。我想要一个特定的区域地图,我可以将其添加到我的应用程序中,并将其用于离线导航。怎么可能呢 我没有找到解决办法。我正在使用下面的链接,但它不起作用 我展示一张卫星地图。我已将平铺文件放在资产文件夹中,但它对我不起作用 public class CustomMapTileProvider implements TileProvider { private static final int TILE_WIDTH = 256; private st
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;
private AssetManager mAssets;
public CustomMapTileProvider(AssetManager assets) {
mAssets = assets;
}
private static final SparseArray<Rect> TILE_ZOOMS = new SparseArray<Rect>() {{
put(8, new Rect(135, 180, 135, 181 ));
put(9, new Rect(270, 361, 271, 363 ));
put(10, new Rect(541, 723, 543, 726 ));
put(11, new Rect(1082, 1447, 1086, 1452));
put(12, new Rect(2165, 2894, 2172, 2905));
put(13, new Rect(4330, 5789, 4345, 5810));
put(14, new Rect(8661, 11578, 8691, 11621));
}};
private boolean hasTile(int x, int y, int zoom) {
Rect b = TILE_ZOOMS.get(zoom);
return b == null ? false : (b.left <= x && x <= b.right && b.top <= y && y <= b.bottom);
}
@Override
public Tile getTile(int x, int y, int zoom) {
y = fixYCoordinate(y, zoom);
if (hasTile(x, y, zoom)) {
byte[] image = readTileImage(x, y, zoom);
return image == null ? null : new Tile(TILE_WIDTH, TILE_HEIGHT, image);
}
else {
return NO_TILE;
}
}
private int fixYCoordinate(int y, int zoom) {
int size = 1 << zoom; // size = 2^zoom
return size - 1 - y;
}
private byte[] readTileImage(int x, int y, int zoom) {
InputStream in = null;
ByteArrayOutputStream buffer = null;
try {
in = mAssets.open(getTileFilename(x, y, zoom));
//in = mAssets.open("world_countries.mbtiles");
buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[BUFFER_SIZE];
while ((nRead = in.read(data, 0, BUFFER_SIZE)) != -1) {
buffer.write(data, 0, 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 String getTileFilename(int x, int y, int zoom) {
return "map/" + zoom + '/' + x + '/' + y + ".png";
}
}
公共类CustomMapTileProvider实现TileProvider{
专用静态最终整块宽度=256;
专用静态最终整块高度=256;
私有静态最终整数缓冲区大小=16*1024;
私人资产管理公司;
公共CustomMapTileProvider(资产管理器资产){
质量=资产;
}
私有静态最终SparseArray平铺\u缩放=新SparseArray(){{
put(8,新Rect(135180135181));
put(9,新Rect(270,361,271,363));
put(10,新Rect(541723543726));
put(11,新Rect(1082144710861452));
put(12,新Rect(2165289421722905));
put(13,新Rect(43305789435810));
put(14,新Rect(866111578869111621));
}};
私有布尔黑斯蒂尔(整数x,整数y,整数缩放){
Rect b=TILE_ZOOMS.get(缩放);
返回b==null?false:(b.左相关&&&&&可能重复我已将下载磁贴放入assest文件夹并读取该文件…但如果我有一次联机,则地图显示在脱机状态…直接脱机卫星地图不显示…是否可以不联机..直接从assest文件夹读取磁贴并显示脱机地图。。。