最后更新时间:2025-03-13
瓦片是组成地图形貌的基本元素,腾讯地图SDK将世界地图在不同的缩放级别下,以高清256*256或者标准512*512为单元划分成地图瓦片数据。
除了内置的瓦片覆盖层(热力图、海外图、个性化图层等)之外,用户可以通过自定义TileProvider来实现添加自定义瓦片功能。
关于地图坐标系和缩放级别
腾讯地图坐标是使用GCJ-02坐标(投影坐标系),您可以使用腾讯坐标转换服务将其他坐标系坐标转换成GCJ-02坐标。
目前可支持编辑的缩放级别为[3-18],您也可以通过TencentMap.getMinZoomLevel()和TencentMap.getMaxZoomLevel()接口获取当前最大和最小缩放级别,来调整对应的配置
什么是瓦片层
瓦片层,是为了展示地图个性化数据提供能力,您可以把某些区域内的地图瓦片,覆盖成独特风格的图片数据。地图SDK提供了非常简便的接口方法,来实现自定义瓦片能力。
如开发者没有基础地图绘制数据,腾讯地图提供了云端个性化地图能力,可以支持在线修改地图元素的样式 以期望满足个性化配置样式的需求。
如开发者有室内CAD相关的数据,希望在地图上进行展示,我们提供了商务级室内地图合作能力,能帮助开发者更快的完成需求。
如开发者有生产瓦片地图数据的能力,还不知道如何接入的话,接下来我们通过两部分讲解,完成这部分的指导:
添加一个瓦片层
移除瓦片层
使用UrlTileProvider抽象类,能够更简便地实现瓦片数据的生成,它实现了 TileProvider接口,通过(x,y)坐标和zoom级别来区分不同URL,请求URL获取瓦片数据, 并自动完成瓦片图片的生成。
详细使用方法:
UrlTileProvidergetTileUrl(x, y, zoom)方法,并提供对应的URL来构造每一个瓦片TileProviderOptions对象,并设置相关选项:
diskCacheDir:磁盘缓存目录,默认情况下没有磁盘缓存,可以设置一个目录名来开启磁盘缓存,
目录名不支持越级符号(…),支持分级符号(/)。betterQuality:瓦片质量,默认为true,即高清分辨率(256*256)zIndex:设置瓦片层级序号,值越大越在地图的顶层TencentMap.addTileOverlay()接口添加到地图上瓦片容器类
private class MyTileProvider extends UrlTileProvider {
@Override
public URL getTileUrl(int x, int y, int zoom) {
//1.过滤无效瓦片请求
if (!checkTileExists(x, y, zoom)){
return null;
}
//2.配置瓦片请求链接
String url = String.format("https://my.image.server/images/%d/%d/%d.png", zoom, x, y);
try {
//返回瓦片URL
return new URL(url);
} catch (MalformedURLException e) {
throw new AssertionError(e);
}
}
/**
* 检查当前瓦片地址是否有数据
*/
private boolean checkTileExists(int x, int y, int zoom) {
int minZoom = 12;
int maxZoom = 16;
if ((zoom < minZoom || zoom > maxZoom)) {
return false;
}
return true;
}
}
瓦片容器管理类
class DemoTileProviderManager {
/**
* 添加瓦片层
*/
public TileOverlay addMyTileProvider(TencentMap map){
MyTileProvider provider = new MyTileProvider();
TileProviderOptions options = new TileProviderOptions()
.diskCacheDir("myTile/style1")//设置瓦片缓存目录
.betterQuality(true)//设置瓦片图片质量
.zIndex(10)//设置瓦片压盖级别
.provider(provider);
return map.addTileOverlay(options);
}
}
您可以直接调用TileOverlay.remove()接口进行移除。
class DemoProvider {
/**
* 移除瓦片层
*/
public void removeTileOverlay() {
myTileOverlay.remove();
}
}
直接实现TileProvider
private static class TestTileProvider implements TileProvider {
@Override
public Tile getTile(int i, int i1, int i2) {
// 图片数据,可以通过 {@link android.graphics.BitmapFactory#decodeByteArray} 生成 Bitmap 对象
return new Tile(图片宽度, 图片高度, 图片数据);
}
}
热力图瓦片HeatMapTileProvider
HeatMapTileProvider heatMapTileProvider = new HeatMapTileProvider.Builder().weightedData(nodes)
.gradient(new Gradient(colors, startPoints)).opacity(0.95).radius(28)
.build(tencentMap);
海外图源提供器OverSeaTileProvider
class TestOverSeaProvider extends OverSeaTileProvider {
boolean mIsNight;
/**
* 创建海外图源供应
*/
public TestOverSeaProvider(BizContext context) {
super("test", 1000, context);
}
@Override
public URL getTileUrl(int x, int y, int zoom) {
try {
return new URL(formatUrl);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
@Override
public boolean onDayNightChange(boolean dayNight) {
mIsNight = dayNight;
return true;
}
@Override
public Bitmap getLogo(boolean dayNight) {
return bitmap;
}
}
有帮助
没帮助