kladr_converter 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []