geonames_local 3.3.3 → 3.3.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3d899c1e90546accbce85fa372b534d862f81d16
4
- data.tar.gz: b0978645a9ae924f268bb8783a82e2de3564a733
3
+ metadata.gz: 0ba4f5b249b265786ed141a7cb788ecbbdb8d972
4
+ data.tar.gz: 5c72a80db053d42786b373207892e353ccac08d9
5
5
  SHA512:
6
- metadata.gz: d907b4d932d092bae9b440b31226e12d8c68d8b54e5806076dde56c7b68569f5087352903d97db250d7dc603f14418499527758823a6428f20485d8cc2bee8ab
7
- data.tar.gz: fa3189ca4d1c1ae453dcd1c7e6cd8d9fc227fd2524fbff07f87e6584e1858295a5b72ec40812b27e1353c448113af571466cc581fd82647ab34ccfccd2597489
6
+ metadata.gz: 5be133df0fde1cc8b007d7b4369d497b2b1e012fe234d7a2ae7c250433b98dfea5fdec5fd434c91c7ab1da33983ee46f5d1b58775eed08907a18ec3404f9c6c4
7
+ data.tar.gz: cf0e1a0d83460d355a70b7edf7fdd95c9c13c700502a5c08404d7cca4afcbfb637a3e9d014b0f5df55ba7880cd129788a99ece4bc8701b1382df698a914371b9
data/Gemfile CHANGED
@@ -2,6 +2,7 @@ source 'http://rubygems.org'
2
2
  gemspec # Specify gem's dependencies in mongoid_geospatial.gemspec
3
3
 
4
4
  gem 'rake'
5
+ gem 'pry'
5
6
  gem 'dbf'
6
7
 
7
8
  platforms :ruby do
@@ -9,10 +10,7 @@ platforms :ruby do
9
10
  end
10
11
 
11
12
  gem 'georuby'
12
-
13
- gem 'mongoid'
14
13
  gem 'mongoid_geospatial'
15
14
 
16
- gem 'pry'
17
15
  gem 'rspec'
18
16
  gem 'guard-rspec'
data/README.md CHANGED
@@ -27,22 +27,16 @@ Create a config yml file:
27
27
 
28
28
  geonames init
29
29
 
30
- Will generate a "geonames.yml" file on your folder.
30
+ Will generate a `geonames.yml` file on your folder.
31
31
  The file is self explanatory.
32
32
 
33
- Geonames splits the nations/countries database from the rest, so:
33
+ Geonames *splits the nations/countries database* from the rest, so:
34
+ It'll also populate the nations collection automatically: `252` nations.
34
35
 
35
36
 
36
- To populate the nations database for the first time use:
37
-
38
- geonames -c geoconfig.yml nations
39
-
40
-
41
- Then you can run geonames to populate regions/cities...
42
-
43
37
  geonames -c geonames.yml
44
38
 
45
- To run it. Use -v for verbose.
39
+ To run it. Use `-v` for verbose.
46
40
 
47
41
 
48
42
  If you are not sure your country/nation code, use:
@@ -50,25 +44,20 @@ If you are not sure your country/nation code, use:
50
44
  geonames list <search>
51
45
 
52
46
 
47
+ Mongoid
48
+ -------
53
49
 
54
- Adapters
55
- --------
50
+ Using **http://github.com/fireho/geopolitical** models:
56
51
 
57
- So, supposing Mongoid, something like this is possible:
58
52
 
59
- City.first.province.country.abbr
53
+ City.first.region.nation.abbr
60
54
  => "BR"
61
55
 
62
56
 
63
- == Postgis
64
-
65
- TBD (by someone else)
66
- Be sure to use a database based on the PostGIS template.
67
-
68
-
69
-
70
57
 
71
58
  Next
72
59
  ----
73
60
 
74
61
  - IP Geonames? http://ipinfodb.com
62
+ - Hoods? ftp://geoftp.ibge.gov.br/malhas_digitais/censo_2010/setores_censitarios/
63
+ - ActiveRecord/PostGIS - someone else
data/Rakefile CHANGED
@@ -1,22 +1,14 @@
1
1
  #!/usr/bin/env rake
2
2
  require 'bundler/gem_tasks'
3
3
 
4
- require 'rspec/core'
5
4
  require 'rspec/core/rake_task'
5
+ require 'rubocop/rake_task'
6
6
 
7
- RSpec::Core::RakeTask.new(:spec) do |spec|
8
- spec.pattern = FileList['spec/**/*_spec.rb']
9
- end
10
-
11
- RSpec::Core::RakeTask.new(:rcov) do |spec|
12
- spec.pattern = 'spec/**/*_spec.rb'
13
- spec.rcov = true
14
- end
7
+ RSpec::Core::RakeTask.new
8
+ RuboCop::RakeTask.new
15
9
 
16
10
  task default: :spec
17
11
 
18
- require 'yard'
19
-
20
12
  #
21
13
  # Tokyo Tyrant rake tasks
22
14
  #
@@ -1,33 +1,33 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require File.expand_path('../lib/geonames_local/version', __FILE__)
3
3
 
4
- Gem::Specification.new do |gem|
5
- gem.name = 'geonames_local'
6
- gem.version = Geonames::VERSION
7
- gem.homepage = 'http://github.com/nofxx/geonames_local'
8
-
9
- gem.authors = ['Marcos Piccinini']
10
- gem.default_executable = 'geonames'
11
- gem.description = 'Dumps geonames data to feed a local db'
12
- gem.email = 'x@nofxx.com'
13
- gem.license = 'MIT'
14
-
15
- gem.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
16
- gem.files = `git ls-files`.split("\n")
17
- gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
- gem.name = 'geonames_local'
19
- gem.require_paths = ['lib']
20
- gem.summary = 'Dumps geonames data for local usage'
21
-
22
- gem.extra_rdoc_files = [
4
+ Gem::Specification.new do |s|
5
+ s.name = 'geonames_local'
6
+ s.version = Geonames::VERSION
7
+ s.homepage = 'http://github.com/nofxx/geonames_local'
8
+
9
+ s.authors = ['Marcos Piccinini']
10
+ s.default_executable = 'geonames'
11
+ s.description = 'Dumps geonames data to feed a local db'
12
+ s.email = 'x@nofxx.com'
13
+ s.license = 'MIT'
14
+
15
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.name = 'geonames_local'
19
+ s.require_paths = ['lib']
20
+ s.summary = 'Dumps geonames data for local usage'
21
+
22
+ s.extra_rdoc_files = [
23
23
  'MIT-LICENSE',
24
24
  'README.md'
25
25
  ]
26
26
 
27
- gem.add_dependency('mongoid', ['> 3.0.0'])
28
- gem.add_dependency('geopolitical', ['> 0.8.1'])
27
+ s.add_dependency('mongoid', ['>= 4.0.0'])
28
+ s.add_dependency('geopolitical', ['> 0.8.4'])
29
29
 
30
- gem.post_install_message = '
30
+ s.post_install_message = '
31
31
  Geonames Local
32
32
  --------------
33
33
 
@@ -95,7 +95,7 @@ module Geonames
95
95
  info "\nPopulating 'regions' and 'cities' database..."
96
96
  zip = Geonames::Dump.new(Opt[:nations], :zip).data
97
97
  dump = Geonames::Dump.new(Opt[:nations], :dump).data
98
- info "\n---\nTotal #{dump.size} parsed. #{zip.size} zip codes."
98
+ info "\n---\nTotal #{dump.size} parsed. #{zip.size} postal codes."
99
99
 
100
100
  info 'Join dump << zip'
101
101
  dump = unify!(dump, zip).group_by(&:kind)
@@ -156,8 +156,8 @@ module Geonames
156
156
  load_adapter(Opt[:store])
157
157
  info "Using adapter #{Opt[:store]}.."
158
158
  wrapper.clean if Opt[:clean]
159
- Benchmark.measure { work_nations } unless wrapper.nations_populated?
160
- Benchmark.measure { work_spots }
159
+ puts Benchmark.measure { work_nations } unless wrapper.nations_populated?
160
+ puts Benchmark.measure { work_spots }
161
161
  end
162
162
 
163
163
  def load_adapter(name)
@@ -29,7 +29,7 @@ CREATE TABLE cities (
29
29
  region_id integer,
30
30
  name character varying(255) NOT NULL,
31
31
  gid integer,
32
- zip integer,
32
+ postal integer,
33
33
  geom geometry,
34
34
  CONSTRAINT enforce_dims_geom CHECK ((st_ndims(geom) = 2)),
35
35
  CONSTRAINT enforce_geotype_geom CHECK (((geometrytype(geom) = 'POINT'::text) OR (geom IS NULL))),
@@ -127,10 +127,10 @@ CREATE INDEX index_cities_on_region_id ON cities USING btree (region_id);
127
127
  --
128
128
  -- TOC entry 2554 (class 1259 OID 21696)
129
129
  -- Dependencies: 2245
130
- -- Name: index_cities_on_zip; Type: INDEX; Schema: public; Owner: -; Tablespace:
130
+ -- Name: index_cities_on_postal; Type: INDEX; Schema: public; Owner: -; Tablespace:
131
131
  --
132
132
 
133
- CREATE INDEX index_cities_on_zip ON cities USING btree (zip);
133
+ CREATE INDEX index_cities_on_postal ON cities USING btree (postal);
134
134
 
135
135
 
136
136
  --
@@ -20,20 +20,7 @@ module Geonames
20
20
  kind == :zip ? parse_zip(params) : parse(params)
21
21
  if @kind == :region
22
22
  @name.gsub!(/Estado d\w\s/, '')
23
- @abbr = get_abbr
24
- end
25
- end
26
-
27
- #
28
- # Geonames does not have region/state abbr..#fail!
29
- # This works 75% of the time in brazil heh
30
- #
31
- def get_abbr
32
- s = @name.split(' ')
33
- if s.length > 1
34
- [s[0][0].chr, s[-1][0].chr].map(&:upcase).join
35
- else
36
- s[0][0..1].upcase
23
+ @name.gsub!(/Federal District/, 'Distrito Federal')
37
24
  end
38
25
  end
39
26
 
@@ -41,13 +28,16 @@ module Geonames
41
28
  # Parse Geonames Dump Export
42
29
  #
43
30
  def parse(row)
44
- gid, @name, @ascii, @alternates, lat, lon, feat, kind,
31
+ gid, name, @ascii, @alternates, lat, lon, feat, kind,
45
32
  @nation, _cc2, @region, @code, _adm3, _adm4, @pop, @ele,
46
33
  @gtop, @tz, @up = row.split(/\t/)
47
34
 
35
+ @name = name #name.encode(Encoding::ISO_8859_1)
48
36
  @gid = @geoname_id = gid.to_i
49
37
  @kind = human_code(kind)
50
38
 
39
+ @abbr = @alternates.split(',').find { |n| n =~ /^[A-Z]{2,3}$/ }
40
+
51
41
  parse_geom(lat, lon)
52
42
  # puts "#{@kind} - #{@code} - #{@region}"
53
43
  end
@@ -62,7 +62,7 @@ module Geonames
62
62
  # info "------------------------"
63
63
  {
64
64
  name_translations: translate(name),
65
- zip: pos_code, cash: cur_code, gid: gid,
65
+ postal: pos_code, cash: cur_code, gid: gid,
66
66
  abbr: abbr, slug: name.downcase, code: iso3, lang: langs
67
67
  }
68
68
  end
@@ -85,22 +85,14 @@ module Geonames
85
85
  #
86
86
  def parse_city(s)
87
87
  region = Region.find_by(code: s.region)
88
- slug = City.new(slug: s.ascii).slug
89
- attempt = slug.dup
90
- try = 1
91
- until City.where(slug: attempt.downcase).first.nil?
92
- attempt = "#{slug}-#{region.abbr}-#{try}"
93
- try += 1
94
- break if try > 7
95
- end
96
88
  # ---
97
89
  # info s.inspect
98
- info "City: #{s.zip} | #{slug} - #{s.name} / #{region.try(:abbr)}"
90
+ info "City: #{s.zip} | #{s.name} / #{region.try(:abbr)}"
99
91
  {
100
92
  name_translations: translate(s.name),
101
- slug: attempt, gid: s.gid, code: s.code,
93
+ gid: s.gid, code: s.code,
102
94
  souls: s.pop, geom: [s.lon, s.lat],
103
- region: region, zip: s.zip # tz
95
+ region: region, postal: s.zip # tz
104
96
  }
105
97
  end
106
98
  end
@@ -63,7 +63,7 @@ end
63
63
  # t.references :province
64
64
  # t.string :name, :null => false
65
65
  # t.point :geom, :srid => 4326
66
- # t.integer :gid, :zip
66
+ # t.integer :gid, :postal
67
67
  # end
68
68
 
69
69
  # create_table :provinces do |t|
@@ -79,7 +79,7 @@ end
79
79
  # end
80
80
 
81
81
  # add_index :cities, :name
82
- # add_index :cities, :zip
82
+ # add_index :cities, :postal
83
83
  # add_index :cities, :country_id
84
84
  # add_index :cities, :province_id
85
85
  # add_index :cities, :gid, :unique => true
@@ -0,0 +1,24 @@
1
+ module Geonames
2
+ module Regions
3
+
4
+ #
5
+ # Geonames does not have region/state abbr..#fail!
6
+ # This works 75% of the time in brazil heh
7
+ def self.abbr(name)
8
+ table = { # exceptions
9
+ 'Amapá' => 'AP',
10
+ 'Mato Grosso' => 'MT',
11
+ 'Paraíba' => 'PB',
12
+ 'Paraná' => 'PR',
13
+ 'Roraima' => 'RR'
14
+ }[name]
15
+ return table if table
16
+ s = name.split(' ')
17
+ if s.length > 1 # Foo Bar -> 'FB'
18
+ [s[0][0].chr, s[-1][0].chr].map(&:upcase).join
19
+ else # Foobar -> 'FO'
20
+ s[0][0..1].upcase
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,3 +1,3 @@
1
1
  module Geonames
2
- VERSION = '3.3.3'
2
+ VERSION = '3.3.4'
3
3
  end
@@ -12,5 +12,8 @@ require 'geonames_local/features/spot'
12
12
  require 'geonames_local/features/road'
13
13
  require 'geonames_local/features/zone'
14
14
 
15
+ # Require Data
16
+ require 'geonames_local/regions/abbr'
17
+
15
18
  # Require Main
16
19
  require 'geonames_local/geonames'
@@ -61,7 +61,7 @@
61
61
 
62
62
  # add_index :cities, :name
63
63
  # add_index :cities, :gid
64
- # add_index :cities, :zip
64
+ # add_index :cities, :postal
65
65
  # add_index :cities, :country_id
66
66
  # add_index :cities, :region_id
67
67
  # add_index :cities, :geom, :spatial => true
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geonames_local
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.3
4
+ version: 3.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcos Piccinini
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-06 00:00:00.000000000 Z
11
+ date: 2015-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mongoid
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 3.0.0
19
+ version: 4.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 3.0.0
26
+ version: 4.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: geopolitical
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.8.1
33
+ version: 0.8.4
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.8.1
40
+ version: 0.8.4
41
41
  description: Dumps geonames data to feed a local db
42
42
  email: x@nofxx.com
43
43
  executables:
@@ -71,6 +71,7 @@ files:
71
71
  - lib/geonames_local/models/mongodb.rb
72
72
  - lib/geonames_local/models/postgis.rb
73
73
  - lib/geonames_local/models/tokyo.rb
74
+ - lib/geonames_local/regions/abbr.rb
74
75
  - lib/geonames_local/version.rb
75
76
  - spec/geonames_local/cli_spec.rb
76
77
  - spec/geonames_local/data/cache_spec.rb
@@ -116,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
117
  version: '0'
117
118
  requirements: []
118
119
  rubyforge_project:
119
- rubygems_version: 2.4.3
120
+ rubygems_version: 2.4.7
120
121
  signing_key:
121
122
  specification_version: 4
122
123
  summary: Dumps geonames data for local usage
@@ -134,4 +135,3 @@ test_files:
134
135
  - spec/geonames_local_spec.rb
135
136
  - spec/spec_ar_helper.rb
136
137
  - spec/spec_helper.rb
137
- has_rdoc: