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
相关产品推荐
相关产品推荐

