【ArcGIS处理】行政区划与流域区划间转化
引言
依据水文模型得到流域尺度模拟结果时,需要将成果转化至行政区划下,此时应当如何实现呢?
本案例用于得到行政区划固定值,主要思路如下:
- 计算各行政区划下各子流域面积
- 根据各行政区划下各子流域面积占比均化得到县区固定值
数据准备
1、行政区划数据
行政区划数据如下图所示:包含11个县区
2、流域区划数据
子流域数据如下所示:
因县区包含多个子流域,流域分区数据有多个,后续需要将其合并,以一并处理。
- 操作1:合并多个子流域数据成一个图层,
打开【Union】工具,选择多个子流域,以合并为同一图层
成图如下所示:
- 操作2:计算各子流域面积
打开子流域属性表,右键点击【计算几何/Calculate Geometry】,界面如下:
- 操作3:重新给各子流域编号
各步骤处理完成后,流域属性表如下:
ArcGIS详细处理步骤
由于县区级行政区有多个,此处使用ModelBuilder设置批量处理,具体处理步骤如下。
Step1:统计行政区划下子流域面积
思路:批量裁剪得到各行政区划下子流域分布图并统计各子流域面积
1、创建批量处理模型
因为模型(Model)是要在工具箱(Toolbox)下面创建的,所以我们首先应该新建一个工具箱。选中文件夹,右键,在弹出的面板中选择“New”—>“Toolbox”,命名为批量处理(BatchProcess)即可,界面如下:
选中批量处理(BatchProcess)工具箱,右键,在弹出的面板中选择“New”—>“Model”。如此,模型就被创建成功了。剩下的就是参数的设置了。
模型设计界面如下:
2、添加批量裁剪处理
将前文准备的行政区划数据和行政区划数据拖入模型界面,如下:均显示为椭圆形状的参数
步骤1:设置迭代器
为【ElevenTowns】添加一个迭代器。在【Insert】中选择【Iterators】,在弹出的面板中选中“迭代器”—>“要素类”(由于处理文件为shp形式,添加要素迭代器)
接下来将【ElevenTowns】与迭代器参数进行连接。选中右上角倒数第三个“线”工具,简单连接,如下:
方式2: 在迭代器上选择输入参数,设置输入文件路径为包含县区行政区划下文件即可
双击进入以下界面,设置文件路径:
连接完成界面如下:
步骤2:添加裁剪工具箱
裁剪工具箱位置:Data Management Tools–Raster–Raster Pcocessing–Clip
从系统工具箱中拖入裁剪工具( 数据管理→栅格→栅格处理→裁剪),如下:
接下来需要完成要素与裁剪工具的连接。
同样使用右上角的单数第三个“线”工具,要素数据与裁剪工具连接。一定要注意,输入要素为【流域Watershed】中的要素;裁剪要素为【ElevenTowns】
为保存的裁剪后的要素名称设置环境变量,
设置完成后,点击运行,如下图
导入裁剪后各shp文件,界面如下:
3、添加计算面积
批量裁剪完成后,需要添加新的模型批量计算各县区下各子流域所占面积:
步骤1:添加迭代器
步骤3:添加字段
因为要计算面积(或者长度之类),所以需要添加一个字段用以存储计算的数据。你可以打开ArcToolbox工具箱,依次选择【数据管理工具】→【字段】→【添加字段】,并把添加字段工具拖到模型界面,如下
双击【添加字段】或者右键弹出选择参数:
- 【输入表】:插入迭代器后出现的【连接器】
- 【字段名称】:选择合适的名称添加就可以
- 【字段类型】:可根据数据精度要求自行选择
点击【OK】后,界面如下:
步骤4:计算字段
根据同样的操作,找到【计算字段】工具,并将其拖到模型界面,如下:
双击或者右键弹出设置参数,设置如下:
- 【输入表】:选择【添加字段】后弹出的模型的连接器
- 【字段名称】:上一步起名的字段;
- 【计算公式】:!shape.area@acres!(这是python计算面积的公式)
一定记得【表达式类型】选择【python】
- 输入!shape.area!,计算平面面积(单位为公顷)
- 输入!shape.garea@squaremeters!,计算平面面积(单位为平方千米)
设置完成后,整个界面如下所示:
点击运行,结果如下:
Step2:根据子流域面积占比均化得到各行政区固定值
思路:根据各面积占比,类似泰森多边形法求得面降水量,计算得到各行政区固定值
根据以上处理步骤可得到各行政区划下各子流域面积,可根据面积占比,计算得到行政区划下特征值。
各县区成图如下:
参考
1、知乎-【ArcGIS教程】(88)模型—批量裁剪
2、知乎-【ArcGIS教程】(106)模型构建器(2)——批量计算图层面积