android - 如何在 android 中使用 groundoverlay 将图像放在谷歌地图上,其中图像具有 5k(宽度)* 5k(高度)和 1.6 mb 大小?
问题描述
我想在 android 中使用 groundoverlay 方法将我的城市包含道路和房屋的图像放在谷歌地图上,其中我的图像尺寸和尺寸非常大。我怎样才能把这个图像放在android的地图上?
解决方案
将您的图像拆分为256x256
像素图块,例如MapTiler将其放入assets
文件夹并使用Alex Vasilkov的答案中的图块:
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; } @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 y, int zoom) { InputStream in = null; ByteArrayOutputStream buffer = null; try { in = mAssets.open(getTileFilename(x, y, zoom)); 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"; } }
推荐阅读
- javascript - 无法使用 Element.insertAdjacentHTML() 执行内联脚本
- hadoop - 如何将直线输出发送到 sqoop
- wxpython - PyNoAppError:必须先创建 wx.App 对象![Python 3.7]
- python - Keras:从连体网络中提取特征以获取单个输入
- python-3.x - “numpy.int64”对象没有属性“loc”
- django - docker-compose build requirements.txt 不更新
- sqlcmd - SQLCMD 加载 sql 脚本
- vb.net - 这些东西叫/干什么?
- c# - 如果未提交选择,单选按钮返回错误答案
- kubernetes - Helm [stable/nginx-ingress] 传递标头时出现问题