radiotagmap 0.0.7

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.
@@ -0,0 +1,7 @@
1
+ *.sw?
2
+ .DS_Store
3
+ coverage
4
+ rdoc
5
+ pkg
6
+ *.kml
7
+ doc/*
data/LICENSE ADDED
@@ -0,0 +1,6 @@
1
+ Copyright (c) 2009 Claudio Baccigalupo
2
+
3
+ Copying and distribution of this file, with or without modification,
4
+ are permitted in any medium without royalty provided the copyright
5
+ notice and this notice are preserved. This file is offered as-is,
6
+ without any warranty.
@@ -0,0 +1,48 @@
1
+ # RadioTagMap #
2
+
3
+ Ruby gem to map by U.S. state the music played on FM radios
4
+
5
+ ## Installation ##
6
+
7
+ sudo gem install claudiob-radiotagmap -s http://gems.github.com
8
+
9
+ ## Documentation ##
10
+
11
+ [http://rdoc.info/projects/claudiob/radiotagmap](http://rdoc.info/projects/claudiob/radiotagmap)
12
+
13
+ ## Examples ##
14
+
15
+ ### To create a KML map according to compare current 'Rock' and 'Country' songs
16
+
17
+ require 'radiotagmap'
18
+ Radiotagmap::update_kml '/tmp/overlay.kml' [['Country','Alt-Country']]
19
+
20
+ ## History ##
21
+
22
+ v0.0.7 2009/09/18
23
+ More contrast in color and defaults to forever and Logger::INFO
24
+
25
+ v0.0.6 2009/09/18
26
+ Only plot the color of the presence of ONE genre/tag (not two)
27
+
28
+ v0.0.5 2009/09/18
29
+ Updated to require yesradio v0.1.2
30
+
31
+ v0.0.4 2009/09/17
32
+ Added a parameter to specify the path to the KML file to create
33
+
34
+ v0.0.3 2009/09/17
35
+ Moved state coords from an external YAML file to the same ruby file
36
+ in order to avoid calling YAML.load which did not find the right path
37
+ when run as a gem
38
+
39
+ v0.0.2 2009/09/17
40
+ Added gem dependencies.
41
+
42
+ v0.0.1 2009/09/16
43
+ First commit to compare two families of tags against the others.
44
+ API calls are threaded. Needs more control and documentation.
45
+
46
+ ## Copyright ##
47
+
48
+ Copyright (c) 2009 Claudio Baccigalupo. See LICENSE for details.
@@ -0,0 +1,70 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "radiotagmap"
8
+ gem.summary = %Q{Ruby gem to map by U.S. state the music played on FM radios}
9
+ gem.description = %Q{Radiotagmap reads from Yes.com the songs that are currently playing in FM radios, then extracts the most played tag/genre in every U.S. state and returns a KML representation of this data, which can be plotted on a map using Google Maps or Google Earth.}
10
+ gem.email = "claudiob@gmail.com"
11
+ gem.homepage = "http://github.com/claudiob/radiotagmap"
12
+ gem.authors = ["Claudio Baccigalupo"]
13
+ gem.add_development_dependency "cucumber"
14
+ gem.add_dependency "claudiob-yesradio", ">=0.1.2"
15
+ gem.add_dependency "nokogiri", ">=1.3.2"
16
+ gem.add_dependency "scrobbler", ">=0.2.3"
17
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
18
+ end
19
+ rescue LoadError
20
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
21
+ end
22
+
23
+ require 'rake/testtask'
24
+ Rake::TestTask.new(:test) do |test|
25
+ test.libs << 'lib' << 'test'
26
+ test.pattern = 'test/**/*_test.rb'
27
+ test.verbose = true
28
+ end
29
+
30
+ begin
31
+ require 'rcov/rcovtask'
32
+ Rcov::RcovTask.new do |test|
33
+ test.libs << 'test'
34
+ test.pattern = 'test/**/*_test.rb'
35
+ test.verbose = true
36
+ end
37
+ rescue LoadError
38
+ task :rcov do
39
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
40
+ end
41
+ end
42
+
43
+ task :test => :check_dependencies
44
+
45
+ begin
46
+ require 'cucumber/rake/task'
47
+ Cucumber::Rake::Task.new(:features)
48
+
49
+ task :features => :check_dependencies
50
+ rescue LoadError
51
+ task :features do
52
+ abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
53
+ end
54
+ end
55
+
56
+ task :default => :test
57
+
58
+ require 'rake/rdoctask'
59
+ Rake::RDocTask.new do |rdoc|
60
+ if File.exist?('VERSION')
61
+ version = File.read('VERSION')
62
+ else
63
+ version = ""
64
+ end
65
+
66
+ rdoc.rdoc_dir = 'rdoc'
67
+ rdoc.title = "radiotagmap #{version}"
68
+ rdoc.rdoc_files.include('README*')
69
+ rdoc.rdoc_files.include('lib/**/*.rb')
70
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.7
@@ -0,0 +1,9 @@
1
+ Feature: something something
2
+ In order to something something
3
+ A user something something
4
+ something something something
5
+
6
+ Scenario: something something
7
+ Given inspiration
8
+ When I create a sweet new gem
9
+ Then everyone should see how awesome I am
@@ -0,0 +1,6 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
2
+ require 'radiotagmap'
3
+
4
+ require 'test/unit/assertions'
5
+
6
+ World(Test::Unit::Assertions)
@@ -0,0 +1,243 @@
1
+ # Author:: Claudio Baccigalupo
2
+ # Copyright:: Copyright (c) 2009 - see LICENSE file
3
+
4
+ # require 'rubygems'
5
+ require 'logger'
6
+ require 'nokogiri'
7
+ require 'yesradio'
8
+ require 'scrobbler'
9
+
10
+ module Radiotagmap
11
+
12
+ @log = Logger.new(STDERR)
13
+ @log.level = Logger::WARN
14
+ @log.level = Logger::DEBUG ### Only for debug purpose ###
15
+
16
+ @max_weight = 0.0
17
+
18
+ # Returns the index of the family of genres/tags that is currently
19
+ # most playing on the FM radios of a given U.S. state.
20
+ #
21
+ # == Parameters
22
+ # [+state+] The 2-letters code of the U.S. state where to search
23
+ # [+among+] Array of arrays of admitted genres/tags. Each sub-array indicates equivalent words.
24
+ # The result is the index of the most played family of genres/tags in this array.
25
+ #
26
+ # == Examples
27
+ # get_main_tag "CA", [['Rock', 'Indie Rock'], ['Country', 'Alt Country']]
28
+ #--
29
+ def self.get_tags_weight(state = "CA", among = [['Country'], ['Rock']])
30
+ among = among.collect{|family| family.collect(&:downcase)}
31
+
32
+ # stations = Yesradio::search_stations(:loc => state)
33
+ stations = Yesradio::search_stations(:match => ", #{state}")
34
+ return if stations.nil?
35
+ @log.debug "#{state} | #{stations.length} stations"
36
+
37
+ threads = []
38
+ for station in stations
39
+ threads << Thread.new(station) do |st|
40
+ Yesradio::get_station :name => st.name
41
+ end
42
+ end
43
+ artists = threads.collect{|aThread| aThread.join.value.array_artist}.compact
44
+ return if artists.nil?
45
+ @log.debug "#{state} | #{artists.length} artists"
46
+ @log.debug "#{state} | #{artists.join(' ')}"
47
+
48
+ # The same function as above, but without threads, would be:
49
+ # artists = stations.collect do |station|
50
+ # Yesradio::get_station :name => station.name
51
+ # end.collect(&:array_artist).compact
52
+ # return if artists.nil?
53
+
54
+ threads = []
55
+ for artist in artists
56
+ threads << Thread.new(artist) do |ar|
57
+ ar_tags = Scrobbler::Artist.new(artist).top_tags.first(10).collect do |tag|
58
+ tag.name.downcase
59
+ end
60
+ top_tag = (ar_tags & among.flatten).first
61
+ among.collect {|family| family.include?(top_tag)}.index(true)
62
+ end
63
+ end
64
+ tags = threads.collect{|aThread| aThread.join.value}
65
+ return if tags.nil?
66
+ @log.debug "#{state} | #{tags.length} tags"
67
+ @log.debug "#{state} | #{tags.join(' ')}"
68
+
69
+ # The same function as above, but without threads, would be:
70
+ # tags = artists.collect do |artist|
71
+ # ar_tags = Scrobbler::Artist.new(artist).top_tags.first(10).map do |tag|
72
+ # tag.name.downcase
73
+ # end
74
+ # top_tag = (ar_tags & among.flatten).first
75
+ # among.collect {|family| family.include?(top_tag)}.index(true)
76
+ # end # .compact to remove other tags
77
+
78
+ weights = (0...among.size).collect do |index|
79
+ tags.select{|x| x == index}.size/tags.size.to_f
80
+ end
81
+ end
82
+
83
+
84
+ # Returns the color with which to represent a U.S. state on a map
85
+ # depending on the most played genre/tag in its FM radios.
86
+ #
87
+ # == Parameters
88
+ # [+state+] The 2-letters code of the U.S. state where to search
89
+ # [+among+] Array of arrays of admitted genres/tags. Each sub-array indicates equivalent words.
90
+ # The result is the index of the most played family of genres/tags in this array.
91
+ #
92
+ # == Examples
93
+ # get_map_color "CA", [['Rock', 'Indie Rock'], ['Country', 'Alt Country']]
94
+ #--
95
+ # TODO: Parametrize, allowing users to specify among and colors
96
+ def self.get_map_color(weights = [0.5, 0.2])
97
+ a = "aa"
98
+ if weights.nil?
99
+ a << "999999"
100
+ else
101
+ value = weights[0]
102
+ @max_weight = [@max_weight, value].max
103
+ value = value/@max_weight unless @max_weight.zero?
104
+ r = "ff" # "%02x" % (255*weights[0]).round
105
+ b = "%02x" % (255*(1-value)).round
106
+ g = "ff" #"%02x" % (255*(1-weights.sum)).round
107
+ a << b << b << r # The more country, the more red
108
+ end
109
+ end
110
+
111
+ # Update a KML file (or create if inexistent) with the overlays
112
+ # of the U.S. states, colored according to the most played genres/tags
113
+ # in their FM radios.
114
+ #
115
+ # == Parameters
116
+ # [+among+] Array of arrays of admitted genres/tags. Each sub-array indicates equivalent words.
117
+ # The result is the index of the most played family of genres/tags in this array.
118
+ # [+forever+] If true, the updating process continues forever
119
+ #
120
+ # == Examples
121
+ # update_kml
122
+ #--
123
+ def self.update_kml(kml_path = "./overlay.kml", among = [['Country']], forever = true)
124
+ @log.level = Logger::INFO
125
+ begin
126
+ # TO DO: to increase contrast in color, call one get_map_color
127
+ # passing the entire array, so that the MAX is first calculated
128
+ # (e.g. the state with more country only has 6/10 country artists)
129
+ # and then the contrast of colors is normalized based on that value
130
+ STATES_COORDS.each do |state, coords|
131
+ color = get_map_color(get_tags_weight(state, among))
132
+ @log.debug "#{state} | The new color is #{color}"
133
+
134
+ if File.exists?(kml_path)
135
+ kml_file = File.open(kml_path, 'r+')
136
+ xml = Nokogiri::XML(kml_file)
137
+ @log.debug "#{state} | KML map created"
138
+ else
139
+ kml_file = File.new(kml_path, 'w') # TODO: create ancestor folders
140
+ xml = create_kml
141
+ @log.debug "#{state} | KML map loaded"
142
+ end
143
+
144
+ xml.xpath("kml/Document/Style[@id='#{state}']/PolyStyle/color").first.content = color
145
+ @log.debug "#{state} | Color updated"
146
+
147
+ kml_file.rewind
148
+ kml_file.write(xml)
149
+ kml_file.close
150
+ end
151
+ @log.info "Updated KML with all the states"
152
+ end while forever
153
+ end
154
+
155
+ private
156
+
157
+ # Create a KML file with the overlays of the U.S. states and no colors
158
+ #
159
+ # == Parameters
160
+ #
161
+ #--
162
+ def self.create_kml
163
+ basic_color = "33ffffff"
164
+ xml = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
165
+ xml.kml( "kmlns" => "http://earth.google.com/kml/2.0" ) do
166
+ xml.Document {
167
+ STATES_COORDS.each do |state, coords|
168
+ xml.Style("id" => "#{state}") {
169
+ xml.PolyStyle {
170
+ xml.color(basic_color)
171
+ xml.outline("0")
172
+ }
173
+ }
174
+ xml.Placemark {
175
+ # xml.name(state.name)
176
+ xml.styleUrl("##{state}")
177
+ xml.Polygon {
178
+ xml.LinearRing {
179
+ xml.coordinates(coords)
180
+ }
181
+ }
182
+ }
183
+ end
184
+ }
185
+ end
186
+ end
187
+ xml.doc
188
+ end
189
+
190
+ STATES_COORDS = {
191
+ "AK" => "-178.154297,51.645294 -173.979492,52.025459 -168.925781,52.908901 -163.872070,54.444492 -157.192383,56.680374 -153.369141,58.904644 -151.831055,60.780621 -150.732422,61.227959 -149.985352,61.185623 -149.853516,60.909073 -150.644531,60.930431 -151.303711,60.737686 -151.831055,59.844814 -151.303711,59.601093 -151.962891,59.422726 -151.567383,59.198441 -150.732422,59.445076 -149.458008,60.020950 -148.623047,60.500526 -148.447266,60.500526 -148.315430,59.955009 -151.787109,59.175926 -154.731445,57.468590 -154.248047,56.704506 -152.182617,57.562996 -152.402344,58.401711 -152.622070,58.654083 -151.083984,59.333187 -148.051758,60.694695 -146.865234,61.015724 -144.711914,60.305183 -143.920898,59.998985 -140.976562,59.689926 -139.482422,59.422726 -136.186523,57.704147 -134.956055,56.559483 -132.802734,54.724621 -130.693359,54.749992 -130.034180,55.304138 -130.122070,56.145550 -131.791992,56.704506 -132.451172,57.468590 -133.593750,58.562523 -135.351562,59.689926 -136.450195,59.623325 -137.416992,58.927334 -138.867188,59.932999 -139.174805,60.305183 -140.976562,60.326946 -140.976562,69.641800 -143.173828,70.095528 -145.019531,70.035599 -146.030273,70.214874 -148.754883,70.436798 -150.996094,70.451508 -151.918945,70.451508 -152.358398,70.627197 -152.314453,70.859085 -154.116211,70.887886 -154.599609,70.974030 -155.126953,71.145195 -156.665039,71.314873 -157.719727,70.916641 -159.389648,70.815811 -161.455078,70.229744 -161.938477,70.259453 -163.212891,69.733330 -163.300781,69.162560 -164.794922,68.926811 -166.113281,68.863518 -166.596680,68.301903 -163.784180,67.169952 -162.377930,66.964478 -162.114258,66.652977 -161.938477,66.213737 -163.168945,66.035873 -163.916016,66.160507 -163.872070,66.635551 -167.958984,65.658272 -166.728516,65.256706 -166.245117,64.567322 -165.058594,64.453850 -162.993164,64.453850 -161.235352,64.942162 -160.927734,64.529549 -160.971680,63.801891 -161.103516,63.607216 -162.246094,63.568119 -163.256836,63.054958 -164.311523,63.233627 -164.838867,62.754726 -166.069336,61.669025 -165.410156,61.058285 -165.498047,60.500526 -167.167969,60.152443 -166.464844,59.822731 -165.761719,59.955009 -166.025391,60.478878 -165.190430,60.543774 -164.135742,59.866882 -162.509766,59.977005 -161.894531,59.512028 -161.806641,58.608334 -160.488281,58.927334 -159.697266,58.836491 -158.994141,58.355629 -158.774414,58.836491 -157.060547,58.904644 -159.653320,56.559483 -164.750977,54.901882 -164.926758,54.597527 -165.058594,54.572063 -173.496094,52.160454 -178.154297,51.645294",
192
+ "AL" => "-88.406982,30.353909 -88.165276,30.344429 -88.077393,30.704048 -87.923576,30.628450 -87.791740,30.287531 -87.517082,30.287531 -87.374268,30.420256 -87.374260,30.637911 -87.648918,30.873940 -87.615959,31.015270 -85.012199,30.996439 -85.133049,31.240980 -85.056152,31.587891 -85.144043,31.914860 -85.001221,32.203499 -84.902336,32.296410 -85.034180,32.398510 -84.990227,32.546810 -85.122063,32.676369 -85.198967,32.879578 -85.605461,35.012001 -88.088371,35.002998 -88.450920,31.840229 -88.406982,30.353909",
193
+ "AR" => "-91.164551,33.008663 -91.098633,33.413101 -91.230469,33.687782 -91.076660,34.016239 -90.922852,34.016239 -90.944824,34.216343 -90.615234,34.434097 -90.549316,34.777714 -90.285645,35.012001 -90.043945,35.029995 -90.109863,35.406960 -89.890137,35.746513 -89.692383,35.995785 -90.329590,35.995785 -90.131836,36.332829 -90.153809,36.509636 -94.614258,36.491974 -94.460449,35.514343 -94.504395,33.724339 -94.108887,33.523079 -94.086914,33.045506 -91.164551,33.008663",
194
+ "AZ" => "-109.061279,36.993778 -109.050293,31.353636 -110.961914,31.334869 -114.807129,32.454155 -114.741211,32.694866 -114.433594,32.879585 -114.521484,33.045506 -114.697266,33.063923 -114.719238,33.376411 -114.543457,33.669495 -114.521484,33.979809 -114.147949,34.288994 -114.697266,34.903954 -114.741211,36.120129 -114.060059,36.120129 -114.038086,37.020096 -109.061279,36.993778",
195
+ "CA" => "-120.014648,41.983994 -120.014648,38.993572 -114.653320,35.065971 -114.697266,34.849873 -114.191895,34.288994 -114.521484,33.943359 -114.565430,33.632915 -114.763184,33.394760 -114.697266,33.063923 -114.477539,33.008663 -114.455566,32.879585 -114.785156,32.694866 -117.136230,32.546814 -117.312012,32.824211 -117.377930,33.174343 -118.081055,33.742611 -118.388672,33.760883 -118.476562,33.998028 -118.828125,34.052658 -119.245605,34.125446 -119.509277,34.397842 -120.498047,34.452217 -120.651855,34.885929 -120.673828,35.173809 -120.871582,35.263561 -120.893555,35.460670 -121.376953,35.657295 -121.420898,35.871246 -121.684570,36.137875 -121.970215,36.368221 -121.970215,36.615528 -121.816406,36.809284 -121.926270,36.949890 -122.233887,37.002552 -122.475586,37.195332 -122.541504,37.561996 -122.497559,37.770714 -122.189941,37.474857 -122.167969,37.683819 -122.343750,37.822803 -122.387695,37.961521 -122.233887,38.082687 -122.497559,38.117271 -122.497559,37.840157 -122.739258,37.944199 -122.871094,38.048092 -123.002930,38.048092 -122.980957,38.238178 -123.134766,38.427773 -123.376465,38.444984 -123.398438,38.616871 -123.771973,38.908131 -123.728027,39.095963 -123.837891,39.402245 -123.793945,39.791653 -124.409180,40.346542 -124.321289,40.730606 -124.145508,40.913513 -124.167480,41.178654 -124.035645,41.409775 -124.255371,41.771313 -124.299316,42.016651 -120.014648,41.983994",
196
+ "CO" => "-102.008057,41.004776 -102.041000,37.020088 -109.072258,36.985001 -109.072250,40.979881 -102.008057,41.004776",
197
+ "CT" => "-71.817627,42.024815 -71.839600,41.376808 -71.894531,41.253033 -72.487793,41.302570 -72.938232,41.228249 -73.542480,41.013065 -73.729248,41.120747 -73.575439,41.253033 -73.487549,42.041134 -71.817627,42.024815",
198
+ "DE" => "-75.789185,39.719864 -75.695801,39.816975 -75.514526,39.842285 -75.388184,39.816975 -75.498047,39.698734 -75.563965,39.622616 -75.520020,39.576057 -75.563965,39.457401 -75.371704,39.279041 -75.168457,39.057583 -75.036621,38.792625 -75.036621,38.444984 -75.701294,38.457890 -75.789185,39.719864",
199
+ "FL" => "-87.484131,30.297018 -86.627197,30.391829 -86.506348,30.524412 -86.121826,30.448673 -86.330566,30.363396 -85.726318,30.145126 -85.286865,29.812052 -85.034180,29.697596 -84.770508,29.773914 -84.396973,29.897804 -84.320068,30.050077 -84.045410,30.116621 -83.562012,29.773914 -83.408203,29.668962 -83.386230,29.525669 -83.100586,29.248062 -83.078613,29.113775 -82.814941,29.152161 -82.650146,28.594170 -82.825928,27.916767 -82.705078,27.732161 -82.540283,27.926474 -82.419434,27.819645 -82.672119,27.508270 -82.331543,26.892679 -82.023926,26.450901 -81.837158,26.450901 -81.826172,26.076521 -81.188965,25.463114 -81.123047,25.145285 -80.529785,25.214880 -80.419922,25.135338 -80.925293,24.776758 -81.793213,24.597078 -81.749268,24.487148 -81.496582,24.617056 -80.793457,24.746832 -80.310059,25.175117 -80.222168,25.601900 -80.101318,26.194878 -80.046387,26.863281 -80.705566,28.362400 -80.881348,28.729130 -81.342773,29.973970 -81.441650,30.713505 -81.881104,30.855078 -82.034912,30.798473 -82.045898,30.401306 -82.210693,30.401306 -82.265625,30.590637 -84.869385,30.722948 -85.012207,30.996445 -87.604980,31.024694 -87.637939,30.864510 -87.396240,30.647364 -87.484131,30.297018",
200
+ "GA" => "-83.111572,34.998505 -84.396973,35.007504 -85.605469,35.007504 -85.144043,32.708733 -85.001221,32.551441 -85.034180,32.412430 -84.913330,32.310349 -85.133057,31.919531 -85.067139,31.611286 -85.133057,31.255074 -85.023193,31.001156 -84.924316,30.859795 -84.869385,30.737114 -82.254639,30.585907 -82.199707,30.387091 -82.012939,30.377613 -82.034912,30.822063 -81.892090,30.850363 -81.463623,30.737114 -81.419678,31.085869 -81.145020,31.545771 -81.145020,31.742184 -80.947266,31.994101 -81.101074,32.068611 -81.134033,32.319633 -81.419678,32.708733 -81.474609,33.013268 -81.716309,33.096146 -82.012939,33.481853 -82.551270,33.984364 -82.880859,34.447689 -83.067627,34.511082 -83.188477,34.619648 -83.364258,34.746124 -83.111572,34.998505",
201
+ "HI" => "-160.164185,21.937950 -160.252075,21.825808 -160.208130,21.769703 -160.087280,21.897181 -160.059814,21.973614 -159.807129,22.009268 -159.455566,21.881889 -159.356689,21.943045 -158.285522,21.565500 -158.208618,21.453068 -158.137207,21.330315 -158.021851,21.289373 -157.868042,21.294493 -157.697754,21.284254 -157.631836,21.299610 -157.335205,21.125498 -157.258301,21.074247 -156.879272,21.043489 -157.038574,20.920397 -157.022095,20.828009 -156.983643,20.735565 -156.857300,20.740702 -156.780396,20.807472 -156.643066,20.828009 -156.472778,20.750977 -156.450806,20.648205 -156.719971,20.524788 -156.643066,20.504210 -156.538696,20.519644 -156.544189,20.607079 -156.417847,20.679045 -156.423340,20.601934 -156.280518,20.607079 -155.901489,20.190035 -155.835571,20.014645 -155.928955,19.880392 -155.994873,19.828724 -156.077271,19.766705 -155.950928,19.518373 -155.906982,19.362974 -155.917969,19.119219 -155.846558,19.004995 -155.670776,18.901089 -155.593872,18.994610 -155.489502,19.139978 -155.385132,19.217802 -155.148926,19.285219 -155.050049,19.321510 -154.797363,19.487307 -154.934692,19.585669 -155.000610,19.740852 -155.083008,19.787378 -155.104980,19.859726 -155.258789,20.035290 -155.555420,20.112680 -155.725708,20.184877 -155.808105,20.262197 -155.885010,20.267349 -155.890503,20.179724 -156.313477,20.601934 -156.104736,20.627642 -155.989380,20.704739 -155.967407,20.776657 -156.126709,20.874210 -156.258545,20.930658 -156.395874,20.930658 -156.494751,20.925528 -156.610107,21.017855 -156.665039,20.976828 -156.692505,20.863945 -156.577148,20.802338 -156.813354,20.822874 -156.857300,20.879341 -156.945190,20.915264 -156.983643,20.935787 -156.802368,21.058870 -156.725464,21.151115 -156.884766,21.166485 -156.972656,21.197216 -157.082520,21.192095 -157.241821,21.227942 -157.335205,21.135744 -157.675781,21.320080 -157.807617,21.427504 -157.873535,21.575718 -157.922974,21.652323 -157.994385,21.693159 -158.098755,21.611471 -158.247070,21.539957 -159.406128,21.953236 -159.334717,22.004175 -159.279785,22.095819 -159.329224,22.212833 -159.439087,22.233173 -159.587402,22.207748 -159.708252,22.156883 -159.774170,22.075459 -159.746704,21.993988 -160.098267,21.999083 -160.164185,21.937950",
202
+ "IA" => "-95.734863,40.563896 -91.779785,40.613953 -91.494141,40.363289 -91.384277,40.530502 -91.384277,40.630630 -91.142578,40.663971 -90.966797,40.896908 -90.966797,41.129021 -91.098633,41.228249 -91.054688,41.442726 -90.681152,41.459194 -90.417480,41.640079 -90.197754,41.918629 -90.153809,42.114525 -90.373535,42.277309 -90.637207,42.504501 -90.725098,42.682434 -91.120605,42.730873 -91.208496,43.133060 -91.098633,43.293198 -91.252441,43.500751 -96.613770,43.532619 -96.503906,43.165123 -96.657715,42.779274 -96.525879,42.520699 -95.932617,41.360317 -95.734863,40.563896",
203
+ "ID" => "-111.049805,42.000324 -117.070312,41.983994 -116.960449,43.882057 -116.850586,44.213711 -117.312012,44.339565 -116.499023,45.736858 -117.004395,46.057983 -117.026367,48.994637 -116.059570,48.965794 -116.059570,48.019321 -115.664062,47.606163 -115.708008,47.442951 -114.829102,46.845161 -114.719238,46.694668 -114.367676,46.664516 -114.499512,46.149395 -114.389648,45.890007 -114.587402,45.782848 -114.565430,45.567909 -114.345703,45.475540 -113.972168,45.690830 -113.444824,45.073521 -113.466797,44.871441 -113.159180,44.777935 -112.873535,44.339565 -112.763672,44.512177 -111.467285,44.606113 -111.445312,44.777935 -111.115723,44.512177 -111.049805,42.000324",
204
+ "IL" => "-87.121582,42.488300 -87.077637,42.269180 -87.055664,42.106373 -87.451172,41.787689 -87.539062,39.368271 -87.736809,39.130058 -87.539062,38.771210 -87.648918,38.496590 -88.066399,37.926861 -88.176270,37.666420 -88.088371,37.439968 -88.483879,37.300270 -88.505852,37.020088 -88.967278,37.195328 -89.208977,37.055168 -89.274902,37.002548 -89.538567,37.631630 -90.439445,38.238171 -90.241692,38.822590 -90.549309,38.908131 -90.988770,39.436192 -91.494141,39.909729 -91.538078,40.380020 -91.406250,40.647301 -91.164551,40.663967 -90.922852,41.112457 -91.120598,41.277798 -91.098633,41.475651 -90.637199,41.525028 -90.153801,42.114517 -90.637199,42.472092 -87.121582,42.488300",
205
+ "IN" => "-87.462158,41.771313 -84.792480,41.771313 -84.825439,39.121536 -84.891357,39.044785 -84.781494,38.839706 -85.166016,38.694084 -85.418701,38.745514 -86.011963,37.935532 -86.396484,38.186386 -86.616211,37.900864 -86.846924,38.004822 -87.077637,37.909534 -87.121582,37.788078 -87.407227,37.961521 -88.077393,37.926868 -87.561035,38.754082 -87.725830,39.155621 -87.550049,39.402245 -87.462158,41.771313",
206
+ "KS" => "-95.306396,40.010788 -102.030029,40.002373 -102.030029,37.020096 -94.625244,37.011326 -94.625244,39.164143 -94.833984,39.215233 -94.932861,39.342793 -94.910889,39.427708 -95.020752,39.444679 -95.119629,39.571819 -94.965820,39.757881 -94.943848,39.892879 -95.130615,39.892879 -95.306396,40.010788",
207
+ "KY" => "-88.209221,37.701199 -88.088371,37.918198 -88.022461,37.952862 -87.984009,37.952862 -87.940063,37.926868 -87.901611,37.918190 -87.676392,38.039440 -87.440170,37.961521 -87.401733,38.039429 -87.297356,37.944187 -87.088623,37.762032 -87.077629,37.926861 -86.879883,37.987499 -86.737061,37.944187 -86.627182,37.866169 -86.363510,38.177750 -86.011963,37.944180 -85.649406,38.384720 -85.418701,38.771210 -85.023178,38.754082 -84.781487,38.822578 -84.869377,39.053310 -84.726562,39.155609 -84.484848,39.027699 -84.281609,38.938042 -84.177231,38.779781 -83.880608,38.771210 -83.682861,38.616859 -83.496078,38.702641 -83.199463,38.625450 -82.880836,38.736931 -82.617180,38.496590 -82.595200,38.401939 -82.650131,38.169109 -82.474358,37.952862 -82.177719,37.588112 -81.947006,37.518429 -82.672112,37.125271 -82.869873,36.932331 -83.155510,36.782890 -83.693840,36.597881 -87.962029,36.646381 -87.929070,36.606701 -87.857658,36.483139 -87.874138,36.496380 -89.395752,36.518452 -89.241928,36.993759 -88.989243,37.204071 -88.538795,37.028858 -88.483871,37.291531 -88.121330,37.439968 -88.209221,37.701199",
208
+ "LA" => "-91.593018,31.005863 -91.636963,31.259769 -91.505127,31.259769 -91.494141,31.522362 -91.373291,31.746853 -91.351318,31.858896 -91.109619,31.998758 -91.010742,32.194210 -91.010742,32.389240 -91.131592,32.602360 -91.142578,32.750324 -91.065674,32.925709 -91.208496,32.990234 -94.064941,33.027088 -94.042969,32.008076 -93.548584,30.987026 -93.691406,30.496017 -93.680420,30.230595 -93.911133,29.716681 -93.427734,29.764376 -93.131104,29.754841 -92.263184,29.525669 -92.043457,29.573458 -91.834717,29.487425 -91.746826,29.602118 -91.911621,29.649868 -92.109375,29.640320 -92.153320,29.735762 -91.977539,29.802517 -91.856689,29.735762 -91.636963,29.745300 -91.625977,29.640320 -91.494141,29.506548 -91.274414,29.449165 -91.296387,29.324718 -91.263428,29.219301 -90.878906,29.094578 -90.845947,29.017748 -90.615234,29.267233 -90.406494,29.305561 -90.263672,29.228889 -90.263672,29.104176 -90.043945,29.209713 -90.065918,29.439598 -90.000000,29.516109 -89.604492,29.334297 -89.472656,29.219301 -89.285889,29.132971 -89.340820,28.988920 -89.230957,29.036961 -89.077148,29.152161 -89.187012,29.315142 -89.582520,29.458731 -89.703369,29.630770 -89.406738,29.745300 -89.274902,29.859701 -89.439697,30.031054 -89.593506,29.916851 -89.835205,29.916851 -89.681396,30.069094 -89.791260,30.135626 -89.890137,30.097612 -90.186768,30.012032 -90.494385,30.126123 -90.560303,30.278044 -90.175781,30.382353 -89.879150,30.211607 -89.714355,30.135626 -89.582520,30.183123 -89.703369,30.467613 -89.857178,30.600094 -89.857178,30.798473 -89.747314,30.977610 -91.593018,31.005863",
209
+ "MA" => "-73.322754,42.747009 -71.301270,42.698578 -71.136467,42.811520 -70.894768,42.908161 -70.795891,42.682430 -70.609131,42.650120 -70.806877,42.512600 -71.015617,42.374767 -70.971680,42.236649 -70.587151,42.147110 -70.729965,41.967648 -70.543213,41.885918 -70.411369,41.763107 -70.048820,41.771309 -70.059807,41.967648 -70.224602,42.041130 -70.191643,42.098221 -69.949951,41.975819 -69.960930,41.754917 -69.873039,41.631859 -70.191643,41.623650 -70.433350,41.582581 -71.125481,41.475651 -71.158440,41.640072 -71.367180,41.812260 -71.433098,42.016647 -73.520500,42.041130 -73.322754,42.747009",
210
+ "MD" => "-75.042107,38.444981 -75.239861,38.043758 -75.778191,37.922531 -76.135254,37.965855 -76.300041,37.896519 -76.629631,38.151829 -76.750481,38.147511 -76.953728,38.246799 -77.074577,38.384720 -77.200920,38.302860 -77.310791,38.384720 -77.316277,38.505188 -77.041618,38.801182 -76.920776,38.843987 -76.920776,38.916683 -77.036133,39.010647 -77.124023,38.959408 -77.200920,38.972221 -77.503052,39.117268 -77.568962,39.300289 -77.728271,39.317299 -77.810661,39.155621 -78.079826,39.287540 -78.338013,39.465878 -78.228142,39.681820 -78.294060,39.631069 -78.381950,39.622608 -78.458862,39.559109 -78.722527,39.571819 -78.815910,39.626839 -78.958740,39.465878 -79.096062,39.453159 -79.475090,39.219479 -79.497063,39.719860 -75.789177,39.715630 -75.684807,38.453579 -75.042107,38.444981",
211
+ "ME" => "-71.048584,45.321255 -70.927734,45.321255 -70.861816,45.220741 -70.806885,45.421589 -70.620117,45.390736 -70.773926,45.544830 -70.400391,45.721523 -70.411377,45.805828 -70.235596,45.943512 -70.323486,46.073231 -70.235596,46.164616 -70.323486,46.233051 -70.037842,46.384834 -70.037842,46.687130 -69.246826,47.435516 -69.027100,47.428085 -69.071045,47.279228 -68.917236,47.174778 -68.620605,47.249405 -68.367920,47.368595 -68.027344,47.256863 -67.796631,47.055153 -67.774658,46.807579 -67.774658,45.943512 -67.796631,45.690830 -67.456055,45.598667 -67.467041,45.437008 -67.478027,45.282616 -67.368164,45.120052 -67.159424,45.205261 -67.038574,44.988113 -66.961670,44.824707 -67.225342,44.613934 -68.422852,44.260937 -68.697510,44.158562 -68.807373,44.488667 -68.994141,44.410240 -69.071045,44.158562 -69.191895,43.953281 -69.378662,43.984909 -69.488525,43.834526 -69.862061,43.707596 -69.971924,43.842449 -70.147705,43.779026 -70.455322,43.373112 -70.718994,43.068890 -70.993652,43.381100 -71.048584,45.321255",
212
+ "MI" => "-89.538574,48.004623 -89.143066,47.975212 -88.439941,48.297813 -84.814453,46.890232 -84.550781,46.468132 -84.221191,46.513515 -84.111328,46.331757 -83.935547,46.042736 -83.649902,46.073231 -83.474121,46.012222 -83.583984,45.844109 -82.507324,45.352146 -82.133789,43.596306 -82.507324,42.666279 -83.078613,42.309814 -83.100586,41.934978 -83.342285,41.738529 -87.451172,41.754921 -87.077637,42.065605 -87.121582,42.488300 -87.033691,42.698586 -87.165527,43.644024 -86.704102,44.809120 -86.220703,45.243954 -86.726074,45.444717 -87.121582,45.444717 -87.451172,45.135555 -87.736816,45.166546 -87.736816,45.398449 -87.956543,45.398449 -87.758789,45.675484 -88.110352,45.813484 -88.066406,45.920586 -88.791504,45.996964 -90.109863,46.331757 -90.285645,46.513515 -90.461426,46.528633 -89.538574,48.004623",
213
+ "MN" => "-97.229004,48.994637 -95.141602,48.994637 -95.163574,49.368065 -94.943848,49.353756 -94.768066,49.267803 -94.724121,48.792389 -94.526367,48.676453 -94.306641,48.719959 -93.867188,48.647427 -93.867188,48.516605 -93.405762,48.632908 -92.592773,48.574791 -92.548828,48.429199 -92.395020,48.239307 -92.263184,48.341644 -92.043457,48.341644 -91.494141,48.078079 -90.900879,48.239307 -90.769043,48.122101 -90.021973,48.107430 -89.538574,47.989922 -89.978027,47.309032 -90.703125,47.323933 -91.208496,47.025204 -91.538086,47.010227 -91.977539,46.724800 -92.307129,46.724800 -92.351074,46.042736 -92.680664,45.905300 -92.900391,45.598667 -92.757568,45.560219 -92.702637,45.413876 -92.768555,44.762337 -92.570801,44.527843 -92.329102,44.574818 -92.219238,44.418087 -91.955566,44.402390 -91.867676,44.150681 -91.318359,43.897892 -91.274414,43.500751 -96.481934,43.548546 -96.481934,45.398449 -96.679688,45.429298 -96.811523,45.644768 -96.525879,46.027481 -96.833496,46.709736 -96.877441,47.635784 -97.119141,48.100094 -97.152100,48.574791 -97.152100,48.792389 -97.229004,48.994637",
214
+ "MO" => "-95.756836,40.597271 -91.779785,40.613953 -91.516113,40.346542 -91.428223,39.842285 -90.791016,39.300301 -90.549316,38.908131 -90.197754,38.822590 -90.241699,38.513786 -90.439453,38.220921 -89.846191,37.840157 -89.494629,37.649033 -89.406738,37.265308 -89.252930,36.985001 -89.362793,36.597889 -89.670410,35.978004 -90.351562,36.031330 -90.164795,36.491974 -94.614258,36.527294 -94.614258,39.147102 -95.163574,39.571819 -94.965820,39.892879 -95.361328,40.027615 -95.515137,40.279526 -95.756836,40.597271",
215
+ "MS" => "-90.252686,35.012001 -90.560303,34.786739 -90.560303,34.524662 -90.582275,34.415974 -90.747070,34.325291 -90.955811,34.161816 -90.889893,34.016239 -91.087646,33.961586 -91.065674,33.806538 -91.219482,33.687782 -91.219482,33.559708 -91.076660,33.394760 -91.098633,33.257065 -91.164551,33.008663 -91.054688,32.907261 -91.142578,32.722599 -91.131592,32.565334 -91.032715,32.379959 -91.032715,32.222095 -91.120605,31.980122 -91.351318,31.849564 -91.494141,31.550453 -91.494141,31.250378 -91.636963,31.250378 -91.593018,31.015278 -89.736328,30.987026 -89.835205,30.798473 -89.857178,30.590637 -89.670410,30.448673 -89.593506,30.173626 -89.439697,30.192617 -89.395752,30.297018 -88.956299,30.382353 -88.714600,30.353916 -88.538818,30.363396 -88.406982,30.344437 -88.439941,31.877558 -88.099365,35.003002 -90.252686,35.012001",
216
+ "MT" => "-116.081543,49.009048 -116.059570,47.989922 -115.664062,47.635784 -115.708008,47.457809 -115.444336,47.294132 -114.916992,46.890232 -114.697266,46.664516 -114.345703,46.649437 -114.499512,46.118942 -114.367676,45.874714 -114.565430,45.798168 -114.521484,45.567909 -114.367676,45.444717 -113.972168,45.660126 -113.466797,45.042477 -113.466797,44.887012 -113.181152,44.809120 -112.851562,44.339565 -112.741699,44.496506 -112.368164,44.496506 -111.489258,44.574818 -111.423340,44.731125 -111.093750,44.480827 -111.049805,44.980343 -104.062500,44.980343 -104.040527,48.980217 -116.081543,49.009048",
217
+ "NC" => "-78.596191,33.906891 -78.134758,33.943352 -78.002930,33.870407 -77.849121,34.234509 -77.409660,34.542759 -76.904289,34.687420 -76.574699,34.741611 -76.311028,34.957989 -76.486809,35.047981 -76.772461,35.012001 -76.530762,35.317360 -77.058098,35.514339 -76.333000,35.389042 -76.113281,35.389042 -75.937500,35.621578 -75.805656,35.621578 -75.805656,35.924641 -75.937500,35.995781 -76.091301,35.675140 -76.113281,35.978001 -76.772461,35.978001 -76.091301,36.191090 -75.981438,36.208820 -75.959473,36.562599 -78.826904,36.522881 -81.694336,36.593479 -81.782219,36.350521 -82.111809,36.102371 -82.595207,36.173347 -82.683098,36.031330 -82.924797,35.995781 -83.232422,35.746510 -83.979492,35.532219 -84.418938,35.047981 -83.122551,35.012001 -82.441399,35.209721 -81.035149,35.191761 -80.837402,34.867901 -79.694817,34.813801 -78.596191,33.906891",
218
+ "ND" => "-104.062500,48.994629 -104.062500,47.487511 -104.062500,45.935871 -100.338135,45.905300 -96.503899,45.935871 -96.657707,46.422710 -96.789551,46.634350 -96.855461,47.606159 -97.075188,48.034012 -97.185051,48.545700 -97.075195,48.690960 -97.272942,48.994629 -104.062500,48.994629",
219
+ "NE" => "-102.013550,40.992336 -102.019043,40.010788 -95.295410,40.010788 -95.427246,40.078072 -95.471191,40.245991 -95.646973,40.346542 -95.690918,40.513798 -95.778809,40.613953 -95.822754,40.979897 -95.954590,41.508575 -96.130371,41.869560 -96.262207,42.098221 -96.481934,42.585445 -96.619263,42.500454 -96.701660,42.609707 -96.800537,42.678394 -96.965332,42.747009 -97.141113,42.755077 -97.272949,42.851807 -97.404785,42.847778 -97.668457,42.807491 -97.838745,42.831669 -97.910156,42.759113 -98.047485,42.763145 -98.591309,43.000629 -99.365845,43.004646 -104.040527,43.000629 -104.062500,41.000629 -102.013550,40.992336",
220
+ "NH" => "-71.630859,44.762337 -71.510002,45.011410 -71.378166,45.267151 -71.268311,45.298069 -71.059563,45.305798 -70.971680,43.365120 -70.708000,43.084930 -70.894768,42.908161 -71.323242,42.706650 -72.564697,42.747009 -72.487793,42.976521 -72.443848,43.040791 -72.443848,43.153103 -72.333984,43.679790 -72.169189,43.874138 -72.092285,44.063908 -71.993408,44.331707 -71.597900,44.496506 -71.630859,44.762337",
221
+ "NJ" => "-74.718018,41.368565 -74.031372,41.029644 -73.916016,40.988190 -74.075317,40.630630 -74.212646,40.530502 -74.185181,40.488735 -73.976440,40.392578 -73.981934,40.233414 -74.102783,40.006580 -74.207153,39.766327 -74.311523,39.588757 -74.344482,39.402245 -74.553223,39.300301 -74.750977,39.061848 -74.833374,38.942322 -75.025635,38.963680 -74.888306,39.138580 -75.036621,39.210976 -75.130005,39.181175 -75.563965,39.470123 -75.531006,39.571819 -75.574951,39.626846 -75.421143,39.795876 -75.047607,39.964493 -74.778442,40.178871 -75.064087,40.405128 -75.195923,40.609783 -75.091553,40.847057 -75.168457,41.025497 -74.948730,41.095909 -74.718018,41.368565",
222
+ "NM" => "-109.050293,37.011326 -109.050293,31.306715 -108.215332,31.344254 -108.215332,31.756195 -106.523438,31.774878 -106.633301,31.980122 -103.007812,31.998758 -103.007812,36.993778 -109.050293,37.011326",
223
+ "NV" => "-120.014648,42.016651 -120.014648,39.010647 -114.653320,35.012001 -114.653320,35.621582 -114.741211,36.102375 -114.411621,36.084621 -114.060059,36.102375 -114.038086,41.983994 -120.014648,42.016651",
224
+ "NY" => "-73.377686,45.003651 -73.410637,44.887009 -73.377678,44.637390 -73.300781,44.441620 -73.432610,44.087582 -73.443604,43.588341 -73.289795,43.584370 -73.267822,43.564472 -73.289787,42.738937 -73.498528,42.032970 -73.564445,41.261292 -73.696281,41.112457 -73.575432,40.955009 -71.949463,41.277798 -71.696770,41.054501 -73.322746,40.622288 -73.861076,40.580578 -74.124748,40.588921 -73.937981,40.979889 -74.718010,41.385048 -74.739990,41.442719 -74.937737,41.467419 -75.069580,41.607220 -75.069580,41.812260 -75.245361,41.853188 -75.344231,42.000320 -79.760742,42.000320 -79.749748,42.512600 -78.925781,42.851799 -78.903801,42.956421 -79.046631,43.004639 -79.013672,43.109001 -79.057610,43.253201 -79.211418,43.452911 -78.771973,43.628120 -76.794434,43.620171 -76.431877,44.095470 -76.146240,44.292400 -75.827629,44.449459 -75.212402,44.887009 -75.003662,44.964790 -74.816887,45.026939 -73.377686,45.003651",
225
+ "OH" => "-84.792465,41.759010 -83.347771,41.746719 -83.122551,41.918617 -82.683098,41.689320 -82.331543,41.705719 -81.013184,42.228508 -80.507812,42.309811 -80.518791,40.526318 -80.645142,40.534668 -80.645142,40.400940 -80.612183,40.279518 -80.656120,40.166279 -80.837402,39.690281 -81.210930,39.402241 -81.474602,39.351280 -81.738281,39.181171 -81.782219,38.925220 -81.914062,38.891029 -82.067871,39.010639 -82.221680,38.736938 -82.221680,38.599689 -82.337029,38.444981 -82.589722,38.432076 -82.946770,38.745510 -83.056641,38.672646 -83.254387,38.634029 -83.518066,38.719807 -83.682861,38.616859 -83.946526,38.796902 -84.177246,38.784061 -84.270630,38.933777 -84.550781,39.078899 -84.858391,39.104481 -84.792465,41.759010",
226
+ "OK" => "-94.647217,37.028870 -103.018799,37.011326 -103.029785,36.483143 -100.019531,36.509636 -99.997559,34.606087 -99.711914,34.415974 -99.569092,34.434097 -99.404297,34.370644 -99.382324,34.470333 -99.206543,34.334366 -99.195557,34.225430 -98.975830,34.225430 -98.712158,34.107254 -98.646240,34.170906 -98.514404,34.098160 -98.382568,34.161816 -98.085938,34.116352 -98.085938,34.016239 -97.976074,34.016239 -97.965088,33.897778 -97.855225,33.861294 -97.690430,33.998028 -97.569580,33.916012 -97.481689,33.934242 -97.426758,33.833920 -97.261963,33.897778 -97.250977,33.979809 -97.185059,33.770016 -97.075195,33.833920 -97.009277,33.961586 -96.866455,33.879536 -96.448975,33.779148 -96.372070,33.696922 -96.306152,33.770016 -96.218262,33.760883 -96.185303,33.852169 -95.921631,33.879536 -95.800781,33.852169 -95.614014,33.943359 -95.383301,33.879536 -95.218506,33.979809 -94.515381,33.642063 -94.416504,35.344254 -94.625244,36.491974 -94.647217,37.028870",
227
+ "OR" => "-123.969727,46.225452 -124.233398,43.484810 -124.409180,43.261208 -124.519043,42.779274 -124.365234,42.000324 -120.629883,41.983994 -117.004395,41.951321 -116.960449,43.882057 -116.850586,44.213711 -117.268066,44.339565 -116.499023,45.706177 -116.960449,46.012222 -119.311523,46.027481 -119.685059,45.905300 -120.168457,45.890007 -120.388184,45.660126 -120.651855,45.767521 -121.179199,45.629402 -121.640625,45.767521 -122.321777,45.614037 -122.761230,45.644768 -122.937012,46.149395 -123.354492,46.149395 -123.706055,46.271034 -123.969727,46.225452",
228
+ "PA" => "-80.507812,42.317940 -80.112305,42.374779 -79.749756,42.504501 -79.760742,42.000324 -75.355225,41.992161 -75.245361,41.845013 -75.069580,41.820454 -75.031128,41.685219 -75.047607,41.607227 -74.959717,41.459194 -74.739990,41.442726 -74.707031,41.310822 -74.937744,41.095909 -75.157471,41.029644 -75.080566,40.847057 -75.190430,40.605614 -75.058594,40.421860 -74.871826,40.271145 -74.772949,40.162083 -75.025635,39.968700 -75.377197,39.808537 -75.541992,39.825413 -75.684814,39.816975 -75.805664,39.698734 -80.507812,39.715637 -80.507812,42.317940",
229
+ "RI" => "-71.806641,42.016651 -71.411133,42.024815 -71.422119,41.918629 -71.356201,41.787697 -71.147461,41.640079 -71.125488,41.475658 -71.531982,41.393291 -71.883545,41.261292 -71.806641,42.016651",
230
+ "SC" => "-83.166504,35.003002 -82.847900,35.110924 -82.485352,35.191765 -81.057129,35.173809 -80.870361,35.003002 -80.837402,34.822823 -79.705811,34.813805 -79.211426,34.370644 -78.629150,33.879536 -79.189453,33.211117 -79.683838,32.870358 -80.947266,31.980122 -81.101074,32.129105 -81.156006,32.361404 -81.320801,32.583851 -81.474609,32.787273 -81.474609,33.008663 -81.738281,33.146748 -82.243652,33.742611 -82.573242,34.007133 -82.836914,34.425034 -83.078613,34.533710 -83.364258,34.768688 -83.166504,35.003002",
231
+ "SD" => "-104.051506,45.943508 -104.040520,42.988571 -98.558350,42.980530 -98.151855,42.779274 -97.899162,42.755070 -97.833252,42.835690 -97.679436,42.803459 -97.393791,42.835690 -97.267448,42.843750 -97.130119,42.738937 -96.954338,42.738937 -96.822502,42.690510 -96.690666,42.593529 -96.624748,42.496399 -96.470940,42.544979 -96.602776,42.690510 -96.602776,42.787331 -96.514893,42.900108 -96.448967,43.076908 -96.492912,43.221180 -96.558830,43.365120 -96.602776,43.492779 -96.427002,43.524651 -96.448967,45.267151 -96.492912,45.375301 -96.690666,45.421577 -96.734612,45.514042 -96.844482,45.606350 -96.602776,45.759850 -96.492912,45.928219 -104.051506,45.943508",
232
+ "TN" => "-89.747292,36.013550 -89.472649,36.500790 -88.714600,36.500797 -88.011467,36.518459 -87.857658,36.518459 -87.951042,36.646381 -81.705322,36.589066 -81.771240,36.332809 -81.958008,36.230980 -82.100830,36.084621 -82.606201,36.182220 -82.694092,36.013550 -82.913788,35.995781 -83.221413,35.746510 -83.572990,35.603699 -83.968498,35.532219 -84.144272,35.317360 -84.451889,35.021000 -90.098869,35.029980 -90.109848,35.942429 -89.945038,35.746510 -89.747292,36.013550",
233
+ "TX" => "-106.633301,31.952162 -106.303711,31.597252 -106.062012,31.391157 -105.710449,31.109388 -105.402832,30.883368 -104.941406,30.619005 -104.765625,30.221102 -104.677734,29.878756 -104.326172,29.477861 -103.754883,29.248062 -103.227539,28.979313 -102.985840,29.209713 -102.700195,29.688053 -102.392578,29.764376 -102.326660,29.878756 -101.491699,29.783449 -100.788574,29.228889 -100.261230,28.207609 -99.975586,27.994400 -99.799805,27.702984 -99.470215,27.527758 -99.448242,27.215555 -99.448242,26.980827 -99.140625,26.411551 -98.261719,26.076521 -97.668457,25.977798 -97.426758,25.839449 -97.163086,25.938286 -97.514648,26.332806 -97.492676,26.980827 -97.014771,27.882784 -96.663208,28.217289 -96.350098,28.574875 -95.712891,28.690588 -94.877930,29.305561 -95.009766,29.630770 -94.768066,29.668962 -94.636230,29.458731 -94.334106,29.568678 -94.059448,29.697596 -94.273682,29.606894 -94.356079,29.549566 -94.284668,29.583012 -93.889160,29.726221 -93.889160,29.726221 -93.867188,29.707138 -93.669434,30.202114 -93.669434,30.486549 -93.537598,30.958769 -94.020996,31.989443 -94.064941,33.523079 -95.207520,33.943359 -95.383301,33.852169 -95.603027,33.925129 -95.778809,33.870415 -96.174316,33.870415 -96.394043,33.742611 -96.877441,33.852169 -97.053223,33.961586 -97.141113,33.779148 -97.272949,33.979809 -97.448730,33.852169 -97.690430,33.998028 -97.932129,33.888657 -98.129883,34.107254 -98.393555,34.179996 -98.569336,34.125446 -98.745117,34.125446 -99.184570,34.234512 -99.382324,34.452217 -99.689941,34.379711 -99.975586,34.578953 -100.019531,36.491974 -103.029785,36.491974 -103.029785,31.989443 -106.633301,31.952162",
234
+ "UT" => "-114.082031,37.002552 -109.061279,36.993778 -109.050293,40.996483 -111.049805,41.013065 -111.049805,42.016651 -114.060059,42.000324 -114.082031,37.002552",
235
+ "VA" => "-78.332520,39.453159 -77.816162,39.138580 -77.728271,39.317299 -77.574463,39.300301 -77.508545,39.121536 -77.222900,38.993572 -77.181702,38.908131 -77.085571,38.876064 -77.044373,38.805470 -77.063599,38.760509 -77.244873,38.573936 -77.316284,38.496593 -77.310791,38.384727 -77.200928,38.289936 -77.156982,38.315800 -77.058105,38.376114 -76.959229,38.246807 -76.750488,38.151836 -76.618652,38.151836 -76.278076,37.883526 -76.058350,37.961521 -75.816650,37.909534 -75.651855,37.970184 -75.234375,38.048092 -75.629883,37.657730 -75.827637,37.230328 -75.959473,37.099003 -76.047363,37.300274 -75.948486,37.640335 -75.717773,37.926868 -76.058350,37.961521 -76.343994,37.883526 -76.300049,37.614231 -76.322021,37.527153 -76.234131,37.335224 -76.508789,37.247822 -76.695557,37.212830 -76.651611,37.037640 -76.464844,36.870831 -76.080322,36.932331 -75.915527,36.738884 -75.970459,36.562599 -79.804688,36.544949 -83.682861,36.606709 -83.133545,36.809284 -82.727051,37.107765 -81.979980,37.509727 -81.892090,37.309013 -81.672363,37.186581 -81.320801,37.326488 -80.969238,37.291534 -80.859375,37.431252 -80.716553,37.378887 -80.321045,37.509727 -80.255127,37.649033 -80.332031,37.718590 -79.617920,38.556755 -79.310303,38.436378 -79.024658,38.831150 -79.057617,38.942322 -78.870850,38.788345 -78.730774,38.931637 -78.651123,38.965816 -78.574219,39.019184 -78.398438,39.234379 -78.332520,39.453159",
236
+ "WV" => "-82.639160,38.160461 -82.463356,37.952862 -82.424927,37.892197 -82.430397,37.840149 -82.273865,37.679474 -82.155762,37.570702 -81.936028,37.509720 -81.892082,37.300259 -81.661369,37.212818 -81.353752,37.326469 -80.991203,37.291531 -80.870361,37.335209 -80.848381,37.422508 -80.738510,37.396339 -80.507812,37.466118 -80.299072,37.527142 -80.244141,37.640320 -80.299072,37.701199 -79.925522,38.108620 -79.628899,38.543861 -79.343262,38.444981 -79.211418,38.548161 -78.991692,38.848259 -79.063103,38.942322 -78.986198,38.895298 -78.859848,38.762650 -78.738998,38.925220 -78.552231,39.002110 -78.409409,39.189678 -78.321518,39.504040 -78.211670,39.679710 -78.294067,39.622616 -78.376450,39.622608 -78.475342,39.546410 -78.717026,39.554871 -78.815910,39.622608 -78.969711,39.453152 -79.090561,39.453152 -79.475082,39.223728 -79.486076,39.707180 -80.496811,39.732521 -80.496811,40.497089 -80.628647,40.538841 -80.617668,40.245979 -80.859360,39.664902 -81.232910,39.385262 -81.551498,39.359779 -81.749260,39.189678 -81.793213,39.070358 -81.804192,38.925220 -81.925034,38.873909 -81.979958,39.019169 -82.089828,38.950851 -82.221680,38.779781 -82.199699,38.616859 -82.309563,38.591110 -82.309563,38.444981 -82.606201,38.410549 -82.639160,38.160461",
237
+ "VT" => "-73.355713,44.999767 -71.510010,45.015301 -71.647339,44.762337 -71.603394,44.504341 -72.004395,44.331707 -72.114258,44.000717 -72.196655,43.826599 -72.333984,43.707596 -72.421875,43.281204 -72.465820,43.032761 -72.564697,42.751045 -73.289795,42.747009 -73.278809,43.580391 -73.449097,43.600285 -73.427124,44.091530 -73.300781,44.441624 -73.383179,44.645206 -73.416138,44.879227 -73.355713,44.999767",
238
+ "WA" => "-123.332520,48.994637 -117.026367,48.994637 -117.048340,46.452995 -116.916504,45.996964 -119.289551,45.996964 -119.685059,45.874714 -120.124512,45.874714 -120.366211,45.660126 -120.629883,45.736858 -121.201172,45.614037 -121.596680,45.736858 -121.904297,45.690830 -122.321777,45.567909 -122.783203,45.644768 -122.871094,45.905300 -122.980957,46.103710 -123.464355,46.164616 -123.728027,46.286224 -123.991699,46.255848 -124.497070,47.857403 -124.716797,47.945786 -124.782715,48.487484 -123.662109,48.210030 -123.266602,48.283192 -123.134766,48.458351 -123.332520,48.705463 -123.024902,48.777912 -123.332520,48.994637",
239
+ "WI" => "-89.967041,47.301579 -90.439445,46.536190 -90.329582,46.543751 -90.197746,46.468128 -90.120850,46.339340 -89.077141,46.126549 -88.791496,46.004589 -88.648682,46.004589 -88.494873,46.012218 -88.297112,45.958778 -88.121330,45.928219 -88.143311,45.813480 -88.000481,45.782841 -87.857658,45.736858 -87.758781,45.606350 -87.813721,45.506340 -87.890617,45.375301 -87.769768,45.359859 -87.681877,45.383011 -87.769768,45.174290 -87.626953,45.166546 -87.637932,45.104542 -87.462151,45.073521 -87.418213,45.189770 -87.253418,45.220741 -87.220459,45.267155 -87.121582,45.390728 -87.110588,45.452419 -86.813957,45.452419 -86.275627,45.228477 -86.561272,45.019180 -86.726067,44.855858 -87.132561,43.834518 -87.165520,43.651970 -87.044670,42.738937 -87.110588,42.480202 -90.648186,42.504501 -90.714111,42.650120 -91.043701,42.714729 -91.098633,42.875957 -91.153557,42.916199 -91.175529,43.125038 -91.076660,43.261200 -91.197502,43.405041 -91.274406,43.651970 -91.296379,43.874130 -91.461182,44.000710 -91.735832,44.103359 -91.878662,44.190079 -91.955559,44.355270 -92.274162,44.441620 -92.329102,44.535671 -92.548820,44.574810 -92.779541,44.754532 -92.768547,45.290340 -92.636711,45.437000 -92.746582,45.560207 -92.911369,45.560207 -92.878410,45.721519 -92.680656,45.920582 -92.296143,46.057983 -92.307121,46.732330 -91.955559,46.724800 -91.483147,47.002728 -91.164551,47.070122 -90.659180,47.316479 -89.967041,47.301579",
240
+ "WY" => "-111.137695,45.026951 -104.029541,45.034710 -104.040527,40.996483 -111.115723,40.979897 -111.137695,45.026951"
241
+ }
242
+
243
+ end
@@ -0,0 +1,65 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{radiotagmap}
8
+ s.version = "0.0.7"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Claudio Baccigalupo"]
12
+ s.date = %q{2009-09-29}
13
+ s.description = %q{Radiotagmap reads from Yes.com the songs that are currently playing in FM radios, then extracts the most played tag/genre in every U.S. state and returns a KML representation of this data, which can be plotted on a map using Google Maps or Google Earth.}
14
+ s.email = %q{claudiob@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ ".gitignore",
21
+ "LICENSE",
22
+ "README.md",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "features/radiotagmap.feature",
26
+ "features/step_definitions/radiotagmap_steps.rb",
27
+ "features/support/env.rb",
28
+ "lib/radiotagmap.rb",
29
+ "radiotagmap.gemspec",
30
+ "test/radiotagmap_test.rb",
31
+ "test/test_helper.rb"
32
+ ]
33
+ s.has_rdoc = true
34
+ s.homepage = %q{http://github.com/claudiob/radiotagmap}
35
+ s.rdoc_options = ["--charset=UTF-8"]
36
+ s.require_paths = ["lib"]
37
+ s.rubygems_version = %q{1.3.1}
38
+ s.summary = %q{Ruby gem to map by U.S. state the music played on FM radios}
39
+ s.test_files = [
40
+ "test/radiotagmap_test.rb",
41
+ "test/test_helper.rb"
42
+ ]
43
+
44
+ if s.respond_to? :specification_version then
45
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
46
+ s.specification_version = 2
47
+
48
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
49
+ s.add_development_dependency(%q<cucumber>, [">= 0"])
50
+ s.add_runtime_dependency(%q<claudiob-yesradio>, [">= 0.1.2"])
51
+ s.add_runtime_dependency(%q<nokogiri>, [">= 1.3.2"])
52
+ s.add_runtime_dependency(%q<scrobbler>, [">= 0.2.3"])
53
+ else
54
+ s.add_dependency(%q<cucumber>, [">= 0"])
55
+ s.add_dependency(%q<claudiob-yesradio>, [">= 0.1.2"])
56
+ s.add_dependency(%q<nokogiri>, [">= 1.3.2"])
57
+ s.add_dependency(%q<scrobbler>, [">= 0.2.3"])
58
+ end
59
+ else
60
+ s.add_dependency(%q<cucumber>, [">= 0"])
61
+ s.add_dependency(%q<claudiob-yesradio>, [">= 0.1.2"])
62
+ s.add_dependency(%q<nokogiri>, [">= 1.3.2"])
63
+ s.add_dependency(%q<scrobbler>, [">= 0.2.3"])
64
+ end
65
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class RadiotagmapTest < Test::Unit::TestCase
4
+ def test_something_for_real
5
+ assert true
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+
4
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ require 'radiotagmap'
7
+
8
+ class Test::Unit::TestCase
9
+ end
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: radiotagmap
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.7
5
+ platform: ruby
6
+ authors:
7
+ - Claudio Baccigalupo
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-09-29 00:00:00 +02:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: cucumber
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: claudiob-yesradio
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.1.2
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: nokogiri
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 1.3.2
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: scrobbler
47
+ type: :runtime
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 0.2.3
54
+ version:
55
+ description: Radiotagmap reads from Yes.com the songs that are currently playing in FM radios, then extracts the most played tag/genre in every U.S. state and returns a KML representation of this data, which can be plotted on a map using Google Maps or Google Earth.
56
+ email: claudiob@gmail.com
57
+ executables: []
58
+
59
+ extensions: []
60
+
61
+ extra_rdoc_files:
62
+ - LICENSE
63
+ - README.md
64
+ files:
65
+ - .gitignore
66
+ - LICENSE
67
+ - README.md
68
+ - Rakefile
69
+ - VERSION
70
+ - features/radiotagmap.feature
71
+ - features/step_definitions/radiotagmap_steps.rb
72
+ - features/support/env.rb
73
+ - lib/radiotagmap.rb
74
+ - radiotagmap.gemspec
75
+ - test/radiotagmap_test.rb
76
+ - test/test_helper.rb
77
+ has_rdoc: true
78
+ homepage: http://github.com/claudiob/radiotagmap
79
+ licenses: []
80
+
81
+ post_install_message:
82
+ rdoc_options:
83
+ - --charset=UTF-8
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: "0"
91
+ version:
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: "0"
97
+ version:
98
+ requirements: []
99
+
100
+ rubyforge_project:
101
+ rubygems_version: 1.3.5
102
+ signing_key:
103
+ specification_version: 2
104
+ summary: Ruby gem to map by U.S. state the music played on FM radios
105
+ test_files:
106
+ - test/radiotagmap_test.rb
107
+ - test/test_helper.rb