You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Autodesk Forge DataViz API将热力图映射到Revit房间时设备未映射至房间的问题求助

解决Forge DataViz热力图无法映射Revit房间的问题

你遇到的这个问题很典型——精灵能正常显示在房间内,但热力图提示设备未映射到房间,核心原因是ModelStructureInfo没有完成初始化,无法识别模型的房间结构,另外还有几个细节需要调整,我来一步步帮你解决:

关键遗漏步骤:初始化ModelStructureInfo

你的代码里创建了ModelStructureInfo但没有调用它的init()方法,这个方法会异步解析Revit模型的楼层、房间等空间结构数据,是后续generateSurfaceShadingData自动映射设备到房间的必要前提。

修复后的完整代码

我已经在你的代码里补上了关键的初始化步骤,同时加入了可选的手动关联房间的方案:

async function loadHeatmaps(model){ 
    const dataVizExtn = await viewer.loadExtension("Autodesk.DataVisualization"); 

    // 新增:先初始化ModelStructureInfo,加载模型的空间结构
    const structureInfo = new Autodesk.DataVisualization.Core.ModelStructureInfo(model);
    await structureInfo.init(); // 这一步是核心!必须等待初始化完成

    const devices = [ 
        { 
            id: "Oficina 6", 
            name:"Oficina-", 
            position: { x: 22.475382737884104, y: 7.4884431474006163, z: 3.0 }, 
            sensorTypes: ["temperature", "humidity"], 
            // 可选:如果自动映射失败,手动指定房间的dbId(替换成你实际的房间dbId)
            // roomId: 123 
        } 
    ]; 

    var offset = viewer.model.getGlobalOffset(); 
    removeOffset(devices[0],offset) 

    // 现在生成shading数据,此时structureInfo已经有房间数据了
    const shadingData = await structureInfo.generateSurfaceShadingData(devices); 
    console.log(shadingData) 

    await dataVizExtn.setupSurfaceShading(model, shadingData); 

    const sensorColors = [0x0000ff, 0x00ff00, 0xffff00, 0xff0000]; 
    const sensorType = "temperature"; 
    dataVizExtn.registerSurfaceShadingColors(sensorType, sensorColors); 

    function getSensorValue(surfaceShadingPoint, sensorType) { 
        const deviceId = surfaceShadingPoint.id; 
        let sensorValue = readSensorValue(deviceId, sensorType); 
        const maxSensorValue = getMaxSensorValue(sensorType); 
        const minSensorValue = getMinSensorValue(sensorType); 
        sensorValue = (sensorValue - minSensorValue) / (maxSensorValue - minSensorValue); 
        return clamp(sensorValue, 0.0, 1.0); 
    } 

    const floorName = "01 - Entry Level"; 
    dataVizExtn.renderSurfaceShading(floorName, sensorType, getSensorValue); 
} 

function removeOffset(pos, offset) { 
    pos.position.x = pos.position.x - offset.x; 
    pos.position.y = pos.position.y - offset.y; 
    pos.position.z = pos.position.z - offset.z; 
}

额外排查点

如果补上初始化后还是有问题,可以检查这几点:

  1. 坐标精度与位置:DataViz通过射线检测判断点属于哪个房间,尝试微调设备的z坐标(比如取房间的平均高度,或者上下移动几厘米),避免点刚好落在房间边界上导致检测失败。
  2. 验证房间数据:在init()后打印structureInfo.floors和structureInfo.rooms,确认模型的房间结构是否正确加载,比如:
    console.log("Loaded floors:", structureInfo.floors);
    console.log("Loaded rooms:", structureInfo.rooms);
    
  3. 手动关联房间:如果自动映射一直失败,可以通过viewer.search("Oficina 6")找到对应房间的dbId,然后给device加上roomId属性,强制将设备关联到该房间。

内容的提问来源于stack exchange,提问作者Sebastian Ciocarlan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 20:52:52