软件小讲堂 | OSM数据与三维建筑信息获取
Hello~小伙伴们,又到了每周一次的软件小讲堂啦。
在上次的系列教程中我们介绍了如何通过的DEM高程数据而在Rhino中构建三维的场地。
那对于广大的建筑师和建筑学学生而言,除了三维场地本身以外,场地中包含的建筑也是大家设计过程中必不可少的信息,基地周边的建筑类型与排布都会对我们方案生成产生影响。
虽然传统的借助elk生成建筑的方法只能直接获取建筑轮廓线,而非真正的三维建筑模型,而类似cadmapper这样一些可以直接获取三维场地的网站免费版本有具有地形大小的限制(cadmapper中免费的场地获取对于场地面积要求在1km2内,否则要收费),所以往往需要使用者在后期进行多个文件的拼合,较为麻烦。
cadmapper下载具有大小限制
因此在本次教程中,我会向大家介绍一种借助获取三维建筑模型的方法:如何通过ELK的后期操作获取带有高度的建筑模型。
PART 1
数据下载
要完成这样一个操作,大家首先还需要完成一个老生常谈的操作,进入Openstreetmap 完成一个场地的OSM数据的下载
点击导出获取你想要的场地数据。
如果因为产地过大导出失败的话,可以选择左侧的Overpass API进行导出.
在grasshopper中,使用file path 打开OSM文件,结合ELk的location和OSMData运算器,通过右键点击OSMData运算器选择不同的类型我们可以非常快的获取所需类型,因为本期教程我们要研究三维建筑的生成所以K值选择building.
使用polyline链接成线,我们就可以获取所有建筑的投影轮廓线,那么这也是一个典型的使用ELK创建二维场地的方法。不过考虑到我们的目标是创建三维的建筑模型,所以我们还需要进行一些后续的操作。
PART 2
后期处理
为了获取三维的建筑模型我们肯定要获取建筑的高度信息,使用Panel连接K端大家就会看到在很多的数据分支里面都具有Height:XXX这样一项。
所以实际我们后面所有的操作就只需要完成一个任务,为每一个建筑轮廓线提取对应height:后面的数字,作为挤出高度对轮廓线进行延Z轴方向的挤出, 就能得到我们需要的三维建筑。
但是要完成这样一个操作我们会面临几个问题:首先高度数字并不是在单独的一项中,而是和height:结合在一起形成了一个字符串,而对于字符串如果直接当作挤出高度操作的话是会报错的。
第二个问题就是有些建筑并没有高度信息,比如这里面的第一项。
第三个问题则是对于有高度信息的建筑来说,高度信息所处的序列号并不相同,因此如果我们想直接通过List Item通过一个Index数值获取所有的高度信息是不可能的,而如果需要手工的设置所有的index数值工作量又过于巨大(当前一共有842个分支)
所以接下来我们就要通过一系列的GH操作解决这三个问题。
PART 3
问题解决
首先我们可以先解决第三个问题:高度数据所处的列表数据的index数值不同。因为所有的高度信息的格式相对固定,都为height:这种格式。所以我们能从此入手提取高度信息。使用Match Text,连接所有的K值,在R端输入我们需要匹配的文字格式。
这样输出端就会生成一系列的布尔值,而高度信息的那一项会显示为True,其余信息显示为False.这样我们就能以此为依据进行高度数据的分流。使用dispatch,A端就是我们需要获取的高度数据。
不过在这里面可能有个别建筑具有多个高度数据,为了方便操作我们可以使用List Item统一提取其中的一个数据。当然类似这种异常的数据即为罕见,一般大家在处理一个城市片区的时候可能也就会遇到几个异常数据,所以留到后面我们手工修正也是可以的。
之后我们来解决第一个问题高度数字并不是在单独的一项中,而是和height:结合在一起形成了一个字符串。不过在解决这个问题之前,首先我们需要检查一下当前的数据中是否存在有异常的数据。经过检测发现所有842个数据中还存在有一个异常数据,第63项的格式为building:height:471.所以使用replace item对其进行替换。
之后使用text split,进行数字和字符串的分离. C端为分割符,因为文本格式为 Height:数字。所以使用:作为分隔符。
分割之后为一个树状数据,第一项为分隔符之前的height,第二项为分隔符之后的数字,因此使用list item提取第二项即可。
接下来我们就要去解决第二个问题,很多建筑并没有高度信息,所以在上部操作中大家会看到很多显示为None的数据。那么因为没有高度信息的建筑大多为一些一两层的非重要建筑,所以在这我们可以给所有这些没有信息的建筑一个固定的高度。打开GH Python。将数据拍平后输入如下代码,将所有的空值替换为一个固定的高度。
增加一个Y输入端作为这些没有高度信息建筑的高度。
到此为止我们对于高度信息的提取和修复就已经基本完成啦。最后把一开始获取的建筑轮廓线直接extrude,加盖即可。
如果觉得周边建筑的高度不合适的话,回到GH Python的输入端调整一下Y值即可。将调整好的结果Bake到Rhino中我们就能获取带有高度的三维建筑模型啦。
近期课程:
点击图片查看更多课程详情
点击图片查看更多课程详情
洪宸
二七
声明:本文所用作品图纸源自网络
设计相关版权归原作者所有
LAC STUDIO仅对图纸表达提供相关解读教程
教程版权归我方所有。
原创作品,转载请与我们联系
最新资讯
制图教室
建筑声学与Pachyderm模拟系列教程:
竞赛速递
海外分享
名师专访
软件小讲堂
END