先看效果:
<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="O5U3e3Uk-1718759843311" src="https://live.csdn.net/v/embed/400448"></iframe>一、需求背景
我们知道,在完成地图模板的制作后,还有很多优化的工作需要处理,优化的内容一般是提升地图的美观,提高数据的表达维度,平衡多个要素之间的突出程度,以实现图面的整洁美观,酷炫突出制图主题,更容易提取地图信息,使得制图效果更加赏心悦目。
制图中,居民地图层在二维地图制图中立体效果的呈现,是非常有必要和难实现的一个优化内容。
二、常见的建筑物制图效果优化方案
用于解决在二维地图中,建筑物呈现立体效果的方案,主要有建筑物面转制图表达后整体偏移和快速制图插件中“生成立体楼块”的整体偏移。
2.1 使用制图表达
利用制图表达为二维建筑物创建立体效果,是通过建筑物整体偏移一定的距离实现的,其缺点是,不能按建筑物层高进行拉伸,不能解决建筑物侧面,当底图显示比例尺较大时,没法展示建筑物边界细节和建筑物间的相互关系,如下图:
2.2 生成立体楼块插件
使用“生成立体楼块”插件,其原理是通过计算偏移面与原面状数据的位置,生成闭合的包络线,对生成的闭合部分进行重新构面,给予灰度值较高值,达到立体效果。此功能与制图表达的面偏移不同,是生成了实际的辅助数据,不论是性能、显示效果还是在不同比例尺下显示都比制图表达优胜。
但是仍然不能解决按建筑物层高进行拉伸的效果,也不能处理较为复杂的数据关系,如大比例尺(如1:1000地形图数据中的建筑物)中建筑物的阳台、廊檐、高层建筑物之间的相互遮挡问题,如下图:
三、创建建筑物2.5D效果工具
工具用于解决在二维地图中,建筑物呈现立体效果的需求。
<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="Tz1TdssS-1718759866290" src="https://live.csdn.net/v/embed/400449"></iframe>其难点在于建筑物按层高拉伸后,由近及远的查看建筑物群,从视觉上就出现了高低错落,前后遮挡的效果,而建筑物拉伸后生成的建筑物顶面,建筑物侧面之间压盖或遮挡问题的在二维平面上处理,是非常困难的。
在处理压盖或遮挡时,统一的认知是,高层压盖底层,前排遮挡后排,但建筑物中类似廊檐,环形等几何图形跨越多个其它建筑物的特殊情况,与其他几何图形无法简单的判断出前后、左右的相对位置关系。如上图所示,高亮的部分为廊檐,红色标注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表示建筑物拉伸后的建筑物轮廓面。
标签:楼块,顶面,效果,立体,建筑物,层高,制图 From: https://blog.csdn.net/craybb/article/details/139789873