ArcGIS使用arcpy实现批量裁剪、分幅裁剪和矢量要素逐个导出

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ArcGIS使用arcpy实现批量裁剪、分幅裁剪和矢量要素
逐个导出
赵岩
对栅格数据进行裁剪以及导出矢量要素中的某一个要素,在ArcGIS中使用clip工具和Export data可以轻松的实现。

但当我们需要批量处理数据时,这种方法有点耗时和手疼,如果使用Python调用arcpy使用循环语句就可以轻松搞定了,这样我们就可以一边看着电影,一边等待电脑完成手工可能需要一天的工作量。

方法如下:
①打开电影(可以选择直接播放,因为如果手速快的话,正片播放前应该能完成操作)。

②打开ArcGIS,打开Python窗口。

批量裁剪
批量裁剪,是指使用一个矢量面文件,对一个文件夹中的多个栅格文件进行裁剪的过程。

③输入以下代码,注意修改矢量文件和输出路径。

剪切后采取的命名方式是原栅格名称加上“_clip”。

"""
赵岩
2020-12-8
这段代码用于在ArcGIS IDLE(Python GUI)中实现对一个文件夹中的多个栅格文件的批量裁剪。

即用一个面矢量文件,裁剪多个矢量文件。

"""
import arcpy
arcpy.env.workspace = (r"D:\test")#设置当前工作空间
clipFeature = (r"D:\test\clip.shp")#定义用于裁剪的矢量面文件
outpath = (r"D:\test\clip\\")#定义输出路径
rasters = arcpy.ListRasters("*", "TIF")#获取当前工作空间的所有栅格文件
#依次对当前工作空间每一个栅格进行裁剪
for raster in rasters:
print("Cliping "+raster)#打印正在裁剪的栅格文件
file_name = raster.split('.')[0]#去掉栅格名称的后缀.tif
#执行掩膜裁剪
outExtractByMask = arcpy.gp.ExtractByMask_sa(raster, clipFeature, outpath+file_name+'_clip.tif')
print('Finished!')
④回车,运行代码,窗口会提示正在剪切的栅格文件
⑤是不是影片刚好进入正片,那就开始吧。

⑥出现Finished!则表示裁剪完成。

分幅裁剪
分幅裁剪,就是将一个矢量面文件中的多个面要素逐个对同一个栅格文件进行裁剪,从而得到栅格数据的不同部位。

③输入以下代码,注意修改矢量文件、栅格文件和输出路径。

剪切后采取的命名方式是每个面要素的FID加上“_clip”。

"""
赵岩
2020-12-8
这段代码用于在ArcGIS IDLE(Python GUI)中实现对一个栅格文件的不同位置分别进行裁剪。

即遍历一个面矢量文件中的每一个面要素,分别对同一个栅格进行裁剪。

"""
import arcpy
arcpy.env.workspace = (r"D:\test")#设置当前工作空间
feature = (r'D:\test\clips.shp')#定义用于裁剪的矢量面文件
raster = (r'D:\test\GLP_DEM.tif')#定义栅格文件
outpath = (r'D:\test\clip\\')#定义输出路径
#遍历矢量文件中的每一个面要素
with arcpy.da.SearchCursor(feature, ["SHAPE@",'FID']) as cursor:
for row in cursor:
mask = row[0]#让每个斑块成为掩膜
print('Cliping with ' + str(row[1])+'row element to new raster')#打印正在裁剪的栅格文件
outExtractByMask = arcpy.gp.ExtractByMask_sa(raster, mask, outpath+str(row[1])+'_clip.tif')
print("Finished!")
④回车,运行代码,窗口会提示正在剪切的栅格文件
⑤可以看下一部影片了。

⑥出现Finished!则表示裁剪完成。

批量导出
批量导出,是指将一个矢量文件中的每一个要素逐个导出为单个文件。

③输入以下代码,注意修改矢量文件和输出路径。

导出后采取的命名方式是每个面要素的FID。

"""
赵岩
2020-12-8
这段代码用于在ArcGIS IDLE(Python GUI)中实现将矢量文件中的每一个要素逐个导出。

"""
import arcpy
import os
arcpy.env.workspace = (r"D:\test")#定义工作空间
feature = (r"D:\test\clips.shp")#定义要处理的矢量文件
out_path= (r"D:\test\clip")#定义输出文件路径
#query = """"AREA" > 0"""#设定输出文件需要满足的条件
#使用SearchCursor遍历属性表中的每个符合条件的要素
#SHAPE@指代单个要素,FID是一个字段,query是条件
with arcpy.da.SearchCursor(feature, ["SHAPE@",'FID']) as cursor:
for row in cursor:
print("Exporting FID="+str(row[1])+" row element to single vector file")#打印正在导出的要素
arcpy.FeatureClassToFeatureClass_conversion
(row[0],out_path,row[1])#以FID为名称导出要素
print("Finished!")
④回车,运行代码,窗口会提示正在导出的矢量文件
⑤可以看下一部影片了。

⑥出现Finished!则表示裁剪完成。

相关文档
最新文档