基于Arcpy的栅格数据批量处理+简单说明

最近写毕业论文,把气象数据和卫星影像插值的插值,拼接的拼接,临到要计算了,问题成堆的出现,把人累的半死。
本文的目的是给出一些常用的批量处理栅格数据的arcoy代码,做出简单说明,并说一些踩过的坑。

1、代码

批量裁剪(clip)代码:

import arcpy

arcpy.env.workspace="工作路径"
rasters=arcpy.ListRasters("*","tif")
mask="相应文件"
#此处只能输入相应shp文件
#否侧可能有:The clip feature is outside the raster extent.

for raster in rasters:
   out="路径"+"test_clip"+raster
   print out+"begin project "
   #文件名称不可超过13个字符,且不可以数字为开头
   arcpy.Clip_management(raster, "482801.137013 4440341.783397 1262801.137013 5196351.760010", out, mask, "", "ClippingGeometry","MAINTAIN_EXTENT")

   #raster为输入数据,即被裁剪栅格图层,四个数字代表裁剪图层的最小外接矩形,
   #如果该参数为默认值,即
   #,表示不特殊制定边界,与裁剪的矢量范围保持一致,out是输出文件路径及名称,
   #mask是裁剪图层,“”代表该参数使用默认值,ClippingGeometry为按照几何边界裁剪。
   

批量掩膜代码:

# Import system modules

import arcpy

from arcpy import env

from arcpy.sa import *

 

# Set environment settings

env.workspace = "D:/data/"

rasterList = arcpy.ListRasters("*","tif")

 

#输出路径

output_path = "D:/8/"

# mask shp

inMaskData = "E:/haolu/XLGLM/XLGLM.shp"

 

for raster in rasterList:

    print raster

    # Set local variables

    inRaster = raster

    rd = arcpy.sa.Raster(inRaster)

    # Set the extent environment as the raster, very important for clip with different vector

    arcpy.env.extent = rd.extent

    # Execute ExtractByMask

    outExtractByMask = ExtractByMask(inRaster, inMaskData)

    # Save the output

    out = output_path + inRaster #对生成文件进行命名

    outExtractByMask.save(out)


批量重投影代码:

import arcpy,os,os.path
 

def projectRaster(rootPath):

    try:

        

        ##arcpy工作目录

        root_path = r"D:\data\LAIresult\clip"

        arcpy.env.workspace ="D:\data\LAIresult\clip"

 

        ##待处理文件所在目录(相对于根目录)

        input_path = "2005"

        output_path = "result"

 

        ##源坐标系 "CGCS2000_3_Degree_GK_CM_123E" 

        #sourceSR = arcpy.SpatialReference("WGS 1984 Albers")

        ##目标坐标系(WGS 1984 Web Mercator Auxiliary Sphere)

        targetSR = arcpy.SpatialReference("Asia North Albers Equal Area Conic")

 

        ##遍历目录,查找栅格数据

        files = os.listdir(root_path+os.sep+input_path)

        for f in files:

            if os.path.splitext(f)[1].upper() == ".TIF":

                fileName = os.path.splitext(f)[0] + ".tif"

                in_dataset = input_path + os.sep + fileName

                out_dataset = output_path + os.sep + fileName

 

                #print "begin project "+in_dataset+" from: " +sourceSR.name+" to: "+targetSR.name
                #arcpy.ProjectRaster_management(in_dataset, out_dataset,
                print "begin project "+in_dataset

                #arcpy.BatchProject_management(in_dataset, out_dataset,targetSR )

                arcpy.ProjectRaster_management(in_dataset, out_dataset, targetSR, "NEAREST",\

                                       "#", "#", "#")
    

 

        print "project success!"

        

    except arcpy.ExecuteError:

        print "Project Raster example failed."

        print arcpy.GetMessages()

 

################################################


if __name__ == '__main__':

 

    #指定处理文件根目录
    root_path = r"D:\data\ET\clip"

    projectRaster(root_path)

注意:批量重投影时,可以选择原有投影与目标投影,若不知道原有投影,直接选择目标投影也可。
投影的选择参考ArcGIS下自带投影文档。
批量重采样代码:

import arcpy
 
arcpy.env.workspace = r"D:/data/LAIresult/clip/2005/"
rasterList = arcpy.ListRasters("*","tif")

for raster in rasterList:
    print raster
    inRaster="D:/data/LAIresult/clip/2005/"+raster
    # Set local variables
    # Execute 
    out = "D:/data/LAIresult/clip/"+"resample"+raster
    arcpy.Resample_management(inRaster, out, "1000", "CUBIC")


以上就是我使用全部Arcpy批量处理代码,如果你并非地理信息专业,这些操作可以帮助你完成大部分的运算。
看到这里,相信大家也都能看出来,使用Arcpy进行栅格批量处理步骤是十分固定的,如果还想完成其他操作,自行去看相关官方文档即可。

我在论文这次要做到的是,对两个栅格影像进行因果分析。因为因果分析代码是用matlab写的,而要把栅格导入matlab中,两幅影像完全对齐进行运算,是万分麻烦的事情,在过程中,一定要记住,如果计算完成后发现边界出错,请主要检查以下两点:1、投影 2、分辨率。
请牢记。
如果有空还会添加例子说明。

  • 9
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值