kladr_converter 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|