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.
- data/Gemfile +4 -0
- data/README +16 -0
- data/Rakefile +1 -0
- data/gem.gemspec +25 -0
- data/lib/kladr_converter.rb +179 -0
- metadata +75 -0
data/Gemfile
ADDED
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: []
|