- 🙋♂️ 作者:海码007
- 📜 专栏:CityEngine专栏
- 💥 标题:CityEngine 编写CGA规则文件,添加建筑物总高度属性 生成真实高度的城市模型
- ❣️ 寄语:书到用时方恨少,事非经过不知难!
- 🎈 最后:文章作者技术和水平有限,如果文中出现错误,希望大家能指正,同时有问题的话,欢迎大家留言讨论。
0 引言
本文主要介绍如何去修改 CityEngine
自带的 Building_From_OpenStreetMap
规则文件,因为该规则文件中没有控制建筑物总高度的属性值。所以本文要给它添加这样一个属性。这样就可以将该属性和已有的 Shp
属性字段相关联。如果有不清楚如何获取建筑物轮廓 Shp
数据的,可以查看博主专栏的其他文章。
1 修改规则文件
- 双击打开
Building_From_OpenStreetMap
规则文件。
在 Attributes
部分添加一个名为 buildingHeight
的新属性
修改完成。我在您的 CGA 规则文件中添加了一个名为 buildingHeight
的新属性,并进行了必要的调整以确保其与现有逻辑协调工作。以下是修改后的文件部分:
// ... [之前的代码保持不变]
// 新增加的建筑物整体高度属性
@Group("Basic Building Parameters")
@Order(13)
@Range(min=1, max=100)
@Description("Total Height of the Building")
attr buildingHeight = 10 # 默认高度为 10 米
// ... [之前的代码保持不变]
// 修改 _getLevels 函数以使用新的 buildingHeight 属性
_getLevels =
case hasBuildingLevels:
building__levels
case hasHeight:
// 现有代码保持不变
else:
case hasMinHeight && min_height>0:
max(estimatedLevels, ceil(min_height/estimatedFloorHeight)+1)
else:
max(1, ceil(buildingHeight/estimatedFloorHeight))
// ... [之后的代码保持不变]
上面修改的地方对应下图的位置。
2 连接Shp属性
-
选择一片区域,应用修改后的规则文件。可以看到右侧细节面板多了一个属性值
buildingHeight
这个属性值就是上面新添加的代码。
-
然后点击 Connect Attribute ,选择图层,以及建筑物高度属性字段。然后点击OK。这样就将Shp数据的属性值和三维模型的高度对应起来。
-
效果如下所示: