kladr_converter 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. data/Gemfile +4 -0
  2. data/README +16 -0
  3. data/Rakefile +1 -0
  4. data/gem.gemspec +25 -0
  5. data/lib/kladr_converter.rb +179 -0
  6. metadata +75 -0
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in GEM.gemspec
4
+ gemspec
data/README ADDED
@@ -0,0 +1,16 @@
1
+ KLADR converter allows to convert KLADR.DBF and STREET.DBF to SQLite database as-is or as a linked items (every street hash city ID)
2
+
3
+ How to use
4
+ First, you must to import library
5
+
6
+ require 'kladr_converter'
7
+
8
+ Then use!
9
+
10
+ Kladr_sqlite::save_linked( 'path/to/KLADR.DBF', 'path/to/STREET.DBF', 'path/to/sqlite.db', true )
11
+ Kladr_sqlite::save_raw( 'path/to/KLADR.DBF', 'path/to/STREET.DBF', 'path/to/sqlite.db', false )
12
+
13
+ First parameter is a path to KLADR.DBF
14
+ Second parameter is a path to STREET.DBF
15
+ Third parameter is a path to database file
16
+ Forth parameter is a boolean variable that determines progressbar displaying
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
data/gem.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "kladr_converter"
3
+ s.version = "0.0.1"
4
+ s.platform = Gem::Platform::RUBY
5
+ s.authors = ["skayred"]
6
+ s.email = ["dg.freak@gmail.com"]
7
+ s.homepage = "http://github.com/skayred/kladr_converter"
8
+ s.summary = "KLADR to SQLite"
9
+ s.description = "Library that can convert KLADR.DBF and STREET.DBF to SQLite database file"
10
+ s.rubyforge_project = s.name
11
+
12
+ s.required_rubygems_version = ">= 1.3.6"
13
+
14
+ # The list of files to be contained in the gem
15
+ s.files = `git ls-files`.split("\n")
16
+ # s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
17
+ # s.extensions = `git ls-files ext/extconf.rb`.split("\n")
18
+
19
+ s.require_path = 'lib'
20
+ s.add_dependency( 'dbf' )
21
+ s.add_dependency( 'progressbar' )
22
+
23
+ # For C extensions
24
+ # s.extensions = "ext/extconf.rb"
25
+ end
@@ -0,0 +1,179 @@
1
+ #!/usr/bin/env ruby
2
+ # coding: utf-8
3
+
4
+ require 'dbf'
5
+ require 'active_record'
6
+ require 'iconv'
7
+ require 'progressbar'
8
+
9
+ module Kladr_sqlite
10
+ class Kladr < ActiveRecord::Base
11
+ end
12
+
13
+ class Kladr_street < ActiveRecord::Base
14
+ end
15
+
16
+ class City < ActiveRecord::Base
17
+ has_many :streets
18
+ end
19
+
20
+ class Street < ActiveRecord::Base
21
+ belongs_to :city
22
+ end
23
+
24
+
25
+ def Kladr_sqlite.is_city( code )
26
+ return ( ( code[ 5 ] != "0" ) || ( code[ 6 ] != "0" ) || ( code[ 7 ] != "0" ) )
27
+ end
28
+
29
+ def Kladr_sqlite.get_city_code( code )
30
+ return code[ 0..10 ] + "00"
31
+ end
32
+
33
+ def Kladr_sqlite.create_linked_tables
34
+ ActiveRecord::Schema.define do
35
+ create_table "kladrs" do |t|
36
+ t.column "name", :string, :limit => 40
37
+ t.column "socr", :string, :limit => 10
38
+ t.column "code", :string, :limit => 13
39
+ end
40
+ end
41
+
42
+ ActiveRecord::Schema.define do
43
+ create_table "cities" do |t|
44
+ t.column "name", :string, :limit => 40
45
+ t.column "socr", :string, :limit => 10
46
+ end
47
+ end
48
+
49
+ ActiveRecord::Schema.define do
50
+ create_table "streets" do |t|
51
+ t.column "name", :string, :limit => 40
52
+ t.column "socr", :string, :limit => 10
53
+ t.column "city_id", :integer
54
+ end
55
+ end
56
+ end
57
+
58
+ def Kladr_sqlite.create_raw_tables
59
+ ActiveRecord::Schema.define do
60
+ create_table "kladrs" do |t|
61
+ t.column "name", :string, :limit => 40
62
+ t.column "socr", :string, :limit => 10
63
+ t.column "code", :string, :limit => 13
64
+ t.column "index", :string, :limit => 6
65
+ t.column "gninmb", :string, :limit => 4
66
+ t.column "uno", :string, :limit => 4
67
+ t.column "ocatd", :string, :limit => 11
68
+ t.column "status", :string, :limit => 1
69
+ end
70
+ end
71
+
72
+ ActiveRecord::Schema.define do
73
+ create_table "streets" do |t|
74
+ t.column "name", :string, :limit => 40
75
+ t.column "socr", :string, :limit => 10
76
+ t.column "code", :string, :limit => 17
77
+ t.column "index", :string, :limit => 6
78
+ t.column "gninmb", :string, :limit => 4
79
+ t.column "uno", :string, :limit => 4
80
+ t.column "ocatd", :string, :limit => 11
81
+ end
82
+ end
83
+ end
84
+
85
+
86
+ def Kladr_sqlite.save_linked( kladr_name, streets_name, db_name, progress )
87
+ kladr = DBF::Table.new( kladr_name )
88
+ streets = DBF::Table.new( streets_name )
89
+
90
+ ActiveRecord::Base.establish_connection(
91
+ :adapter => "sqlite3",
92
+ :dbfile => db_name,
93
+ :database => db_name
94
+ )
95
+
96
+ create_linked_tables
97
+ @converter = Iconv.new( 'UTF-8//IGNORE', 'CP866' )
98
+
99
+ if progress then
100
+ kladr_bar = ProgressBar.new( 'KLADR loading', kladr.count )
101
+ street_bar = ProgressBar.new( 'Streets loading', streets.count )
102
+ end
103
+
104
+ streets.each do |record|
105
+ street = Kladr.create( :name => @converter.iconv( record.name ),
106
+ :socr => @converter.iconv( record.socr ),
107
+ :code => get_city_code( @converter.iconv( record.code ) ) )
108
+ if progress then
109
+ kladr_bar.inc
110
+ end
111
+ end
112
+
113
+ kladr.each do |record|
114
+ code = @converter.iconv( record.code )
115
+ if ( is_city( code ) ) then
116
+ name = @converter.iconv( record.name )
117
+ socr = @converter.iconv( record.socr )
118
+ city = City.create( :name => name,
119
+ :socr => socr )
120
+
121
+ streets = Kladr.all( :conditions => "code = '#{code}'" )
122
+
123
+ if streets.count != 0 then
124
+ streets.each do |street|
125
+ city.streets.create( :name => street.name,
126
+ :socr => street.socr)
127
+ end
128
+ end
129
+ Kladr.delete_all( "code = '#{code}'" )
130
+ end
131
+ end
132
+
133
+ end
134
+
135
+ def Kladr_sqlite.save_raw( kladr_name, streets_name, db_name, progress )
136
+ kladr = DBF::Table.new( kladr_name )
137
+ streets = DBF::Table.new( streets_name )
138
+
139
+ ActiveRecord::Base.establish_connection(
140
+ :adapter => "sqlite3",
141
+ :dbfile => db_name,
142
+ :database => db_name
143
+ )
144
+
145
+ create_raw_tables
146
+ @converter = Iconv.new( 'UTF-8//IGNORE', 'CP866' )
147
+
148
+ if progress then
149
+ kladr_bar = ProgressBar.new( 'KLADR loading', kladr.count )
150
+ street_bar = ProgressBar.new( 'Streets loading', streets.count )
151
+ end
152
+
153
+ kladr.each do |record|
154
+ kladr = Kladr.create( :name => @converter.iconv( record.name ),
155
+ :socr => @converter.iconv( record.socr ),
156
+ :code => get_city_code( @converter.iconv( record.code ) ),
157
+ :index => @converter.iconv( record.index ),
158
+ :gninmb => @converter.iconv( record.gninmb ),
159
+ :uno => @converter.iconv( record.uno ),
160
+ :ocatd => @converter.iconv( record.ocatd ),
161
+ :status => @converter.iconv( record.status ) )
162
+ if progress then
163
+ kladr_bar.inc
164
+ end
165
+ end
166
+
167
+ streets.each do |record|
168
+ street = Kladr_street.create( :name => @converter.iconv( record.name ),
169
+ :socr => @converter.iconv( record.socr ),
170
+ :code => @converter.iconv( record.code ),
171
+ :index => @converter.iconv( record.index ),
172
+ :gninmb => @converter.iconv( record.gninmb ),
173
+ :uno => @converter.iconv( record.uno ),
174
+ :ocatd => @converter.iconv( record.ocatd ) )
175
+ street_bat.inc
176
+ end
177
+
178
+ end
179
+ end
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kladr_converter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - skayred
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-06-22 00:00:00.000000000 +06:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: dbf
17
+ requirement: &12540720 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *12540720
26
+ - !ruby/object:Gem::Dependency
27
+ name: progressbar
28
+ requirement: &12540260 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *12540260
37
+ description: Library that can convert KLADR.DBF and STREET.DBF to SQLite database
38
+ file
39
+ email:
40
+ - dg.freak@gmail.com
41
+ executables: []
42
+ extensions: []
43
+ extra_rdoc_files: []
44
+ files:
45
+ - Gemfile
46
+ - README
47
+ - Rakefile
48
+ - gem.gemspec
49
+ - lib/kladr_converter.rb
50
+ has_rdoc: true
51
+ homepage: http://github.com/skayred/kladr_converter
52
+ licenses: []
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: 1.3.6
69
+ requirements: []
70
+ rubyforge_project: kladr_converter
71
+ rubygems_version: 1.6.2
72
+ signing_key:
73
+ specification_version: 3
74
+ summary: KLADR to SQLite
75
+ test_files: []