static_geocode_lookup 1.0.0
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/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.md +32 -0
- data/Rakefile +1 -0
- data/lib/data/README.txt +2 -0
- data/lib/data/cities.csv +30101 -0
- data/lib/data/zips_v2.csv +42741 -0
- data/lib/static_geocode_lookup.rb +173 -0
- data/lib/static_geocode_lookup/version.rb +3 -0
- data/static_geocode_lookup.gemspec +24 -0
- metadata +56 -0
@@ -0,0 +1,173 @@
|
|
1
|
+
require "static_geocode_lookup/version"
|
2
|
+
|
3
|
+
module StaticGeocodeLookup
|
4
|
+
|
5
|
+
ZIPCODE_FILE = File.dirname(__FILE__)+"/data/zips_v2.csv"
|
6
|
+
CITIES_FILE = File.dirname(__FILE__)+"/data/cities.csv"
|
7
|
+
|
8
|
+
def self.lookup_by_zipcode(zipcode)
|
9
|
+
# awk search against the zipcode column
|
10
|
+
awk_script = "awk -F, -v zip=\"\\\"#{zipcode}\\\"\" 'zip==$1 {print $0}' #{ZIPCODE_FILE}"
|
11
|
+
script_result = `#{awk_script}`
|
12
|
+
lines = script_result.strip.split(/\r?\n/)
|
13
|
+
if lines.size == 0
|
14
|
+
nil
|
15
|
+
else
|
16
|
+
values = lines[0].split(",")
|
17
|
+
geo_hash = Hash.new
|
18
|
+
geo_hash[:latitude] = strip_quotes(values[1])
|
19
|
+
geo_hash[:longitude] = strip_quotes(values[2])
|
20
|
+
geo_hash[:city] = strip_quotes(values[3])
|
21
|
+
geo_hash[:state] = strip_quotes(values[4])
|
22
|
+
geo_hash
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.lookup_by_city(input_city)
|
27
|
+
city = ""
|
28
|
+
state = ""
|
29
|
+
# Check if input_city is in the format CITY, STATE
|
30
|
+
city_split = input_city.split(",")
|
31
|
+
if city_split.size == 2
|
32
|
+
city = city_split[0].upcase.strip
|
33
|
+
state = city_split[1].upcase.strip
|
34
|
+
if state.size != 2
|
35
|
+
state = get_two_character_code(state)
|
36
|
+
end
|
37
|
+
else
|
38
|
+
city = input_city.upcase.strip
|
39
|
+
end
|
40
|
+
# awk search against the city column (and state if not empty string quotes)
|
41
|
+
awk_script = "awk -F, -v city=\"\\\"#{city}\\\"\" -v state=\"\\\"#{state}\\\"\" 'city==$1 && (length(state) == 2 || state==$2) {print $0}' #{CITIES_FILE}"
|
42
|
+
script_result = `#{awk_script}`
|
43
|
+
lines = script_result.strip.split(/\r?\n/)
|
44
|
+
if lines.size == 0
|
45
|
+
nil
|
46
|
+
else
|
47
|
+
values = lines[0].split(",")
|
48
|
+
geo_hash = Hash.new
|
49
|
+
geo_hash[:city] = strip_quotes(values[0])
|
50
|
+
geo_hash[:state] = strip_quotes(values[1])
|
51
|
+
geo_hash[:latitude] = strip_quotes(values[2])
|
52
|
+
geo_hash[:longitude] = strip_quotes(values[3])
|
53
|
+
geo_hash
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.strip_quotes(string)
|
58
|
+
if string.nil?
|
59
|
+
nil
|
60
|
+
else
|
61
|
+
string[1,string.length-2]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.get_two_character_code(state)
|
66
|
+
case state
|
67
|
+
when "ALASKA"
|
68
|
+
"AK"
|
69
|
+
when "MONTANA"
|
70
|
+
"MT"
|
71
|
+
when "ALABAMA"
|
72
|
+
"AL"
|
73
|
+
when "NEBRASKA"
|
74
|
+
"NE"
|
75
|
+
when "ARKANSAS"
|
76
|
+
"AR"
|
77
|
+
when "NORTH CAROLINA"
|
78
|
+
"NC"
|
79
|
+
when "ARIZONA"
|
80
|
+
"AZ"
|
81
|
+
when "NORTH DAKOTA"
|
82
|
+
"ND"
|
83
|
+
when "CALIFORNIA"
|
84
|
+
"CA"
|
85
|
+
when "NEW HAMPSHIRE"
|
86
|
+
"NH"
|
87
|
+
when "COLORADO"
|
88
|
+
"CO"
|
89
|
+
when "NEW JERSEY"
|
90
|
+
"NJ"
|
91
|
+
when "CONNECTICUT"
|
92
|
+
"CT"
|
93
|
+
when "NEW MEXICO"
|
94
|
+
"NM"
|
95
|
+
when "NEW YORK"
|
96
|
+
"NY"
|
97
|
+
when "DISTRICT OF COLUMBIA"
|
98
|
+
"DC"
|
99
|
+
when "NEVADA"
|
100
|
+
"NV"
|
101
|
+
when "DELAWARE"
|
102
|
+
"DE"
|
103
|
+
when "OHIO"
|
104
|
+
"OH"
|
105
|
+
when "FLORIDA"
|
106
|
+
"FL"
|
107
|
+
when "OKLAHOMA"
|
108
|
+
"OK"
|
109
|
+
when "GEORGIA"
|
110
|
+
"GA"
|
111
|
+
when "OREGON"
|
112
|
+
"OR"
|
113
|
+
when "HAWAII"
|
114
|
+
"HI"
|
115
|
+
when "PENNSYLVANIA"
|
116
|
+
"PA"
|
117
|
+
when "IOWA"
|
118
|
+
"IA"
|
119
|
+
when "IDAHO"
|
120
|
+
"ID"
|
121
|
+
when "RHODE ISLAND"
|
122
|
+
"RI"
|
123
|
+
when "ILLINOIS"
|
124
|
+
"IL"
|
125
|
+
when "SOUTH CAROLINA"
|
126
|
+
"SC"
|
127
|
+
when "INDIANA"
|
128
|
+
"IN"
|
129
|
+
when "SOUTH DAKOTA"
|
130
|
+
"SD"
|
131
|
+
when "KANSAS"
|
132
|
+
"KS"
|
133
|
+
when "TENNESSEE"
|
134
|
+
"TN"
|
135
|
+
when "KENTUCKY"
|
136
|
+
"KY"
|
137
|
+
when "TEXAS"
|
138
|
+
"TX"
|
139
|
+
when "LOUISIANA"
|
140
|
+
"LA"
|
141
|
+
when "UTAH"
|
142
|
+
"UT"
|
143
|
+
when "MASSACHUSETTS"
|
144
|
+
"MA"
|
145
|
+
when "VIRGINIA"
|
146
|
+
"VA"
|
147
|
+
when "MARYLAND"
|
148
|
+
"MD"
|
149
|
+
when "MAINE"
|
150
|
+
"ME"
|
151
|
+
when "VERMONT"
|
152
|
+
"VT"
|
153
|
+
when "MICHIGAN"
|
154
|
+
"MI"
|
155
|
+
when "WASHINGTON"
|
156
|
+
"WA"
|
157
|
+
when "MINNESOTA"
|
158
|
+
"MN"
|
159
|
+
when "WISCONSIN"
|
160
|
+
"WI"
|
161
|
+
when "MISSOURI"
|
162
|
+
"MO"
|
163
|
+
when "WEST VIRGINIA"
|
164
|
+
"WV"
|
165
|
+
when "MISSISSIPPI"
|
166
|
+
"MS"
|
167
|
+
when "WYOMING"
|
168
|
+
"WY"
|
169
|
+
else
|
170
|
+
raise RuntimeError, "Unable to find code for US State \"#{state}\""
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "static_geocode_lookup/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "static_geocode_lookup"
|
7
|
+
s.version = StaticGeocodeLookup::VERSION
|
8
|
+
s.authors = ["Dennis Kuczynski"]
|
9
|
+
s.email = ["dennis.kuczynski@gmail.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Simple wrapper for an AWK Script to lookup US Geocodes from a static spreadsheet.}
|
12
|
+
s.description = %q{Simple wrapper for an AWK Script to lookup US Geocodes from a static spreadsheet.}
|
13
|
+
|
14
|
+
s.rubyforge_project = "static_geocode_lookup"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
# s.add_development_dependency "rspec"
|
23
|
+
# s.add_runtime_dependency "rest-client"
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: static_geocode_lookup
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Dennis Kuczynski
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-04-09 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: Simple wrapper for an AWK Script to lookup US Geocodes from a static
|
15
|
+
spreadsheet.
|
16
|
+
email:
|
17
|
+
- dennis.kuczynski@gmail.com
|
18
|
+
executables: []
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- .gitignore
|
23
|
+
- Gemfile
|
24
|
+
- README.md
|
25
|
+
- Rakefile
|
26
|
+
- lib/data/README.txt
|
27
|
+
- lib/data/cities.csv
|
28
|
+
- lib/data/zips_v2.csv
|
29
|
+
- lib/static_geocode_lookup.rb
|
30
|
+
- lib/static_geocode_lookup/version.rb
|
31
|
+
- static_geocode_lookup.gemspec
|
32
|
+
homepage: ''
|
33
|
+
licenses: []
|
34
|
+
post_install_message:
|
35
|
+
rdoc_options: []
|
36
|
+
require_paths:
|
37
|
+
- lib
|
38
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
45
|
+
none: false
|
46
|
+
requirements:
|
47
|
+
- - ! '>='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
requirements: []
|
51
|
+
rubyforge_project: static_geocode_lookup
|
52
|
+
rubygems_version: 1.8.15
|
53
|
+
signing_key:
|
54
|
+
specification_version: 3
|
55
|
+
summary: Simple wrapper for an AWK Script to lookup US Geocodes from a static spreadsheet.
|
56
|
+
test_files: []
|