(二)arcpy開發&arcpy中利用不規則向量面在arcgis中批量裁剪影像

yGIS發表於2018-10-18

使用clip工具來裁剪圖形一般是規則多邊形,即一個範圍裁剪是以最左點,最上點,最右點,最下點來確定範圍線。如下圖所示是一個範圍線,該範圍線是不規則的。

以及疊加上影像,按理來說應該是範圍線內的部分。

下面我們來使用arcgis工具來裁剪一下影像。注意沒有勾選【Use Input Features for Clipping Geometry(option)】

最後的裁決效果如下圖所示。

而如果我們勾選了上面的選項,則最後的裁剪結果則是我們需要的。

而我現在需要做的工作是利用圖幅結合表shapefile裡面的資料,遍歷其中每一條記錄然後和影像進行裁剪,根據圖幅分幅來說,矩形框並不是嚴格的長方形,而是梯形,因此我們這裡需要使用多邊形裁剪。按照網路的相關資料,可以使用ExtractByMask函式進行裁剪。但是在使用該函式的時候多次遇到拼接引數出現了問題,無奈只好使用了clip_Manager函式來裁剪。首先,在函式的開頭遍歷了所有的向量面記錄,然後使用向量面去和影像進行裁剪,將影像按照FID作為裁剪後的名稱儲存。具體可以檢視一下程式碼。

功能實現程式碼:


# coding:utf-8
import arcpy
import os
from arcpy.sa import *


def do(shpPathJHTB,importtif,resultPathTif):

     with  arcpy.da.SearchCursor(shpPathJHTB, ['FID', 'SHAPE@']) as cursor:
        for row in cursor:
         mask = row[1]
         extent = str(mask.extent.XMin) + " " + str(mask.extent.YMin) + " " + str(mask.extent.XMax) + " " + str(mask.extent.YMax)
         #outPath = outworkspace + "\\" + str(row.getValue(field) + outtype)
         outPath=os.path.join(resultPathTif,str(row[0]) + ".img");
         arcpy.Clip_management(importtif, extent, outPath, mask, "0", "ClippingGeometry")





 

打包程式碼:

# coding:gbk
import arcpy



#http://pro.arcgis.com/zh-cn/pro-app/arcpy/geoprocessing_and_python/defining-parameter-data-types-in-a-python-toolbox.htm
from PLiangClip import do


class Toolbox(object):
    def __init__(self):
        """Define the toolbox (the name of the toolbox is the name of the
        .pyt file)."""
        self.label = "Toolbox"
        self.alias = ""

        # List of tool classes associated with this toolbox
        self.tools = [Tool]


class Tool(object):
    def __init__(self):
        """Define the tool (tool name is the name of the class)."""
        self.label = "批量按照結合圖表裁剪img"
        self.description = "批量按照結合圖表裁剪img"
        self.canRunInBackground = False

    def getParameterInfo(self):
        """Define parameter definitions"""
        shpPathJHTB = arcpy.Parameter(
            displayName="結合圖表shp面資料",
            name="shpPathJHTB",
            datatype="GPFeatureLayer",
            parameterType="Required",
            direction="Input"
        )
        tifPath = arcpy.Parameter(
            displayName="img影像",
            name="tifPath",
            datatype="DERasterDataset",
            parameterType="Required",
            direction="Input"
        )
        resultFolder = arcpy.Parameter(
            displayName="最終處理結果",
            name="resultFolder",
            datatype="Folder",
            parameterType="Required",
            direction="Input"
        )
        #params = None
        params = [shpPathJHTB, tifPath, resultFolder]
        return params

    def isLicensed(self):
        """Set whether tool is licensed to execute."""
        return True

    def updateParameters(self, parameters):
        """Modify the values and properties of parameters before internal
        validation is performed.  This method is called whenever a parameter
        has been changed."""
        return

    def updateMessages(self, parameters):
        """Modify the messages created by internal validation for each tool
        parameter.  This method is called after internal validation."""
        return

    def execute(self, parameters, messages):
        """The source code of the tool."""
        shpPathJHTB= parameters[0].valueAsText
        tifPath= parameters[1].valueAsText
        resultFolder= parameters[2].valueAsText

        do(shpPathJHTB,tifPath,resultFolder)
        return

最後開發的工具如下圖所示:


                                                                        更多內容,請關注公眾號

                                                              

相關文章