查看原文
其他

变化多端:你掉的是带标注CAD还是带地形SU?【2019-011】


Highlights

1、输出标注文字需要用到地理数据库

2、SU插件请安装到默认路径

3、可能需要手动添加SU插件工具条;

4、输出地形需要将DEM转为TIN

5、建筑需要从TIN提取基准高度字段;

6、阅读原文链接中有插件示例数据


嗨~多磨,萝卜青菜各有所爱,大家对数据的需求真的是千差万别,然而有些最基础最简单的需求往往容易被忽略,那么今天就来聊一聊建筑栅格数据【2019-010】随意取用,无需多言最基本的两种输出方法,带标注CAD带地形SU。感谢YUZUN同学留言提出建筑栅格的转换问题(有问题就要勇于留言,没准儿就进入鸣谢名单了


【软件环境】

本文的操作基于ArcGIS 10.2.2SketchUp6ESRI插件完成,不同版本的软件在界面和操作上可能略有差异,文中描述的步骤和配图仅供参考。


【结果示意】

先放两张图看一下成果长什么样子(图0(a)图0(b)),以便各位同学判断本文对你的需求是否有所帮助(你们可以猜猜图0暗指何物,猜对没奖重在参与)。两种输出方法相互独立按需阅读即可。


图0(a) 建筑栅格转带标注CAD


图0(b) 建筑栅格转带地形SU


【带标注CAD】

先从简单的开始热热身吧,看过【2019-001】的同学应该已经知道如何将建筑栅格数据转为矢量面要素,这里就简单提一下。打开ArcMap,在ArcToolbox中找到【转换工具】-【由栅格转出】-【栅格转面】,建筑栅格数据作为输入栅格字段默认Value即可(其实压根儿也没得选,找个合适的地方(路径无中文、无空格、无符号三无路径)输出,记得勾选简化面选项。然后我们得到了具有ID字段(这次用不到)GRIDCODE字段(就是米制高度啦本次的主角)的矢量面要素。为了方便演示,仅以深圳建筑栅格中的少量数据作为示例

第一步,把shp文件导入到地理数据库。在ArcMap界面右侧的目录中连接到存放数据的文件夹,新建一个文件地理数据库图1),在需要导入的数据上点右键,选择导出-转出至地理数据库图2)。选好输出位置,记得在输出要素类一栏中起个名字(图3),然后确定即可。


图1 新建文件地理数据库


图2 导出数据至地理数据库


图3 导出工具的参数设置


第二步,设置图层标注。将导入地理数据库的矢量面要素添加到ArcMap中,在其属性里找到标注选项卡(切换到该页面可能会略有卡顿似乎是ArcMap扫描系统字体所致,如果CPU很强大并且配备了固态硬盘那么卡顿时间会明显缩短),勾选标注此图层中的要素标注字段选择GRIDCODE文字颜色改为白色图4(因为AutoCAD大都是深色背景,如果导出黑色文字就看不见了啊,这里提前改为白色会方便一点儿


图4 标注选项卡的参数设置


第三步,将标注转换为注记。来回缩放图层,让文字大小和图形看起来比例和谐(ArcMap的默认参考比例是随当前窗口比例动态变化的,熟练的同学可以在数据框属性的常规选项卡中自己设定一个固定的参考比例),然后在图层的右键菜单中点击将标注转换为注记图5),所有的设置不用动,直接确定就可以了(图6)。


图5 将标注转换为注记菜单选项


图6 将标注转换为注记工具界面


第四步,导出到CAD。使用【转换工具】-【转为CAD】-【要素转CAD】工具,将矢量面要素图层注记图层都放到输入要素中,找个合适的地方输出即可(图7)。至于结果长什么样呢,回到开头去看图0(a)(图0暗指什么猜出来了么,没猜出来再给点儿提示吧:读音)


图7 要素转CAD的参数设置


一点补充。把shp放入地理数据库有什么用呢,诸如能存储拓扑信息啊、会自动更新几何属性字段啊之类的,都和今天的内容没什么关系,所以这次大可不必深究,等哪篇推文涉及到了再展开介绍吧(略过一时爽,一直略过一直爽


【带地形SU】

热完身开始攻坚战吧。我不知道ArcMap导出的kml文件用SketchUp导入为什么会报错(知情者欢迎留言,十分感谢,所以一直以来输出三维模型都采用下面将要介绍的曲线救国方法——SketchUp6ESRI插件。这里用到的矢量面要素并不需要导入地理数据库,直接用shp文件即可。实现导出带地形SU模型需要具备哪些条件呢,建筑物矢量面要素至少需要有高度(拉伸多高)基准高度(从多高的位置开始拉伸)两个字段,然后还需要一个TIN地形模型。

第一步,安装插件(保险起见,我们从头开始)。运行SketchUp6ESRI.exe,一路下一步,甭管你的ArcGIS装在哪儿,都不要修改插件的安装路径,否则反而可能出问题(多么傲娇的插件,肯定是个双马尾

第二步,在ArcMap中添加插件。在上面的菜单栏找到自定义-工具条-自定义(在最末尾),界面如图8所示。如果工具条已经显示有SketchUp 6 Tools,那么直接勾选就可以了;如果没有,点击从文件添加,找到C:\Program Files (x86)\ArcGIS\SketchUp6,选中FeaturesToSkp.dll文件(图9),点击打开并确定(图10),然后勾选该插件(图11)并关闭界面,然后画面上会多出来一个非常小巧的工具栏(图12)。


图8 工具条自定义界面


图9 从文件添加插件


图10 添加插件确认提示


图11 勾选插件


图12 小别致长得真东西


第三步,DEM转TIN。地理空间数据云网站可以查询和下载GDEMv2数据(免费的!),推荐有条件(可能需要梯子)的同学去USGSNASA转转,这俩地方的公开数据更齐全。篇幅所限,这里就不展开数据下载、栅格裁剪等步骤了。使用【3D Analyst 工具】-【转换】-【由栅格转出】-【栅格转TIN】工具将DEM转为TIN,其中Z容差用于控制生成的TIN和原始DEM的偏差大小,数值越小则TIN越接近原始DEM,损失的细节越少,这里设置为0.1图13(默认值是原始DEM最大值与最小值之差的十分之一)


图13 栅格转TIN工具的参数设置


第四步,给矢量面要素添加基准高度信息。这一步是为了告诉插件从多高的位置开始拉伸模型,以便让建筑物和地形能够更好地贴合。使用【3D Analyst 工具】-【功能性表面】-【添加表面信息】工具,矢量面要素作为输入要素类,上一步生成的TIN作为输入表面,勾选Z_MINZ_MAX图14),确定后会在矢量面要素的属性表增加这两个字段,并不会额外生成新的shp文件。其中Z_MIN作为建筑物拉伸的最小基准高度(就是建筑物的底面所在高度),原来的GRIDCODE字段作为建筑物拉伸高度(就是建筑物有多高)


图14 添加表面信息工具的参数设置


第五步(非必要步骤),计算基于最大基准高度拉伸高度。一般来说,建筑物拉伸是基于最小基准高度的(图15),然而根据实际情况,也可能需要采用基于最大基准高度的拉伸方式(图16),要知道插件可没有ArcScene那么聪明,所以我们得自己另外准备一个拉伸高度的字段。在矢量面要素的属性表中添加字段图17),名字随便起一个,类型为双精度图18),使用字段计算器,公式如图19所示,其实就是用原来的拉伸高度加上最大基准高度和最小基准高度的差值,说白了还是基于最小基准高度,但多拉伸了一点儿。


图15 基于最小高度拉伸示意图

来源:ArcScene图层属性中的拉伸选项卡


图16 基于最大高度拉伸示意图

来源:ArcScene图层属性中的拉伸选项卡


图17 添加字段


图18 字段类型为双精度


图19 计算新的拉伸高度


第六步,输出带地形的SU模型。(重要!)框选要输出的矢量面要素(不选中要素的话,插件里面是不会显示图层的),点击图12中那个别致的小东西,勾选Elevate by field(基准高度),选择Z_MIN,勾选Extrude by field(拉伸高度),选择GRIDCODE图20),切换到TIN选项卡,取消勾选Exclude from export(图21)。另外,如果想要基于最大基准高度拉伸,那么Extrude by field就选择第五步添加的那个字段,本例中为HeightMAX图22),基准高度还是Z_MIN,不然建筑物就飞起来了。在地形起伏较大的地方,两种方法的结果差别会比较明显,可以参考图23的对比效果(前面那个图0暗指啥玩意儿猜出来了么,要不再给点儿提示吧:一发就可以摧毁一个航母战斗群


图20 要素导出的参数设定(最小基准


图21 TIN导出的参数设定


图22 要素导出的参数设定(最大基准


图23 不同基准高度拉伸结果对比


【后记】

虽然数据获取不易,但不能因为数据不好拿就对普普通通的需求冷嘲热讽,毕竟本来也不是所有人都需要做地理加权回归、空间特征识别这么复杂的任务,数据最基本的功能就是表达,自己瞅瞅、旁人看看、画画图纸、拽拽模型就完事儿了。然而恰恰就是这些简简单单的东西,却常常将新接触GIS的同学轻易地拒之门外,希望有输出CAD和SU需求的同学们可以结合本文玩得愉快下期见~

【全文3129字,撰文耗时10h55m】

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存