| Top Page | プログラミング |


ARC/INFO ASCII Grid データを扱う Perl モジュール

Alpha version uploaded on 2011-09-16
Revised on 2011-11-04

概要

GIS で使うファイル形式のひとつに、ARC/NFO ASCII Grid があります。 テキストエディタで開けば人間がそのまま読めるテキストデータです。 ( 参考ページ)。

特に地図化する必要はない、ないしはそれは別のソフトでやる、 それよりもデータ処理をプログラムを書いててきぱきやりたい、 という意図で Perl のモジュールを作成しました。 自分で使うためのものですが、 ひょっとして参考にしていただけることもあるかと思い、公開します。

本プログラムの利用・改変・再配布は自由です。ただしソースを転載する際には、 作者表示および URL 表示 (http://takenaka-akio.org/etc/arcinfo_ascii/) はそのまま残してください。

作成した関数群(ユーザーが直接利用するもの)

本モジュールは、new でオブジェクトを作成し、これを介してメソッド (サブルーチン)を呼び出して使います。
new
オブジェクトを作成するサブルーチン(いわゆるコンストラクタ)。 引数として、データファイル名を与える。
(例) $ref = new ArcInfoAscii $file; # $file はデータファイル名
get_value
x, y 座標を受けとり、その位置を囲む4点の値から内挿(線形)で計算する。 データセットがカバーするエリア外であるか、 囲む4点中に NODATA が あれば、NODATA を返す。
(例) $val = $ref->get_value(70, 130); # (70, 130) の地点での値
get_value_at_nearest
x, y 座標を受けとり、その位置にもっとも近い点の値を返す。 中間点の場合は、原点に近い点を優先する。 データセットがカバーするエリア外であるか、 もっとも近い点の値が NODATA で あれば、NODATA を返す。
$val = $ref->get_value_at_nearest(70, 130); # (70, 130) の最近地点での値
get_values_in_buffer
x, y 座標と、これを中心とする円形のバッファ領域の半径を受けとり、 領域内の点(円周上も含む)のデータの配列を返す。
@vals = $ref->get_values_in_buffer(70, 130, 50); # (70, 130) から半径 50以内の地点の値の配列
get_resolution
解像度(点の間隔)を返す。
$resol = $ref->get_resolution();
get_x_range
x 座標の最小値、最大値を返す。
($x_min, $x_max) = $ref->get_x_range();
get_y_range
y 座標の最小値、最大値を返す。
($y_min, $y_max) = $ref->get_y_range();
get_NODATA_value
データが未定義の場合に割り当てられる値を返す。
$no_data = $ref->get_NODATA_value();

ダウンロード

ArcInfoAscii.pm
モジュール。これを呼び出して使うプログラムと同じディレクトリに入れるか、 Perl/lib に入れる、ないしは use lib で指定したディレクトリに入れる。 (参考: サーバにインストールされていないPerlモジュールを使うには
test_arc.pl
テストプログラム
test.asc
上のテストプログラムで使用するテストデータ

変更履歴


| Top Page | プログラミング |