1. 如何从iModel中读取数据?

这问题一直困扰着社区!

当很多新开发成员加入我们之后,迫切地想知道,iModeljs到底提供了什么。

这让我想起自己第一次从iModel读取数据的时候,当时面临的挑战就是“交叉查询”的功能——当点击一个3D元素时,放大其对应的2D元素,反之亦然。

我没有过从iModel获取数据的经验,我猜想会要写一个很复杂的查询语句,这个语句可以将所有3D元素映射到它们各自相关的2D元素,并连接它们之间所有的内容。

下面是我如何解决这个问题的故事。

首先,我们要做好准备——如果我们想要与iModel交互,就需要讲它的语言。这就是Schema的来源。iModel的Schemas定义了数据是如何存储在里面的。基础设施的每一个行业(例如铁路,建筑,制造业,民用建筑等)都拥有自己独特的一套Schema。你可能会想:

哎呀,这么多Schemas我全部要弄懂吗?

如果有一门每个iModel都会说的语言——BIS。BIS是每个iModel的基础Schema集,它包含了所有的基础设施项目中会包含的所有基本数据类型,比如上文提到的2D元素和3D元素。在这里,我们可以知道任何给定iModel的内容。

在交叉查询的情况下,我们有一个来自Plant设计软件的iModel。单击3D元素放大对应的2D元素——两者都是基于BIS的,我们甚至不用考虑Plant Schemas。

首次探索Schema有两个重点需要注意:

1.它包含了什么类型的元素——也就是说元素是什么类(class),比如,3D元素是属于GeometricElement3D类,2D元素属于GeometricElement2D类。

2.它们是怎么关联的?——这就是所谓的元素之间的关系。一个3D元素是怎么关联一个2D元素的呢?这也是我们要实现交叉查询奥妙的地方。

回到我们的故事……这花了我好几个小时后最终遇到的问题。

好消息是我不必独自战斗,你也不会。幸运的是有一些非常有效的工具和文档可以帮助我们完成整个过程。现在我逐步介绍如何实现它。

如上文所说,这里有一些链接可以在你的Digital Twin数据

iModel Console:运行iModel查询语句

ECSQL Tutorial:学习如何让构建自己的ECSQL查询

Log Element IDs:开始查询特定元素

Create IModel:获取上面例子中用到的Bay Town Processor Plant 示例

BIS Docs:了解核心BIS概念

ECSQL join:了解如果连接关系和元素

最后,一旦我完成了交叉查询的功能,我就能够用同样的核心原理对特定的Schema编写查询语句。

希望这篇文章足以能够让你解决所面临的问题。

results matching ""

    No results matching ""