iarea 0.1.0 → 0.1.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/README.rdoc +16 -1
- data/Rakefile +10 -0
- data/VERSION +1 -1
- data/iarea.gemspec +6 -2
- data/lib/iarea/area.rb +38 -0
- data/lib/iarea/prefecture.rb +30 -0
- data/lib/iarea/utils.rb +39 -0
- data/lib/iarea/zone.rb +27 -0
- data/lib/iarea.rb +6 -116
- metadata +12 -8
data/README.rdoc
CHANGED
@@ -2,6 +2,16 @@
|
|
2
2
|
|
3
3
|
A library for DoCoMo Open Iarea.
|
4
4
|
|
5
|
+
= Instration
|
6
|
+
|
7
|
+
% gem install iarea
|
8
|
+
|
9
|
+
or add
|
10
|
+
|
11
|
+
gem 'iarea'
|
12
|
+
|
13
|
+
on your Gemfile.
|
14
|
+
|
5
15
|
= Example of use
|
6
16
|
|
7
17
|
require 'iarea'
|
@@ -11,9 +21,14 @@ A library for DoCoMo Open Iarea.
|
|
11
21
|
area.areacode # => "00208"
|
12
22
|
area.zone.name # => "北海道"
|
13
23
|
area.prefecture.name # => "北海道"
|
24
|
+
area.neighbors.map(&:name) #=> ["大通公園周辺", "大通東", "山鼻/藻岩周辺", "中島公園周辺"]
|
25
|
+
|
26
|
+
= Resources
|
27
|
+
|
28
|
+
* {Documentation}[http://rdoc.info/github/darashi/iarea/master/frames]
|
14
29
|
|
15
30
|
= References
|
16
31
|
|
17
32
|
http://www.nttdocomo.co.jp/service/imode/make/content/iarea/domestic/index.html
|
18
33
|
|
19
|
-
db/iareadata.sqlite3 contains the data extracted from http://www.nttdocomo.co.jp/binary/archive/service/imode/make/content/iarea/domestic/iareadata.lzh .
|
34
|
+
db/iareadata.sqlite3 contains the data extracted from http://www.nttdocomo.co.jp/binary/archive/service/imode/make/content/iarea/domestic/iareadata.lzh and http://www.nttdocomo.co.jp/service/imode/make/content/iarea/domestic/map/js/iarea_def.js.
|
data/Rakefile
CHANGED
@@ -27,4 +27,14 @@ RSpec::Core::RakeTask.new(:test) do |t|
|
|
27
27
|
t.verbose = true
|
28
28
|
end
|
29
29
|
|
30
|
+
require 'rake/rdoctask'
|
31
|
+
Rake::RDocTask.new do |rdoc|
|
32
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
33
|
+
|
34
|
+
rdoc.rdoc_dir = 'rdoc'
|
35
|
+
rdoc.title = "iarea #{version}"
|
36
|
+
rdoc.rdoc_files.include('README*')
|
37
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
38
|
+
end
|
39
|
+
|
30
40
|
task :default => :test
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.1
|
data/iarea.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{iarea}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Yoji Shidara"]
|
12
|
-
s.date = %q{2011-04-
|
12
|
+
s.date = %q{2011-04-09}
|
13
13
|
s.description = %q{A library for DoCoMo Open Iarea.}
|
14
14
|
s.email = %q{dara@shidara.net}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -23,6 +23,10 @@ Gem::Specification.new do |s|
|
|
23
23
|
"db/iareadata.sqlite3",
|
24
24
|
"iarea.gemspec",
|
25
25
|
"lib/iarea.rb",
|
26
|
+
"lib/iarea/area.rb",
|
27
|
+
"lib/iarea/prefecture.rb",
|
28
|
+
"lib/iarea/utils.rb",
|
29
|
+
"lib/iarea/zone.rb",
|
26
30
|
"lib/tasks/iarea.rake",
|
27
31
|
"spec/iarea/area_spec.rb",
|
28
32
|
"spec/iarea/prefecture_spec.rb",
|
data/lib/iarea/area.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
module Iarea
|
2
|
+
# Area
|
3
|
+
class Area < OpenStruct
|
4
|
+
@@areas = {}
|
5
|
+
|
6
|
+
# Prefecture of the area
|
7
|
+
def prefecture
|
8
|
+
Prefecture.find(self.prefecture_id)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Zone of the area
|
12
|
+
def zone
|
13
|
+
Zone.find(self.zone_id)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Neighbor areas of the area
|
17
|
+
def neighbors
|
18
|
+
DB[:neighbors].where(:areacode => areacode).select(:neighbor_areacode).map do |neighbor|
|
19
|
+
Area.find neighbor[:neighbor_areacode]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class << self
|
24
|
+
# Find area by <tt>areacode</tt>
|
25
|
+
def find(areacode)
|
26
|
+
@@areas[areacode] ||= new DB[:areas].where(:areacode => areacode).first
|
27
|
+
end
|
28
|
+
|
29
|
+
# Find area by latitude and longitude in degrees
|
30
|
+
def find_by_lat_lng(lat, lng)
|
31
|
+
meshcodes = Utils.expand_meshcode(Utils.lat_lng_to_meshcode(lat, lng))
|
32
|
+
area = DB[:meshes].where(:meshcode => meshcodes).select(:areacode).first
|
33
|
+
return nil if area.nil?
|
34
|
+
find(area[:areacode])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Iarea
|
2
|
+
# Prefecture
|
3
|
+
class Prefecture < OpenStruct
|
4
|
+
@@prefectures = []
|
5
|
+
|
6
|
+
# Zone of the prefecture
|
7
|
+
def zone
|
8
|
+
Zone.find(self.zone_id)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Areas in the prefecture
|
12
|
+
def areas
|
13
|
+
DB[:areas].where(:prefecture_id => self.id).select(:areacode).order(:areacode).map do |area|
|
14
|
+
Area.find(area[:areacode])
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class << self
|
19
|
+
# Find a prefecture by <tt>id</tt>
|
20
|
+
def find(id)
|
21
|
+
@@prefectures[id] ||= new DB[:prefectures].where(:id => id).first
|
22
|
+
end
|
23
|
+
|
24
|
+
# All prefectures
|
25
|
+
def all
|
26
|
+
DB[:prefectures].select(:id).order(:id).all.map{ |pr| find(pr[:id]) }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/iarea/utils.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
module Iarea
|
2
|
+
# Utility module
|
3
|
+
module Utils
|
4
|
+
LAT_WIDTH = [nil,2400000,300000,150000, 75000,37500,18750, 9375 ]
|
5
|
+
LON_WIDTH = [nil,3600000,450000,225000,112500,56250,28125,14062.5]
|
6
|
+
class << self
|
7
|
+
# Return 7th meshcode of given coordinates
|
8
|
+
def lat_lng_to_meshcode(lat_deg, lng_deg)
|
9
|
+
lat = (lat_deg * 3600000).to_i
|
10
|
+
lng = (lng_deg * 3600000).to_i
|
11
|
+
meshcode = ''
|
12
|
+
la = lat
|
13
|
+
lo = lng - 100*60*60*1000
|
14
|
+
for i in 1..7
|
15
|
+
a = (la / LAT_WIDTH[i]).to_i
|
16
|
+
b = (lo / LON_WIDTH[i]).to_i
|
17
|
+
la -= a * LAT_WIDTH[i]
|
18
|
+
lo -= b * LON_WIDTH[i]
|
19
|
+
case i
|
20
|
+
when 1
|
21
|
+
meshcode = sprintf("%02d%02d",a,b)
|
22
|
+
when 2
|
23
|
+
meshcode << sprintf("%d%d",a,b)
|
24
|
+
else
|
25
|
+
meshcode << sprintf("%d",a*2+b)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
return meshcode
|
29
|
+
end
|
30
|
+
|
31
|
+
# Return array of 1th..7th meshcodes for the given 7th meshcode
|
32
|
+
def expand_meshcode(meshcode)
|
33
|
+
(6..12).map do |n|
|
34
|
+
meshcode[0, n]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/iarea/zone.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
module Iarea
|
2
|
+
class Zone < OpenStruct
|
3
|
+
@@zones = []
|
4
|
+
|
5
|
+
def prefectures
|
6
|
+
DB[:prefectures].where(:zone_id => self.id).select(:id).order(:id).map do |prefecture|
|
7
|
+
Prefecture.find(prefecture[:id])
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def areas
|
12
|
+
DB[:areas].where(:zone_id => self.id).select(:areacode).order(:areacode).map do |area|
|
13
|
+
Area.find(area[:areacode])
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class << self
|
18
|
+
def find(id)
|
19
|
+
@@zones[id] ||= new DB[:zones].where(:id => id).first
|
20
|
+
end
|
21
|
+
|
22
|
+
def all
|
23
|
+
DB[:zones].select(:id).order(:id).all.map{ |z| find(z[:id]) }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/iarea.rb
CHANGED
@@ -1,120 +1,10 @@
|
|
1
1
|
require 'sequel'
|
2
2
|
require 'ostruct'
|
3
3
|
|
4
|
-
module Iarea
|
5
|
-
DB = Sequel.sqlite(File.expand_path("../../db/iareadata.sqlite3", __FILE__))
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
Prefecture.find(self.prefecture_id)
|
11
|
-
end
|
12
|
-
|
13
|
-
def zone
|
14
|
-
Zone.find(self.zone_id)
|
15
|
-
end
|
16
|
-
|
17
|
-
def neighbors
|
18
|
-
DB[:neighbors].where(:areacode => areacode).select(:neighbor_areacode).map do |neighbor|
|
19
|
-
Area.find neighbor[:neighbor_areacode]
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
class << self
|
24
|
-
def find(areacode)
|
25
|
-
@@areas[areacode] ||= new DB[:areas].where(:areacode => areacode).first
|
26
|
-
end
|
27
|
-
|
28
|
-
def find_by_lat_lng(lat, lng)
|
29
|
-
meshcodes = Utils.expand_meshcode(Utils.lat_lng_to_meshcode(lat, lng))
|
30
|
-
area = DB[:meshes].where(:meshcode => meshcodes).select(:areacode).first
|
31
|
-
return nil if area.nil?
|
32
|
-
find(area[:areacode])
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
class Zone < OpenStruct
|
38
|
-
@@zones = []
|
39
|
-
|
40
|
-
def prefectures
|
41
|
-
DB[:prefectures].where(:zone_id => self.id).select(:id).order(:id).map do |prefecture|
|
42
|
-
Prefecture.find(prefecture[:id])
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def areas
|
47
|
-
DB[:areas].where(:zone_id => self.id).select(:areacode).order(:areacode).map do |area|
|
48
|
-
Area.find(area[:areacode])
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
class << self
|
53
|
-
def find(id)
|
54
|
-
@@zones[id] ||= new DB[:zones].where(:id => id).first
|
55
|
-
end
|
56
|
-
|
57
|
-
def all
|
58
|
-
DB[:zones].select(:id).order(:id).all.map{ |z| find(z[:id]) }
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
class Prefecture < OpenStruct
|
64
|
-
@@prefectures = []
|
65
|
-
def zone
|
66
|
-
Zone.find(self.zone_id)
|
67
|
-
end
|
68
|
-
|
69
|
-
def areas
|
70
|
-
DB[:areas].where(:prefecture_id => self.id).select(:areacode).order(:areacode).map do |area|
|
71
|
-
Area.find(area[:areacode])
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
class << self
|
76
|
-
def find(id)
|
77
|
-
@@prefectures[id] ||= new DB[:prefectures].where(:id => id).first
|
78
|
-
end
|
79
|
-
|
80
|
-
def all
|
81
|
-
DB[:prefectures].select(:id).order(:id).all.map{ |pr| find(pr[:id]) }
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
module Utils
|
87
|
-
LAT_WIDTH = [nil,2400000,300000,150000, 75000,37500,18750, 9375 ]
|
88
|
-
LON_WIDTH = [nil,3600000,450000,225000,112500,56250,28125,14062.5]
|
89
|
-
class << self
|
90
|
-
def lat_lng_to_meshcode(lat_deg, lng_deg)
|
91
|
-
lat = (lat_deg * 3600000).to_i
|
92
|
-
lng = (lng_deg * 3600000).to_i
|
93
|
-
meshcode = ''
|
94
|
-
la = lat
|
95
|
-
lo = lng - 100*60*60*1000
|
96
|
-
for i in 1..7
|
97
|
-
a = (la / LAT_WIDTH[i]).to_i
|
98
|
-
b = (lo / LON_WIDTH[i]).to_i
|
99
|
-
la -= a * LAT_WIDTH[i]
|
100
|
-
lo -= b * LON_WIDTH[i]
|
101
|
-
case i
|
102
|
-
when 1
|
103
|
-
meshcode = sprintf("%02d%02d",a,b)
|
104
|
-
when 2
|
105
|
-
meshcode << sprintf("%d%d",a,b)
|
106
|
-
else
|
107
|
-
meshcode << sprintf("%d",a*2+b)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
return meshcode
|
111
|
-
end
|
112
|
-
|
113
|
-
def expand_meshcode(meshcode)
|
114
|
-
(6..12).map do |n|
|
115
|
-
meshcode[0, n]
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
4
|
+
module Iarea # :nodoc:
|
5
|
+
DB = Sequel.sqlite(File.expand_path("../../db/iareadata.sqlite3", __FILE__)) # :nodoc:
|
6
|
+
autoload :Area, File.expand_path('../iarea/area', __FILE__)
|
7
|
+
autoload :Zone, File.expand_path('../iarea/zone', __FILE__)
|
8
|
+
autoload :Prefecture, File.expand_path('../iarea/prefecture', __FILE__)
|
9
|
+
autoload :Utils, File.expand_path('../iarea/utils', __FILE__)
|
120
10
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iarea
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,12 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-04-
|
12
|
+
date: 2011-04-09 00:00:00.000000000 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: sequel
|
17
|
-
requirement: &
|
17
|
+
requirement: &2156749600 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 3.22.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2156749600
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: sqlite3-ruby
|
28
|
-
requirement: &
|
28
|
+
requirement: &2156748680 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: 1.3.3
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *2156748680
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: rspec
|
39
|
-
requirement: &
|
39
|
+
requirement: &2156747540 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,7 +44,7 @@ dependencies:
|
|
44
44
|
version: 2.5.0
|
45
45
|
type: :development
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *2156747540
|
48
48
|
description: A library for DoCoMo Open Iarea.
|
49
49
|
email: dara@shidara.net
|
50
50
|
executables: []
|
@@ -59,6 +59,10 @@ files:
|
|
59
59
|
- db/iareadata.sqlite3
|
60
60
|
- iarea.gemspec
|
61
61
|
- lib/iarea.rb
|
62
|
+
- lib/iarea/area.rb
|
63
|
+
- lib/iarea/prefecture.rb
|
64
|
+
- lib/iarea/utils.rb
|
65
|
+
- lib/iarea/zone.rb
|
62
66
|
- lib/tasks/iarea.rake
|
63
67
|
- spec/iarea/area_spec.rb
|
64
68
|
- spec/iarea/prefecture_spec.rb
|