ARTICLE DETAIL

资讯详情

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

ArcGIS DEM提取高程点并导出CAD/CASS展点全流程

ArcGIS DEM提取高程点并导出CAD/CASS展点全流程 简介这份PDF资料面向测绘、地理信息、土木规划等专业的技术人员与ArcGIS初学者针对“如何把DEM高程数据转化为CAD可用点要素”这一常见需求给出了从栅格到点、再到CAD图纸的完整操作链路。资源包内含1个PDF文档大小约1.09MB以图文步骤与界面截图为主便于对照软件界面逐步练习。内容围绕加载DEM、栅格重采样、建立Elevation字段、栅格转点以及Export to CAD导出等环节展开并对DEM数字高程模型、栅格重采样、字段计算器、From Raster与To CAD工具等知识点作了说明可帮助读者理解高程数据在ArcGIS与CAD之间传递时的字段匹配问题减少导出后高程丢失或显示异常的情况。目前已有762人学习下载适合需要将地形高程导入CAD开展场地设计、土方计算或图纸校核的人员参考也能作为GIS课程实验与作业的辅助材料。1. 当DEM只是一片高程矩阵为什么还要费劲把它落成CAD里的高程点市政道路土方计量、小流域地形修测、光伏场区坡度分析经常遇到同一个局面甲方给过来一份公开渠道 dem数据下载 得到的 12.8 米 DEM成果却要求提交 DWG 格式的高程点还要能在 CASS 里直接展点、算方量、套断面。DEM 是栅格每个像元只代表一块地面的平均高程CAD 要的是带点号、X、Y、H 的离散点或者能被 CASS 识别的高程点块。ArcGIS 在这两者之间承担采样、投影、字段整理和格式转换把连续栅格降维成可编辑的点实体。适合测绘、规划、水利、勘察从业者尤其是手头只有 DEM、没有实测高程点又需要快速拿出一套可复现 CAD 成果的人。流程不复杂但投影、带号、XY 顺序和点密度任何一项没对齐进 CAD 后都会变成“展高程点不在预定位置”的典型事故。2. DEM采样成高程点前先把栅格、投影和精度这三件事对齐DEM 提取高程点不是点一下“转换”就结束。ArcGIS 读到的栅格可能来自不同渠道坐标系有地理坐标和投影坐标两类像元大小从 5 米到 30 米不等。采样前如果不把栅格分辨率、目标点间距和工程坐标系定下来后面要么点太多把 CAD 拖死要么点太稀导致等高线失真。我的习惯是先在 ArcGIS 里看一眼 DEM 的元数据再决定用哪种采样方式。2.1 DEM来源与栅格分辨率如何影响高程点密度公开 DEM、无人机 DSM 生成 DEM、实测格网 DEM进入 ArcGIS 后都表现为栅格。区别在于分辨率12.8 米 DEM 每个像元覆盖约 164 平方米30 米 DEM 每个像元覆盖 900 平方米1 米 DSM 生成 DEM 的细节更丰富但噪声也更多。栅格转点默认会给每个像元中心生成一个点30 米全国范围 DEM 直接转点点数会到亿级CAD 打开就崩。常见做法是按成图比例尺反推点间距1:500 地形图高程点间距通常 15 到 20 米1:2000 可以放到 40 到 50 米1:10000 甚至可以 100 米以上。DEM 分辨率是点间距的下限不是必须照搬的上限。成图比例尺建议高程点间距适配 DEM 分辨率备注1:5001520 米15 米点密CAD 体积大1:20004050 米512.8 米市政、道路常用1:10000100200 米12.830 米流域、规划阶段1:50000500 米以上30 米仅作宏观趋势先确认栅格分辨率和坐标系用下面这段 ArcPy 最直接import arcpy dem rD:\gis\data\dem_12_8.tif desc arcpy.Describe(dem) print(坐标系:, desc.spatialReference.name) print(是否地理坐标:, desc.spatialReference.type) print(X 分辨率:, arcpy.GetRasterProperties_management(dem, CELLSIZEX).getOutput(0)) print(Y 分辨率:, arcpy.GetRasterProperties_management(dem, CELLSIZEY).getOutput(0)) print(像元类型:, desc.pixelType)逻辑说明arcpy.Describe读取栅格的空间参考和像元属性GetRasterProperties_management返回的是 Result 对象要用.getOutput(0)取字符串值。参数CELLSIZEX、CELLSIZEY分别取 X、Y 方向像元大小。如果输出坐标系名称里出现GCS_WGS_1984说明还是经纬度不能直接导出 CAD如果出现CGCS2000_3_Degree_GK_CM_117E才是米制投影坐标。2.2 投影坐标系和CAD单位不统一时的换算CAD 和 CASS 默认把图形单位当米用。经纬度坐标的数值范围只有几十到一百多导出到 CAD 后点会缩在几度范围内CASS 按米去展位置自然离谱。所以 DEM 或点要素在导出 CAD 前必须投影到工程坐标系。常见选择是 CGCS2000 3 度带中央经线按测区选取如 117E 对应假东 500000。若项目要求带号则假东还要加带号前缀这一点直接决定 CASS 展高程点不在预定位置时是整体平移还是局部偏移。import arcpy arcpy.ProjectRaster_management( in_rasterrD:\gis\data\dem_wgs84.tif, out_rasterrD:\gis\data\dem_cgcs2000_3d.tif, out_coor_system( PROJCS[CGCS2000_3_Degree_GK_CM_117E, GEOGCS[GCS_China_Geodetic_Coordinate_System_2000, DATUM[D_China_2000,SPHEROID[CGCS2000,6378137.0,298.257222101]], PRIMEM[Greenwich,0.0],UNIT[Degree,0.0174532925199433]], PROJECTION[Gauss_Kruger], PARAMETER[False_Easting,500000.0], PARAMETER[False_Northing,0.0], PARAMETER[Central_Meridian,117.0], PARAMETER[Scale_Factor,1.0], PARAMETER[Latitude_Of_Origin,0.0], UNIT[Meter,1.0]] ), resampling_typeBILINEAR, cell_size12.8 )逻辑说明ProjectRaster_management把栅格从源坐标系重投影到目标坐标系。参数resampling_type选BILINEAR适合连续高程表面NEAREST更适合分类栅格。cell_size保持原分辨率避免重采样后像元大小变化导致高程点密度失控。如果只是点要素投影用Project_management高程字段不会变但 X、Y 会变成工程坐标。2.3 采样方式对比栅格转点、等间距布点、沿路线布点ArcGIS 里把 DEM 高程写到点上常见三条路。选错方法后面在 CAD 里要么点太密要么点位分布不符合图式要求。方法适用场景点位密度优点缺点栅格转点小范围、低分辨率 DEM每个像元一个点快字段直接带高程点数不可控渔网加提取值按图式间距布点规则格网密度可控适合地形图需要两步采样工具 Sample已有任意点要素依输入点批量读多个栅格输出表需连接沿路线布点道路、管线、断面按里程贴合线状工程不覆盖面状区域提示1:500 地形图如果直接用 1 米 DEM 栅格转点一个平方公里就是一百万个点CASS 展点前先抽稀不然后续编辑会非常卡。2.4 用Create Fishnet生成规则采样格网并提取高程等间距布点最稳的做法是先用CreateFishnet生成规则格网再取格网中心点最后用ExtractValuesToPoints提取 DEM 高程。这样点间距、范围、坐标系都可控适合大批量作业。import arcpy from arcpy.sa import ExtractValuesToPoints arcpy.env.workspace rD:\gis\work.gdb arcpy.env.overwriteOutput True dem rD:\gis\data\dem_cgcs2000_3d.tif out_fishnet fishnet_20m out_points sample_points_20m out_extract sample_points_20m_elev # 以 DEM 范围作为渔网范围 arcpy.env.extent dem desc arcpy.Describe(dem) extent desc.extent origin_coord f{extent.XMin} {extent.YMin} y_axis_coord f{extent.XMin} {extent.YMin 20} corner_coord f{extent.XMax} {extent.YMax} arcpy.CreateFishnet_management( out_feature_classout_fishnet, origin_coordorigin_coord, y_axis_coordy_axis_coord, cell_width20, cell_height20, number_rows, number_columns, corner_coordcorner_coord, labelsLABELS, template, geometry_typePOLYGON ) # 取每个格网的内部点 arcpy.FeatureToPoint_management(out_fishnet, out_points, INSIDE) # 从 DEM 提取高程到点属性 ExtractValuesToPoints( in_point_featuresout_points, in_rasterdem, out_point_featuresout_extract, interpolate_valuesINTERPOLATE, add_attributesVALUE_ONLY )逻辑说明CreateFishnet_management的origin_coord是格网左下角y_axis_coord控制格网旋转方向corner_coord控制右上角范围。cell_width和cell_height设为 20表示 20 米间距。labelsLABELS会生成格网标注点FeatureToPoint再取内部点。ExtractValuesToPoints的interpolate_valuesINTERPOLATE表示双线性插值比直接取像元值更平滑add_attributesVALUE_ONLY只添加RASTERVALU字段减少属性表冗余。跑完后打开sample_points_20m_elevRASTERVALU就是 DEM 高程。3. ArcGIS 里把DEM高程写进点属性的三种做法点生成之后真正写高程值有三种常用工具。它们输出的字段名、插值方式、适用对象都不同。搞清楚差别后面在 CAD 里做高程注记和 CASS 展点才不会被字段名绕晕。3.1 栅格转点最快但点数不可控RasterToPoint_conversion是栅格转点最直接的工具。每个有效像元生成一个点属性表里的grid_code就是高程值。适合小范围、低分辨率 DEM或者只需要临时查看高程分布。import arcpy dem rD:\gis\data\dem_cgcs2000_3d.tif out_points rD:\gis\work.gdb\dem_points arcpy.RasterToPoint_conversion( in_rasterdem, out_point_featuresout_points, raster_fieldVALUE )逻辑说明raster_fieldVALUE表示用像元值作为输出点的字段字段名通常显示为grid_code。如果 DEM 是浮点型高程会保留小数如果是整型高程会被取整。RasterToPoint不会跳过 NoData 像元但 NoData 区域不会生成点。参数没有点间距控制30 米 DEM 转 1:500 图点数会远超图式要求后面必须抽稀。3.2 提取值至点先有点再取高程适合已有图根点/地物点如果甲方已经给了道路中心线交点、图根点、地物点只缺高程用ExtractValuesToPoints更合适。它不改变原有点位只把 DEM 高程追加到属性表。import arcpy from arcpy.sa import ExtractValuesToPoints arcpy.CheckOutExtension(Spatial) ExtractValuesToPoints( in_point_featuresrD:\gis\work.gdb\existing_points, in_rasterrD:\gis\data\dem_cgcs2000_3d.tif, out_point_featuresrD:\gis\work.gdb\points_with_elev, interpolate_valuesINTERPOLATE, add_attributesVALUE_ONLY )逻辑说明interpolate_values可选INTERPOLATE和NONE。INTERPOLATE用双线性插值读取像元周围值适合连续地形NONE直接取点所在像元值适合分类数据。add_attributesVALUE_ONLY只输出RASTERVALU字段。注意先确认点要素和 DEM 坐标系一致否则工具会报错或结果为空。若点要素是经纬度先投影到与 DEM 相同的投影坐标系。3.3 采样工具批量读取DEM值并控制输出字段Sample工具适合一次性从多个栅格读取值输出可以是表也可以是要素类。它保留输入点的OBJECTID方便后续连接回原始点。import arcpy from arcpy.sa import Sample Sample( in_rastersrD:\gis\data\dem_cgcs2000_3d.tif, in_location_datarD:\gis\work.gdb\sample_points_20m, out_tablerD:\gis\work.gdb\sample_table, resampling_typeBILINEAR, unique_id_fieldOBJECTID, sample_distance, generate_feature_classFEATURE_CLASS )逻辑说明resampling_typeBILINEAR与提取值至点一致适合高程表面。unique_id_fieldOBJECTID让输出表带原始点 ID后续用JoinField连接回点要素。generate_feature_classFEATURE_CLASS直接输出要素类省去连接步骤。如果只想要表格可改为TABLE。sample_distance留空表示不按距离采样按输入点位置采样。3.4 高程点属性表整理保留 X、Y、H、点号不管用哪种方法导出 CAD 前都要把属性表整理成 CAD 和 CASS 认得的字段。点号用文本X、Y 用双精度H 用双精度字段名尽量短避免 CAD 导出时截断。import arcpy fc rD:\gis\work.gdb\points_with_elev arcpy.AddField_management(fc, POINT_NO, TEXT, field_length20) arcpy.CalculateField_management( fc, POINT_NO, str(!OBJECTID!).zfill(6), PYTHON3 ) arcpy.AddField_management(fc, X, DOUBLE) arcpy.AddField_management(fc, Y, DOUBLE) arcpy.CalculateGeometryAttributes_management( fc, [[X, POINT_X], [Y, POINT_Y]], coordinate_systemPROJCS[CGCS2000_3_Degree_GK_CM_117E] ) arcpy.AddField_management(fc, H, DOUBLE) arcpy.CalculateField_management(fc, H, !RASTERVALU!, PYTHON3)逻辑说明CalculateGeometryAttributes_management直接根据几何计算 X、YPOINT_X对应东坐标POINT_Y对应北坐标。coordinate_system参数要与要素实际坐标系一致也可以留空默认使用要素自身坐标系。CalculateField_management中!RASTERVALU!是字段引用PYTHON3是表达式类型。跑完后属性表应至少有POINT_NO、X、Y、H四个字段顺序不强制但导出 CASS 数据文件时要按 CASS 要求调整。4. 从ArcGIS导出到CADDWG、DXF和CASS展点不跑偏的坐标设置属性表整理完下一步是导出 CAD。ArcGIS 提供ExportCAD工具可以把点、线、面直接写成 DWG 或 DXF。ArcGIS Pro 和 ArcGIS 10.x 的工具名、参数略有差异但核心逻辑一样坐标怎么写、单位怎么认、图层怎么分。CASS 展高程点不在预定位置九成问题出在这一步之前而不是 CASS 本身。4.1 Export to CAD 工具的参数CAD版本、坐标单位、注记字段ArcGIS Pro 里用arcpy.conversion.ExportCADArcMap 里用arcpy.ExportCAD_conversion。两者参数顺序接近输出格式可选 DWG_R2018、DXF_R2013 等。import arcpy # ArcGIS Pro 写法 arcpy.conversion.ExportCAD( in_featuresrD:\gis\work.gdb\points_with_elev, Output_TypeDWG_R2018, Output_FilerD:\cad\elevation_points.dwg, Ignore_FileNamesIgnore_Filenames, Append_To_ExistingAppend_To_Existing, Seed_File ) # ArcMap 写法 # arcpy.ExportCAD_conversion( # in_featuresrD:\gis\work.gdb\points_with_elev, # Output_TypeDWG_R2013, # Output_FilerD:\cad\elevation_points.dwg, # Ignore_FileNamesIgnore_Filenames, # Append_To_ExistingAppend_To_Existing, # Seed_File # )逻辑说明in_features是点要素类Output_Type控制 CAD 版本Output_File是目标文件路径后缀要与类型匹配。Ignore_FileNames和Append_To_Existing是枚举字符串保持默认即可。Seed_File可指定一个种子 DWG把已有图层、字体样式带进输出适合需要固定图层标准的项目。导出的坐标直接取要素坐标单位是米。如果要素还是地理坐标系DWG 里会写成经纬度数字CASS 展点会整体缩到几度范围这是最常见的“不在预定位置”原因。4.2 为什么CASS展高程点不在预定位置坐标系带号、XY顺序、单位CASS 展高程点依赖数据文件默认格式是“点号,编码,Y,X,H”其中 Y 是东坐标X 是北坐标。ArcGIS 属性表里 EASTING 才是东坐标NORTHING 是北坐标。若直接把 X、Y 顺序搞反点位会镜像或旋转。带号问题更隐蔽同样是 CGCS2000 3 度带有的成果东坐标带带号前缀如38500000有的不带如500000。两者相差几十公里CASS 展出来就是整体平移。现象常见原因处理CASS 展点整体平移几十公里坐标系未投影或带号前缀不一致统一投影到 CGCS2000 3 度带确认假东是否带带号点位 X/Y 对调数据文件字段顺序与 CASS 要求相反CASS 默认“点号,编码,Y,X,H”确认 Y 是东坐标点缩到几百分之一CAD 图形单位是毫米数据是米检查 CAD 单位导出前统一为米点集中在几度范围导出的是经纬度坐标先投影到投影坐标系再 ExportCAD高程值显示为 0 或空字段名不是 CAD 识别的 H导出前整理字段确保高程字段有值如果不用 DWG而是直接给 CASS 展点数据文件可以用da.SearchCursor导出文本import arcpy fc rD:\gis\work.gdb\points_with_elev out_dat rD:\cad\cass_points.dat with open(out_dat, w, encodinggbk) as f: with arcpy.da.SearchCursor(fc, [POINT_NO, Y, X, H]) as cursor: for row in cursor: # CASS 默认点号,编码,Y,X,H编码留空 f.write(f{row[0]},,{row[1]:.3f},{row[2]:.3f},{row[3]:.3f}\n)逻辑说明SearchCursor逐行读取点号、Y、X、Hgbk编码兼容 CASS 中文环境。格式字符串中,.3f保留三位小数适合高程点。若项目要求点号在前、编码在第二列这里已经满足。若 CASS 设置里把 X 放在 Y 前面需要把row[1]和row[2]对调。导出后先在 CASS 里用“绘图处理—展高程点”测试一小段确认位置无误再批量。4.3 用高程点注记和块参照让CAD里能直接看坡度CAD 里只有点没有高程数字读图效率很低。常见做法是在 ArcGIS 里给点要素添加 CAD 字段让导出时带文字。AddCADFields工具可以添加CADType、Layer、Color、TextValue等字段。把CADType设为TEXTTextValue指向 H 字段导出后 CAD 里就会带高程注记。import arcpy fc rD:\gis\work.gdb\points_with_elev arcpy.AddCADFields_conversion( in_featuresfc, add_fieldsADD, field_typeTEXT, field_nameH )逻辑说明add_fieldsADD表示添加 CAD 字段field_typeTEXT表示按文字方式输出field_nameH指定用 H 字段作为文字内容。工具执行后属性表会多出CADType、Layer、TextValue等字段可用CalculateField把CADType统一设为TEXT把TextValue设为!H!。如果只在 CAD 里看不需要注记可以把点做成块参照在 CASS 里用点样式控制显示。导出前把注记图层和点图层分开放后面在 CAD 里可以单独开关。4.4 导出DXF还是DWG以及CAD字体缺失shx的处理DWG 是 AutoCAD 原生格式CASS 打开最稳DXF 文本格式兼容性更好但文件更大复杂注记容易丢样式。我的习惯是优先 DWG_R2013 或 DWG_R2018交给 CASS 和 CAD 都能打开。导出后如果高程数字显示成问号通常是 CAD 缺少对应 shx 字体。把项目要求的 shx 文件复制到 CAD 安装目录的 Fonts 文件夹重启 CAD再在“文字样式”里指定字体。不要用来路不明的注册机或破解补丁字体文件本身从正规设计院或项目标准里拷贝即可。若只是内部看图把注记改成 TrueType 字体也能临时解决。5. 高程点进CAD后的验证与轻量化技巧导出完成不代表结束。高程点是否落在 DEM 有效范围内、高程值是否被取整、点密度是否拖慢 CAD都要在进图后快速验证。掌握几个抽检和轻量化动作能避免把问题带到下一道工序。5.1 用属性表统计和识别工具抽检高程先在 ArcGIS 里打开导出前的点属性表对 H 字段做一次统计右键 H 字段 → Statistics看最小值、最大值、平均值是否与 DEM 大致吻合。若最小值是负数而项目区没有负地形可能是 NoData 被当作 0。再用“识别”工具点几个点与原始 DEM 同位置像元值对比。若高程普遍偏低或偏高检查ExtractValuesToPoints是否用了INTERPOLATE以及 DEM 是否有投影变形。5.2 把高程点回插DEM做差值验证更严格的做法是把提取出的点再插值回栅格与原始 DEM 做差值。ArcGIS 里用TopoToRaster或IDW生成验证栅格再用RasterCalculator做减法abs(dem - check) 2的区域就是高程异常区。差值大不一定错但能快速定位采样点太稀、投影错误或边界 NoData 问题。CASS 里可以用高程点生成三角网再与 CAD 等高线对比看坡度走向是否一致。5.3 控制点密度和分层导出避免CAD卡顿CAD 卡顿通常不是点本身而是点加注记加块参照。一个实用技巧是分层导出点图层只放点实体注记图层只放文字块参照图层单独放。导出前用Select_analysis按点号或高程区间分批比如每 5000 个点一个 DWG。若必须整图在 CAD 里关闭注记图层只留点重生成速度会明显好于把 H 值写进点块属性。若成果需要给非 CAD 人员看把 ArcGIS 布局导出 PDF和 DWG 一起提交PDF 里保留高程点分布图方便在浏览器里直接翻页核对。本文还有配套的精品资源点击获取
返回列表