CloudMade の japan.shapefiles.zip から japan_highway.shp を PostGIS にロードする (via Ruby)

CloudMade によって OpenStreetMap データから生成された日本の道路データを Ruby を使って PostGIS にロードしたときの記録です。

対象データ

http://downloads.cloudmade.com/asia/japan では、CloudMade によって OpenStreetMap データから生成された日本のデータが配布されています。ここから、japan.shapefile.zip をダウンロードしてみました。

行った処理

技術内容は d:id:hfu:20100519 と同一です。ただし、スクリプトの書きぶりを多少変更しています。
上記の zip ファイルを展開し、出てきた japan_highway.shp に対して次の Ruby スクリプトを実行します:

$KCODE = 'u'
require 'rubygems'
require 'sequel'
require 'geo_ruby'

DB = Sequel::connect('postgres://fitter:happier@localhost/more_productive',
  :encoding => 'UTF-8')

DB.create_table!(:japan_highway) do
  primary_key :gid
  String :type
  String :name
  boolean :oneway
  real :lanes
end
DB["SELECT AddGeometryColumn('', 'japan_highway', 'the_geom', '4326', 'MULTILINESTRING', 2);"].first
  
DB.transaction {
  GeoRuby::Shp4r::ShpFile.open('japan_highway.shp') {|shp|
    shp.each {|r|
      DB[:japan_highway].insert({
        :type => r.data['TYPE'],
        :name => r.data['NAME'],
        :oneway => r.data['ONEWAY'] == 'yes',
        :lanes => r.data['LANES'].to_f,
        :the_geom => :ST_GeomFromText.sql_function(r.geometry.as_wkt, 4326)
      })
    }
  }
}

これで、OpenStreetMap の日本の道路データ 173,601 レコードをデータベースに収めることができました。