纪念我的九成岁月!是在九成测绘大把的时间,让我用FME做了一些酷酷的事情。今天偶尔翻开之前的笔记,发现其中一篇记录了FME在三维方面的应用。看着笔记与模板,我想了不少。当时的笔记写的天马行空,虽然不完美,但现在的我很难再写出同样的东西,我再也没有那么多的时间与精力了。我好怀念,可以晒着太阳睡一下午的时光!
现在打开模板与笔记,能做的只有对模板进行一些优化,而记录整体思路的笔记,我做不出大的改动。这说明了一个问题,虽然几年过去了,FME用的越来越溜,但在对待新生事物上,却再没有当初的激情!这像极了我高考前后的状态,从无所不能,到啥也不能!
下面是正文了!
如果说FME无所不能,有点夸张了。但如果从另一个角度看待问题呢,如果我说C++ 无所不能、Python无所不能,是不是不同意的观点就稍微少一点?说起来,FME也可以当作是一种语言。只是这种语言封装程度比较高,社区也没那么活跃,但有一个让人无法拒绝的优势:图形化界面! ok!既然FME已经无所不能了(几乎),那拿来做个建模应该也是可以的吧。抱着这样的态度,我开始写了相关的模板。下面这是模板转换出来的一点数据:
贴图我只贴了红砖和红瓦,所以模型转出来看着有点那啥,各位多担待。
这里有一个自定义转换器,3D_operator,大部分的功能都是在这里面实现的,前面的pycaller只是随机的计算房屋高度与屋顶类型。 注: 数据来源: 建筑物底面:某德电子地图,庄河市市区范围; 贴图:某度搜索的红砖红瓦图片。
下面着重介绍一下这个转换器的功能,如下图所示:
大概可以分为三个方面,墙、屋顶、房檐!里面又有几个自定义转换器,分别是,direction、脊型_top_house、人字形_Top_house。
1、首先是计算四堵墙,给房屋分出东南西北面,当时考虑的是东南西北可能需要贴不同的图。比如:有可能南面是门,北面是窗。 说起这个转换器,不得不提当年刚学fme的时候,被贝贝的四至祸祸的不轻。当时每天没啥生产上的任务,想的就是怎么学技术,昊哥写了很多FME方面的博客,其中有一篇介绍了如何使用FME去求取地块的四至,我迷上了。后来也动手写了一个,可以简单的算出一个多边形的东南西北各条边,还不知天高地厚的发到了技术交流群
!
还好,当时没人拍砖!
这个四至提取的转换器,现在看来,除了思路是对的,其它的可以说是漏洞百出,我优化了好几天。 经过自定义求四至的转换器,下面就是给墙贴图了,为了简单(其实是懒),我就从网上找了个砖墙图片,按照长与高,计算了一下uv贴上去了。 这就是我贴的大砖墙面了:
2、再就是房顶,房顶当时想了两种,一种是人字形的顶一种是脊形(我不知道这种说法准确不),如下图:
生成方式也比较曲折,简单来讲就是计算出屋脊线,然后把线拉高,再构面,贴图; 3、房檐,与以上两部分相比,房檐的生成,是最简单的,计算一下边线,设置个参数缓冲一下,再拉上去就好了。
需要三维的地方,就是模板可以发挥作用的地方!