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!"
RasterToNumPyArray を用いたラスター セル値の計算
2016/9/1 (木)