Azure Map是否支持添加多个IndoorManager tileset实现多建筑室内地图展示?
Azure Maps室内模块多tileset加载问题解决方案
问题结论
Azure Maps的Indoor Module原生不支持同一张地图同时初始化多个IndoorManager实例实现多tileset加载,你遇到的仅第一个实例生效的情况属于模块的设计限制:IndoorManager的底层图层ID、地图事件绑定逻辑是全局独占的,多个实例会出现ID冲突、事件被拦截的问题,因此只有第一个初始化的实例可以正常渲染。
可行实现方案
方案1:单实例动态切换tileset(官方推荐)
仅初始化一个IndoorManager和对应的楼层控件,用户选中不同建筑时调用API动态替换tileset即可,性能最优且无兼容问题。
示例代码:
// 全局仅初始化一个IndoorManager和楼层控件 const levelControl = new atlas.control.LevelControl({ position: "top-right", }); const indoorManager = new atlas.indoor.IndoorManager(map, { levelControl: levelControl, tilesetId: tilesetId // 初始加载默认建筑 }); // 切换建筑的方法,用户点击对应建筑时触发调用即可 function switchBuilding(targetTilesetId) { indoorManager.setOptions({ tilesetId: targetTilesetId }); } // 切换到第二栋建筑调用:switchBuilding(tilesetId2)
方案2:合并生成单tileset
如果需要同时显示多栋建筑的同楼层地图,可将所有建筑的室内源数据导入到同一个Indoor Creator数据集中,统一生成一个tileset,单个IndoorManager即可加载所有建筑的室内图层,支持同时渲染、点击不同建筑切换焦点。
方案3:多实例兼容(非官方)
如果确实需要多个独立楼层控件分别控制对应建筑,可手动修改每个IndoorManager生成的图层ID前缀避免冲突,同时按需暂停非激活实例的事件监听,该方案属于兼容hack,后续SDK版本更新可能失效。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

