目录
- 🙋♂️ 作者:海码007
- 📜 专栏:CityEngine专栏
- 💥 标题:CityEngine 将建筑物shp数据属性值 关联 规则文件属性值 构建三维模型 (shp数据 到 三维模型)
- ❣️ 寄语:书到用时方恨少,事非经过不知难!
- 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正,同时有问题的话,欢迎大家留言讨论。
0 引言
本文主要介绍一下建筑物轮廓数据如何获取,以及CityEngine的规则文件相关基本知识。还介绍了一下CityEngine自带的Building_From_OpenStreetMap规则文件的相关属性的含义。
1 Shp数据处理
1.1 建筑物轮廓shp数据获取
OpenStreetMap
的官网可以下载建筑物的轮廓数据,并导出成 shp
格式。如果不清楚的,可以看作者专栏的其他文章,有详细介绍。
CityEngine2023 shp数据城市与路网三维模型并导入UE5
1.2 shp数据属性字段编辑
本文使用的 QGIS
软件,ArcGIS
软件也是同理。OSM
下载的数据是不带楼层高度信息的(如下图所示)。所以需要我们自己手动添加楼层的字段和属性值。
-
新建
floor
字段:点击左上角切换编辑模式,然后点击新建字段(floor)。
-
选择要素。我们在图中选中要素后,属性表中对应的数据记录也会被选中。
-
开启属性表的【将所选记录移动到顶部】,这样就可以直接找到属性表被选中的记录。
-
根据遥感影像中房屋的阴影长度,大致计算楼房的高度。点击属性框,然后将楼层数填入属性表中。
-
编辑完属性值后,退出编辑状态,然后保存数据即可。
2 CityEngine规则文件
2.1 简介
CityEngine 使用基于规则的方法来创建高度详细的城市环境。CityEngine 的核心特性之一就是其规则文件,通常是以 .cga
(Computer Generated Architecture)格式存在的。
CGA文件的特点:
- 基于文本的脚本:
- CGA文件是基于文本的,类似于编程语言脚本。它们定义了如何根据一系列规则和参数将基本形状转换成详细的三维模型。
- 分层次和递归规则:
- 规则文件允许层次化和递归的规则定义,这意味着可以从简单形状开始,逐渐添加更多细节,最终形成复杂的建筑或城市景观。
- 参数化设计:
- CGA规则可以包含参数,这允许用户通过调整这些参数来改变模型的外观,使得同一规则能够生成多种不同的结果。
- 控制建筑和城市元素:
- 这些规则可以用来定义建筑的不同部分(如墙面、窗户、屋顶等),也可以用来安排城市元素(如街道、绿地等)。
- 适应地形和现有条件:
- 规则可以设计成根据地形和已有环境的不同而适应性变化,比如建筑的高度、方向或样式可能会根据其位置的不同而有所不同。
2.2 Building_From_OpenStreetMap规则文件
本文主要介绍一下 ESRI.lib 工程下自带的 Building_From_OpenStreetMap.cga 规则文件,文件位置如下图所示:
使用步骤:选择一个元素,然后将该规则文件拖拽过去。如下图所示:
此时,我们就可以看到图中选中元素,应用该规则后的三维模型效果。我们可以在右侧的属性窗口对三维模型的样式进行编辑。接下来一起看看属性面板的常用属性有哪些。
属性 | 作用 |
---|---|
Building From_OpenStreetMap | 建筑物的样式设置,预置了9种样式:Default Style(白模)、GenericMediumTown(中等规模城镇)、GenericSmallTown(小规模城镇) 、GenericSmallVillage(典型的小型村庄)、NewYork(纽约城市)、Vancouver(加拿大城市)、Zurich(瑞士最大的城市)、Wellington(新西兰的首都)、Monaco(摩纳哥)、Riomaggiore(五渔村之一) |
Level_Of_Detail | 设置当前模型使用的是哪级LOD,分别是LOD1和LOD2,默认使用LOD1 |
LOD1_Parameters Eave_Ht | 屋檐的高度 |
LOD1_Parameters Ridge_Ht | 屋脊高度 |
LOD1_Parameters Floor_Ht | 楼层的平均高度:指的是每层楼的高度,不是指建筑物的整体高度 |
2.3 规则文件关联Shp数据属性
我们可以对不同属性值进行修改,然后改变场景中的三维模型。同时也可以将属性值和shp数据的属性字段相关联,操作如下:
-
选择 Connect Attribute ,弹出链接属性窗口。
-
选择好对应的图层,以及要链接的图层属性字段,然后点击确定即可。如下图所示。
-
此时规则文件的属性值就和shp数据的属性字段关联上了。掌握了这个知识,我们就可以根据 Shp数据的楼房高度属性字段 与 规则文件的楼层总高度属性 进行关联。这样就可以制作真实的房屋模型了。很遗憾,预置的规则文件并没有给我们提供这个属性。(不过也不用灰心,因为作者打算在下一篇文章中讲解,如何自己添加一个
buildingHeight
属性来控制建筑模型的总高度。)