三维模型定位与较验

当前数字孪生(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,可查看当前模型的地理坐标信息,如下图所示:

Show MS Coordinate System

当无法确定模型的地理坐标是否设定正确时,可将 背景地图 打开,如模型与真实位置一致,则表明该模型的地理坐标及模型位置设定正确。(此功能需要登录 CONNECTION Client )

Open BackgroundMap in MS

更多内容可点击查看: https://communities.bentley.com/products/microstation/w/microstation__wiki/11476/geographic-coordinate-systems-microstation

1.1.2 Revit

Revit 中关于位置有以下两种:

  • Project Base Point (项目基点)
  • Survey Point (测量点)

Turn on Points

1)Project Base Point (项目基点)

为了方便用户使用的特征点(如墙角),通常放置在内部原点(Internal Origin)上,内部原点坐标(0, 0, 0)。考虑真实地球曲率,建模的区域范围应在项目基点的 16km 半径内,以此减少地球球体表面弯曲带来的影响。下图表示项目基点与内部原点在同一位置。

Internal Origin

2)Survey Point (测量点)

采用常见的经纬度表达,可在 Manage -> Location Weather and Site 中定义。

Coordinate in Revit

测量点主要定位模型的真实地理位置,该数据通常由专业的测绘人员提供,包括以下几项关键数据(下图为 Revit 软件测量点信息展示):

  • N/S: 北/南
  • E/W: 东/西
  • Elev: 高程

    SurveyPoint in Revit

更多详细内容可点击 此处查看

1.2 iTwin 查看

iTwin 查看模型坐标可翻阅 iModel 地理坐标系统

2. 模型地理坐标修改

2.1 通过模型设计软件修改

通过章节 1.1 中关于地理坐标系统查看,并在相关页面进行修改。具体的操作方法如下:


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 区别如下:

  • BriefcaseDb

    来自 iModelHub 的 iModel 的本地副本,可以拉取和潜在地推送变更集。

  • SnapshotDb

    用于存档和数据传输目的的快照 iModel 数据库文件。

  • StandaloneDb

    可用来 读写 的 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,以免受到地球曲率的影响。

Origin Project extent Adjust Project Extent

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 个参数。

模型旋转的效果如下图:

Rotate in iTwin-01 Rotate in iTwin-02

2.2.3 移动

  • 任意移动

    • key-in 中键入:editor move elements

    在项目范围内任意移动模型。

    Origin Location Moved Location

  • 当 iModel 没有定义 地理坐标系统(Geographic Coordinate System) 时,可采用以下方法调整

    • 模型重新定位
      • key-in 中键入:editor project geolocation point latitude=25.0 longitude=113.0 altitude=100.0
    • 正北方向调整
      • key-in 中键入:editor project geolocation north
    • 模型微调
      • key-in 中键入:editor project geolocation move
      • 可通过键盘的 T/F/S 完成某一方向的调整,分别代表垂直、纵向(平行于经线)、横向(平行于纬线) Move Slightly
    • 取消定位
      • key-in 中键入:editor project location cancel
    • 保存定位
      • key-in 中键入:editor project location save

2.2.4 草图绘制

绘制的元素需在 模型范围(Project Extent) 内。

  • 曲线
    • key-in 中键入:editor create arc
  • B 样条曲线
    • key-in 中键入:editor create bcurve
    • key-in 中键入:editor create circle
  • 椭圆
    • key-in 中键入:editor project ellipse
  • 线
    • key-in 中键入:editor create linestring
  • 矩形
    • key-in 中键入:editor create rectangle

Sketch Drawing

2.2.5 删除

  • key-in 中键入:editor delete elements

选择需要删除的构件(Element)即可。

Delete Element Origin Deleted Element

2.2.6 其他命令

  • 全部撤销
    • key-in 中键入:editor undo all
  • 撤销上一步
    • key-in 中键入:editor undo single
  • 重做
    • key-in 中键入:editor redo

Key in 调用方式可 参考此处

3. 模型地理坐标验证

3.1 查看 iModel 定位信息

3.1.1 EPSG

通过 iModel.geographicCoordinateSystem.horizontalCRS 可获取 EPSG 编号,如下图所示:

View EPSG in iTwin

3.1.2 项目范围

通过 iModel.projectExtents 可获取项目的四至范围,获取的数据为 AABB(axis-aligned bounding box)轴对齐包围盒中的极值数据,如下图所示:

View Extent in iTwin

3.2 检验坐标信息

3.2.1 与模型绘制人员进行核查

  • 将 3.1 章节获取的项目范围和 EPSG 信息发送至建模技术人员进行核查

3.2.2 EPSG 信息核查

  • 通过 http://epsg.io/ 网站自行查阅 EPSG 的应用范围,确认坐标系统是否包含模型的真实地理位置,如下图所示的 EPSG:3152 适用范围:

Map Extent with EPSG3152

  • 打开 iTwin 中的背景地图,叠加背景地图检查模型是否在正确的地理位置

4. 由坐标错误导致的情况

当模型的坐标系统与当前建模区域不一致,或与模型空间基准差异较大时,可能出现几种错误情形。

4.1 无法缩放至模型

点击 Fit View 工具后,在视图中没有显示模型。可能是由于不同模型文件间的位置差距较大引起,可尝试通过显示单个模型进行查看。

4.2 模型几何形状不规则

模型显示的几何形状异常,如多个不相干的构件叠加在一起、球体表现为锥体等情形。如下图所示:

Mess Elements

4.3 iModel 不包含构件

模型转换失败,无法在视图中查看到模型或构件。

results matching ""

    No results matching ""