虽然在之前说的在FME中,处理数组我经常用pythonCaller,但是我真不会python,这也并不是我的学习重心,算是买一赠一的赠品,只不过这赠品有的使用还挺好用。
最近尝试着用arcpy写了一个小脚本,一路踩了各种坑,简直是坑的我死去活来,记录一下,做个备忘。
(里面的代码做了删减,运行不起来的,需要添加你自己的目标坐标系定义,源坐标系因为我的数据已经有了,也没有进行设置。)
这算是我写的第一个比较完整的包含了路径处理的小脚本了。
想要实现数据的批量处理,其实arcpy的难点并不多。主要就两个方法:
arcpy.ListRasters()和arcpy.ProjectRaster_management()
关键在于是中文格式编码的处理,和路径的拼接。
1.引入文件路径
在处理中文的时候首先需要声明
#--coding=utf-8--
其次,由于路径中存在中文,对于引入的中文路径,需要做decode
这步是极其关键的一步,我就是处理好中文路径,坑了自己好长时间。
#-*-coding=utf-8-*-
import arcpy,os,os.path
from arcpy import env
input_path = r'I:\源坐文件'.decode("utf-8")
output_path = r'I:\转换完成后'.decode("utf-8")
Coordinate_System = '这里写你自己的目标坐标系'
2.用os.walk()方法,遍历文件夹,获取所有的路径及栅格文件,并以此为基础进行坐标转换
#遍历文件夹,获取所有的栅格数据
for parent, dirnames, filenames in os.walk(input_path):#三个参数:1.父目录 2.所有文件夹名字(不含路径)3.所有文件名字
for dirname in dirnames:#输出文件夹信息
env.workspace = os.path.join(parent,dirname)
rasters = arcpy.ListRasters()
for raster in rasters:
output_dir = os.path.join(output_path,dirname)
out_raster = os.path.join(output_dir,raster)
#print "output_dir is" + output_dir
print "output_dir is" + output_dir
isExists=os.path.exists(output_dir)
# 判断结果
if not isExists:
# 如果不存在则创建目录
os.makedirs(output_dir)
print 'start to project '+output_dir+"\\"+raster
try:
arcpy.ProjectRaster_management(raster,out_raster,Coordinate_System,"NEAREST","#","#","#","#")
except Exception as e:
print e
else:
print output_dir+" has projected "+raster
没了,没什么好写的,我只是记录一下自己踩的坑。