geonames_local 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -24,4 +24,5 @@ pkg
24
24
  *.pid
25
25
  *.log
26
26
  *.qgr
27
- *.lex
27
+ *.lex
28
+ shps
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
data/geonames.yml ADDED
@@ -0,0 +1,14 @@
1
+ #
2
+ # Geonames Local Config Example
3
+ #
4
+ :store: pg
5
+ :codes: [br]
6
+ :level: city
7
+ :mapping:
8
+ :name: name
9
+ :geom: true
10
+ :db:
11
+ :host: localhost
12
+ :dbname: rtrac_development
13
+ :user: nofxx
14
+ :password:
@@ -0,0 +1,96 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{geonames_local}
8
+ s.version = "0.0.4"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Marcos Piccinini"]
12
+ s.date = %q{2010-01-29}
13
+ s.default_executable = %q{geonames}
14
+ s.description = %q{Dump and feed a tokyo cabinet for local geonames search}
15
+ s.email = %q{x@nofxx.com}
16
+ s.executables = ["geonames"]
17
+ s.extra_rdoc_files = [
18
+ "LICENSE",
19
+ "README.rdoc"
20
+ ]
21
+ s.files = [
22
+ ".document",
23
+ ".gitignore",
24
+ "LICENSE",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "bin/geonames",
29
+ "geonames.yml",
30
+ "geonames_local.gemspec",
31
+ "lib/config/codes.yml",
32
+ "lib/config/geonames.yml",
33
+ "lib/data/cache.rb",
34
+ "lib/data/geoquery.rb",
35
+ "lib/data/postgres.rb",
36
+ "lib/data/shp.rb",
37
+ "lib/data/tokyo.rb",
38
+ "lib/features/city.rb",
39
+ "lib/features/country.rb",
40
+ "lib/features/province.rb",
41
+ "lib/features/road.rb",
42
+ "lib/features/spot.rb",
43
+ "lib/features/zone.rb",
44
+ "lib/geonames_local.rb",
45
+ "lib/work/cli.rb",
46
+ "lib/work/dump.rb",
47
+ "lib/work/export.rb",
48
+ "spec/data/cache_spec.rb",
49
+ "spec/data/postgres_spec.rb",
50
+ "spec/data/shp_spec.rb",
51
+ "spec/data/tokyo_spec.rb",
52
+ "spec/features/road_spec.rb",
53
+ "spec/features/spot_spec.rb",
54
+ "spec/features/zone_spec.rb",
55
+ "spec/geonames_local_spec.rb",
56
+ "spec/spec.opts",
57
+ "spec/spec_helper.rb",
58
+ "spec/work/cli_spec.rb",
59
+ "task/benchmark.rb",
60
+ "task/benchmark_cabinet.rb"
61
+ ]
62
+ s.homepage = %q{http://github.com/nofxx/geonames_local}
63
+ s.rdoc_options = ["--charset=UTF-8"]
64
+ s.require_paths = ["lib"]
65
+ s.rubygems_version = %q{1.3.5}
66
+ s.summary = %q{Dump and feed a tokyo local geonames db}
67
+ s.test_files = [
68
+ "spec/data/cache_spec.rb",
69
+ "spec/data/postgres_spec.rb",
70
+ "spec/data/shp_spec.rb",
71
+ "spec/data/tokyo_spec.rb",
72
+ "spec/features/road_spec.rb",
73
+ "spec/features/spot_spec.rb",
74
+ "spec/features/zone_spec.rb",
75
+ "spec/geonames_local_spec.rb",
76
+ "spec/spec_helper.rb",
77
+ "spec/work/cli_spec.rb"
78
+ ]
79
+
80
+ if s.respond_to? :specification_version then
81
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
82
+ s.specification_version = 3
83
+
84
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
85
+ s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
86
+ s.add_runtime_dependency(%q<tokyotyrant>, [">= 1.10"])
87
+ else
88
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
89
+ s.add_dependency(%q<tokyotyrant>, [">= 1.10"])
90
+ end
91
+ else
92
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
93
+ s.add_dependency(%q<tokyotyrant>, [">= 1.10"])
94
+ end
95
+ end
96
+
@@ -2,7 +2,7 @@
2
2
  # Geonames Local Config Example
3
3
  #
4
4
  :store: pg
5
- :codes: [br, cl]
5
+ :codes: [br, it]
6
6
  :level: city
7
7
  :mapping:
8
8
  :name: name
data/lib/data/cache.rb ADDED
@@ -0,0 +1,5 @@
1
+ # module Geonames
2
+ # class Cache
3
+
4
+ # end
5
+ # end
data/lib/data/postgres.rb CHANGED
@@ -16,35 +16,54 @@ module Geonames
16
16
  @conn.exec("SELECT countries.id FROM countries WHERE UPPER(countries.abbr) = UPPER('#{some.country}')")[0]["id"] rescue nil
17
17
  c ||= write("countries", {:name => Codes[some.country.downcase.to_sym][:pt_br], :abbr => some.country })
18
18
 
19
- p = Provinces[some.province] ||= find("provinces", Cache[:provinces].
19
+ p = nil
20
+ ci = nil
21
+ if some.kind_of? Spot
22
+ p = Provinces[some.province] ||= find("provinces", Cache[:provinces].
20
23
  find{ |p| p.province == some.province}.gid)
21
- [c, p]
24
+ else
25
+ ci = find("cities", some.city)
26
+ p = @conn.exec("SELECT cities.province_id FROM cities WHERE cities.id = #{ci}")[0]["province_id"] rescue nil
27
+ end
28
+ [c, p, ci]
22
29
  end
23
30
 
24
31
  #
25
32
  # Insert a record
26
33
  def insert(some)
27
- country_id, province_id = get_some_ids(some)
28
- if some.kind == :cities
34
+ country_id, province_id, city_id = get_some_ids(some)
35
+ case some.table
36
+ when :cities
29
37
  write("cities", {:name => some.name, :country_id => country_id,
30
38
  :geom => some.geom.as_hex_ewkb, :gid => some.gid,
31
39
  :zip => some.zip, :province_id => province_id})
32
- else
40
+ when :provinces
33
41
  write("provinces", { :name => some.name, :abbr => some.abbr,
34
42
  :country_id => country_id, :gid => some.gid })
43
+ when :roads
44
+ write("roads", { :name => some.name, :geom => some.geom.as_hex_ewkb, :kind => some.kind,
45
+ :country_id => country_id, :city_id => city_id, :province_id => province_id })
35
46
  end
36
47
  end
37
48
 
38
49
  #
39
50
  # Find a record`s ID
40
- def find(kind, id)
41
- @conn.exec("SELECT #{kind}.id FROM #{kind} WHERE #{kind}.gid = #{id}")[0]["id"] rescue nil
51
+ def find(table, id, name=nil)
52
+ begin
53
+ if name
54
+ @conn.exec("SELECT #{table}.id FROM #{table} WHERE (#{table}.name = E'#{id}')")[0]["id"]
55
+ else
56
+ @conn.exec("SELECT #{table}.id FROM #{table} WHERE #{table}.gid = #{id}")[0]["id"]
57
+ end
58
+ rescue => e
59
+ nil
60
+ end
42
61
  end
43
62
 
44
63
  #
45
64
  # F'oo -> F''oo (for pg)
46
65
  def escape_name(name)
47
- name.gsub("'", "''")
66
+ name.to_s.gsub("'", "''")
48
67
  end
49
68
 
50
69
  #
@@ -52,9 +71,10 @@ module Geonames
52
71
  def pg_values(arr)
53
72
  arr.map do |v|
54
73
  case v
55
- when String then "E'#{escape_name(v)}'"
74
+ when Numeric then v.to_s
75
+ when Symbol, String then "E'#{escape_name(v)}'"
56
76
  when NilClass then 'NULL'
57
- else v
77
+ else
58
78
  end
59
79
  end.join(",")
60
80
  end
@@ -65,5 +85,9 @@ module Geonames
65
85
  for_pg = pg_values(hsh.values)
66
86
  @conn.exec("INSERT INTO #{table} (#{hsh.keys.join(",")}) VALUES(#{for_pg}) RETURNING id")[0]["id"]
67
87
  end
88
+
89
+ def exec(comm)
90
+ @conn.exec(comm)
91
+ end
68
92
  end
69
93
  end
data/lib/data/shp.rb ADDED
@@ -0,0 +1,76 @@
1
+ require 'iconv'
2
+ #---
3
+ # Iconv cool tip from http://po-ru.com/diary/fixing-invalid-utf-8-in-ruby-revisited/
4
+
5
+ module Geonames
6
+ class SHP
7
+
8
+ def initialize(file)
9
+ @file = file
10
+ @fname = file.split("/")[-1] rescue nil
11
+ @type = Object.module_eval("::#{Opt[:type].capitalize}", __FILE__, __LINE__)
12
+ @ic = Iconv.new('UTF-8//IGNORE', 'UTF-8')
13
+ @sample = nil
14
+ shp2pg if file
15
+ parse if file
16
+ write if file
17
+ end
18
+
19
+ def shp2pg
20
+ info "Converting SRID"
21
+ `shp2pgsql -D -as 4326 #{@file} nil > /tmp/#{@fname}.dump`
22
+ end
23
+
24
+ def parse_line(l)
25
+ return if l =~ /^SET\s|^BEGIN;|^COPY\s|^END;|^\\/
26
+ utf = @ic.iconv(l)
27
+ unless @sample
28
+ info "Free sample\n" + utf.inspect
29
+ @sample = true
30
+ end
31
+ @type.new(Opt[:map], utf, Opt[:country].upcase, Opt[:city])
32
+ end
33
+
34
+ def parse
35
+ info "Parsing dump"
36
+ start = Time.now
37
+ red = 0
38
+ File.open("/tmp/#{@fname}.dump") do |f|
39
+ while line = f.gets
40
+ if record = parse_line(line.chomp)
41
+ @table ||= record.table
42
+ Cache[@table] << record
43
+ red += 1
44
+ end
45
+ end
46
+ end
47
+ info "#{red} parsed. #{Time.now-start}s"
48
+ end
49
+
50
+ def reduce!
51
+ hsh = Cache[:roads].group_by { |r| r.name }
52
+ arr = []
53
+ hsh.map do |key, vals|
54
+ first = vals.delete_at(0)
55
+ # p vals[0].geom.geometries.concat(vals[1].geom.geometries)
56
+ vals.map(&:geom).each do |g|
57
+ first.geom.geometries.concat g.geometries
58
+ end
59
+ # = GeoRuby::SimpleFeatures::MultiLineString.
60
+ # from_line_strings([*vals.map(&:geom).map(&:geometries)])
61
+ first
62
+ end
63
+ end
64
+
65
+ def write
66
+ db = Postgres.new(Opt[:db])
67
+ Geonames::CLI.do_write(db, Cache[:zones])
68
+ Geonames::CLI.do_write(db, reduce!)
69
+ end
70
+
71
+ def self.import(file)
72
+ new(file)
73
+ end
74
+ end
75
+ end
76
+
data/lib/features/road.rb CHANGED
@@ -1,2 +1,41 @@
1
- class Road
1
+ require "rubygems"
2
+ require "geo_ruby"
3
+
4
+ class Road
5
+ attr_reader :city, :province, :country, :zone, :name, :geom, :kind, :table
6
+
7
+ def initialize(keys, vals, country=nil, city=nil)
8
+ s = vals.split("\t")
9
+ r = {}
10
+ keys.each_with_index do |k, i|
11
+ r[k] = s[i]
12
+ end
13
+ @name = r[:name]
14
+ @zone = r[:zone]
15
+ kind = r[:kind] || @name.split(" ")[0]
16
+ @kind = parse_kind(kind)
17
+ @city = city
18
+ @country = country
19
+ parse_geom(r[:geom])
20
+ @table = :roads
2
21
  end
22
+
23
+ def parse_geom(hex)
24
+ @geom = GeoRuby::SimpleFeatures::Geometry.from_hex_ewkb(hex)
25
+ end
26
+
27
+ def geom=(g)
28
+ @geom = g
29
+ end
30
+
31
+ def parse_kind(k)
32
+ case k
33
+ when /^tun/i then :tunnel
34
+ when /^av/i then :avenue
35
+ when /^r/i then :street
36
+ when /\d/ then :road
37
+ else :unknown
38
+ end
39
+ end
40
+
41
+ end
data/lib/features/spot.rb CHANGED
@@ -5,6 +5,7 @@ module Geonames
5
5
  alias :x :lon
6
6
  alias :y :lat
7
7
  alias :geoname_id :gid
8
+ alias :table :kind
8
9
 
9
10
  #
10
11
  # = Geonames Spot
@@ -58,7 +59,7 @@ module Geonames
58
59
  # Parse Geom to float or GeoRuby Point
59
60
  def parse_geom(lat, lon)
60
61
  @lat, @lon = lat.to_f, lon.to_f
61
-
62
+
62
63
  if defined?("GeoRuby")
63
64
  @geom = GeoRuby::SimpleFeatures::Point.from_x_y(@lon, @lat)
64
65
  end
@@ -0,0 +1,24 @@
1
+ require "rubygems"
2
+ require "geo_ruby"
3
+
4
+ class Zone
5
+ attr_reader :city, :name, :geom, :kind
6
+
7
+ def initialize(keys, vals, city=nil)
8
+ s = vals.split("\t")
9
+ r = {}
10
+ keys.each_with_index do |k, i|
11
+ r[k] = s[i]
12
+ end
13
+ @name = r[:name]
14
+ @zone = r[:zone]
15
+ @kind = :zone # @name.split(" ")[0] unless kind
16
+ @city = city
17
+ parse_geom(r[:geom])
18
+ end
19
+
20
+ def parse_geom(hex)
21
+ @geom = GeoRuby::SimpleFeatures::Geometry.from_hex_ewkb(hex)
22
+ end
23
+
24
+ end
@@ -1,8 +1,11 @@
1
1
  require 'features/spot'
2
2
  require 'features/country'
3
3
  require 'features/city'
4
+ require 'features/road'
5
+ require 'features/zone'
4
6
  require 'rubygems'
5
7
  require 'logger'
8
+ require 'data/shp'
6
9
  require 'data/tokyo'
7
10
  require 'data/postgres'
8
11
  require 'work/cli'
@@ -11,7 +14,7 @@ require 'work/export'
11
14
 
12
15
  module Geonames
13
16
  Opt = {}
14
- Cache = {:dump => [], :zip => []}
17
+ Cache = {:dump => [], :zip => [], :roads => [], :zones => []}
15
18
  Codes = YAML.load(File.read(File.join(File.dirname(__FILE__),'config', 'codes.yml')))
16
19
  VERSION = File.read(File.join(File.dirname(__FILE__), '..', 'VERSION'))
17
20
 
data/lib/work/cli.rb CHANGED
@@ -20,12 +20,19 @@ BANNER
20
20
  opts.separator ""
21
21
  opts.separator "Config file:"
22
22
  opts.on("-c", "--config CONFIG", String, "Geonames Config file path" ) { |file| options[:config] = file }
23
+ opts.on("-i", "--import CONFIG", String, "Geonames Import SHP/DBF/GPX" ) { |file| options[:shp] = file }
23
24
  opts.separator ""
24
25
  opts.separator "Tyrant Options:"
25
26
  opts.on("-t", "--tyrant", "Use tyrant" ) { options[:tyrant] = true }
26
27
  opts.on("-s", "--server SERVER", String, "Tyrant Server URL" ) { |url| options[:server] = url }
27
28
  opts.on("-p", "--port PORT", Integer, "Tyrant Server Port") { |val| options[:port] = val.to_i }
28
29
  opts.separator ""
30
+ opts.separator "SHP Options:"
31
+ opts.on("--map TYPE", Array, "Use zone/road to import" ) { |s| options[:map] = s.map(&:to_sym) }
32
+ opts.on("--type TYPE", String, "Use zone/road to import" ) { |s| options[:type] = s }
33
+ opts.on("--city CITY", String, "Use city gid to import" ) { |s| options[:city] = s }
34
+ opts.on("--country COUNTRY", String, "Use country gid to import" ) { |s| options[:country] = s }
35
+ opts.separator ""
29
36
  opts.separator "Common Options:"
30
37
  opts.on("-h", "--help", "Show this message" ) { puts opts; exit }
31
38
  opts.on("-v", "--verbose", "Turn on logging to STDOUT" ) { |bool| options[:verbose] = bool }
@@ -46,6 +53,7 @@ BANNER
46
53
  end
47
54
  private_class_method :parse_options
48
55
 
56
+ # Ugly but works?
49
57
  def self.work(argv)
50
58
  trap(:INT) { stop! }
51
59
  trap(:TERM) { stop! }
@@ -55,6 +63,11 @@ BANNER
55
63
  Opt.merge! YAML.load(File.read(Opt[:config]))
56
64
  end
57
65
 
66
+ if shp = Opt[:shp]
67
+ SHP.import(shp)
68
+ exit
69
+ end
70
+
58
71
  if argv[0] =~ /list|codes/
59
72
  Codes.each do |key,val|
60
73
  str = [val.values, key.to_s].join(" ").downcase
@@ -107,13 +120,15 @@ BANNER
107
120
  end
108
121
 
109
122
  def self.do_write(db, val)
110
- key = val[0].kind
123
+ return if val.empty?
124
+ key = val[0].table
111
125
  start = Time.now
112
126
  writt = 0
113
- info "\nWriting #{key}..."
127
+ info "\nWriting #{val.length} #{key}..."
114
128
  val.each do |v|
115
- unless db.find v.kind, v.gid
116
- db.insert v
129
+ meth = v.respond_to?(:gid) ? [v.gid] : [v.name, true]
130
+ unless db.find(v.table, *meth)
131
+ db.insert(v)
117
132
  writt += 1
118
133
  end
119
134
  end
@@ -0,0 +1,4 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ # describe Cache do
4
+ # end
@@ -0,0 +1,11 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe Postgres do
4
+
5
+ def wipe_db
6
+ end
7
+
8
+ describe "Parsing Dump" do
9
+ # before(:all)
10
+ end
11
+ end
@@ -0,0 +1,20 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe SHP do
4
+
5
+ Cache[:roads] = [Road.new([:name,:zone,:geom],"R DOUTOR VITAL BRASIL\t\\N\t0105000020E6100000010000000102000020E6100000020000009561DC0DA22B47C0EAB12D03CEF237C0136058FE7C2B47C0DE54A4C2D8F237C0"),
6
+ Road.new([:name,:zone,:geom],"R DOUTOR VITAL BRASIL\t\\N\t0105000020E6100000010000000102000020E610000003000000136058FE7C2B47C0DE54A4C2D8F237C0094E7D20792B47C0CCB56801DAF237C0CDCAF6216F2B47C08F1B7E37DDF237C0"),
7
+ Road.new([:name,:zone,:geom], "R DOUTOR VITAL BRASIL\t\\N\t0105000020E6100000010000000102000020E610000003000000A0F99CBB5D2B47C07A8F334DD8F237C019C6DD205A2B47C008E8BE9CD9F237C009C38025572B47C00DA5F622DAF237C0"),
8
+ Road.new([:name,:zone,:geom],"R DOUTOR VITAL BRASIL\t\\N\t0105000020E6100000010000000102000020E61000000300000009C38025572B47C00DA5F622DAF237C0155454FD4A2B47C082397AFCDEF237C0FB213658382B47C053060E68E9F237C0")]
9
+
10
+ Opt[:type] = "road"
11
+
12
+ it "should merge two records linestrings" do
13
+ @s = SHP.new(nil)
14
+ r = @s.reduce!
15
+ r.length.should eql(1)
16
+ r[0].geom.as_hex_ewkb.should_not eql(Cache[:roads][0].geom.as_hex_ewkb)
17
+ end
18
+
19
+
20
+ end
@@ -2,28 +2,28 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
3
  describe "Tokyo" do
4
4
 
5
- it "should write down a spot" do
6
- t = Geonames::Tokyo.new('localhost', 1978)
7
- m = mock(Geonames::Spot, { :gid => 888, :to_hash => { "gid" => 888, "kind" => "city", "lat" => 5.5 }})
8
- t.write(m)
9
- end
5
+ # it "should write down a spot" do
6
+ # t = Geonames::Tokyo.new('localhost', 1978)
7
+ # m = mock(Geonames::Spot, { :gid => 888, :to_hash => { "gid" => 888, "kind" => "city", "lat" => 5.5 }})
8
+ # t.write(m)
9
+ # end
10
10
 
11
- it "should read it up" do
12
- t = Geonames::Tokyo.new('localhost', 1978)
13
- record = t.find(888)
14
- record.should be_instance_of Geonames::Spot
15
- end
11
+ # it "should read it up" do
12
+ # t = Geonames::Tokyo.new('localhost', 1978)
13
+ # record = t.find(888)
14
+ # record.should be_instance_of Geonames::Spot
15
+ # end
16
16
 
17
- it "should not duplicate" do
18
- t = Geonames::Tokyo.new('localhost', 1978)
19
- t.all({ :gid => 888}).length.should eql(1)
20
- end
17
+ # it "should not duplicate" do
18
+ # t = Geonames::Tokyo.new('localhost', 1978)
19
+ # t.all({ :gid => 888}).length.should eql(1)
20
+ # end
21
21
 
22
- it "should return all countries" do
23
- all = Geonames::Country.all
24
- all.should be_instance_of Array
25
- all[0].should be_instance_of Geonames::Country
26
- all[0].gid.should eql(1)
27
- end
22
+ # it "should return all countries" do
23
+ # all = Geonames::Country.all
24
+ # all.should be_instance_of Array
25
+ # all[0].should be_instance_of Geonames::Country
26
+ # all[0].gid.should eql(1)
27
+ # end
28
28
 
29
29
  end
@@ -0,0 +1,68 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require "geo_ruby"
3
+
4
+ describe Road do
5
+
6
+ describe "Parsing Dump" do
7
+
8
+ before do
9
+ @road = Road.new([:zone, :name, :geom], "RIO COMPRIDO\tAV PAULO DE FRONTIN\t0105000020E6100000010000000102000020E61000000700000029A117E0C79A45C0D50B2027B3EE36C0782289C2C99A45C0ED188FFFC5EE36C0E6D342ABCA9A45C0AB8A7A7BD0EE36C00216B5BFCC9A45C07359511DDFEE36C0C489F290CE9A45C0DEA42096F7EE36C0453B2C65CD9A45C0DFCF664816EF36C04089595CCD9A45C00A220DA31AEF36C0")
10
+ end
11
+
12
+ it "should parse zone" do
13
+ @road.zone.should eql("RIO COMPRIDO")
14
+ end
15
+
16
+ it "should parse code" do
17
+ @road.name.should eql("AV PAULO DE FRONTIN")
18
+ end
19
+
20
+ it "should parse kind" do
21
+ @road.kind.should eql(:avenue)
22
+ end
23
+
24
+ it "should parse geom" do
25
+ @road.geom.should be_kind_of(GeoRuby::SimpleFeatures::MultiLineString)
26
+ end
27
+
28
+ it "should have 1 geometry" do
29
+ @road.geom.should have(1).geometries
30
+ end
31
+
32
+ it "should have 1 geometry linestring" do
33
+ geom = @road.geom.geometries[0]
34
+ geom.should be_kind_of(GeoRuby::SimpleFeatures::LineString)
35
+ end
36
+
37
+ it "should have 1 geometry linestring with n points" do
38
+ @road.geom.geometries[0].should have(7).points
39
+ end
40
+
41
+ end
42
+
43
+ describe "Another parse" do
44
+ before do
45
+ @road = Road.new([:length, :name, :null, :null, :geom], "35.487\tMS-380\t2\t\N\t0105000020E6100000010000000102000020E6100000120000005A4B85AD49DC4BC0D9438EB3AE8736C04D5707662DDA4BC07FD132464F8336C05AF6FA9F8FD84BC0C43ACFACA97E36C07DAC68ABFED14BC0ADFF26E9687936C036ED20214BD04BC035B173E5557A36C0C115051259CD4BC0E4C9CF15617636C0429724EA1AC94BC04C0D087A5E7536C04C0FAB81C5C54BC0FD07B789257336C07FB8E40122BE4BC026F0474B218036C053A51A37ABBD4BC0E03173F8698036C0D642B66B34BD4BC0BC4E66A4B28036C0D696B79FBDBC4BC05337214FFB8036C01CA71ED346BC4BC043DCA3F8438136C07879EB05D0BB4BC0212EEEA08C8136C0B5131E3859BB4BC08F1D0048D58136C0A17BB669E2BA4BC0259BD9ED1D8236C007B7B49A6BBA4BC07D977A92668236C0BE2439F759B94BC0B67D375CCC8236C0")
46
+ end
47
+
48
+ it "should parse code" do
49
+ @road.name.should eql("MS-380")
50
+ end
51
+
52
+ it "should parse kind" do
53
+ @road.kind.should eql(:road)
54
+ end
55
+
56
+ it "should parse geom" do
57
+ @road.geom.should be_kind_of(GeoRuby::SimpleFeatures::MultiLineString)
58
+ end
59
+
60
+ end
61
+ end
62
+
63
+
64
+ # RIO COMPRIDO\tAV PAULO DE FRONTIN\t0105000020E6100000010000000102000020E61000000700000029A117E0C79A45C0D50B2027B3EE36C0782289C2C99A45C0ED188FFFC5EE36C0E6D342ABCA9A45C0AB8A7A7BD0EE36C00216B5BFCC9A45C07359511DDFEE36C0C489F290CE9A45C0DEA42096F7EE36C0453B2C65CD9A45C0DFCF664816EF36C04089595CCD9A45C00A220DA31AEF36C0
65
+ # RIO COMPRIDO\tELEV ENG FREYSSINET\t0105000020E6100000010000000102000020E61000001600000029A117E0C79A45C0D50B2027B3EE36C0616EE6DEC39A45C03A36CF0E94EE36C0E8C4CE25C09A45C0C7CC5FA884EE36C06FC623BBAD9A45C0CC16549751EE36C0C886FA2AA99A45C03FFE37E23EEE36C0D8A69F2DA79A45C036DFE40921EE36C0C5B0C586A89A45C060E6BA0F0FEE36C0417340F4B29A45C0CCD0A07BB9ED36C0F28BB536B89A45C01F0BB3CE94ED36C038AED593BA9A45C0AD84B8EA77ED36C0C8D80C30BD9A45C0DB5E15A837ED36C0642CEC83C29A45C04E78D9AEA9EC36C01FF44297C79A45C08091F28337EC36C0D0C63FCECA9A45C0ACC190D2E7EB36C06160C265CC9A45C0F4BA5997ABEB36C0141C44A2D19A45C046DA3ABC0BEB36C00A5183F3D49A45C0A800B9F987EA36C08F84CC8CD69A45C078B5508D41EA36C0FDEFEEEDD49A45C06F668B46D8E936C06DF2C8EBD39A45C05C575FADBEE936C05718F576D39A45C0D31DF017B1E936C056E59516D29A45C0F9EE1635A7E936C0
66
+ # GAMBOA\tTUN JOAO RICARDO\t0105000020E6100000010000000102000020E6100000060000008156E6D6F19845C06D89F7CECCE536C00A1B72A6CF9845C07AAC746217E636C016E1A9D1C99845C0A3B9AA0C24E636C0EE90F8C5C49845C047B01D022FE636C05F1D9379BB9845C0ADEA1C3443E636C0B146DDF6B19845C05FC1548D57E636C0
67
+ # SANTO CRISTO\tVD S PEDRO E S PAULO\t0105000020E6100000010000000102000020E610000006000000AC45D194B79945C04409BB661DE636C0B49FF422B89945C081E6846525E636C022FF9BAC949945C031F0CFDF8FE636C0978E80ED8F9945C056113F209EE636C0AF1242F7879945C001FE5FA5B8E636C09AB3B4607D9945C0A38B9395DCE636C0
68
+
@@ -0,0 +1,191 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
3
+ require "geo_ruby"
4
+
5
+ describe Spot do
6
+
7
+ describe "Parsing Dump" do
8
+
9
+ before do
10
+ @spot = Spot.new("6319037\tMaxaranguape\tMaxaranguape\t\t-5.46874226086957\t-35.3565714695652\tA\tADM2\tBR\t22\t2407500\t6593\t\t12\t\t\t\tAmerica/Recife\t2006-12-17", :dump)
11
+ end
12
+
13
+ it "should parse geoid integer" do
14
+ @spot.geoname_id.should eql(6319037)
15
+ @spot.gid.should eql(6319037)
16
+ end
17
+
18
+ it "should parse code" do
19
+ @spot.code.should eql("6593")
20
+ end
21
+
22
+ it "should parse province code" do
23
+ @spot.province.should eql("2407500")
24
+ end
25
+
26
+ it "should parse name" do
27
+ @spot.name.should eql("Maxaranguape")
28
+ @spot.ascii.should eql("Maxaranguape")
29
+ end
30
+
31
+ it "should parse geostuff" do
32
+ @spot.lat.should be_close(-5.4687, 0.001)
33
+ @spot.y.should be_close(-5.4687, 0.001)
34
+ @spot.lon.should be_close(-35.3565, 0.001)
35
+ end
36
+
37
+ it "should parse spot kind" do
38
+ @spot.kind.should eql(:cities)
39
+ end
40
+
41
+ it "should parse spot country" do
42
+ @spot.country.should eql("BR")
43
+ end
44
+
45
+ it "shuold parse timezone" do
46
+ @spot.tz.should eql("America/Recife")
47
+ end
48
+
49
+ it "should parse updated_at" do
50
+ @spot.updated_at.should be_instance_of(Time)
51
+ @spot.updated_at.day.should eql(17)
52
+ end
53
+ end
54
+
55
+ describe "More Parseing" do
56
+
57
+ before do
58
+ @spot = Geonames::Spot.new("3384862\tRiacho Zuza\tRiacho Zuza\t\t-9.4333333\t-37.6666667\tH\tSTMI\tBR\t\t02\t\t\t\t0\t\t241\tAmerica/Maceio\t1993-12-17\n", :dump)
59
+ end
60
+
61
+ it "should parse geoid integer" do
62
+ @spot.geoname_id.should eql(3384862)
63
+ end
64
+
65
+ it "should parse name" do
66
+ @spot.name.should eql("Riacho Zuza")
67
+ @spot.ascii.should eql("Riacho Zuza")
68
+ end
69
+
70
+ it "should parse geostuff" do
71
+ @spot.lat.should be_close(-9.4333333, 0.001)
72
+ @spot.lon.should be_close(-37.6666667, 0.001)
73
+ end
74
+
75
+ it "should parse spot kind" do
76
+ @spot.kind.should eql(:other)
77
+ end
78
+
79
+ it "should parse spot country" do
80
+ @spot.country.should eql("BR")
81
+ end
82
+
83
+ it "shuold parse timezone" do
84
+ @spot.tz.should eql("America/Maceio")
85
+ end
86
+
87
+ it "should parse updated_at" do
88
+ @spot.updated_at.should be_instance_of(Time)
89
+ @spot.updated_at.day.should eql(17)
90
+ end
91
+ end
92
+
93
+ describe "Parsing Province" do
94
+
95
+ before do
96
+ @spot = Geonames::Spot.new("3457153\tEstado de Minas Gerais\tEstado de Minas Gerais\tMinas,Minas Geraes,Minas Gerais\t-18.0\t-44.0\tA\tADM1\tBR\tBR\t15\t\t\t\t16672613\t\t1219\tAmerica/Sao_Paulo\t2007-05-15\n", :dump)
97
+ end
98
+
99
+ it "should be kind of province" do
100
+ @spot.kind.should eql(:provinces)
101
+ end
102
+
103
+ it "should parse geoid" do
104
+ @spot.geoname_id.should eql(3457153)
105
+ @spot.gid.should eql(3457153)
106
+ end
107
+
108
+ it "should parse code" do
109
+ @spot.code.should be_empty
110
+ end
111
+
112
+ it "should parse province code" do
113
+ @spot.province.should eql("15")
114
+ end
115
+
116
+ it "should create abbr" do
117
+ @spot.abbr.should eql("MG")
118
+ end
119
+
120
+ it "should parse name" do
121
+ @spot.name.should eql("Minas Gerais")
122
+ @spot.ascii.should eql("Estado de Minas Gerais")
123
+ end
124
+
125
+ it "should parse geostuff" do
126
+ @spot.lat.should be_close(-18.0, 0.001)
127
+ @spot.lon.should be_close(-44.0, 0.001)
128
+ end
129
+
130
+ end
131
+
132
+ describe "Parsing Zip" do
133
+
134
+ before do
135
+ @spot = Geonames::Spot.new("BR\t76375-000\tHidrolina\tGoias\t29\t\t5209804\t\t-14.7574\t-49.3596\t\n", :zip)
136
+ end
137
+
138
+ it "should parse zip oO" do
139
+ @spot.zip.should eql("76375")
140
+ end
141
+
142
+ it "should be a city" do
143
+ @spot.kind.should eql(:cities)
144
+ end
145
+
146
+ it "should parse code" do
147
+ @spot.code.should eql("5209804")
148
+ end
149
+
150
+ it "should parse geoid integer" do
151
+ @spot.gid.should be_nil # eql(3384862)
152
+ end
153
+
154
+ it "should parse name" do
155
+ @spot.name.should eql("Hidrolina")
156
+ @spot.ascii.should be_nil # eql("Hidrolina")
157
+ end
158
+
159
+ it "should parse geostuff" do
160
+ @spot.lat.should be_close(-14.7574, 0.001)
161
+ @spot.lon.should be_close(-49.3596, 0.001)
162
+ end
163
+
164
+ end
165
+
166
+ end
167
+
168
+ # 6319037 Maxaranguape Maxaranguape -5.46874226086957 -35.3565714695652 A ADM2 BR 22 2407500 6593 12 America/Recife 2006-12-17
169
+ # 6319038 Mossoró Mossoro -5.13813983076923 -37.2784795923077 A ADM2 BR 22 2408003 205822 33 America/Fortaleza 2006-12-17
170
+ # 6319039 Nísia Floresta Nisia Floresta -6.06240228440367 -35.1690981651376 A ADM2 BR 22 2408201 15817 15 America/Recife 2006-12-17
171
+ # 6319040 Paraú Parau -5.73215878787879 -37.1366413030303 A ADM2 BR
172
+ # 22 2408706 4093 94 America/Fortaleza 2006-12-17
173
+
174
+ # "BR\t76375-000\tHidrolina\tGoias\t29\t\t5209804\t\t-14.7574\t-49.3596\t\n"
175
+ # "BR\t73920-000\tIaciara\tGoias\t29\t\t5209903\t\t-14.0819\t-46.7211\t\n"
176
+ # "BR\t75550-000\tInaciolândia\tGoias\t29\t\t5209937\t\t-18.4989\t-49.9016\t\n"
177
+ # "BR\t75955-000\tIndiara\tGoias\t29\t\t5209952\t^C\t-17.2276\t-49.9667\t\n"
178
+ # "IT\t89900\tVena\tCalabria\t\tVibo Valentia\tVV\t\t38.6578\t16.0602\t4\n"
179
+ # "IT\t89900\tVibo Marina\tCalabria\t\tVibo Valentia\tVV\t\t38.7143\t16.1135\t4\n"
180
+ # "IT\t89900\tTriparni\tCalabria\t\tVibo Valentia\tVV\t\t38.6839\t16.0672\t4\n"
181
+ # "IT\t89900\tPiscopio\tCalabria\t\tVibo Valentia\tVV\t\t38.6635\t16.112\t4\n"
182
+
183
+ # "3457153\tEstado de Minas Gerais\tEstado de Minas Gerais\tMinas,Minas Geraes,Minas Gerais\t-18.0\t-44.0\tA\tADM1\tBR\tBR\t15\t\t\t\t16672613\t\t1219\tAmerica/Sao_Paulo\t2007-05-15\n"
184
+ # "3457415\tEstado de Mato Grosso do Sul\tEstado de Mato Grosso do Sul\tEstado do Mato Grosso do Sul,Mato Grosso do Sul\t-21.0\t-55.0\tA\tADM1\tBR\t\t11\t\t\t\t2233378\t\t446\tAmerica/Campo_Grande\t2007-05-15\n"
185
+ # "3457419\tEstado de Mato Grosso\tEstado de Mato Grosso\tMato Grosso\t-13.0\t-56.0\tA\tADM1\tBR\t\t14\t\t\t\t2235832\t\t335\tAmerica/Cuiaba\t2007-05-15\n"
186
+ # "3462372\tEstado de Goiás\tEstado de Goias\tGoias,Goiaz,Goiás,Goyaz\t-15.5807107391621\t-49.63623046875\tA\tADM1\tBR\t\t29\t\t\t\t5521522\t\t695\tAmerica/Araguaina\t2009-10-04\n"
187
+ # "3463504\tDistrito Federal\tDistrito Federal\tDistrito Federal,Distrito Federal de Brasilia,Distrito Federal de Brasília,Futuro Distrito Federal,Municipio Federal,Novo Distrito Federal\t-15.75\t-47.75\tA\tADM1\tBR\t\t07\t\t\t\t1821946\t\t1035\tAmerica/Sao_Paulo\t2007-05-15\n"
188
+
189
+ # "3165361\tToscana\tToscana\tTaskana,Toscan-a,Toscana,Toscane,Toscann-a,Toskana,Toskania,Toskanio,Toskansko,Toskánsko,Toskāna,Toszkana,Toszkána,Tuscany,Tuschena,Tuschèna,Tuscia,toseukana ju,tosukana zhou,tuo si ka na,twsqnh,Таскана,Тоскана,טוסקנה,تسکانہ,ტოსკანა,トスカーナ州,托斯卡纳,토스카나 주\t43.4166667\t11.0\tA\tADM1\tIT\t\t16\t\t\t\t3718210\t\t249\tEurope/Rome\t2010-01-17\n"
190
+ # "3169778\tRegione Puglia\tRegione Puglia\tApulia,Apulie,Apulien,Apulië,Pouilles,Puglia\t41.25\t16.25\tA\tADM1\tIT\t\t13\t\t\t\t4021957\t\t95\tEurope/Rome\t2009-03-11\n"
191
+ # "3170831\tRegione Piemonte\tRegione Piemonte\tPedemons,Pedemontium,Piamonte,Piedmont,Piemont,Piemonte,Piémont,Piëmont,Regione Piemonte\t45.0\t8.0\tA\tADM1\tIT\t\t12\t\t\t\t4294081\t\t185\tEurope/Rome\t2008-08-18\n"
@@ -0,0 +1,62 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require "geo_ruby"
3
+
4
+ describe Zone do
5
+
6
+ describe "Parsing Dump" do
7
+
8
+ before do
9
+ @zone = Zone.new([:name, :null, :geom], "Copacabana\t2\t0106000020E6100000010000000103000020E6100000010000001B000000DE024322029645C0E3263B4536F736C06A78FF7D099745C05F4C17BC3AF836C016ECF835959745C0A6303C5AF6F836C031D79B0DEE9745C02A86A360EDF936C0BBC7A929259845C054515A9559FB36C0050527EF109845C02AD15A3969FC36C0A5705221BD9745C031151F7ACBFC36C0A96DC310049845C0055C26CBE0FC36C0C0FA3CDA6E9845C02424EED2F6FC36C08D80123FF49845C03C190018D7FB36C02E4C5C15199945C0A11ABD694CFB36C00D94B215269945C0F04B5E66CAFA36C03440A3EA169945C029ADE30D51FA36C082988494F89845C06DF6F65FD3F936C0E1CC3ABED39845C00B593959CFF836C0C0ED50117D9845C045937E53F2F736C03440A3EA169945C0CDFE644A93F636C0BA204AE9E29845C0C2EF96F233F636C08C60DFA8C29845C0A38B4DC61DF636C06DA128929D9845C03DE8AF4604F636C047CEF70F499845C08B67D19D49F636C0E87201390A9845C073BEF5F5B5F636C05F50930A799745C0B707094838F636C06CEAA05AAD9645C049A9FD439CF536C034760E48739645C0B9F4FBDC84F536C0F2A307AC159645C0CCEA3108E3F636C0DE024322029645C0E3263B4536F736C0")
10
+ end
11
+
12
+ it "should parse code" do
13
+ @zone.name.should eql("Copacabana")
14
+ end
15
+
16
+ it "should parse kind" do
17
+ @zone.kind.should eql(:zone)
18
+ end
19
+
20
+ it "should parse geom" do
21
+ @zone.geom.should be_kind_of(GeoRuby::SimpleFeatures::MultiPolygon)
22
+ end
23
+
24
+ it "should have 1 geometry" do
25
+ @zone.geom.should have(1).geometries
26
+ end
27
+
28
+ it "should have 1 geometry polygon" do
29
+ geom = @zone.geom.geometries[0]
30
+ geom.should be_kind_of(GeoRuby::SimpleFeatures::Polygon)
31
+ end
32
+
33
+ it "should have 1 geometry polygon with n points" do
34
+ @zone.geom.geometries[0][0].should have(27).points
35
+ end
36
+
37
+ end
38
+
39
+ describe "Another parse" do
40
+ before do
41
+ @zone = Zone.new([:name, :null, :geom], "Botafogo\t4\t0106000020E6100000010000000103000020E610000001000000260000008C60DFA8C29845C0A38B4DC61DF636C0D68132D5E79845C090FADA554EF536C069D119B12A9945C0D857001102F436C0298D2075189945C0BFEDCBEBA8F336C049DBDD0FFA9845C0EEE2E7537BF336C0D68132D5E79845C0C2DCE6FB5FF336C0A761EE3BB99845C0FD7DA07637F336C048D58ABADF9845C061341567FBF136C0D5CD0D24649845C01D4DDC69AEF136C0106FC79E3B9845C058EE95E485F136C0739E6AE14F9845C043737CCFE3F036C0C10619C0459845C0466297DF9AF036C0BD63D9FE0A9845C0AF6F70421DF036C0A8E8BFE9689745C022C3C82715F036C0AF7A1ABB5A9745C08103515A72F036C0805AD6212C9745C0A04BBB9F39F036C03FFE0258109745C0E861C12D4AF036C0FD2EA4E8CC9645C08103515A72F036C03F62B834969645C0A9913A22AFF036C0C96B208E639645C0875AB5CC30F136C02DFC02077A9645C03E01065281F136C0BD3A35D49B9645C04CFB74214EF136C04048B7CBD99645C0F0F4ABBE6EF136C0ABD7DAF91F9745C0521060C417F236C083C8D321229745C0BC1081D776F236C009643E7BF99645C083E4C80ECAF236C0D16BCFB3BF9645C0EFBC652AD8F236C084595B73599645C07CA67AEF3AF336C0B1592EAC6B9645C0A3A74E6AB4F336C03DAE50A9189645C0D653696356F436C02127B0EE3C9645C070D22BCB62F536C034760E48739645C0B9F4FBDC84F536C06CEAA05AAD9645C049A9FD439CF536C05F50930A799745C0B707094838F636C0E87201390A9845C073BEF5F5B5F636C047CEF70F499845C08B67D19D49F636C06DA128929D9845C03DE8AF4604F636C08C60DFA8C29845C0A38B4DC61DF636C0")
42
+ end
43
+
44
+ it "should parse code" do
45
+ @zone.name.should eql("Botafogo")
46
+ end
47
+
48
+ it "should parse geom" do
49
+ @zone.geom.should be_kind_of(GeoRuby::SimpleFeatures::MultiPolygon)
50
+ end
51
+
52
+ it "should have 1 geometry polygon with n points" do
53
+ @zone.geom.geometries[0][0].should have(38).points
54
+ end
55
+
56
+ end
57
+ end
58
+
59
+ # Copacabana\t2\t0106000020E6100000010000000103000020E6100000010000001B000000DE024322029645C0E3263B4536F736C06A78FF7D099745C05F4C17BC3AF836C016ECF835959745C0A6303C5AF6F836C031D79B0DEE9745C02A86A360EDF936C0BBC7A929259845C054515A9559FB36C0050527EF109845C02AD15A3969FC36C0A5705221BD9745C031151F7ACBFC36C0A96DC310049845C0055C26CBE0FC36C0C0FA3CDA6E9845C02424EED2F6FC36C08D80123FF49845C03C190018D7FB36C02E4C5C15199945C0A11ABD694CFB36C00D94B215269945C0F04B5E66CAFA36C03440A3EA169945C029ADE30D51FA36C082988494F89845C06DF6F65FD3F936C0E1CC3ABED39845C00B593959CFF836C0C0ED50117D9845C045937E53F2F736C03440A3EA169945C0CDFE644A93F636C0BA204AE9E29845C0C2EF96F233F636C08C60DFA8C29845C0A38B4DC61DF636C06DA128929D9845C03DE8AF4604F636C047CEF70F499845C08B67D19D49F636C0E87201390A9845C073BEF5F5B5F636C05F50930A799745C0B707094838F636C06CEAA05AAD9645C049A9FD439CF536C034760E48739645C0B9F4FBDC84F536C0F2A307AC159645C0CCEA3108E3F636C0DE024322029645C0E3263B4536F736C0
60
+ # Urca\t3\t0106000020E6100000010000000103000020E6100000010000001B0000002127B0EE3C9645C070D22BCB62F536C03DAE50A9189645C0D653696356F436C0B1592EAC6B9645C0A3A74E6AB4F336C084595B73599645C07CA67AEF3AF336C0E83F2850F59545C055D7AD3C9FF336C0DC146FFBDC9545C05C1D2A82ACF336C0D1AB3413C99545C05A5BAB15A8F336C01A57D1575A9545C091A56AC0D9F236C0C4ABD57A139545C0B6F9F5385CF236C0F455FDDCE09445C049FA5FF698F236C0C7552AA4CE9445C0A5A45A9178F236C06BAB2F09EF9445C061A3A4F0F2F136C041000765BA9445C0974CCB1059F136C03455C0E6919445C0A8A166B83CF136C051025D60269445C077C0834475F136C073CD3C4DED9345C0ADBF9312F6F036C0D74FB1CC5D9345C0980DE0176DF036C042ED293B4A9345C0620ED049ECF036C0B3A5A698B29345C0024AB15844F136C01A85C978D69345C00965B547C0F136C00ECD44B4AD9345C0A124EB3987F236C08E7D184B389345C04FF77B54ECF236C007B240C5319345C0C0AFF8B154F336C062F6BACCE69445C0CDE500904CF436C005FD244EEC9445C0DF38B3A39CF436C0E9BC9FD8169545C01F0AEC70AAF436C02127B0EE3C9645C070D22BCB62F536C0
61
+ # Botafogo\t4\t0106000020E6100000010000000103000020E610000001000000260000008C60DFA8C29845C0A38B4DC61DF636C0D68132D5E79845C090FADA554EF536C069D119B12A9945C0D857001102F436C0298D2075189945C0BFEDCBEBA8F336C049DBDD0FFA9845C0EEE2E7537BF336C0D68132D5E79845C0C2DCE6FB5FF336C0A761EE3BB99845C0FD7DA07637F336C048D58ABADF9845C061341567FBF136C0D5CD0D24649845C01D4DDC69AEF136C0106FC79E3B9845C058EE95E485F136C0739E6AE14F9845C043737CCFE3F036C0C10619C0459845C0466297DF9AF036C0BD63D9FE0A9845C0AF6F70421DF036C0A8E8BFE9689745C022C3C82715F036C0AF7A1ABB5A9745C08103515A72F036C0805AD6212C9745C0A04BBB9F39F036C03FFE0258109745C0E861C12D4AF036C0FD2EA4E8CC9645C08103515A72F036C03F62B834969645C0A9913A22AFF036C0C96B208E639645C0875AB5CC30F136C02DFC02077A9645C03E01065281F136C0BD3A35D49B9645C04CFB74214EF136C04048B7CBD99645C0F0F4ABBE6EF136C0ABD7DAF91F9745C0521060C417F236C083C8D321229745C0BC1081D776F236C009643E7BF99645C083E4C80ECAF236C0D16BCFB3BF9645C0EFBC652AD8F236C084595B73599645C07CA67AEF3AF336C0B1592EAC6B9645C0A3A74E6AB4F336C03DAE50A9189645C0D653696356F436C02127B0EE3C9645C070D22BCB62F536C034760E48739645C0B9F4FBDC84F536C06CEAA05AAD9645C049A9FD439CF536C05F50930A799745C0B707094838F636C0E87201390A9845C073BEF5F5B5F636C047CEF70F499845C08B67D19D49F636C06DA128929D9845C03DE8AF4604F636C08C60DFA8C29845C0A38B4DC61DF636C0
62
+ # Flamengo\t5\t0106000020E6100000010000000103000020E6100000010000001B0000003FFE0258109745C0E861C12D4AF036C0505F06F0EC9645C061922586A4EE36C0E340E3A0AF9645C0A4624A4E9AEE36C0E340E3A0AF9645C0732E602406EE36C0DF4D6D4F899645C069BD2F5CF7EC36C03CA0B8582D9645C069BD2F5CF7EC36C05115EC3A1D9645C080D8EC67A1EC36C0D4740B5B169645C09080E9BD7CEC36C028793995099645C00E3B47AB1BEC36C0E89B8A1E3A9645C0BB9E4A9D8CEB36C02486C343E39545C064A7A61173EB36C0920C18BF849545C0A21C245CDEEB36C0E1B59E7BED9545C08855DFE729EE36C0B8FE5B2C049645C0B95A3CEB64EF36C041A95EF9EE9545C00EE55931B3EF36C053FE6393C49545C03C68BEE2A2EF36C08F187850C19545C075C47C11D7EF36C038AF2FC38E9545C0FC8F5497DDEF36C038AF2FC38E9545C023970D2C3CF036C0EA3F166CBC9545C00D84B2039EF036C04DD4C1CA2A9645C0D1F66EC79DF136C0B261DB56579645C0B01C4273A9F136C02DFC02077A9645C03E01065281F136C0C96B208E639645C0875AB5CC30F136C03F62B834969645C0A9913A22AFF036C0FD2EA4E8CC9645C08103515A72F036C03FFE0258109745C0E861C12D4AF036C0
@@ -1,87 +1,10 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
3
3
 
4
- describe "GeonamesLocal" do
5
-
6
- describe "Parsing" do
7
- before do
8
- @spot = Geonames::Spot.new("6319037\tMaxaranguape\tMaxaranguape\t\t-5.46874226086957\t-35.3565714695652\tA\tADM2\tBR\t22\t2407500\t6593\t\t12\t\t\t\tAmerica/Recife\t2006-12-17")
9
- end
10
-
11
- it "should parse geoid integer" do
12
- @spot.geoname_id.should eql(6319037)
13
- end
14
-
15
- it "should parse name" do
16
- @spot.name.should eql("Maxaranguape")
17
- @spot.ascii.should eql("Maxaranguape")
18
- end
19
-
20
- it "should parse geostuff" do
21
- @spot.lat.should be_close(-5.4687, 0.001)
22
- @spot.y.should be_close(-5.4687, 0.001)
23
- @spot.lon.should be_close(-35.3565, 0.001)
24
- end
25
-
26
- it "should parse spot kind" do
27
- @spot.kind.should eql(:city)
28
- end
29
-
30
- it "should parse spot country" do
31
- @spot.country.should eql("BR")
32
- end
33
-
34
- it "shuold parse timezone" do
35
- @spot.tz.should eql("America/Recife")
36
- end
37
-
38
- it "should parse updated_at" do
39
- @spot.updated_at.should be_instance_of(Time)
40
- @spot.updated_at.day.should eql(17)
41
- end
4
+ describe Geonames do
5
+ it "should have a cache" do
6
+ Cache.should be_instance_of(Hash)
42
7
  end
43
8
 
44
- describe "More Parseing" do
45
- before do
46
- @spot = Geonames::Spot.new("3384862\tRiacho Zuza\tRiacho Zuza\t\t-9.4333333\t-37.6666667\tH\tSTMI\tBR\t\t02\t\t\t\t0\t\t241\tAmerica/Maceio\t1993-12-17\n")
47
- end
48
-
49
- it "should parse geoid integer" do
50
- @spot.geoname_id.should eql(3384862)
51
- end
52
9
 
53
- it "should parse name" do
54
- @spot.name.should eql("Riacho Zuza")
55
- @spot.ascii.should eql("Riacho Zuza")
56
- end
57
-
58
- it "should parse geostuff" do
59
- @spot.lat.should be_close(-9.4333333, 0.001)
60
- @spot.lon.should be_close(-37.6666667, 0.001)
61
- end
62
-
63
- it "should parse spot kind" do
64
- @spot.kind.should eql(:other)
65
- end
66
-
67
- it "should parse spot country" do
68
- @spot.country.should eql("BR")
69
- end
70
-
71
- it "shuold parse timezone" do
72
- @spot.tz.should eql("America/Maceio")
73
- end
74
-
75
- it "should parse updated_at" do
76
- @spot.updated_at.should be_instance_of(Time)
77
- @spot.updated_at.day.should eql(17)
78
- end
79
- end
80
10
  end
81
-
82
- # 6319037 Maxaranguape Maxaranguape -5.46874226086957 -35.3565714695652 A ADM2 BR 22 2407500 6593 12 America/Recife 2006-12-17
83
- # 6319038 Mossoró Mossoro -5.13813983076923 -37.2784795923077 A ADM2 BR 22 2408003 205822 33 America/Fortaleza 2006-12-17
84
- # 6319039 Nísia Floresta Nisia Floresta -6.06240228440367 -35.1690981651376 A ADM2 BR 22 2408201 15817 15 America/Recife 2006-12-17
85
-
86
- # 6319040 Paraú Parau -5.73215878787879 -37.1366413030303 A ADM2 BR
87
- # 22 2408706 4093 94 America/Fortaleza 2006-12-17
data/spec/spec_helper.rb CHANGED
@@ -3,7 +3,8 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
  require 'geonames_local'
4
4
  require 'spec'
5
5
  require 'spec/autorun'
6
+ include Geonames
6
7
 
7
8
  Spec::Runner.configure do |config|
8
-
9
+
9
10
  end
@@ -0,0 +1,8 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe CLI do
4
+
5
+ describe "Parsing Dump" do
6
+ # before(:all)
7
+ end
8
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geonames_local
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcos Piccinini
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-01-28 00:00:00 -02:00
12
+ date: 2010-01-29 00:00:00 -02:00
13
13
  default_executable: geonames
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -49,24 +49,36 @@ files:
49
49
  - Rakefile
50
50
  - VERSION
51
51
  - bin/geonames
52
+ - geonames.yml
53
+ - geonames_local.gemspec
52
54
  - lib/config/codes.yml
53
55
  - lib/config/geonames.yml
56
+ - lib/data/cache.rb
54
57
  - lib/data/geoquery.rb
55
58
  - lib/data/postgres.rb
59
+ - lib/data/shp.rb
56
60
  - lib/data/tokyo.rb
57
61
  - lib/features/city.rb
58
62
  - lib/features/country.rb
59
63
  - lib/features/province.rb
60
64
  - lib/features/road.rb
61
65
  - lib/features/spot.rb
66
+ - lib/features/zone.rb
62
67
  - lib/geonames_local.rb
63
68
  - lib/work/cli.rb
64
69
  - lib/work/dump.rb
65
70
  - lib/work/export.rb
71
+ - spec/data/cache_spec.rb
72
+ - spec/data/postgres_spec.rb
73
+ - spec/data/shp_spec.rb
66
74
  - spec/data/tokyo_spec.rb
75
+ - spec/features/road_spec.rb
76
+ - spec/features/spot_spec.rb
77
+ - spec/features/zone_spec.rb
67
78
  - spec/geonames_local_spec.rb
68
79
  - spec/spec.opts
69
80
  - spec/spec_helper.rb
81
+ - spec/work/cli_spec.rb
70
82
  - task/benchmark.rb
71
83
  - task/benchmark_cabinet.rb
72
84
  has_rdoc: true
@@ -98,6 +110,13 @@ signing_key:
98
110
  specification_version: 3
99
111
  summary: Dump and feed a tokyo local geonames db
100
112
  test_files:
113
+ - spec/data/cache_spec.rb
114
+ - spec/data/postgres_spec.rb
115
+ - spec/data/shp_spec.rb
101
116
  - spec/data/tokyo_spec.rb
117
+ - spec/features/road_spec.rb
118
+ - spec/features/spot_spec.rb
119
+ - spec/features/zone_spec.rb
102
120
  - spec/geonames_local_spec.rb
103
121
  - spec/spec_helper.rb
122
+ - spec/work/cli_spec.rb