河道中心线提取、平均宽度计算(Arcgis+CAD)

本文介绍两种河道平均宽度的计算方法,一种适用于顺直河道,另一种则适用于大多数河道,包括弯曲河段。文中详细阐述了从水体数据提取中心线的过程,并提供了在ArcGIS和CAD中的具体操作步骤。

在做项目中遇到的河道平均宽度计算问题,稍作总结如下:


首先,提取河道中心线,若已有河道中心线,请直接忽略。

1、单独加载水体数据,设置好纯色符号(建议为纯黑色),去掉轮廓线,这样是为了提升栅格数据质量,黑白分明,便于计算机识别像元。

2、点击全屏视图,导出地图,采用t式记录坐标,格式设置为1位单色阈值(非常重要)。如果不选这项,默认岀来是RGB三个通道的栅格数据,加载任何一个通道都没法实现栅格数据二值化,意味着无法使用 Arcscan功能,所以此处必须要设置。根据实际需要设置好dpi,这个是直接影响图形识别的因素。Dpi是根据具体的地图图幅进行可能需要尝试多次。

3、将导出的栅格地图加载到 arcmap中,接着新建一个线要素图层,坐标系设置与栅格一致,一并加载进来,同时打开 arcscan工具条,对栅格数据进行分类,设置如下:

4、设置了分类后, arcscan工具条会显示栅格数据打开编辑器,开始编辑,选中中心线图层。在 arcscan工具条点击显示预览,这时就开始创建中心线。

如果需要更详细的设置,在矢量化一选项中设置对应的输出图层由于提取的是中心线,矢量化方式就选中心线。

如果红圈内没有捕捉到,可以设置一下工具条,将栅格捕捉适当进行调整。

100=1200/12

  1. 最后点击生成要素,保存编辑,即可。(这里注意一下,点击后可能会出现警告:地图中不包含可编辑的折线图层XXXXXXX,此时检查是否新建了折线图层,保存编辑,再重新开始编辑即可)

6、最后成果(自己检查是否存在断线,建议使用拓扑检查悬挂点)

7、添加长度字段,计算中心线长度。



方法一:

适用范围:顺直河道,弯曲河段较多可能存在较大的误差;

优势:操作简单;

缺陷:不适用与弯曲河段较多的河道,强行使用可能存在较大误差。


1,河流中心线提取。

2,中心线折点转点,ArcGIS“要素折点转点”工具。

3,只用河流一侧。

4,ArcGIS“近邻分析”工具,中心线各点距离河流一侧最近点。

5,求最近点距离平均数*2。

6,右键选中字段“统计分析”。




方法二:

适用范围:大多数河道;

优势:使用范围广,意义明确;

缺陷:操作相对繁琐,需结合CAD。


1)将河道中心线和河面文件转换成CAD文件;中心线面shp文件导入Arcgis,右键数据—导出至CAD,获得CAD格式的中心线文件,河面文件操作同理;

2)在CAD中分别打开河面文件和中心线文件;

3)将中心线复制进河面文件;

4)将中心线移动至河道对应的位置;(此处可做辅助线)做一条与网格分辨率同样大小的直线,移动至对应位置,即可实现位置准确定位。

5)打开对象捕捉中的垂足功能,做河道中心线任意

中垂线,注意中垂线应稍微长一点,使其长度完全穿过最宽的河道,同时方便后续裁剪处理;

中垂线可先做短一点,后输入“SC”,利用缩放功能放大中垂线;

6)阵列功能中选择路径阵列,以中垂线为对象,以河道中心线为路径进行阵列操作;

7)对阵列参数进行修改,调整为适当间距,也可根据需要修改为定数等分;

8)通过炸裂操作,将阵列拆解成各自独立的线文件;

9)选择河面文件后,使用修剪功能,修剪超出河面部分的线文件,同时必须注意因直线太长,导致进入插入其余河道位置处的错误部分,需要单独删除;(此处也可不做修剪工作,直接使用Arcgis中的矢量裁剪功能,参考:

ArcGIS计算河宽_朋爷名叫小朋的博客-优快云博客_在arcgis中如何计算河流长度

10)获得修建后的图像,而后删除河道

11)关闭画出的线文件图层,删除河道及中心线图层内容,保存后退出(确保删除除去河宽线之外的所有元素);

12)在Aicgis中加载上述步骤处理后的河面CDA文件,并导出其中的线文件;

13)打开导出文件属性表,添加字段,使用栅格计算器,计算其长度,后求其平均值即为河道的平均宽度;

### 使用 ArcGIS 提取河道中心线的方法 在 ArcGIS提取河道中心线的过程通常涉及多个步骤,主要包括数据预处理、转换以及最终的中心线提取。以下是具体的操作方法: #### 数据准备 为了成功提取河道中心线,需要准备好以下基础数据: - **河道面数据**:表示河流区域的多边形矢量数据。 - **高程点数据**(可选):用于生成地形模型(如 TIN 或 DEM),以便更好地理解河道形态。 这些数据可以通过遥感影像分类或其他方式获取[^1]。 #### 方法一:基于“面转线”功能 如果已有河道面数据,则可以采用以下流程完成中心线提取: 1. 将河道面数据通过 `Feature To Line` 工具转化为线要素。此工具会将输入的多边形边界转换为独立的线条要素[^2]。 ```python import arcpy input_polygon = "river_polygons.shp" output_lines = "river_boundary_lines.shp" arcpy.FeatureToLine_management(input_polygon, output_lines) ``` 2. 对转化后的线要素执行进一步编辑操作,例如删除冗余部分并保留主要流向路径。 3. 利用 `Collapse Dual Lines to Centerline` 工具从双平行线中提取单一中心线。该工具有助于简化复杂的河道结构[^3]。 ```python dual_lines = "dual_river_lines.shp" center_line_output = "centerlines.shp" arcpy CollapseDualLinesToCenterline_cartography(dual_lines, center_line_output, "5 Meters", "", "") ``` #### 方法二:借助栅格化过程 当原始数据难以直接应用向量法时,另一种常见策略是从栅格图像出发重新构建中心线: 1. 首先将河道面数据导出成黑白 TIFF 文件,其中白色代表背景而黑色填充目标河域范围。 2. 应用 Morphological Operations (Morphology) 来细化黑区直至仅剩细长骨架形状——即所谓的骨骼化(Skeletonization)[^2]。 3. 转回矢量格式得到精确表达的中心轨迹。 以上两种途径各有优劣,实际选用取决于项目具体情况及可用资源条件。 ```python # 示例代码片段展示如何调用ArcPy实现基本转换逻辑 import arcpy def extract_centerline(polygon_layer, out_folder): """ 自动化提取给定多边形层的中心线 参数: polygon_layer (str): 输入的多边形图层名称或路径. out_folder (str): 输出文件夹位置. 返回值: str: 新创建的中心线路由地址字符串. """ temp_lines = f"{out_folder}/temp_lines.shp" final_centerline = f"{out_folder}/final_centerline.shp" try: # Step 1: Convert polygons into lines arcpy.FeatureToLine_management(in_features=polygon_layer, out_feature_class=temp_lines) # Step 2: Generate the actual center line from these boundary lines arcpy.CollapseDualLinesToCenterline_cartography( in_features=temp_lines, out_feature_class=final_centerline, width="", min_length="", end_type="ROUND") return final_centerline except Exception as e: print(f"Error during processing: {e}") if __name__ == "__main__": result = extract_centerline("path/to/your/polygons.shp", "/output/directory") if result: print(f"Successfully generated centerline at {result}.") ```
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值