GeoRubyによるShapefileの文字コードのShapefileからUTF-8への変換(Late 2013)
GeoRuby(Late 2013)によるShapefileの文字コード変換方法は、基盤地図情報Shapefileの文字コードをShift_JISからUTF-8に変換するコード - 世界の測量 で示した方法とは変わっていたので記録しておく。
最近のGeoRuby
GeoRuby は nofxx/georuby · GitHub でホストされている。require するファイルのパスなども含めて、デザインが変わっている。また、ShapefileのDBFデータの扱いを dbf.rb に移譲しているようである。本エントリの記述は、GeoRuby 2.2.1 ベースである。
2.0.0-p353 :004 > require 'geo_ruby/version' => true 2.0.0-p353 :005 > GeoRuby::VERSION => "2.2.1"
dbf.rb 内部で文字コードをシステムエンコーディングに変換するらしい
dbf.rb の設計に従ってAPIなども変わっている。スクリプトを作って試行錯誤してみたところ、DBFデータの文字コード記述を意識するのか、Ruby上ではシステムエンコーディング(MacではUTF-8)に変換されたあとのデータが出てくるようである。
よって、MacでGeoRubyによってShapefileの文字コードをShapefileからUTF-8へ変換するコードは、次のようになる。
require 'rubygems' require 'geo_ruby' require 'geo_ruby/shp' include GeoRuby::Shp4r path = "P11-10_26-jgd-g_BusStop.shp" ShpFile.open(path) do |src| ShpFile.create(path.sub('.shp', '_utf8.shp'), src.shp_type, src.fields) do |dst| dst.transaction do |tr| src.each do |r| tr.add(ShpRecord.new(r.geometry, r.data)) end end end end