to_town 0.0.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.
- data/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +25 -0
- data/Gemfile.lock +73 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +106 -0
- data/Rakefile +49 -0
- data/VERSION +1 -0
- data/bin/to_town +6 -0
- data/lib/to_town.rb +12 -0
- data/lib/to_town/cli.rb +42 -0
- data/lib/to_town/converter/us.rb +37 -0
- data/lib/to_town/data_migration.rb +14 -0
- data/lib/to_town/db_connection.rb +14 -0
- data/lib/to_town/generators/mongodb.rb +19 -0
- data/lib/to_town/generators/templates/mongoid_example.yml +10 -0
- data/lib/to_town/point.rb +21 -0
- data/raw_data/Gaz_places_national.txt +29515 -0
- data/spec/spec_helper.rb +23 -0
- data/spec/to_town_spec.rb +18 -0
- data/spec/us_spec.rb +14 -0
- data/to_town.gemspec +84 -0
- metadata +168 -0
data/.document
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/Gemfile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
# Add dependencies required to use your gem here.
|
3
|
+
# Example:
|
4
|
+
# gem "activesupport", ">= 2.3.5"
|
5
|
+
|
6
|
+
# Add dependencies to develop your gem here.
|
7
|
+
# Include everything needed to run rake, tests, features, etc.
|
8
|
+
|
9
|
+
gem "bundler"
|
10
|
+
gem 'mongoid', "~> 2.0.0"
|
11
|
+
gem 'thor'
|
12
|
+
gem 'bson_ext'
|
13
|
+
|
14
|
+
group :development do
|
15
|
+
gem "jeweler", "~> 1.6.2"
|
16
|
+
gem 'ruby-debug19'
|
17
|
+
gem "awesome_print"
|
18
|
+
gem 'fabrication'
|
19
|
+
end
|
20
|
+
|
21
|
+
group :test do
|
22
|
+
gem 'rspec'
|
23
|
+
gem 'simplecov', :require => false
|
24
|
+
gem 'autotest'
|
25
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
ZenTest (4.5.0)
|
5
|
+
activemodel (3.0.9)
|
6
|
+
activesupport (= 3.0.9)
|
7
|
+
builder (~> 2.1.2)
|
8
|
+
i18n (~> 0.5.0)
|
9
|
+
activesupport (3.0.9)
|
10
|
+
archive-tar-minitar (0.5.2)
|
11
|
+
autotest (4.4.6)
|
12
|
+
ZenTest (>= 4.4.1)
|
13
|
+
awesome_print (0.4.0)
|
14
|
+
bson (1.3.1)
|
15
|
+
bson_ext (1.3.1)
|
16
|
+
builder (2.1.2)
|
17
|
+
columnize (0.3.3)
|
18
|
+
diff-lcs (1.1.2)
|
19
|
+
fabrication (1.0.0)
|
20
|
+
git (1.2.5)
|
21
|
+
i18n (0.5.0)
|
22
|
+
jeweler (1.6.2)
|
23
|
+
bundler (~> 1.0)
|
24
|
+
git (>= 1.2.5)
|
25
|
+
rake
|
26
|
+
linecache19 (0.5.12)
|
27
|
+
ruby_core_source (>= 0.1.4)
|
28
|
+
mongo (1.3.1)
|
29
|
+
bson (>= 1.3.1)
|
30
|
+
mongoid (2.0.2)
|
31
|
+
activemodel (~> 3.0)
|
32
|
+
mongo (~> 1.3)
|
33
|
+
tzinfo (~> 0.3.22)
|
34
|
+
rake (0.9.2)
|
35
|
+
rspec (2.6.0)
|
36
|
+
rspec-core (~> 2.6.0)
|
37
|
+
rspec-expectations (~> 2.6.0)
|
38
|
+
rspec-mocks (~> 2.6.0)
|
39
|
+
rspec-core (2.6.4)
|
40
|
+
rspec-expectations (2.6.0)
|
41
|
+
diff-lcs (~> 1.1.2)
|
42
|
+
rspec-mocks (2.6.0)
|
43
|
+
ruby-debug-base19 (0.11.25)
|
44
|
+
columnize (>= 0.3.1)
|
45
|
+
linecache19 (>= 0.5.11)
|
46
|
+
ruby_core_source (>= 0.1.4)
|
47
|
+
ruby-debug19 (0.11.6)
|
48
|
+
columnize (>= 0.3.1)
|
49
|
+
linecache19 (>= 0.5.11)
|
50
|
+
ruby-debug-base19 (>= 0.11.19)
|
51
|
+
ruby_core_source (0.1.5)
|
52
|
+
archive-tar-minitar (>= 0.5.2)
|
53
|
+
simplecov (0.4.2)
|
54
|
+
simplecov-html (~> 0.4.4)
|
55
|
+
simplecov-html (0.4.5)
|
56
|
+
thor (0.14.6)
|
57
|
+
tzinfo (0.3.28)
|
58
|
+
|
59
|
+
PLATFORMS
|
60
|
+
ruby
|
61
|
+
|
62
|
+
DEPENDENCIES
|
63
|
+
autotest
|
64
|
+
awesome_print
|
65
|
+
bson_ext
|
66
|
+
bundler
|
67
|
+
fabrication
|
68
|
+
jeweler (~> 1.6.2)
|
69
|
+
mongoid (~> 2.0.0)
|
70
|
+
rspec
|
71
|
+
ruby-debug19
|
72
|
+
simplecov
|
73
|
+
thor
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011 zhengjia
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
= to_town
|
2
|
+
|
3
|
+
Find nearby towns of a geographic latitude and longitude. Currently it only has US locations.
|
4
|
+
Other data sources can be added if available.
|
5
|
+
|
6
|
+
== Usage
|
7
|
+
|
8
|
+
* Install the gem: gem install to_town
|
9
|
+
* add to_town to your Gemfile
|
10
|
+
* add require 'to_town' to your code
|
11
|
+
* You can get a list of nearby points by calling ToTown.check(some_latitude_value, some_longitude_value, results_limit)
|
12
|
+
|
13
|
+
Command line:
|
14
|
+
* run `to_town config` to generate a mongoid.yml in the current directory
|
15
|
+
* run `to_town populate` to load the data to mongodb
|
16
|
+
* run `to_town --lat=some_latitude_value --lng=some_longitude_value` to check the result
|
17
|
+
|
18
|
+
Example:
|
19
|
+
|
20
|
+
to_town check --lat=45.018625 --lng=-93.239039 --limit=10
|
21
|
+
|
22
|
+
St. Anthony MN
|
23
|
+
type: city
|
24
|
+
latitude: 45.027324
|
25
|
+
longitude: -93.215533
|
26
|
+
land area: 5831140
|
27
|
+
water area: 305693
|
28
|
+
|
29
|
+
Columbia Heights MN
|
30
|
+
type: city
|
31
|
+
latitude: 45.049104
|
32
|
+
longitude: -93.246749
|
33
|
+
land area: 8832769
|
34
|
+
water area: 284420
|
35
|
+
|
36
|
+
Hilltop MN
|
37
|
+
type: city
|
38
|
+
latitude: 45.053564
|
39
|
+
longitude: -93.250129
|
40
|
+
land area: 310173
|
41
|
+
water area: 0
|
42
|
+
|
43
|
+
Lauderdale MN
|
44
|
+
type: city
|
45
|
+
latitude: 44.994407
|
46
|
+
longitude: -93.203134
|
47
|
+
land area: 1086715
|
48
|
+
water area: 2752
|
49
|
+
|
50
|
+
New Brighton MN
|
51
|
+
type: city
|
52
|
+
latitude: 45.064894
|
53
|
+
longitude: -93.209271
|
54
|
+
land area: 16731107
|
55
|
+
water area: 1545061
|
56
|
+
|
57
|
+
Minneapolis MN
|
58
|
+
type: city
|
59
|
+
latitude: 44.963324
|
60
|
+
longitude: -93.268284
|
61
|
+
land area: 139789184
|
62
|
+
water area: 9052448
|
63
|
+
|
64
|
+
Fridley MN
|
65
|
+
type: city
|
66
|
+
latitude: 45.084246
|
67
|
+
longitude: -93.26005
|
68
|
+
land area: 26329217
|
69
|
+
water area: 1873882
|
70
|
+
|
71
|
+
Falcon Heights MN
|
72
|
+
type: city
|
73
|
+
latitude: 44.988048
|
74
|
+
longitude: -93.174718
|
75
|
+
land area: 5785375
|
76
|
+
water area: 16906
|
77
|
+
|
78
|
+
Roseville MN
|
79
|
+
type: city
|
80
|
+
latitude: 45.015422
|
81
|
+
longitude: -93.155011
|
82
|
+
land area: 33679465
|
83
|
+
water area: 2168129
|
84
|
+
|
85
|
+
Arden Hills MN
|
86
|
+
type: city
|
87
|
+
latitude: 45.071161
|
88
|
+
longitude: -93.165504
|
89
|
+
land area: 22253249
|
90
|
+
water area: 2743210
|
91
|
+
|
92
|
+
== Data source
|
93
|
+
|
94
|
+
* US 2010 Census http://www.census.gov/geo/www/gazetteer/files/Gaz_places_national.txt.
|
95
|
+
|
96
|
+
== Contributing to to_town
|
97
|
+
|
98
|
+
* Fork the project
|
99
|
+
* Start a feature/bugfix branch
|
100
|
+
* Send pull request
|
101
|
+
|
102
|
+
== Copyright
|
103
|
+
|
104
|
+
Copyright (c) 2011 zhengjia. See LICENSE.txt for
|
105
|
+
further details.
|
106
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
require 'jeweler'
|
15
|
+
Jeweler::Tasks.new do |gem|
|
16
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
+
gem.name = "to_town"
|
18
|
+
gem.homepage = "http://github.com/zhengjia/to_town"
|
19
|
+
gem.license = "MIT"
|
20
|
+
gem.summary = %Q{Find nearby towns of a geographic latitude and longitude}
|
21
|
+
gem.description = %Q{Find nearby towns of a geographic latitude and longitude}
|
22
|
+
gem.email = "jiazheng@live.com"
|
23
|
+
gem.authors = ["zhengjia"]
|
24
|
+
gem.executables = ['to_town']
|
25
|
+
end
|
26
|
+
Jeweler::RubygemsDotOrgTasks.new
|
27
|
+
|
28
|
+
require 'rspec/core'
|
29
|
+
require 'rspec/core/rake_task'
|
30
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
31
|
+
spec.pattern = FileList['spec/**/*_spec.rb']
|
32
|
+
end
|
33
|
+
|
34
|
+
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
35
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
36
|
+
spec.rcov = true
|
37
|
+
end
|
38
|
+
|
39
|
+
task :default => :spec
|
40
|
+
|
41
|
+
require 'rake/rdoctask'
|
42
|
+
Rake::RDocTask.new do |rdoc|
|
43
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
44
|
+
|
45
|
+
rdoc.rdoc_dir = 'rdoc'
|
46
|
+
rdoc.title = "to_town #{version}"
|
47
|
+
rdoc.rdoc_files.include('README*')
|
48
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
49
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.4
|
data/bin/to_town
ADDED
data/lib/to_town.rb
ADDED
data/lib/to_town/cli.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# TODO require all converters and generators
|
2
|
+
|
3
|
+
require 'thor'
|
4
|
+
require 'to_town'
|
5
|
+
require 'to_town/converter/us'
|
6
|
+
require 'to_town/generators/mongodb'
|
7
|
+
|
8
|
+
module ToTown
|
9
|
+
class CLI < Thor
|
10
|
+
|
11
|
+
desc "populate", "populate data to mongodb"
|
12
|
+
def populate
|
13
|
+
ToTown::Converter::Us.run
|
14
|
+
end
|
15
|
+
|
16
|
+
desc "check", "acceps two required arguments --lat and --lng, and an optional --limit"
|
17
|
+
method_option :lat, :required => true
|
18
|
+
method_option :lng, :required => true
|
19
|
+
method_option :limit, :type => :numeric
|
20
|
+
def check
|
21
|
+
points = ToTown.check(options[:lat].to_f, options[:lng].to_f, options[:limit])
|
22
|
+
points.each do |point|
|
23
|
+
puts %{ #{point.name} #{point.state}\t
|
24
|
+
type: #{point.town_type}\t
|
25
|
+
latitude: #{point.latlng[0]}\t
|
26
|
+
longitude: #{point.latlng[1]}\t
|
27
|
+
land area: #{point.aland}\t
|
28
|
+
water area: #{point.awater}
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
desc "config", "generate database configuration file mongoid.yml"
|
34
|
+
def config(db_name='mongo')
|
35
|
+
case db_name
|
36
|
+
when "mongo"
|
37
|
+
ToTown::Generators::Mongodb.start
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'iconv'
|
2
|
+
require 'to_town/point'
|
3
|
+
require 'to_town/data_migration'
|
4
|
+
require 'to_town/db_connection'
|
5
|
+
|
6
|
+
module ToTown
|
7
|
+
|
8
|
+
module Converter
|
9
|
+
|
10
|
+
class Us
|
11
|
+
FILE_NAME = "Gaz_places_national.txt"
|
12
|
+
FILE_LOCATION = File.expand_path("../../../raw_data/#{FILE_NAME}" , File.dirname(__FILE__))
|
13
|
+
|
14
|
+
def self.run(dry = 0)
|
15
|
+
iconv = Iconv.new('UTF-8//IGNORE', 'UTF-8')
|
16
|
+
if ToTown::DataMigration.where(:filename => FILE_NAME).empty?
|
17
|
+
if dry == 0
|
18
|
+
File.open(FILE_LOCATION, "r") do |file|
|
19
|
+
# pass the title
|
20
|
+
file.gets
|
21
|
+
while line = file.gets
|
22
|
+
line = iconv.iconv(line) unless line.valid_encoding?
|
23
|
+
data = line.chomp.split(/\t/)
|
24
|
+
name_town_type = data[3].split(/ ((?=[[:lower:]])|CDP)/)
|
25
|
+
ToTown::Point.create(:state => data[0], :geoid => data[1], :ansicode => data[2], :name => name_town_type[0], :town_type => (name_town_type-[name_town_type[0]]).join, :aland => data[4], :awater => data[5], :latlng => [data[8].to_f, data[9].to_f] )
|
26
|
+
end # end while
|
27
|
+
end # end File.open
|
28
|
+
end # end if dry == 0
|
29
|
+
ToTown::DataMigration.create(:filename => FILE_NAME)
|
30
|
+
end # end if
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'to_town/generators/mongodb'
|
2
|
+
|
3
|
+
RACK_ENV ||= 'development'
|
4
|
+
|
5
|
+
unless File.exists?('mongoid.yml')
|
6
|
+
ToTown::Generators::Mongodb.start
|
7
|
+
end
|
8
|
+
|
9
|
+
db_config = YAML::load File.open('mongoid.yml' )
|
10
|
+
db_name = db_config[RACK_ENV]['database']
|
11
|
+
Mongoid.configure do |config|
|
12
|
+
config.master = Mongo::Connection.new.db(db_name)
|
13
|
+
config.autocreate_indexes = true
|
14
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'thor/group'
|
2
|
+
|
3
|
+
module ToTown
|
4
|
+
module Generators
|
5
|
+
class Mongodb < Thor::Group
|
6
|
+
|
7
|
+
include Thor::Actions
|
8
|
+
|
9
|
+
def genenrate
|
10
|
+
template("mongoid_example.yml", "mongoid.yml")
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.source_root
|
14
|
+
File.dirname(__FILE__) + "/templates"
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|