ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

GIS数据到SketchUp快速场地建模:从DEM、SHP到地形体块全流程

GIS数据到SketchUp快速场地建模:从DEM、SHP到地形体块全流程 拿到一个规划或建筑项目地面上有高低起伏的现状地形手头只有SHP、DEM、卫星影像这些乱七八糟的GIS数据却要在SketchUp里快速搭出场地模型——这种需求我几乎每年都会碰到几次。很多人第一反应是去SU里一条条拉等高线或者求同事导一份DWG回来再手工描地形少说也得折腾一两天。实际上GIS到SU这条链路如果理顺了半天内完成一个大场地的现状模型并不是什么难事。这篇文章就把我自己常用的方法完整写出来包括数据怎么处理、坐标系怎么统一、地形和建筑怎么生成、哪些地方最容易出错帮还没趟过这条路的朋友省点时间。1. 为什么GIS数据不能直接拖进SU两条软件的“空间语言”差异1.1 SU认识的是相对坐标GIS装的是绝对坐标很多新手第一次尝试导入时会选择在GIS里把SHP或栅格直接拖到SketchUp窗口里试试结果要么没有任何反应要么弹出一堆报错要么模型飞到离原点十万八千里远的地方。原因很好理解SU的世界是一个以模型原点0,0,0为中心的笛卡尔坐标系几何体之间的关系是相对位置而GIS里的数据带的是投影坐标或者经纬度地理坐标动辄就是几十万、几百万的数值。如果硬把带真实坐标的几何体导入SU那些顶点距离原点太远超过SU在处理浮点精度上能够容忍的范围之后就会出现吸附不着边、捕捉不准、显示异常这些问题。换句话说GIS和SU之间的转换不是“复制粘贴”能解决的中间必须有一个把“大地坐标”改成“模型相对坐标”的过程。1.2 三类数据要走三条不同的转换路线一个完整的SU场地模型通常需要三类GIS数据地形来自DEM的栅格高程数据需要转成带Z值的三维三角网。地物建筑、道路、水系等矢量面/线数据需要转成SU能识别的面或线。基底纹理卫星影像或现状航拍图需要截剪、压平、贴到地形表面。这三类数据性质完全不同不可能用同一个插件“一键导入”。栅格也好、矢量也好最终在SU里都体现为“点、线、面、组件、材质”这五种基础元素。GIS这边的任务就是把空间数据换算成这五种元素能表达的东西。我习惯把这条链路由抽象概括为GIS数据——坐标转换——矢量/点云/DXF/JPG——SU实体。1.3 两种常见的路线选择根据项目的精度和范围我会在两条路线里挑一条走路线A大场地、精度要求不高的现状分析用“GIS直接生成三角网”。DEM抽点后导入SU用沙盒或插件生成地形建筑简化为体块。速度快适合方案前期。路线B小范围、重点地段、要和精细设计衔接的“GIS转CAD再建模”。在GIS里把等高线、建筑外墙、道路中线转成带高程的DXF/DWG进入SU后用基础建模工具精修。两条路线不冲突实际上大部分项目我会先用A把整个场地建出来看大势再对重点片区用B做局部细化。2. 导入前的数据三件套坐标系、范围和属性一项都不能省2.1 坐标系统一这一步错了后面全白做GIS数据来源经常很杂有的下载下来是WGS84经纬度有的是UTM投影有的是地方坐标系甚至有的图层是从CAD转过来直接带着图纸里那个丑陋的自定义坐标。混在一起处理其實也是多人协作时最常见的就是各种错位。建模之前所有参与生成模型的矢量、栅格数据必须统一到一个投影坐标系。为什么要投影坐标系而不直接用经纬度因为经纬度是角度单位即使数值相等在东经120度和东经90度各1度的实际距离也不一样而SU里的“1单位米”是需要真实对应的。如果带着经纬度去建模后面算面积、算高度、贴图对位都会混乱。我常用的做法是在ArcGIS里用“投影栅格”和“投影”工具把所有图层转到同一个投影系比如UTM Zone对应的带号或地方2000坐标系的高斯克吕格投影。在QGIS里更简单直接对图层右键使用“导出”——“另存为”在CRS栏选择目标坐标系一次性输出。做完之后别忘了验证一下把几个图层叠在一张图里检查边界和道路是否完全贴合。实际项目中我曾遇到某同事给的SHP还是“未知坐标系”需要点击图层属性去猜测坐标系这一步务必确认切不可跳。2.2 DEM分辨率与裁剪范围的选择DEM的精度决定了模型表面能否看出明显的地形走势。常见的有SRTM 90米、SRTM 30米、ALOS 12.5米、ASTER GDEM 30米等。选多少分辨率的DEM取决于场地范围和SU能承担的三角网数量。如果场地是几公里的大范围用90米或30米足够表达山体大势如果场地只有两三百米90米的DEM会非常粗糙最好用12.5米或者有人工测绘的局部高程数据。裁剪范围一般比项目红线往外扩200500米。外扩太少模型边缘会像悬崖一样切得很生硬外扩太多三角网数量极速膨胀SU会卡到调不动。这个“外扩缓冲区”我用的是ArcToolbox里的“分析工具——提取分析——裁剪”也可以直接按图层面板选择区域导出。2.3 建筑、道路SHP的属性表清理建筑面SHP往往带着一堆无关字段比如FID、Shape_Leng、Shape_Area、用途、楼层数、备注等等。导入SU前我会先把属性表精简到只需要几个字段ObjectID、高度或者楼层数、名称。尤其是“高度”字段后面拉伸体块要直接用如果没有高度字段至少也要有楼层数通过楼层数乘以单层高度来估算。除了字段几何本身也要清理。很多SHP来源于CAD转换会存在重叠面、零宽度的窄缝、重复顶点甚至自相交的多边形。这些瑕疵在GIS里看着不起眼但导入SU后会导致面破洞、拉伸异常、模型内部出现错误线。先用“修复几何”工具整理一遍再用“融合”工具合并重叠面积会比单独处理省心很多。如果数据量太大也可以直接在ArcGIS里用“简化面”或“要素转面”重新构建干净的多边形。3. 实际操作流程DEM生成地形、SHP生成体块、影像生成贴图3.1 从DEM到地形模型栅格转点再导入SU这是我做地形最快的方法步骤很直接在ArcGIS中打开DEM使用工具箱里的“3D Analyst工具——转换——从栅格转出——栅格转点”把每个像元中心转成一个带Z值的点要素。在原始栅格的属性表里添加需要导出X和Y字段也可以右键点要素图层打开属性表添加字段后用几何计算把经纬度/投影坐标填入X、Y字段。把属性表导出为CSV文件逗号分隔文本。里面至少有三列X、Y、Z。打开SketchUp安装并设置Skelion插件直接用它“导入点”功能把这些XYZ点导入如果没有插件也可以用SU自带的沙盒工具先把点用“根据网格创建”后手动调整这种方法效率较低且点多了不现实。导入点之后在SU里给点创建一个网格表面。Skelion会直接生成三角网地形也可以先导入CSV后用沙盒的“根据等高线创建”间接生成。这里有个细节CSV里X和Y的数值范围如果很大导入SU后很容易出现模型离原点太远的问题。所以在导出前我会把X、Y统一减去场地中心坐标的近似值让数据落到原点附近几千单位的范围内。举例来说如果一个场地中心在X500000、Y3400000附近导出时就在GIS里用字段计算器生成两个新字段X-500000和Y-3400000然后再导出CSV。这一点是导入SU之后模型不跑飞的关键。3.2 建筑和道路SHP转换成体块有了地形面之后再把建筑体块加进来。我的标准操作是在GIS里对建筑面SHP启动“要素转CAD”选择按DWG 2007或DXF格式输出并设置导出时按照高度字段把闭合多段线转成带Z值的三维多段线。在SketchUp里导入生成的DWG文件。导入时注意单位一定选“米”否则会出现整体放大1000倍或缩小到毫米的尴尬情况。导入后选择每栋建筑的底面外轮廓用“推拉”工具输入真实高度从属性表里读出拉起来。如果项目数量很多比如几百栋楼一个个推拉不现实。这种情况下可以用Skelion插件的“从GIS数据创建建筑体块”功能直接识别导入点线数据并拉伸到指定高度能节省大量时间。用之前一定要确保SHP的高度字段值单位是米如果是“层数×楼高”的估算字段需要先在GIS里用字段计算器算好。道路、水系这些线性要素可以单独导入DWG后作为底图参考放在地形表面上一层用“曲面偏移”或“材质赋予”把它们在地形上表现出来。3.3 卫星影像导出为贴图覆盖到地形表面场地模型的纹理我一般用最新的一景卫星影像做覆盖。方法是在GIS中把研究区范围的影像按裁切范围导出为JPG分辨率根据场地大小调整保证导入SU后清晰度够用又不至于一张图动辄上百兆。在SU里创建一个和DEM范围一致的大矩形面最好直接用地形边界投影得到的面。打开材质编辑器把这张JPG作为材质贴到矩形面上调整位置和长宽比例让贴图方向和真实地形对得上。如果地形是三维的直接用矩形面覆盖可能贴不完整更好的办法是把影像贴图材质赋予给地形网格本身。SU支持贴图跟随网格变形选中地形面以后在材质面板里给该面贴上影像正确定义纹理的大小和位置即可。3.4 单位、原点、Z轴收尾前的三个检查模型整合完千万不要急着交差。我会在地形和建筑之间做三件事一是检查单位和比例。Tools菜单下的Model Info里单位必须是“米”十进制精度至少两位。否则用CAD导入数据时容易隐藏错误。二是检查建筑底面是否浮在地形上方或者埋进地形里。地形面是个起伏面建筑的基准高度不一定正好贴在地上需要微调Z轴偏移。此时可把建筑组件整体上移或下移幅度以多数建筑能贴合地形为准。三是在模型里设置一个清晰的原点标记。后续如果还要跟其他软件联动比如导入D5或Lumion原点位置一定要明确否则后续对齐又是一件麻烦事。4. 插件选择Skelion、qgis2skp、CAD中转我的取舍标准做这条链路插件不是必需品但用好插件能省一半时间。我把常用方式做了个对比方式优点缺点适合场景GIS导出DWG → SU手动建模稳定性高、可控性强、适合精细模型批量效率低几百栋楼拉伸太慢小范围重点地段Skelion插件能直接读SHP/CSV批量生成地形和体块许可证需要付费配置项对新手略复杂中大范围场地现状模型QGIS的qgis2skp插件免费开源能直接导出地形和矢量功能相对基础导出精度和格式支持较弱预算有限或快速出方案我个人的习惯是大场地用Skelion为主GDAL这种常规转换操作为辅精细复杂区域用CAD中转方式保证每个面都是可控的。需要说明的是网上有不少“一键导入SU”的脚本或在线转换服务看起来诱人但遇到坐标系不统一、DWG单位不对等问题时往往比手动操作更难排查。与其在Black-box环节出错后返工不如把数据流程抓在自己手里。5. 多年踩坑经历这些错我犯过希望你直接绕过5.1 导入后模型整体偏移、飞离原点有一次对方发来一批SHP我没有提前统一投影坐标系直接要素转CAD导入SU结果建筑和地形错位了几百米。事后查才发现建筑SHP是CGCS2000高斯投影地形DEM还是WGS84经纬度。排查方法很简单在GIS中把两个图层同时打开看空间位置是否重叠如果明显不对说明坐标系不统一。所有参与建模的图层必须在GIS阶段就统一到同一个投影坐标系。另一种偏移更隐蔽数据投影坐标系相同但导出的CSV中我的X/Y做了平移而建筑数据没有做同样的平移导致地形和建筑之间出现整体错位。正确处理方法是所有进入同一模型的GIS数据使用同一个平移基准点最好在GIS阶段就通过构设“输入值——中心坐标”字段完成换算。5.2 地形锯齿严重像一格一格的像素山最初做30米DEM场地模型时我对全局进行抽稀当DEM范围达到5公里时模型表面会有明显的阶梯状锯齿。这是我抽点太多、保留点数太少造成的。后来调整为保留现场范围外区域的高程点少一些但重点保护区内的原始点尽量保留如果模型依旧锯齿明显可以在地形生成后对网格顶点做一次平滑处理。SU的沙盒工具里没有提供直接平滑地形的功能我自己一般是用插件或对网格进行纵向微调。更简单的方法是回GIS里先对原始DEM做一次低通滤波/焦点统计让高程过渡平滑后再转点导出效果比在SU里修要好得多。5.3 模型卡顿到鼠标转不动很多人以为模型卡顿是电脑配置不够其实是三角网数量失控。一个10公里×10公里的场地如果用30米DEM转点算下来大约11万多个点生成的三角网接近20万面SU必然卡爆。我的解决办法是按场地外扩500米裁剪不要整幅DEM导入远处的地形降分辨率比如近景保留30米数据远景使用重采样后的90米数据把无法删除的三角网合并成一个平滑平面减少面数不同区域的DEM分批导入先全部生成地形再合并成一个组件后续操作只在组件层级进行避免每一帧都对每个三角面做运算。5.4 建筑拉伸高度错乱某次项目我直接根据SHP“楼层数”字段乘以3米生成了高度字段却发现有些建筑高度完全不对有的能达到几十米有的只有一两米。后来打开属性表发现那个“楼层数”字段有一部分是空值空值在字段计算器里被当成0最终生成的高度自然错乱。从此以后我改成一个原则所有高度相关字段必须在GIS阶段做数据完整性检查先用“计算字段”给空值填入默认值再检查是否有异常大值或负数。建筑拉伸后的高度也建议在SU里抽几栋有参照物的建筑和实际数据对比一下再批量处理。5.5 影像贴图横竖比例不对看起来像被拉长贴图对不齐的原因通常是SU中用来贴图的矩形没有按照真实长宽比创建或者从GIS里导出JPG时没有记录尺寸信息。正确步骤是在GIS中导出影像前记录一下研究区东西方向和南北方向的实际米数导入SU后创建矩形时输入两个方向的实际长度材质贴图再按矩形尺寸设定这样影像的X和Y方向才能和真实空间一致。还有一个实用技巧导出影像时把分辨率调成“边长2的幂次方”比如2048×2048、4096×4096这样在SU里显示更清晰渲染时也不容易因为非2次幂纹理产生色斑。结尾关于流程的一点个人体会做GIS到SU这条链路这几年我最大的感受是多数项目失败的根本原因不是软件不熟而是数据准备阶段太心急。坐标系统一、属性表清理、范围裁剪这三件事看起来和建模无关却决定了后面50%的成败。尤其是坐标系的处理和三角网面数的控制这两个坑几乎每个项目都会出现。如果让我给刚接触这套工作流的人一个建议那就是先把一套小范围的数据从头到尾走通再拿来处理真实项目。流程理顺之后你会发现场地模型生成的速度可以快到客户都不敢信。
返回列表