ラスタのバッファ解析用Rスクリプトを公開してみます。


昨日、仕込んでおいた計算は、無事に終了。ArcGISに頼らずにすみました。とりあえず初志貫徹。

 

 というわけで、調子こいて関数化してみました。

 まあ、わざわざGISでできる仕事をRで処理させるっつー人なんて相当マイノリティーじゃあるでしょうが、自学のためにもってことで。

 ソースは↓においときます。拡張子はtxtになってますが、rに変えて使ってください。

 circle_buffer.r

関数名:fun.buffer()

説明
 入力ラスタの全セルにおいて、円形バッファを想定して、バッファ内にある特定のセル値の個数で表されるラスタデータを返す。返すファイルの名前は”output_raster.txt”
 バッファの範囲は直交方向のセルの個数で表される。

引数
 
 name:ファイル名
 header.length:入力ラスターのヘッダーの行数。整数値。
 buffer.length:円形バッファにおける半径のセル個数。整数値。
 cell.1stvalue:入力ラスタにおいて、対象とするセル値。
 cell.2ndvalue:入力ラスタにおいて、対象とするセル値。複数ない場合は、cell.1stvalueの値と同じ値を入れます。

 
使用例
 #ワーキングディレクトリにcircle_buffer.rとラスタデータを置く。
 
 source(”circle_buffer.r”)
 fun.buffer(name=”hogohoge.txt”,header.length=6,buffer.length=40,cell.1stvalue=3,cell.2ndvalue=4)

#fun.buffer(”hogohoge.txt”,6,40,3,4)のように書いても良い。

使用上の注意
 メモリを贅沢に使っていますので、超大容量のファイル処理には向きません。ちなみに当方のメモリ2GのPCだと8439*7490、つまり6千3百万セルくらいの計算はできましたが、メモリによって処理可能なサイズは変わると思います。
 元ファイルのセパレータは半角空白を前提としています。返すファイルも同様です。
 セパレータが異なる場合は、ソースをいぢってください。

 一応、引数にヘッダ行数とか入れましたが、多分ArcGISが吐き出すラスタテキストでないと、うまく回りません。他のGISにも対応したいな~とは思ったものの、手元にはそんなにたくさんGISがあるわけでもないし。
 複雑なスクリプトでもないので、適当にいぢれば、それなりに使えそうな気がします。

 んで、これできた後に気づいたんですが、こゆー処理ってpythonでArcGIS使役しながらできるみたいですな。てことはあれですか、
pythonでArcGISからデータぶっこ抜いて、Rpy使ってRでいぢってさらにはr2winbugsでwinbugsに流すなんてこともできるんだ
ろか。む~夢のような話だが、勉強する価値はありそうですな。