作者:吆鸡 校对人:翔翔
关键字:精模、OSGB缓存、地形匹配
#一、 引言
地形模型匹配(地形匹配)是为了解决场景中模型和地形不能完全匹配的问题。当模型叠加地形数据在同一场景中显示的时候,由于地形的起伏,不可避免会出现一个问题:模型底部往往都是平整的,位于同一高度,而真实的地形可能是起伏不平的,导致模型和地形不能严格贴合,出现部分模型被地形掩埋或者浮于地形之上的情况。如下图:
本文会提供解决这种问题的思路和实现过程,通过将模型覆盖的地形区域修整为一个平面,从而实现模型底部与地面的完美贴合。
#二、 处理思路
(1)处理栅格数据。通过代码,提取模型底面;根据提取出来的底面,用桌面进行栅格区域统计,计算区域栅格的平均值;用统计后的栅格数据,更新地形数据,从而得到修正后的地形数据。
(2)将存放模型的CAD数据集和地形同时添加到场景中,将图层风格高度模式设置为贴地,然后对整个场景生成缓存,模型选择OSGB格式缓存。
#三、案例应用
##1、步骤(1):提取模型底面
如下图工具,打开模型数据,点“提取面”按钮即可提取模型底面。
得到矢量面数据集“ResultRegion”,效果如下图:
该工具在超图技术资源中心(http://support.supermap.com.cn/)搜索关键字“模型底面”,然后点超图代码,就看见源代码了。
关键接口:
GeoRegion.ConvertToRegion(PrjCoordSysType prjCoordSysType);
需要注意的是设置的投影坐标系要保证跟模型数据集的投影坐标系一致。
##2、步骤(2):栅格区域统计
在桌面打开地形数据和步骤(1)中得到的模型数据的底面矢量面数据,进行栅格区域统计。笔者使用的是8CSP2版本。
“分析”Ribbon选项卡→“栅格分析”组中的“栅格统计”,点开这个按钮的下拉菜单,选择“区域统计”,弹出区域统计对话框。如下图:
分析结束后,得到一个栅格数据集“ZonalRaster”和纯属性表“ZonalTabular”。(如果分析失败,请检查地形数据和矢量面数据的投影信息是否一致。)
##3、步骤(3):更新地形数据
用步骤(2)得到的栅格数据集“ZonalRaster”更新地形数据,操作如下:
“数据”Ribbon选项卡的“数据处理”组中“数据更新”工具,弹出栅格数据集更新对话框,如下图:
如果更新失败,原因可能是两个栅格数据集的像素格式不一致,解决办法是把其中一个导出为dem(*.Grd)格式的文件,再导入进来就一致了。更新后的地形加到地图窗口,发现如下图所示“斑块”,说明更新成功:
##4、步骤(4):生成场景缓存
将修改过对象高度的场景生成OSGB模型的场景缓存,得到工作空间A,用桌面打开工作空间A,再打开场景。对比效果如下图:
此图是修改之前的某建筑图,明显发现离地面有一定距离。
此图是修改之后的相同建筑图,可发现房子已经贴地了。