ラスタ値取得


単バンド ラスタ値をポイントなどの属性に放り込むツール
たまにやりたくなるが標準ツールあったような、なかったような。

# -*- coding: cp932 -*-

import arcpy

class Toolbox(object):
    def __init__(self):
        self.label = "Toolbox"
        self.alias = ""

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

class RasterXY(object):
    def __init__(self):
        self.label = "RasterXY"
        self.description = "ラスタピクセル値を入力XYから取得します"
        self.canRunInBackground = False

    def getParameterInfo(self):
        rasterLayerParam = arcpy.Parameter(
        displayName="入力ラスタ",
        name="in_raster",
        datatype="GPRasterLayer",
        parameterType="Required",
        direction="Input")

        featureLayerParam = arcpy.Parameter(
        displayName="入力レイヤ",
        name="in_features",
        datatype="GPFeatureLayer",
        parameterType="Required",
        direction="Input")
        
        fieldParam = arcpy.Parameter(
        displayName="ラスタ値を入力するカラム(上書き注意)",
        name="field",
        datatype="Field",
        parameterType="Required",
        direction="Input")
        
        fieldParam.parameterDependencies = [featureLayerParam.name]
        
        return [rasterLayerParam, featureLayerParam, fieldParam]

    def isLicensed(self):
        return True

    def updateParameters(self, parameters):
        return

    def updateMessages(self, parameters):
        return

    def execute(self, parameters, messages):
        raster = parameters[0].value
        feature = parameters[1].value
        field = parameters[2].valueAsText
        with arcpy.da.UpdateCursor(feature, ('SHAPE@XY', field)) as cursor:
            for row in cursor:
                result = arcpy.GetCellValue_management(raster, str((row[0])[0]) + " " + str((row[0])[1]), "1")
                CellValue = float(result.getOutput(0))
                #print CellValue
                row[1] = CellValue
                #Update the FC row
                cursor.updateRow(row)

        return
カテゴリー: 開発 タグ: , パーマリンク