YouTube | Facebook | X(Twitter) | RSS

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!"
  • この記事を書いた人

羽田 康祐

伊達と酔狂のGISエンジニア。GIS上級技術者、Esri認定インストラクター、CompTIA CTT+ Classroom Trainer、潜水士、PADIダイブマスター、四アマ。WordPress は 2.1 からのユーザーで歴だけは長い。 代表著書『"地図リテラシー入門―地図の正しい読み方・描き方がわかる』 GIS を使った自己紹介はこちら。ESRIジャパン(株)所属、元青山学院大学非常勤講師を兼務。日本地図学会第31期常任委員。発言は個人の見解です。

-プログラミング, ArcGIS
-