ArcGIS Python ​影像批量裁剪

该工具在:“14综合\工具箱.tbx\影像裁剪\按记录批量裁剪影像”,影像数据按矢量面要素批量裁剪,界面如图14-5所示。

图14-5 影像批量裁剪

按一个矢量面数据,按字段值相同的融合在一起裁剪影像,字段值是裁剪后的影像名字,如果是数字开头,自动加T,如果其他特殊字符,会自动替换;输出工作空间是数据库,就是数据库格式,如果文件夹,可以是.tif文件或.img文件,影像裁剪可以使用空间分析中arcpy.sa.ExtractByMask,按掩膜提取;可以使用数据管理下Clip_management,一定把使用输入要素裁剪要素勾上,如图14-6所示。

图14-6 影像的裁剪

#coding=utf8
import sys, os, string,types
import arcpy
from arcpy import env

def getuniqueValue(inTable,inField):
    rows = arcpy.SearchCursor(inTable)
    # Create an empty list
    uniqueList = []
    try:
        for row in rows:
            # If the value is not already in the list, append it
            if row.getValue(inField) not in uniqueList:
                uniqueList.append(row.getValue(inField))
        return uniqueList
    finally:
        if row:
            del row
        if rows:
            del rows

arcpy.env.overwriteOutput = True
oldraster  = arcpy.GetParameterAsText(0)
clipshp  = arcpy.GetParameterAsText(1)
fieldname= arcpy.GetParameterAsText(2)
outworkspace= arcpy.GetParameterAsText(3)
outdesc = arcpy.Describe(outworkspace)

ext= arcpy.GetParameterAsText(4)

if outdesc.dataType== "Workspace":
    ext=""
elif not outdesc.dataType=="Folder":#如FeatureDataset FeatureLayer
    arcpy.AddError(u"格式错误无法裁剪")
    pass
arcpy.CheckOutExtension("spatial")
desc = arcpy.Describe(clipshp)
shapeName = desc.shapeFieldName #shape字段

result = arcpy.GetCount_management(clipshp)
num= int(result.getOutput(0))
if num <= 0:
    arcpy.AddMessage(clipshp+u"没有数据")
    pass
uniqueList=getuniqueValue(clipshp,fieldname)
Dissolveb=False;#是否融合
num1=len(uniqueList)
if not num==num1:
    arcpy.AddMessage(u"由于"+fieldname+u"字段不是唯一值,软件做了融合处理,"
    +"你看到几个和最终结果个数不一致,原始有"
    +str(num)+u"个,最后输出只有"+str(num1)+u"个")
    outnewshp = arcpy.CreateUniqueName("yl_temp") #临时
    arcpy.Dissolve_management(clipshp, outnewshp, [fieldname], "", "MULTI_PART","DISSOLVE_LINES")
    num=len(uniqueList)
    clipshp= outnewshp
    Dissolveb=True
arcpy.SetProgressor("step", u"正在裁剪",0,num,1)
rows = arcpy.SearchCursor(clipshp)

i=0

for row in rows:

    try:
        i+=1
        arcpy.SetProgressorPosition()
        arcpy.SetProgressorLabel(u"正在裁剪....,完成:"+str(i*100/num)+"%" )
        fieldvalue=str(row.getValue(fieldname))
        if fieldvalue==None:
            fieldvalue="None"


        geometry=row.getValue(shapeName)
        if (outdesc.dataType== "Workspace"):
            outFC = arcpy.ValidateTableName(fieldvalue+ext,outworkspace)
            out_raster =outworkspace+"/"+outFC
        else:
            out_raster=outworkspace+"/"+fieldvalue+ext
        arcpy.AddMessage(u"正在裁剪:"+out_raster);
        #out_raster =outworkspace+"/"+fieldvalue+ext

        #arcpy.sa.ExtractByMask(oldraster, geometry, out_raster)
        arcpy.Clip_management(oldraster,"#",out_raster,geometry,  "#", "ClippingGeometry")
        arcpy.env.pyramid = "PYRAMIDS 3 BILINEAR JPEG"
        arcpy.BuildPyramids_management(out_raster)
    except Exception, ErrorDesc:
        #If an error set output boolean parameter "Error" to True.
        arcpy.AddError(str(ErrorDesc))
arcpy.ResetProgressor()
if Dissolveb:
    if arcpy.Exists(clipshp):
        arcpy.Delete_management(clipshp)

if row:
    del row
if rows:
    del rows

树谷资料库资源大全(12月13日更新)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值