RasterToNumPyArray を用いたラスター セル値の計算

 2016/9/1 (木)    

import arcpy
import numpy
 
#ジオプロセシングの上書きを許可
arcpy.env.overwriteOutput = True
 
#セル値計算用関数を定義
def f(x):
    return round(x,3)
 
#ラスタ データセットのパス
in_raster =r'C:\Users\Administrator\Documents\ArcGIS\Default.gdb\rastercalc1'
 
out_raster = r'C:\Users\Administrator\Documents\ArcGIS\Default.gdb\rastercalc2'
 
#ラスタ データセットの取得
raster = arcpy.Raster(in_raster);
 
#NumPyArray に変換
raster_array = arcpy.RasterToNumPyArray(raster)
 
#配列の全要素に対してユーザ定義関数を適用
#http://kaiseki-web.lhd.nifs.ac.jp/documents/Python/array.htm
vf = numpy.vectorize(f)
new_raster_array = vf(raster_array)
 
#10.2だと numpy.array は 64bit float 型なのでラスタ データセットのタイプもそれに準拠する。dtype を変更することでラスタ データセットのピクセルタイプが変更できる。
 
new_raster_array.dtype = "float32"
 
#NumPyArray からラスタ データセットを作成
new_raster = arcpy.NumPyArrayToRaster(new_raster_array,raster.extent.lowerLeft,raster.meanCellWidth,raster.meanCellHeight,raster.noDataValue)
 
#ファイルに保存
new_raster.save(out_raster)
 
#空間参照の定義
arcpy.DefineProjection_management(new_raster,raster.spatialReference)
 
#メモリ解放
del raster
del raster_array
del new_raster_array
 
print "Done!"

Copyright© WINGFIELD since1981 , 2018 All Rights Reserved.