转:如何去除DEM数据中的缺失值(NoData)

本文介绍使用ArcGIS软件通过Con和Nibble命令解决DEM数据中Nodata问题的方法。具体步骤包括选择Nodata区域并赋值、准备输入与掩膜文件及执行Nibble命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近遇到这样一个问题:DEM数据中有Nodata(里所的情况并非数据边缘部分的nodata,而是数据中间类似数据缺失的情况), 那么,在种情况下,如何消除nodata, 使个数据保持完整性呢?




,利用Arcgis件能很容易的解决问题。这里,我们主要用到con和nibble两个命令。可能大家对Con命令已经非常熟悉了,关于nibble可以查阅ArcGIS的帮助,这里附上示意图。

 

 


针对开头的问题,我的解决思路如下:

(1)首先,利用con命令选择出原始dem数据中的nodata部分并给其赋值(可赋任意值,本文中这里赋为-1),具体命令如下:con(Isnull(dem),-1,dem)。该命令所运行的结果作为nibble命令的input文件。


(2)将原始的dem数据作为mask文件。当然,你也可以利用isnull命令选择出来的nodata部分进行setnull得到mask文件。关键是要确保无数据部分的类型是nodata。


(3)准备好了input文件和mask文件,我们就可以利用nibble命令来处理了,具体命令如下:nibble(input,mask)。运行的结果如图3所示。

 

 

 

 

<think>我们正在解决ArcGISDEM填洼(FillSinks)时出现的错误。用户需要解决方案。首先,我们需要明确常见的错误类型和原因。ArcGIS中填洼工具(通常是SpatialAnalyst工具集中的“填洼”工具)常见的错误包括:1.输入数据问题(如NoData值、数据范围、投影问题)2.内存不足3.输出路径或文件名无效4.地理处理环境设置问题(如范围、掩膜等)5.软件或授权问题由于用户没有提供具体的错误信息,我们将提供一般性的解决方案步骤。步骤:1.检查输入DEM数据:-确保DEM数据没有损坏,可以在ArcMap中正常显示。-检查DEM数据中是否有异常值(如非常大的负值或正值)?这些可能是由于数据错误导致。-使用“栅格计算器”或“重分类”工具将异常值设置为NoData。2.检查投影和范围:-确保DEM数据有正确的投影(通常需要投影坐标系,以保证面积或距离单位正确)。-检查DEM的范围是否合理。3.尝试使用较小的区域:-如果数据量很大,可能导致内存不足。可以尝试裁剪一小块区域进行测试,看是否成功。4.检查输出设置:-确保输出路径有效(没有非法字符,路径存在,有写入权限)。5.调整地理处理环境:-在“地理处理”>“环境”设置中,检查以下设置:-设置合适的处理范围(通常设置为“与图层DEM相同”)。-设置合适的像元大小(与输入DEM相同)。-如果有掩膜,确保掩膜范围合理。6.使用其他工具或方法:-如果ArcGIS的填洼工具持续失败,可以尝试使用其他工具:-使用“流向”(FlowDirection)工具时,选择“强制填洼”(在设置中勾选),这样在计算流向之前会自动填洼。-使用第三方工具,如WhiteboxGAT、QGIS中的填洼工具等。7.更新软件或检查授权:-确保ArcGIS版本是最新的,并且有SpatialAnalyst扩展模块的授权。8.错误代码查询:-如果错误有特定代码,可以在Esri官网查询错误代码的含义和解决方案。9.使用ArcPy脚本尝试:-可以尝试在Python窗口使用脚本运行填洼工具,这样有时会得到更详细的错误信息。```pythonimportarcpyfromarcpy.saimport*arcpy.CheckOutExtension("Spatial")filled_dem=Fill("dem.tif")filled_dem.save("filled_dem.tif")```10.检查系统资源:-确保计算机有足够的内存和磁盘空间。常见错误示例:-错误00012:无法创建输出栅格。检查输出路径。-错误999999:执行函数时出错。可能是数据问题或环境设置问题。如果以上步骤仍不能解决问题,建议用户提供具体的错误信息以便进一步排查。生成相关问题:1.如何检查DEM数据的投影?2.如何修复DEM中的异常值?3.ArcGIS中如何设置地理处理环境?4.如何使用ArcPy进行批量填洼处理?5.填洼工具的工作原理是什么?</think>### ArcGIS DEM填洼错误解决方案 在ArcGIS中进行DEM填洼(Fill Sinks)时出现错误通常由以下原因引起,以下是系统性解决方案: #### 1. **数据预处理问题** - **无效高程值检查** 使用**栅格计算器**检查异常值: `Con(("dem.tif" < -1000) | ("dem.tif" > 10000), 0, "dem.tif")` 替换-1000/10000为实际合理范围[^1]。 - **NoData值处理** 使用**栅格域**工具(Raster Domain)识别空洞区域,再用**镶嵌**工具填补。 #### 2. **投影系统不匹配** - 执行**投影栅格**工具(Project Raster)确保: - DEM与处理区域使用**相同投影坐标系** - 避免地理坐标系(如WGS84)处理大范围数据 - 检查单位是否为**米制**(非经纬度)[^2] #### 3. **内存与存储限制** - **临时文件清理**: - 删除`C:\Users\[用户]\AppData\Local\Temp`下的临时文件 - 在**地理处理环境**中设置临时工作空间到SSD硬盘 - **分块处理**: ```python # ArcPy分块处理示例 import arcpy from arcpy.sa import * arcpy.env.extent = "MINOF" # 按数据最小范围处理 arcpy.env.cellSize = 30 # 明确指定像元大小 filled_dem = Fill("input_dem.tif") ``` #### 4. **工具参数错误** - **强制填洼设置**: - 在**填洼工具**中勾选`Z Limit`参数(建议设为DEM高程范围的5-10%) - 避免使用`FLOAT`精度栅格,为`INTEGER`类型 - **流向计算验证**: 先运行**流向工具**(Flow Direction)测试数据完整性: ```python flow_dir = FlowDirection("dem.tif", "FORCE") ``` #### 5. **软件环境修复** - **扩展模块激活**: - 检查**Spatial Analyst扩展**是否勾选(自定义 > 扩展模块) - 重置ArcGIS许可:`ArcGIS Administrator > 重新授权` - **Python依赖修复**: 运行`arcpy.CheckExtension("spatial")`确认模块状态 > **关键排查步骤**: > 1.DEM子集测试(缩小处理范围) > 2. 使用**栅格ASCII**导出后检查数据格式 > 3. 查看**地理处理结果**窗口的完整错误日志(包含错误代码) #### 应用案例 某项目填洼失败原因为**高程负值溢出**(-32768),通过以下步骤解决: ```python # 修复负值代码 fixed_dem = Con("dem.tif" > 0, "dem.tif", 0) Fill(fixed_dem, z_limit=50) ``` [^1]: DEM填洼要求连续高程表面,异常值会导致水文分析中断 [^2]: 地理坐标系下弧长计算误差会引发拓扑矛盾
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值