Ruby on GeoTools でグリッドカバレッジ

hfu2007-09-24

GeoTools (Java) のグッドラッパーを目指すモジュール Geo にグリッドカバレッジ周りを実装しはじめました。

Geo::create_grid_coverage(buf, crs, bbox) 数値の2次元配列 buf を、座標系 crs における4要素配列 bbox = [xmin, ymin, xmax, ymax] にぴったりはめたグリッドカバレッジに変換して返します。
Geo::write_grid_coverage(coverage, filename) グリッドカバレッジ coverage を、filename でパスを指定した GeoTIFF ファイルに保存します。

buf は通常の画像と同じように、左上を原点とする Row-major の数値配列です。crs は Geo::import_epsg_crs で作成できます。bbox はふつうの配列です。

サンプルコード

require 'geotools'

buf = Array.new(100) {|j| Array.new(100) {|i| rand(256)}}
env = [0, 0, 10000, 10000]
ix = Geo::import_epsg_crs(2451)

grid = Geo::create_grid_coverage(buf, ix, env)
Geo::write_grid_coverage(grid, 'grid_geotools.tif')

設計ノート

Java のオブジェクトをそのまま使える場合にはラッパオブジェクトは作りません。そのため、GridCoverage の Ruby 側のラッパクラスは作りません。
一方で、できればユーザの Ruby コードで Geo::Tools というモジュールが出てこないようにしたいと考えています。ソースにはモジュール Geo だけが出てくるようにしたいと考えています。

今日の geotools.rb

http://d.hatena.ne.jp/hfu/20070923#seeall のコードと同じです。