制图工具(7)建筑物立体效果实现

先看效果:

一、需求背景

        我们知道,在完成地图模板的制作后,还有很多优化的工作需要处理,优化的内容一般是提升地图的美观,提高数据的表达维度,平衡多个要素之间的突出程度,以实现图面的整洁美观,酷炫突出制图主题,更容易提取地图信息,使得制图效果更加赏心悦目。

        制图中,居民地图层在二维地图制图中立体效果的呈现,是非常有必要和难实现的一个优化内容。

二、常见的建筑物制图效果优化方案

        用于解决在二维地图中,建筑物呈现立体效果的方案,主要有建筑物面转制图表达后整体偏移和快速制图插件中“生成立体楼块”的整体偏移。

2.1 使用制图表达

        利用制图表达为二维建筑物创建立体效果,是通过建筑物整体偏移一定的距离实现的,其缺点是,不能按建筑物层高进行拉伸,不能解决建筑物侧面,当底图显示比例尺较大时,没法展示建筑物边界细节和建筑物间的相互关系,如下图:

图片

2.2 生成立体楼块插件

        使用“生成立体楼块”插件,其原理是通过计算偏移面与原面状数据的位置,生成闭合的包络线,对生成的闭合部分进行重新构面,给予灰度值较高值,达到立体效果。此功能与制图表达的面偏移不同,是生成了实际的辅助数据,不论是性能、显示效果还是在不同比例尺下显示都比制图表达优胜。

        但是仍然不能解决按建筑物层高进行拉伸的效果,也不能处理较为复杂的数据关系,如大比例尺(如1:1000地形图数据中的建筑物)中建筑物的阳台、廊檐、高层建筑物之间的相互遮挡问题,如下图:

图片

三、创建建筑物2.5D效果工具

        工具用于解决在二维地图中,建筑物呈现立体效果的需求。

        其难点在于建筑物按层高拉伸后,由近及远的查看建筑物群,从视觉上就出现了高低错落,前后遮挡的效果,而建筑物拉伸后生成的建筑物顶面,建筑物侧面之间压盖或遮挡问题的在二维平面上处理,是非常困难的。

图片

        在处理压盖或遮挡时,统一的认知是,高层压盖底层,前排遮挡后排,但建筑物中类似廊檐,环形等几何图形跨越多个其它建筑物的特殊情况,与其他几何图形无法简单的判断出前后、左右的相对位置关系。如上图所示,高亮的部分为廊檐,红色标注1的楼块视觉上位于廊檐后排,数据处理时,应使用廊檐的楼块去擦除红色标注为1的楼块,同理,用红色标注为2和3的楼块去擦除廊檐的楼块。这在视觉上是很容易判断并得出结论的,但对于代码而言,需要找到指标来判断楼块之间的前后、左右关系,这是一个很难的事,因为无论你用几何中心点或者几何Y 轴最小坐标值来比对建筑物之间的位置关系,都存在矛盾的地方。本工具算法中,通过判断轮廓面与顶面Union 后生成的面中是否与“L 线”相交,即生成的面中,与L 线相交的部分舍弃,不与L 相交的部分擦除顶面,来解决上诉矛盾。“L 线”为原始轮廓面的底边, 与轮廓面存在覆盖关系的顶面存在相交关系时,底边相交的部分。       

图片

        本工具,按建筑物层高对建筑物进行拉伸, 然后分别解决建筑物顶面之间相互压盖的问题,解决建筑物侧面之间的相互遮挡问题,解决建筑物顶面建筑物侧面之间的相互遮挡问题,输出建筑物顶面和建筑物侧面两个图层。

        支持指定太阳方位角,太阳高度角对建筑物面处理,输出建筑物顶面和建筑物侧面两个图层。建筑物顶面仅保留建筑物的层高属性,而建筑物侧面则计算每个面与太阳照射方向的夹角,后续可通过系统符号中的“分级色彩”,对不同的角度值指定不同的灰度值或使用色带,实现建筑物立体效果。

图片

创建建筑物2.5D效果工具运行过程:

图片

        工具需要建筑物具有层高属性,当没有层高属性时,全部拉伸成相同高度。每个建筑物面都需要解决与周边建筑物面的压盖或遮挡问题,计算量异常的大。建筑物折点越多,四邻关系越复杂,层高值跨度越大,则处理速度越慢。

        如下图所示,一个建筑物面的折点多达20个,工具执行初期,生成的建筑物侧面就有20个,后续很多的叠加分析和擦除处理,都指数级的增加了运算量。

图片

工具参数说明:

图片

注意事项:

        当数据量较大时,分组计算字段的值对计算性能影响较大,此时,应保证每个分组的数量不易过多,比如不超过20万,且每个分组的建筑物应尽可能分布在一起,同一分组的建筑物面不应该跨越多个区域。否则,输出的结果,会导致临近的建筑物面之间遮挡处理不准确。

工具输出:

        要素类(FeatureClass)“{要素类名称}_buildings_originals”,“{要素类名称}_buildings_shadows”,存放在输出目录中的scratch.gdb中。若scratch.gdb不存在,则自动创建,若已存在,不会覆盖其中已有的要素。

        buildings_originals表示建筑物拉伸后的建筑物顶面,buildings_shadows表示建筑物拉伸后的建筑物轮廓面。

图片

 

 

图片

  • 32
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

craybb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值