ARTICLE DETAIL

资讯详情

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

Surfer与ArcGIS无缝衔接:等值线面生成与GIS出图全流程实操

Surfer与ArcGIS无缝衔接:等值线面生成与GIS出图全流程实操 干这行这么多年我越来越发现一个真相光会ArcGIS不够光会Surfer更不够。尤其是涉及做等值线、等值面这种活儿很多项目要求成果必须进GIS系统要和行政区划、地块边界、监测点位叠在一起出图但Surfer的图拿到ArcGIS里又没法直接编辑来回转格式能把人逼疯。当年我第一次用Surfer导出的网格文件去ArcGIS里打开差点被那个网格错位问题整到怀疑人生。后来反复试验大半年才算把Surfer10和ArcGIS 10.3这套组合拳彻底打明白。今天这篇东西就是要把我踩过的坑、绕过的弯、最后沉淀下来的一套能直接照做的流程一次性写清楚。用Surfer10做插值、生成等值线和等值面再把成果完美转到ArcGIS 10.3里做标注、裁剪、配色、出图全程无废操作。无论你是做环境监测、土壤污染调查、气象分析还是搞地质填图、水文地质研究这套流程基本都能通用。1. 为什么非要把Surfer和ArcGIS凑在一起用1.1 Surfer强在哪、ArcGIS又强在哪先说一个特别实在的问题既然ArcGIS本身也有插值和等值线工具为什么还要专门绕一圈去用Surfer我的答案是术业有专攻。Surfer在插值和等值线生成这件事上真的做到了极致。它的克里金插值实现特别成熟插值引擎非常稳定出图速度快而且生成等值线时你可以对线型、标注、平滑程度做非常精细的控制。我做过很多次对比同样一组散点数据Surfer生成的等值线明显更圆滑、更自然而ArcGIS默认的Spatial Analyst工具做出来的等值线往往锯齿感强一些需要后期花大力气去平滑。ArcGIS的优势则在于空间数据管理和地图整饰。等值线、等值面做出来后最终要落在一张规范的地图上要和边界线套合叠印要做规范的图例、比例尺、指北针甚至要入库做空间分析这时候就轮到ArcGIS发挥主场优势了。你用Surfer打开的是一张图你在ArcGIS里拥有的是一个个带有属性表的矢量要素。说白了Surfer负责“生产”ArcGIS负责“管理、加工、展示”。两者配合等于让一个顶级加工厂和一个顶级包装团队合作出来的产品自然比单打独斗高一个档次。1.2 完整流程图解先有个整体认知在动手之前我建议你先把整条技术路线在脑子里搭好框架。我们不是直接在Surfer里出一张图了事而是要它交出能进GIS的成果。我总结出来的完整路径是这样的原始散点数据xls/csv格式包含X坐标、Y坐标、Z值 ↓ Surfer 10 导入数据、检查坐标 ↓ Kriging插值生成网格化数据.grd ↓ 基于网格生成等值线图/等值面图 ↓ 等值线导出为DXF格式等值面导出为带高程信息的边界数据 ↓ ArcGIS 10.3 打开并校正坐标 ↓ 网格数据转栅格ASCII转Raster等值线转线要素类 ↓ 裁剪、平滑、分级配色、标注、出图这条路径看起来不复杂但每一步都有容易踩的坑。坐标不统一、导出选项选错、属性字段丢失、边界裁剪不到位……任何一个环节出问题最后出来的图都惨不忍睹。后面我会把每一步的操作要点、参数选择、注意事项全部拆开讲。2. 前期数据准备这一步错后面全白干2.1 散点数据的组织格式不管用什么软件插值的前提是有一批离散的观测点数据。以环境监测为例这些数据可能来自不同的采样点每个点包含坐标和检测值。Surfer对Excel格式.xls的兼容性最好我用得也最熟。表格第一行是字段名例如经度、纬度、浓度值然后每一行是一条采样记录。这里有一个很多人不注意的细节Surfer导入Excel时如果文件里有多余的表头、注释行、合计行它会一并读取导致插值结果出现异常。所以我的习惯是在真正导入Surfer之前先把Excel整理成标准三列格式。坐标列命名为X和Y数值列命名为Z。如果原始数据还有项目编号、采样日期等属性别急着删留到ArcGIS阶段再通过关联表挂回来不影响插值本身。还有一点数据里如果有特异值比如某个监测点数值明显偏离整个区域水平插值出来的图往往会出现“牛眼”现象把周边一片区域都拉高或拉低。建议做插值前先简单看一眼数据的最大值最小值排查一下有没有录入错误这步虽然基础但能帮你省掉后面大量返工时间。2.2 坐标系统的选择说三遍都不嫌多坐标系统是Surfer和ArcGIS衔接时最容易出大问题的环节没有之一。Surfer本身是不理解投影坐标系的。你给它经纬度它就按经纬度算你给它平面坐标它就按平面坐标算。如果你在Surfer里用的是经纬度比如118.32E, 29.56N那导出的DXF文件里的坐标同样是经纬度这个文件拿到ArcGIS里必须定义为WGS84地理坐标系顺便说一句空间参考的字符串比较长大家直接选“WGS 1984”即可。如果你用的是平面坐标比如从国土部门拿到的西安80或者CGCS2000的投影坐标那就更要注意了在Surfer里处理好之后导出到ArcGIS里要手动定义对应的投影坐标系。这里我强烈建议用ArcGIS的“定义投影”工具而不是直接加载后再在图层属性里改因为图层属性里的修改只是改变了显示方式坐标值其实没变后续做叠加分析照样会错位。我自己常用的做法是如果有条件就在数据准备阶段把所有原始数据统一到同一个坐标系。尽量用投影坐标系如UTM或高斯克吕格投影因为平面坐标做距离、面积量算都方便而且插值结果更符合我们的直观认识。经纬度虽然也能插值但在高纬度地区1度经度对应的实际距离会缩水很多对插值结果是有影响的。3. Surfer 10 核心操作从散点到等值线、等值面3.1 Kriging插值为什么我首选它Surfer 10支持多种插值方法包括反距离加权法IDW、克里金法Kriging、自然邻域法、最小曲率法、移动平均法等。我用得最多的是克里金法尤其在有地质背景的数据集上效果明显优于其他方法。克里金法的核心思想是距离近的点比距离远的点更相似而且这个相似度可以用半变异函数拟合出来。就相当于你看一片农田的土壤重金属分布你不会只盯着采样点看你会根据已经知道的分布规律推断出采样点之间的区域大概是什么情况越靠近采样点推断越可靠。克里金法就是把这个“推断”过程数学化、定量化。在Surfer 10里操作路径是菜单栏选择“网格(Grid)”→“数据(Data)”选中你的Excel文件软件会弹出网格化数据对话框。此时你需要指定X、Y、Z对应的列然后默认的插值方法就是克里金法默认的变异函数模型是线性模型。一般不勾选“日志变换”和“各向异性”除非你的数据分布确实存在明显的方向性趋势比如河流下游方向浓度持续递减那就考虑用各向异性克里金。网格密度也在这个对话框里设置。Surfer会默认给一个行列数但你可以根据实际需求改。网格太密文件体积大、计算慢而且容易把微小噪声也插值出来网格太稀等值线会显得粗糙。我的经验是网格间距设置为采样点平均间距的1/2到1/3即可。比如样点平均间距是100米网格间距就设30到50米出来的图既光滑又不失真。3.2 根据网格数据生成等值线网格化完成后Surfer会在工作区生成一个等值线图。这个时候你可以进行等值线图的多项设置方法是对等值线图双击打开属性管理器或者点击菜单“地图(Mesh)”→“等值线图(Contour Map)”→“新建等值线图(New Contour Map)”也行。打开等值线图属性后点“等级(Layer)”选项卡你会看到一个等值线等级列表。默认情况下Surfer会根据数据范围自动分5到10级这个等级数往往不够用。实际工作中建议手动设置等值线间隔。比如污染物浓度范围是5到150你可以设置等级间隔10也就是标注5、15、25、35……直到145。具体间隔取多少要看你的数据分布和评价标准也可以参照相关行业规范里给出的分级值。这里有个小技巧如果你想让等值线图同时满足专业审核和视觉美观可以把主等值线和辅等值线分开设置。主等值线用实线、略粗辅等值线用虚线、细一点。Surfer的属性管理器里可以对每条等级线单独设置也可以批量处理。我通常的做法是每一条主线间隔都是标准值再把半间隔的线设为虚线作为辅助线这样一张图上既有细节又不显杂乱。等值线“平滑”设置也很重要。在等值线图属性的“常规”选项卡里有一个“平滑”选项数值越大等值线越圆滑。默认值通常是2我自己习惯设为3。太大会让等值线过度变形丢失真实细节太小则显得生硬。生成好等值线图后先检查一下图面看有没有出现穿过无数据区的等值线。比如调查区域不是一个规则的矩形而是沿河谷分布的狭长区域如果直接用矩形范围插值Surfer会在没有采样点的空白区域也计算网格值导致等值线穿过边界延伸到空白区。这个问题一定要在Surfer阶段就控制好方法是用空白文件BLN文件来约束插值范围。BLN文件就是你调查区域的边界坐标在网格化对话框的“过滤(Filter)”选项卡里加载它Surfer就会只对边界内的区域插值。3.3 等值面的生成思路在Surfer里等值面填充等值线图跟等值线图几乎同时生成。创建等值线图后你可以用菜单“地图”→“填充等值线图”来新建一个填充版本本质是基于同一套网格数据只是用不同颜色填充等值线之间的区域。等值面的配色建议直接在Surfer里完成。双击填充等值线图打开图层属性在“常规”选项卡的“填充”下拉框里选择“等值线填充”然后就可以对每一个等级区间设置填充颜色。Surfer自带的不少颜色方案都有个问题颜色跳跃太大过渡不自然。实际工作中我对环保类项目的习惯是低值区用浅蓝或浅绿中间值用黄色高值区用橙色到红色。这样一张图肉眼扫过去高值区立刻就能跳出来符合大部分行业看图习惯。这些配色也不会白做因为你后面导出到ArcGIS时如果你的等值面在Surfer里已经分好了颜色边界全转过去之后ArcGIS里设置透明的填充符号就可以原样保留这种颜色过渡。3.4 导出关键一步等值线导出为DXF等值线图做好后关键一步是导成DXF才拿得进ArcGIS。在Surfer 10里选中你要导出的等值线图点击菜单“文件(File)”→“导出(Export)”文件类型选择“AutoCAD DXF (*.dxf)”然后设置导出路径和文件名。这里有一个很容易被忽略的关键选项导出DXF时Surfer会问你要不要包含Z值属性。一定一定记得勾选“从等值线图导出Z值”之类的选项。不同版本的Surfer表述略有差异但大意是“将等值线高程值作为属性导出”。否则生成的DXF到ArcGIS里就没有高程字段后续做分级显示、标注就无从谈起。这里我多说一句DXF的文本格式比较老如果等值线数量特别多比如几千条导入ArcGIS时可能会提示某些实体忽略或者线条断裂。经验做法是在Surfer里先把过于细碎的小等值线片段过滤掉或者把最小等值线长度设高一点4毫米以下的线段直接不显示这样能大幅降低导出文件的复杂度。3.5 等值面导出二选一的路线等值面的导出我通常用两条路线你可以根据最后需要什么成果来选择。第一条路线等值面栅格化。在Surfer里把填充等值线图导出为带地理坐标的GeoTIFF图。具体操作是选中填充等值线图文件→导出格式选“GeoTIFF (*.tif, *.tiff)”然后在选项里勾选“包含地理坐标”。这样导出的TIF图像是一张栅格图但带有坐标信息在ArcGIS里直接打开就能正确叠加。这种做法的好处是最小化转换错误率适合成果仅需展示、不需要进一步编辑的情况。第二条路线等值面边界矢量化。其实就是把等值面拆成单个的闭合多边形带属性导出。Surfer可以直接把等值线图转成多边形要素——在Surfer菜单里选中等值线图点“网格”→“转换”→“等值线图转多边形”。这样生成的是一个个闭合多边形每个多边形对应一个等级区间在导出DXF时Z属性取该区间的高程值。转到ArcGIS后这些多边形就变成带属性表的面要素可以按属性做符号化。这两条路线各有优缺点栅格化快、误差小但不能编辑矢量面灵活能批量改样式、裁切、算面积但导出过程需要额外设置。如果项目最后的产出是专题图且要做面积统计我会毫不犹豫走第二条路线结合ArcGIS里的面积计算功能效率高到飞起。4. 把Surfer成果安全送进ArcGIS 10.34.1 DXF导入ArcGIS的正确姿势打开ArcMap 10.3新建空白地图菜单栏“文件”→“添加数据”→“添加XY数据”是干别的用的这里不要把等值线数据当作XY数据加进来。正确的做法是直接在目录窗口中定位到存放DXF文件的文件夹右键点击该DXF文件选择“导出”或者直接把DXF从目录窗口拖拽到地图视图中。ArcGIS会自动识别DXF里的线实体并生成一个名为“Polyline”的要素层。注意这里面数据有可能被拆成两个图层——一个Point图层和一个Polyline图层。我们只需要Polyline图层。导入后第一件事不是急着调样式而是右键图层→打开属性表看看有没有一个叫“ELEVATION”或“Z”的字段。如果能看到这个字段且里面有值说明导出时的Z属性挂接成功了。如果没有这个字段那你得回去Surfer里重新导一次勾选带Z值属性的选项。如果DXF导入后坐标发生了偏移大概率是图层没有定义坐标系。解决办法是使用“定义投影”工具把该图层定义成与原始数据一致的坐标系。例如原始数据是WGS84经纬度那就在这里选“GCS_WGS_1984”。一旦坐标系统正确等值线和底图叠加就应该完全吻合。4.2 网格数据转ArcGIS栅格的另类路线如果你更习惯在ArcGIS里重新生成等值线那么可以把Surfer的网格数据.grd导成ASCII文本再通过ArcGIS的“ASCII转栅格”工具转换。具体操作在Surfer 10里打开网格文件文件→导出格式选“GS ASCII (*.grd)”这是一个文本格式记录了网格的行列数、边界范围和每个网格节点的值。进入ArcMap在工具箱中找到“转换工具”→“从栅格转出”→“ASCII转栅格”将刚才导出的GS ASCII文件导入输入数据类型选“FLOAT”输出栅格就出来了。有一点要提醒Surfer导出的GS ASCII文件与ArcGIS的ASCII网格格式在头文件结构上有一点差异ArcGIS 10.3有时候会不认这个头信息。如果遇到导入报错别慌最简单的处理方法是用记事本打开GS ASCII文件看一眼头几行。标准的ArcGIS ASCII网格头文件是ncols 233 nrows 231 xllcorner 468000.0 yllcorner 3280000.0 cellsize 50.0 NODATA_value -9999而Surfer导出的GS ASCII很可能开头是带版本信息的或者行列、边界字段名不一致。你只需要把文件头改成ArcGIS认的这五行参数后面的数据逐行读入就行数据量大的时候用Excel或者文本批处理工具先替换一下也行。这算是个土办法但非常管用。4.3 等值面矢量导入后的字段清洗走“等值线转多边形”路线的同学导入DXF后会看到多了一层面要素。这层面要素目前是DXF里的闭合多段线自动构面形成的属性表里可能只有一个简单的标识字段等级值有没有带过来取决于你导出时有没有选属性。如果你发现等级值没带过来另一个补救办法是在ArcGIS里用“空间连接”直接把原始点数据的数值关联到面要素上。通过空间位置判断每个面中心点落在哪个等级范围然后赋属性。这个方法适合点数据丰富的场景点太少的时候精度会差点。我个人的习惯是在Surfer导出前就检查好属性宁可多花两分钟确认也不要在ArcGIS里再折腾数据修复。因为DXF文件对属性字段的支持本来就弱字段名长度、类型限制都比Shapefile严后期修补相当费劲。5. ArcGIS 10.3里的整饰与出图细节5.1 分级配色一份能直接抄的色带方案等值面或等值线进入ArcGIS之后符号化方式记得选择“数量”→“分级色彩”或者“分级符号”。个人推荐用“分级色彩”做面要素用“逐级色带”选项里自带的配色就行但有一点必须注意色带的分类数要和你在Surfer里设置的等级数一致颜色Transition才会自然。如果你的字段值跨度特别大比如从0.01到1000直接用默认的分类方式可能让低值区的颜色全部挤在一起。这时候我建议在“分类”选项卡里选择“手动”分类分级中断值也手动填写。实际操作是双击中断值所在的数字框直接改成你想要的值。具体配色这块我分享一个我常用的环境监测分级色带你直接照着配就行等级范围颜色低值区10%以下浅蓝色RGB: 204, 229, 255中低值区10%~30%浅绿色RGB: 178, 223, 138中值区30%~60%黄绿色RGB: 254, 255, 153中高值区60%~85%橙色RGB: 253, 174, 97高值区85%以上红色RGB: 244, 109, 67这套配色的逻辑是颜色越暖数值越高而且相邻等级间的色差适中不会让图面过花出图以后给人第一眼的视觉印象就是“有高值区且分区清楚”。5.2 用掩膜把等值面切到调查范围内很多项目里调查区并不等于Surfer插值时的矩形范围于是ArcGIS里会看到等值面延伸到调查边界之外的“多余”部分。这时候就要做裁剪。我推荐用“栅格计算器”或者“按掩膜提取工具”来做栅格的边界裁剪如果是矢量面数据则用“裁剪”工具Clip。裁剪之前你得有一个调查边界的面图层比如从国土部门拿的边界shp然后处理起来就非常简单。这里有个小提示如果用“裁剪”工具处理面要素建议勾选输出要素类选项里的“使用与输入要素相同的坐标系”免得裁完后坐标发生细微偏移。裁剪后的等值面会和调查边界严丝合缝地套合。如果你希望边界线本身也显示在图上那就把边界shp再加到地图里设置一个无填充、黑色实线的符号叠加上去即可。5.3 等值线标注样式设置等值线图在ArcGIS里显示时默认状态下数字标注是紧贴着线走的这没问题。但如果你希望标注更美观有几个参数值得调。右键等值线图层→属性→标注选项卡勾选“标注此图层中的要素”标注字段选择Z值字段。然后在“放置属性”里设置如果标注拥挤可以选择“移除冲突标注”这样系统会自动把部分标签移除保证图面清爽。标注字体建议用“Arial”或“Times New Roman”大小8到10磅颜色与等值线颜色一致或使用黑色加白底色晕这样既保持美观又方便阅读。还有一个经验如果等值线很密标注容易叠在一起看不清可以在“标注”选项卡里设置等值线标注的间隔只标注每隔几条的线。例如你的等值线间隔是10标注时每隔两条线标一次也就是标20、40、60……这样图面会干净很多。6. 实操中的常见问题与排查速查表6.1 典型问题整理做这套流程这么久我遇到过很多奇奇怪怪的问题挑几个典型的列出来大家可以对照排查问题现象可能原因解决方法ArcGIS里等值线位置偏移和底图对不上坐标系定义错误或未定义用“定义投影”工具重新定义坐标系确保与底图一致导入DXF后属性表没有Z值字段Surfer导出时未勾选导出Z属性回到Surfer重新导出勾选带高程属性的选项等值线图出现穿出边界的“飞线”未设置BLN边界约束文件在Surfer网格化时加载边界BLN文件限制插值范围网格文件在ArcGIS中无法转换为栅格GS ASCII文件头格式不兼容手动修改ASCII文件头为ArcGIS标准格式等值面填色过渡不自然层级感差分级数量太少或色带选择不当手动增加等级数使用暖色系分级色带等值线过于锯齿化不美观Surfer平滑参数设置过低在Surfer等值线图属性中提高平滑系数至3裁剪后等值面有细小缺口或重叠矢量面本身存在拓扑错误使用ArcGIS“修复几何”工具先处理原始面要素6.2 独家避坑心得能不开的会我不开该说的坑我全说最后分享几个我这几年来摸索出来的独家经验价值不输前面整套教程。第一Surfer导出DXF时如果等值线图里包含中文图层名或中文标注导出后DXF属性字段可能出现乱码。这个真的是个坑我第一次就踩了。解决办法很简单Surfer里所有图层、标注尽量用英文或拼音命名导出后再到ArcGIS里用字段别名显示中文。第二涉及等值面的项目不要只导出一个等级的等值面边界最好连同原始等值线一起导出。因为到ArcGIS里很可能需要根据不同的专题需求重新调整等级边界有等值线作为辅助参考做符号化时会方便得多。第三ArcGIS 10.3在打开DXF文件时如果文件路径中含有空格或中文字符偶尔会出现读取失败。这个和DXF解析器的字符敏感度有关。我现在的习惯是所有工程文件路径全部用英文路径文件夹名不要有空格项目编号命名用“GZ2024_018”这种格式基本不会触发这个隐性Bug。第四字符集编码问题。ArcGIS 10.3毕竟是十几年前的产品了对UTF-8的支持不算好。如果你从Surfer导出的DXF或者CSV里带有中文导入ArcGIS后偶尔会出现中文变“”的情况。这时候把文件用记事本重新另存为ANSI编码格式再导入问题就消失了。第五也是最重要的一条任何时候动坐标、动投影都要先备份一份原始数据。我见过身边的同事一个“定义投影”下去把原本好好的数据直接搞乱最后想回退都来不及。还有一次在ArcGIS里点错了“投影”工具而不是“定义投影”工具把数据从WGS84“投影”到了UTM结果数据完全变形只能重新导入原始文件。所以备份数据这个动作真的怎么强调都不为过。7. 一个完整的实操案例记录为了让这篇分享更落地我把去年做过的一个土壤调查项目里的实际操作流水账贴出来大家照着这个走一遍基本就能掌握整套流程。项目背景某工业园区土壤重金属调查共布设采样点42个检测指标为砷As单位mg/kg。调查区面积约3平方公里边界为不规则多边形与园区红线一致。数据准备阶段我把42个采样点的坐标采用CGCS2000高斯投影和As浓度值整理成Excel三列格式命名为soil_as.xls首行字段为X、Y、Z。同时把园区边界坐标单独整理为边界文件boundary.bln用来在Surfer里做插值限制。Surfer操作打开Surfer10网格→数据选择soil_as.xls指定X、Y、Z列。插值方法保留默认克里金法网格间距设置为50米采样点平均间距约150米。在过滤选项卡中加载boundary.bln把“排除边界外”勾上。网格化完成后生成等值线图设置等级从10 mg/kg到120 mg/kg间隔10 mg/kg主等值线实线半间隔辅助线虚线平滑系数设3。再生成填充等值线图设置热力图配色。最后导出DXF时选中等值线图文件→导出DXF格式勾选导出Z属性。ArcGIS操作新建地图拖入刚才导出的DXF文件线要素正常显示。打开属性表确认Elevation字段存在。右键图层→属性→源发现未定义坐标系使用“定义投影”工具设置为CGCS2000_3_Degree_GK_CM_120E。随后叠加园区边界shp做照准等值线与边界完全套合。再用“裁剪”工具将等值线按边界裁剪去掉边界外的多余线段。对面要素数据用“分级色彩”符号化等级中断值设置为10、20、40、60、80、100、120 mg/kg对应颜色从浅绿到深红。最后切到布局视图添加图例、比例尺、指北针标题写“园区土壤砷含量分布图”出图分辨率设300dpi出来的图在项目汇报会上一次通过。这整个过程从数据准备到最终出图熟练以后半小时内可以全部完成。第一次操作可能需要大半天但流程理顺之后这套方法就是又快又稳的“标准答案”。我个人在实际操作中最大的体会是Surfer和ArcGIS这对组合的威力不在于某一个软件有多强而在于你能否让它们各司其职、无缝衔接。数据准备阶段多想一步导出的格式和属性就少踩一个坑插值阶段多调一个参数出图的质量就提升一个档次。最后再分享一个小技巧当你懒得每次手动设定等值线等级时可以在Surfer里把设定好的等值线图存成模板文件.srf下次处理同类数据时直接套模板连配色带等级一键复用效率直接翻倍。
返回列表