geotools.rbを使ってみる

id:hfu:20071211 id:hfu:20071213 あたりを参照しながら、見よう見まねというよりか単なる引き写しで、総描をやってみました。
rubyは逃げて回ってたというか触ろうとして個人的な趣味に合わなくて、別に使うこともなかったので全く学習意欲がわいていませんでした。
まずは jruby を入れる。portsから楽に入りました。このときに JRUBY_HOME を /usr/local/share/jruby に設定せよと言われたので、そのようにする。
次に geotools。ここで引っかかったのは、ライブラリの置き場所。
はじめ、geotoolsと、依存ライブラリの jai, jai_imageio を $JAVA_HOME/jre/lib/ext に入れると、cannot load ... とか言われました。
jarファイルをすべて lib/ext から、$JRUBY_HOME/lib 下に移動させたら、難なく動きました。
さらに次には、バージョン。アフィン変換のクラスか何かが無いとか言われたので、とりあえず geotoolsバージョンを 2.2.3 から 2.2.5 に変更。別のところでクラスがどうこうとか言われたので、2.2.4 に。2.2.4 でいいみたいです。
で、海外線データに挑戦。挑戦って言ってもスクリプトは丸写しなんでディスプレイを眺めて待っているだけなんですが。
ただ、海岸線データはきつかったらしく、まる一時間走らせて OutOfMemory で停止。「全く使えない」というわけでもないのでしょうけれども、海岸線データ、結局使いづらいです。
とりあえず総描の雰囲気を味わいたいということで、某県の行政界(ポリライン)を使って実行。
すると、DouglasPeuckerSimplifier_0.0100 で、謎の例外。スタックトレースをみると、dbfをいじくってるところで、StringBuffer.charAt で "out of range: 253"。たいてい文字列操作で問題が出るのは日本語まわり。よく考えたら手持ちのデータはShiftJIS、常用しているのは ja_JP.UTF-8。ということで jp_JP.SJIS に変更したら、うまくいきました。
職場にはお大尽にも ArcGIS があり、あまつさえライセンスが余っているということで、これを使ってみてみました。
描画スピードがまるっきり違う。頂点が間引かれているわけですから当然なのですが、結構感動しました。
気を良くして県別ポリゴンで同じことをしようとしたら、
DefaultFeature.java:229:in `org.geotools.feature.DefaultFeature.setAttribute': org.geotools.feature.IllegalAttributeException: expected com.vividsolutions.jts.geom.MultiPolygon , but got com.vividsolutions.jts.geom.Polygon (NativeException)
と怒られました。
マルチポリゴンとしてデータを入れてるのに(シングルの)ポリゴンが来た、とか怒ってるくさいところまでは分かるのですが…。