三维模型定位与较验
当前数字孪生(Digital Twins)概念已广泛被各个行业所接收,尤其在基础设施行业 -- 数字孪生连接现实和虚拟世界同步工作,在资产全生命周期中的合适时间运用合适数据提高可见性。三维模型以结构精细、真实表达、语义丰富等特点正被广泛运用于设计、施工、运维等阶段,地理坐标作为连接模型与现实世界的重要桥梁,对于模型的深入应用与发展起到举足轻重作用。
本文着重讲述三维模型中地理坐标的表述,包括如何查看模型的地理坐标、对模型坐标进行修改以及较验等内容。而 iTwin 中地理坐标的应用及转换可查看 这里 。
1. 模型地理坐标查看
1.1 利用模型设计软件
采用模型设计软件是最简单便捷的办法,此处以 MicroStation 和 Revit 两大常见建模软件为例。
1.1.1 MicroStation
MicroStation 用于丰富的地理坐标系统,包括 GIS 中常见的类型:
地理坐标系(Geographic Coordinate System)
投影坐标系(Projected Coordinate System)
打开 DGN 文件,在 Drawing -> Utilities -> Geographic -> Coordinate System,可查看当前模型的地理坐标信息,如下图所示:
当无法确定模型的地理坐标是否设定正确时,可将 背景地图
打开,如模型与真实位置一致,则表明该模型的地理坐标及模型位置设定正确。(此功能需要登录 CONNECTION Client )
1.1.2 Revit
Revit 中关于位置有以下两种:
- Project Base Point (项目基点)
- Survey Point (测量点)
1)Project Base Point (项目基点)
为了方便用户使用的特征点(如墙角),通常放置在内部原点(Internal Origin)上,内部原点坐标(0, 0, 0)
。考虑真实地球曲率,建模的区域范围应在项目基点的 16km 半径内,以此减少地球球体表面弯曲带来的影响。下图表示项目基点与内部原点在同一位置。
2)Survey Point (测量点)
采用常见的经纬度表达,可在 Manage -> Location Weather and Site 中定义。
测量点主要定位模型的真实地理位置,该数据通常由专业的测绘人员提供,包括以下几项关键数据(下图为 Revit 软件测量点信息展示):
- N/S: 北/南
- E/W: 东/西
Elev: 高程
更多详细内容可点击 此处查看
1.2 iTwin 查看
iTwin 查看模型坐标可翻阅 iModel 地理坐标系统
2. 模型地理坐标修改
2.1 通过模型设计软件修改
通过章节 1.1 中关于地理坐标系统查看,并在相关页面进行修改。具体的操作方法如下:
MicroStation
Revit
2.2 通过 iTwin 进行修改
注:此功能为 Beta 版本,更多详细内容可点击 此处查看。
使用前须知:
(1)应用程序关键代码
- 前端设置
// Frontend
// need start up a writeable host(IPC app only)
// use one of them (https://www.itwinjs.org/learning/frontend/imodelapp/)
if (ProcessDetector.isElectronAppFrontend) {
await ElectronApp.startup(opts);
NativeAppLogger.initialize();
} else if (ProcessDetector.isIOSAppFrontend) {
await IOSApp.startup(opts);
} else if (ProcessDetector.isAndroidAppFrontend) {
await AndroidApp.startup(opts);
}
// enable edit tool
await EditTools.initialize({ registerAllTools: true });
// more info in https://www.itwinjs.org/learning/frontend/imodelconnection/
await BriefcaseConnection.openStandalone(newFilePath, OpenMode.ReadWrite); // enable write mode
- 后端设置
// need to use IPC host rather than RPC
if (ProcessDetector.isElectronAppBackend) {
await ElectronHost.startup(opt);
} else if (ProcessDetector.isIOSAppBackend) {
await IOSHost.startup({ mobileHost: { rpcInterfaces } });
} else if (ProcessDetector.isElectronAppBackend) {
await AndroidHost.startup({ mobileHost: { rpcInterfaces } });
}
(2)iModel 为可读写的 StandaloneDb
打开的是 iModel 副本。注意 Snapshot 版本的 iModel 只适用于 只读
,无法进行修改。不同的 iModel 区别如下:
-
来自 iModelHub 的 iModel 的本地副本,可以拉取和潜在地推送变更集。
-
用于存档和数据传输目的的快照 iModel 数据库文件。
-
可用来
读写
的 iModel,通常用于小场景、单用户、非 iModelHub 管理的情形,有以下几个特点:- contextId 的值通常为 Guid.empty
- BriefcaseId === BriefcaseIdValue.Unassigned
- 前端打开的方式为 BriefcaseConnection.openStandalone
- 可以在不提供任何用户凭据的情况下打开
- 可以以读/写方式打开
- 无法应用变更或生成变更记录(因为没有获取/推送变更集的时间线)
(3)Standalone 模型转换
将 .bim 格式 (iModel) 文件转换为 Standalone,在 iTwin.js 源码的 display-test-app 目录,按以下步骤处理:
- 修改 ./src/backend/SetToStandalone.ts 文件中 setToStandalone 方法
// change setToStandalone method in ./test-apps/display-test-app/src/backend/SetToStandalone.ts
log(`Setting ${iModelName} to standalone...`);
indent();
try {
const nativeDb = new IModelHost.platform.DgnDb();
nativeDb.openIModel(iModelName, OpenMode.ReadWrite);
nativeDb.saveProjectGuid(Guid.empty); // empty projectId means "standalone"
nativeDb.saveChanges(); // save change to ProjectId
nativeDb.deleteAllTxns(); // necessary before resetting briefcaseId
nativeDb.resetBriefcaseId(BriefcaseIdValue.Unassigned); // standalone iModels should always have BriefcaseId unassigned
nativeDb.saveLocalValue("StandaloneEdit", JSON.stringify({ txns: true }));
nativeDb.saveChanges(); // save change to briefcaseId
nativeDb.closeIModel();
} catch (err) {
log(err.message);
}
outdent();
- 运行脚本
编译 display-test-app 程序后,使用命令行终端运行以下命令,此操作后 iModel 将无法恢复原样。
// MyiModel.bim 从 iModelHub 或 iModelBank 下载的 iModel 副本全路径
node .\itwinjs-core\test-apps\display-test-app\lib\backend\SetToStandalone.js MyiModel.bim
(4)示例模型下载
2.2.1 可视范围调整
- key-in 中键入:
editor project location show
对项目原有的视图范围进行调整,调整的最大宽度不应超过 20KM,以免受到地球曲率的影响。
2.2.2 旋转
- key-in 中键入:
editor rotate elements
- method=0|1|2|3 How arc will be defined. 0 for center/start, 1 for start/center, 2 for start/mid/end, and 3 for start/end/mid.
- radius=number Arc radius for start/center or center/start, 0 to define by points.
- sweep=number Arc sweep angle in degrees for start/center or center/start, 0 to define by points.
旋转被选中得模型,并且接受 0-3 个参数。
模型旋转的效果如下图:
2.2.3 移动
任意移动
- key-in 中键入:
editor move elements
在项目范围内任意移动模型。
- key-in 中键入:
当 iModel 没有定义 地理坐标系统(Geographic Coordinate System) 时,可采用以下方法调整
- 模型重新定位
- key-in 中键入:
editor project geolocation point latitude=25.0 longitude=113.0 altitude=100.0
- key-in 中键入:
- 正北方向调整
- key-in 中键入:
editor project geolocation north
- key-in 中键入:
- 模型微调
- key-in 中键入:
editor project geolocation move
- 可通过键盘的 T/F/S 完成某一方向的调整,分别代表垂直、纵向(平行于经线)、横向(平行于纬线)
- key-in 中键入:
- 取消定位
- key-in 中键入:
editor project location cancel
- key-in 中键入:
- 保存定位
- key-in 中键入:
editor project location save
- key-in 中键入:
- 模型重新定位
2.2.4 草图绘制
绘制的元素需在 模型范围(Project Extent) 内。
- 曲线
- key-in 中键入:
editor create arc
- key-in 中键入:
- B 样条曲线
- key-in 中键入:
editor create bcurve
- key-in 中键入:
- 圆
- key-in 中键入:
editor create circle
- key-in 中键入:
- 椭圆
- key-in 中键入:
editor project ellipse
- key-in 中键入:
- 线
- key-in 中键入:
editor create linestring
- key-in 中键入:
- 矩形
- key-in 中键入:
editor create rectangle
- key-in 中键入:
2.2.5 删除
- key-in 中键入:
editor delete elements
选择需要删除的构件(Element)即可。
2.2.6 其他命令
- 全部撤销
- key-in 中键入:
editor undo all
- key-in 中键入:
- 撤销上一步
- key-in 中键入:
editor undo single
- key-in 中键入:
- 重做
- key-in 中键入:
editor redo
- key-in 中键入:
Key in 调用方式可 参考此处
3. 模型地理坐标验证
3.1 查看 iModel 定位信息
3.1.1 EPSG
通过 iModel.geographicCoordinateSystem.horizontalCRS 可获取 EPSG 编号,如下图所示:
3.1.2 项目范围
通过 iModel.projectExtents 可获取项目的四至范围,获取的数据为 AABB(axis-aligned bounding box)轴对齐包围盒中的极值数据,如下图所示:
3.2 检验坐标信息
3.2.1 与模型绘制人员进行核查
- 将 3.1 章节获取的项目范围和 EPSG 信息发送至建模技术人员进行核查
3.2.2 EPSG 信息核查
- 通过 http://epsg.io/ 网站自行查阅 EPSG 的应用范围,确认坐标系统是否包含模型的真实地理位置,如下图所示的 EPSG:3152 适用范围:
- 打开 iTwin 中的背景地图,叠加背景地图检查模型是否在正确的地理位置
4. 由坐标错误导致的情况
当模型的坐标系统与当前建模区域不一致,或与模型空间基准差异较大时,可能出现几种错误情形。
4.1 无法缩放至模型
点击 Fit View 工具后,在视图中没有显示模型。可能是由于不同模型文件间的位置差距较大引起,可尝试通过显示单个模型进行查看。
4.2 模型几何形状不规则
模型显示的几何形状异常,如多个不相干的构件叠加在一起、球体表现为锥体等情形。如下图所示:
4.3 iModel 不包含构件
模型转换失败,无法在视图中查看到模型或构件。