最后更新时间:2025-04-17
腾讯地图SDK提供室内图展示能力,该能力是高级付费功能,用户可通过腾讯地图室内官网详细了解。
下面将分接入展示、操作交互两部分来介绍室内图能力:
接入展示分三步:
申请并配置室内图签权KEY
打开室内图展示开关
查看指定建筑的室内效果
室内图签权KEY和地图KEY是相同的,还没有申请地图KEY,可以到腾讯地图位置服务中心官网注册账号,申请地图KEY,目前室内图权限申请没有开通在线申请,如需要请联系室内图商务协助办理。
腾讯地图SDK默认不开启室内图开关,通过以下代码可以已控制室内图启动状态。
mTencentMap.setIndoorEnabled(true);
//开启3D建筑物
mTencentMap.setBuilding3dEffectEnable(true);
室内图是私有数据,只能展示签权KEY绑定的建筑物,通过地图SDK的API可以将地图视野移动到指定建筑物,调整地图缩放级别到建筑物室内开放级别内(一般在17~18级)
// 移动地图到北京中关村领展广场并调整缩放级别到18级
mTencentMap.moveCamera(
CameraUpdateFactory.newLatLngZoom(new LatLng(39.979381,116.314128),18));
以北京中关村领展广场为例的效果图如下:
室内图的操作交互分楼层控件、状态监听回调、数据处理三部分。
腾讯地图SDK提供默认的楼层控件实现,当地图上显示室内图时,楼层控件默认自动显示。楼层控件支持自定义,用户通过注册室内状态回调,获取相关数据来自定义楼层控件。
1.显示/隐藏开关
//获取UI控件设置
UiSettings uiSettings = mTencentMap.getUiSettings();
//设置隐藏楼层控件
uiSettings.setIndoorLevelPickerEnabled(false);
2.自定义控件
//获取当前激活室内图的楼层名列表
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;
}
});
室内图的数据处理将介绍获取数据和添加室内数据两部分
1.获取数据
所有相关数据封装在IndoorBuilding模型中
| 属性&方法 | 说明 |
|---|---|
| getBuidlingId()->String | 获取建筑ID |
| getBuildingName()->String | 获取建筑名 |
| getActiveLevelIndex()->Int | 获取当前楼层索引序号 |
| getLevels()->List |
获取建筑的楼层 |
| getBuildingLatLng()->LatLng | 获取建筑的坐标 |
在IndoorLevel模型中包含了楼层相关信息
| 属性&方法 | 说明 |
|---|---|
| getName()->String | 楼层名(B1、F1、F2等) |
2.添加室内数据
添加在室内的标注、线、只有在该室内图在激活状态下,才可以在地图中展示
1)创建指定建筑楼层模型
//当前激活楼层序号
int activeLevelIndex = building.getActiveLevelIndex();
//当前激活楼层列表
List<IndoorLevel> levels = building.getLevels();
//当前激活楼层
IndoorLevel activeLevel = levels.get(activeLevelIndex);
//创建室内指定建筑楼层
IndoorInfo indoorInfo = new IndoorInfo(building.getBuidlingId(),activeLevel.getName());
2)添加室内标注
//在指定的建筑楼层中,创建一个标注
mTencentMap.addMarker(new MarkerOptions(new LatLng(39.979303,116.314246))
.indoorInfo(indoorInfo));
3)添加室内路线
//在指定的建筑楼层中,创建一条路线
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); //设置地图样式为暗色
效果图
1.室内图不可见
检查地图KEY是否已经授权了室内图能力,并绑定了指定的室内建筑,再调整地图缩放级别到室内图可用级别。
有帮助
没帮助