室内图
腾讯地图SDK提供室内图展示能力,该能力是高级付费功能,用户可通过腾讯地图室内官网详细了解。
下面将分接入展示、操作交互两部分来介绍室内图能力:
接入展示
接入展示分三步:
-
申请并配置室内图签权KEY
-
打开室内图展示开关
-
查看指定建筑的室内效果
室内图签权KEY
室内图签权KEY和地图KEY是相同的,还没有申请地图KEY,可以到腾讯地图位置服务中心官网注册账号,申请地图KEY,目前室内图权限申请没有开通在线申请,如需要请联系室内图商务协助办理。
已开通室内图权限的KEY,按照AndroidStudio配置中的在AndroidManifest.xml的application标签中配置key。
室内图展示开关
腾讯地图SDK默认不开启室内图开关,通过以下代码可以已控制室内图启动状态。
mTencentMap.setIndoorEnabled(true);
显示3D建筑物
//开启3D建筑物
mTencentMap.setBuildingEnable(true);
室内展示效果
室内图是私有数据,只能展示签权KEY绑定的建筑物,通过地图SDK的API可以将地图视野移动到指定建筑物,调整地图缩放级别到建筑物室内开放级别内(一般在17~18级)
//移动地图到欧美汇并调整缩放级别到18级
mTencentMap.moveCamera(
CameraUpdateFactory.newLatLngZoom(new LatLng(39.979381,116.314128),18));
以欧美汇为例的效果图如下:
操作交互
室内图的操作交互分楼层控件、状态监听回调、数据处理三部分。
楼层控件
腾讯地图SDK提供默认的楼层控件实现,当地图上显示室内图时,楼层控件默认自动显示。楼层控件支持自定义,用户通过注册室内状态回调,获取相关数据来自定义楼层控件。
显示/隐藏开关
//获取UI控件设置
UiSettings uiSettings = mTencentMap.getUiSettings();
//设置隐藏楼层控件
uiSettings.setIndoorLevelPickerEnabled(false);
自定义控件
//获取当前激活室内图的楼层名列表
String[] floorNames = mTencentMap.getActivedIndoorFloorNames();
//获取当前激活室内图的楼层ID
int floorId = mTencentMap.getIndoorFloorId();
//初始化室内图的楼层
mTencentMap.setIndoorFloor(建筑物ID,楼层名);
//设置室内图楼层
mTencentMap.setIndoorFloor(楼层ID);
状态监听回调
地图SDK支持室内图状态激活的监听OnIndoorStateChangeListener
mTencentMap.setOnIndoorStateChangeListener(new TencentMap.OnIndoorStateChangeListener() {
@Override
public boolean onIndoorBuildingFocused() {
//当室内图在地图展示中心处于激活状态
return false;
}
@Override
public boolean onIndoorLevelActivated(IndoorBuilding building) {
//获取在地图展示中心处于激活状态的建筑物
return false;
}
@Override
public boolean onIndoorBuildingDeactivated() {
//当室内图在地图展示中心处于非激活状态
return false;
}
});
处理数据
室内图的数据处理将介绍获取数据和添加室内数据两部分
获取数据
所有相关数据封装在IndoorBuilding模型中
属性&方法 | 说明 |
---|---|
getBuidlingId()->String | 获取建筑ID |
getBuildingName()->String | 获取建筑名 |
getActiveLevelIndex()->Int | 获取当前楼层索引序号 |
getLevels()->List |
获取建筑的楼层 |
getBuildingLatLng()->LatLng | 获取建筑的坐标 |
在IndoorLevel模型中包含了楼层相关信息
属性&方法 | 说明 |
---|---|
getName()->String | 楼层名(B1、F1、F2等) |
添加室内数据
添加在室内的标注、线、只有在该室内图在激活状态下,才可以在地图中展示
- 创建指定建筑楼层模型
//当前激活楼层序号
int activeLevelIndex = building.getActiveLevelIndex();
//当前激活楼层列表
List<IndoorLevel> levels = building.getLevels();
//当前激活楼层
IndoorLevel activeLevel = levels.get(activeLevelIndex);
//创建室内指定建筑楼层
IndoorInfo indoorInfo = new IndoorInfo(building.getBuidlingId(),activeLevel.getName());
- 添加室内标注
//在指定的建筑楼层中,创建一个标注
mTencentMap.addMarker(new MarkerOptions(new LatLng(39.979303,116.314246))
.indoorInfo(indoorInfo));
- 添加室内路线
//在指定的建筑楼层中,创建一条路线
mTencentMap.addPolyline(new PolylineOptions().latLngs(lines).indoorInfo(indoorInfo));
设置室内遮盖层背景颜色
//sdk4.3.5版本新增方法
tencentMap.setIndoorMaskColor(R.color.color_C71585);
室内支持暗色模式
地图SDK在4.3.8.1版本中新增了室内图暗色模式,当室内图功能开启时,修改当前地图类型为MAP_TYPE_DARK,室内图的样式也会相应转变为暗色模式。
tencentMap.setIndoorEnabled(true); //设置室内图打开
tencentMap.setMapType(TencentMap.MAP_TYPE_DARK); //设置地图样式为暗色
效果图
常见问题
- 室内图不可见
检查地图KEY是否已经授权了室内图能力,并绑定了指定的室内建筑,再调整地图缩放级别到室内图可用级别。
这篇文章对您解决问题是否有帮助?
已解决
未解决