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 レコードをデータベースに収めることができました。