自己写Arcpy批处理栅格和矢量
先上代码,讲解各行代码的意思,从而达到自己写代码的目的
#....Edit by Longhao Wang....
import arcpy
from arcpy import env
from arcpy.sa import *
import os
import os.path
import sys
arcpy.env.workspace="D:/OneDrive/UCAS/group/Tian/tif"
rootdir="D:/OneDrive/UCAS/group/Tian/tif"
inPointFeatures = "D:/OneDrive/UCAS/group/Tian/Export_Output.shp"
for dirpath,filename,filenames in os.walk(rootdir):
for files in filenames:
if os.path.splitext(files)[1]=='.tif':
filepath= os.path.join(dirpath,files)
inRaster = filepath
arcpy.env.snapRaster = filepath
outname = files[2:10]
outnamepath=r"D:\OneDrive\UCAS\group\Tian\out\table_" + outname + '.shp'
out_xls=r"D:\OneDrive\UCAS\group\Tian\out\table_" + outname + '.xls'
arcpy.CheckOutExtension("Spatial")
outExtractPoint = ExtractValuesToPoints(inPointFeatures, inRaster, outnamepath,
"INTERPOLATE", "VALUE_ONLY")
arcpy.TableToExcel_conversion(outExtractPoint, out_xls)
print outname
print "ok"
为方便说明,逐行讲解:
本代码实现【把栅格值提取到点】:输入元素是栅格影像 + 点矢量,输出带像元值属性的矢量表
本代码实现【表转excel】:把输出的矢量点属性表转为xls
- 1-3行是使用Arcpy所必需的,5-7行是python处理文件夹的方便操作
- 第8行输入待提取栅格值的栅格文件集合的路径
- 第9行与第8行相同
- 第10行是输入点矢量的路径+文件名
接下来对影像存储的文件夹进行遍历,保证文件夹中都是tif
- 第14行把路径和文件名合并成一个字符串,方便读取tif
- 第17行,files是每个文件夹的名字,应该为China20210412.tif(举例)我们用切片把20210412提取出来,方便表示结果,存为outname
- 第18行,outnamepath是存储矢量点的位置,19行同理,是excel
- 第21,23行是核心代码,分别实现了提取值到点,和表转excel功能
因此,若要批量对数据进行处理,只需修改核心函数就可以了,其次再修改文件名、文件夹、路径和切片就完成了。
寻找函数的话,只需要在你想要的工具下面,点击Tool Help即可
提供了源代码与数据讲解,我们只需要把核心函数复制过来就行了
有了上述的基础后,我们也能自己实现功能了,我尝试了批量裁剪tif的代码,你也可以撰写自己的代码
import arcpy
from arcpy import env
from arcpy.sa import *
import os
import os.path
import sys
arcpy.env.workspace=r"D:\Desktop\Study\Academic1\study2\vcf"
rootdir=r"D:\Desktop\Study\Academic1\study2\vcf"
for dirpath,filename,filenames in os.walk(rootdir):
for files in filenames:
if os.path.splitext(files)[1]=='.tif':
filepath= os.path.join(dirpath,files)
inRaster = filepath
arcpy.env.snapRaster = filepath
outname = files[8:12]
outnamepath=r"D:\Desktop\Study\Academic1\study2\VCF_" + outname + 'china.tif'
inMaskData =r"D:\Desktop\Study\Academic1\study2\mask_tif\cci\mask.shp"
arcpy.CheckOutExtension("Spatial")
outExtractByMask = ExtractByMask(inRaster, inMaskData)
outExtractByMask.save(outnamepath)
print outname
print "ok"
``