ありがたいまとめ記事をいただきました。

たくぼあきおさんが書いておられる、あの「飛べない日々」で、geotools.rb 関係のエントリをいただきました。ありがとうございます。blogsphere ってすごいと改めて思いました。

Rubyを使ってGIS関連のデータ処理を行おう、と考えた場合に自分であればまず思いつくのがGEOSやGDAL/OGRのRubyバインディング、あるいはRuby-shapelibといったものを使ったやりかたです、というよりそれしか考えてなかったのですが、もうひとつ別の道、JRubyやrjbからGeoToolsを使う、という手があったようです。

http://www.saruga-tondara.net/d/?date=20070916

この文章を見て、自分がやりたかったことを整理することができました。

私は GeoTools の持つ SFSQL/ISO 19100 空間スキーマ風 Geometry が欲しかった

私はよく、Shapefile に記述されているデータを全部取り出して、それぞれの幾何に対して操作を行っています。また、その操作を試行錯誤的に変更して、アルゴリズムを作るといったことをしています。この作業を支援するために、趣味をかねて余暇の時間に geotools.rb を作っている、というところです。この作業で欲しい機能を煎じ詰めると、

  1. Shapefile から一つずつデータを取り出したい。(SELECT とかはとりあえずしない)
  2. 取り出した幾何に対して、ちょっとした操作をしたい。

という2機能が必要なのだと思いました。この 2. の機能について、SFSQL 風 (or ISO 19100 の空間スキーマ風) のメソッドを持っている、GeoTools が採用している JTS が魅力的でした。私が試したところ、

  • Ruby-shapelib は、取り出した幾何データを ISO 19100 空間スキーマ風には扱えない
  • OGR Ruby binding は、Mac OS X では不安定で、取り出した幾何オブジェクトのメソッドが全部はそろっていない
  • GEOS は、Shapefile からの取り出し部分を別途用意する必要がある

というところが私にとっては問題になって、結局 Geotools に戻ることになったのでした。引き替えに、速度の問題が心配になるとは思っているところですが、私の作業の性格上、「試行錯誤のコードを書いて実行に回す」という手動作業の円滑化のほうがうれしいので、そのためなら速度の低下は我慢できると思っているところです*1

OGRがそうであるように、GeoToolsもそれなりの"癖"を持っていると思います

http://www.saruga-tondara.net/d/?date=20070916

私がうすうす感じ始めていたことを的確に指摘していただいたように感じます。OGR を使っていても、GeoTools を使っていても、いずれにせよどこかの局面で問題にあたり、その問題をこれらライブラリの「ソースに帰って」修正する暇はない、という事態が発生する気がします。今感じているのは、

geotools.rb で作っているような「グッドラッパーを目指すクラス」により、使用するライブラリと自分のコードをある程度は独立させられないか

という点です。完全に独立させようとすればコストがかかりすぎますが、ある程度の独立であれば低い開発コストで実現できそうな気がしています。例えば、GeoTools を使っていてどうしようもない問題にぶつかったとき、GeoTools を Deegree や JUMP に入れ替えて逃げる、ということができるのかもしれないと思い始めています。実は、Ruby の duck typing のおかげで、

If you use the “high-level” GeoTools code to work with Shapefiles you can easily obtain Feature objects. However, it is important to note that these Feature objects are not the Feature objects used in JUMP or OpenJUMP, but a GeoTools version of a Feature.

http://openjump.blogspot.com/2007/04/geotools-dilemma.html

と嘆かれているような問題から離れられる場合があるのではないかという感触があります。

GeoTools のバージョン間非互換性の緩和にも、geotools.rb の存在は良いかも

ふと思い出したのですが、GeoTools はバージョン間で大きな変更をしがちで、以前 Java でまじめに GeoTools を使っていたときに泣いたことがあったように記憶しています。geotools.rb で、GeoTools にやらせたいことと、自分が幾何に対してやりたい計算をある程度分離しておくことにより、GeoTools のバージョンアップにも対応しやすくなるのかもしれない、とも思いました。

*1:計算を回している間、紙とペンでアルゴリズムを整理するという時間も良い時間ではありますし。