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

Revit与APS Viewer之间的坐标转换方法咨询

Revit坐标与APS Viewer坐标匹配转换方案

核心问题梳理

APS Viewer加载Revit模型时,会对坐标做全局偏移+单位转换,这是直接用clientToWorld等方法得到的坐标不匹配的主要原因。

正确转换步骤

1. 获取Viewer中的本地坐标(模型内部坐标)

用viewer.clientToWorld获取点击点的本地坐标,这是转换的基础:

const screenPoint = new THREE.Vector2(event.clientX, event.clientY);
const hitTestResult = viewer.clientToWorld(screenPoint, true);
if (hitTestResult) {
  const localPos = hitTestResult.point; // 模型内部本地坐标
}

2. 还原Revit原始坐标(含全局偏移)

APS处理模型时会自动应用globalOffset做偏移,需要反向修正,同时注意单位转换:

  • Revit默认英制单位是英尺,米制是米;APS Viewer内部统一用米
  • 如果Revit是英制项目,需先将Viewer的米坐标转换为英尺
const modelData = viewer.model.getData();
const globalOffset = modelData.globalOffset;
// 修正全局偏移:本地坐标 + 全局偏移
const correctedPos = localPos.clone().add(globalOffset);

// 单位转换(根据Revit项目单位)
let revitCoord;
if (modelData.unit === 'feet') { // 英制项目
  revitCoord = correctedPos.multiplyScalar(3.28084); // 米转英尺
} else { // 米制项目
  revitCoord = correctedPos;
}

注意:modelData.unit可能返回'meter'或'feet',部分旧版本模型可能需要通过Revit项目设置确认单位。

3. 经纬度坐标匹配(Geolocation扩展)

如果需要匹配Revit中的经纬度,确保模型上传APS前已正确设置地理位置信息(Revit中需绑定场地定位),再用以下方法转换:

const geolocationExt = viewer.getExtension('Autodesk.Geolocation');
if (geolocationExt) {
  // 先获取修正后的Revit原始坐标(米制)
  const correctedMeterPos = modelData.unit === 'feet' ? correctedPos.multiplyScalar(3.28084) : correctedPos;
  const lonLat = geolocationExt.lmvToLonLat(correctedMeterPos);
  // lonLat.x是经度,lonLat.y是纬度
}

若Revit未设置场地定位,lmvToLonLat会返回基于模型原点的虚拟经纬度,无法匹配Revit真实坐标。

常见错误排查

  • 忽略单位转换:APS Viewer内部统一用米,Revit英制项目必须转英尺
  • 全局偏移方向搞反:是本地坐标 + globalOffset,不是减法
  • 未绑定Revit场地:经纬度转换前必须确保Revit模型已设置真实地理位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:20:59