open_gpx_2_kml 1.0.5 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- open_gpx_2_kml (1.0.5)
4
+ open_gpx_2_kml (1.1.1)
5
5
  builder (= 3.1.4)
6
6
  geo_swap (= 0.2.1)
7
7
  nokogiri (= 1.5.6)
data/example/config.csv CHANGED
@@ -54,4 +54,12 @@ false
54
54
 
55
55
  The color to use if the constant color switch is flipped (must be a key from the colors table)
56
56
  CONSTANT_COLOR
57
- Blue
57
+ Blue
58
+
59
+ use 'windows' to make file paths get translated to backslashes
60
+ PLATFORM
61
+ mac
62
+
63
+ (use 'ON' to have symbol names output in kmz popups from symbols)
64
+ GE_SYMBOL_NAME
65
+ ON
@@ -54,4 +54,12 @@ false
54
54
 
55
55
  The color to use if the constant color switch is flipped (must be a key from the colors table)
56
56
  CONSTANT_COLOR
57
- Blue
57
+ Blue
58
+
59
+ use 'windows' to make file paths get translated to backslashes
60
+ PLATFORM
61
+ windows
62
+
63
+ (use 'ON' to have symbol names output in kmz popups from symbols)
64
+ GE_SYMBOL_NAME
65
+ ON
@@ -13,12 +13,21 @@ module TF1Converter
13
13
  end
14
14
  end
15
15
 
16
- %w(icon_path icons colors input output use_constant_color).each do |name|
16
+ method_names = %w(icon_path icons colors input output use_constant_color platform ge_symbol_name)
17
+ method_names.each do |name|
17
18
  define_singleton_method(name.to_sym) do
18
19
  instance_variable_get("@#{name}")
19
20
  end
20
21
  end
21
22
 
23
+ def self.is_windows?
24
+ self.platform == 'WINDOWS'
25
+ end
26
+
27
+ def self.show_ge_symbol_names?
28
+ self.ge_symbol_name == 'ON'
29
+ end
30
+
22
31
  def self.parse_row(row)
23
32
  if @last_key == 'INPUT'
24
33
  @input = row[0]
@@ -36,6 +45,10 @@ module TF1Converter
36
45
  @use_constant_color = row[0].strip.downcase == 'true'
37
46
  elsif @last_key == 'CONSTANT_COLOR'
38
47
  @constant_color = row[0]
48
+ elsif @last_key == 'PLATFORM'
49
+ @platform = row[0].strip.upcase
50
+ elsif @last_key == 'GE_SYMBOL_NAME'
51
+ @ge_symbol_name = row[0].strip.upcase
39
52
  end
40
53
  if @current_control == 'ICONS'
41
54
  if row.compact.empty?
@@ -11,11 +11,20 @@ module TF1Converter
11
11
  CSV.open(@path, 'wb') do |csv|
12
12
  csv << ['filename', 'name', 'meaning', 'time', 'lat', 'long', 'usng', 'elevation']
13
13
  @waypoints.each do |wp|
14
- csv << [raw_path, wp.name, wp.icon_meaning, wp.timestamp, wp.lat, wp.long, wp.usng, ele_for(wp)]
14
+ csv << [full_filename, wp.name, wp.icon_meaning, wp.timestamp, wp.lat, wp.long, wp.usng, ele_for(wp)]
15
15
  end
16
16
  end
17
17
  end
18
18
 
19
+ def full_filename
20
+ name = CsvFile.translate_filename(@path)
21
+ if ::TF1Converter::Config.is_windows?
22
+ name.gsub("/", "\\")
23
+ else
24
+ name
25
+ end
26
+ end
27
+
19
28
  def raw_path
20
29
  CsvFile.raw_path(@path)
21
30
  end
@@ -0,0 +1,51 @@
1
+ module TF1Converter
2
+ module Kml
3
+ class Placemark
4
+ attr_reader :waypoint, :filename
5
+
6
+ def initialize(waypoint, filename)
7
+ @waypoint = waypoint
8
+ @filename = filename
9
+ end
10
+
11
+ def write_to(xml)
12
+ xml.Placemark do
13
+ if ::TF1Converter::Config.show_ge_symbol_names?
14
+ xml.name(waypoint.name)
15
+ end
16
+ xml.Snippet(maxLines: '0')
17
+ xml.Style(id: 'normalPlacemark') do
18
+ xml.IconStyle do
19
+ xml.Icon do
20
+ xml.href("files/#{waypoint.icon_name}")
21
+ end
22
+ end
23
+ end
24
+
25
+ xml.description do
26
+ xml.cdata description_for(waypoint)
27
+ end
28
+
29
+ xml.Point do
30
+ xml.coordinates "#{waypoint.long},#{waypoint.lat}"
31
+ end
32
+ end
33
+ end
34
+
35
+ private
36
+ def description_for(waypoint)
37
+ desc = ""
38
+ desc << waypoint.timestamp
39
+ desc << '<br>' << waypoint.name
40
+ desc << '<br>' << waypoint.icon_meaning
41
+ desc << '<br>' << "Filename: #{filename}"
42
+ desc << "<br>" << "USNG: #{waypoint.usng}"
43
+ desc << "<br>" << "Lat,Long: #{waypoint.lat},#{waypoint.long}"
44
+ if waypoint.elevation.is_a? String
45
+ desc << "<br>" << "Elevation: #{waypoint.elevation}"
46
+ end
47
+ return desc
48
+ end
49
+ end
50
+ end
51
+ end
@@ -1,4 +1,5 @@
1
1
  require_relative 'kml/track_node'
2
+ require_relative 'kml/placemark'
2
3
 
3
4
  module TF1Converter
4
5
  class KmlFile
@@ -45,38 +46,11 @@ module TF1Converter
45
46
  end
46
47
 
47
48
  def write_waypoint_xml(waypoint, xml)
48
- xml.Placemark do
49
- xml.name(waypoint.name)
50
- xml.Snippet(maxLines: '0')
51
- xml.Style(id: 'normalPlacemark') do
52
- xml.IconStyle do
53
- xml.Icon do
54
- xml.href("files/#{waypoint.icon_name}")
55
- end
56
- end
57
- end
58
-
59
- xml.description do
60
- xml.cdata description_for(waypoint)
61
- end
62
-
63
- xml.Point do
64
- xml.coordinates "#{waypoint.long},#{waypoint.lat}"
65
- end
66
- end
49
+ placemark = Kml::Placemark.new(waypoint, @filename)
50
+ placemark.write_to(xml)
67
51
  end
68
52
 
69
- def description_for(waypoint)
70
- desc = ""
71
- desc << waypoint.timestamp
72
- desc << '<br>' << waypoint.icon_meaning
73
- desc << '<br>' << "Filename: #{@filename}"
74
- desc << "<br>" << "USNG: #{waypoint.usng}"
75
- desc << "<br>" << "Lat,Long: #{waypoint.lat},#{waypoint.long}"
76
- if waypoint.elevation.is_a? String
77
- desc << "<br>" << "Elevation: #{waypoint.elevation}"
78
- end
79
- end
53
+
80
54
 
81
55
  end
82
56
  end
@@ -1,3 +1,3 @@
1
1
  module TF1Converter
2
- VERSION = "1.0.5"
2
+ VERSION = "1.1.1"
3
3
  end
@@ -58,3 +58,11 @@ Custom 21,22.png,Route Blocked,&22
58
58
  Custom 22,23.png,Extra 23,&23
59
59
  Custom 23,24.png,Extra 24,&24
60
60
  Default,default.png,Default,
61
+
62
+ (use 'windows' to make file paths get translated to backslashes)
63
+ PLATFORM
64
+ mac
65
+
66
+ (use 'ON' to have symbol names output in kmz popups from symbols)
67
+ GE_SYMBOL_NAME
68
+ ON
@@ -21,7 +21,7 @@
21
21
  </Icon>
22
22
  </IconStyle>
23
23
  </Style>
24
- <description><![CDATA[18-OCT-09 2:17:38PM<br>Search Start<br>Filename: test<br>USNG: 15S WD 60922 8133<br>Lat,Long: 38.9199972,-92.2972443<br>Elevation: 159.7036133]]></description>
24
+ <description><![CDATA[18-OCT-09 2:17:38PM<br>001<br>Search Start<br>Filename: test<br>USNG: 15S WD 60922 8133<br>Lat,Long: 38.9199972,-92.2972443<br>Elevation: 159.7036133]]></description>
25
25
  <Point>
26
26
  <coordinates>-92.2972443,38.9199972</coordinates>
27
27
  </Point>
@@ -36,7 +36,7 @@
36
36
  </Icon>
37
37
  </IconStyle>
38
38
  </Style>
39
- <description><![CDATA[18-OCT-09 2:18:07PM<br>Victim Detected<br>Filename: test<br>USNG: 15S WD 60946 8109<br>Lat,Long: 38.9197762,-92.2969611<br>Elevation: 206.8077393]]></description>
39
+ <description><![CDATA[18-OCT-09 2:18:07PM<br>002<br>Victim Detected<br>Filename: test<br>USNG: 15S WD 60946 8109<br>Lat,Long: 38.9197762,-92.2969611<br>Elevation: 206.8077393]]></description>
40
40
  <Point>
41
41
  <coordinates>-92.2969611,38.9197762</coordinates>
42
42
  </Point>
@@ -51,7 +51,7 @@
51
51
  </Icon>
52
52
  </IconStyle>
53
53
  </Style>
54
- <description><![CDATA[18-OCT-09 2:18:36PM<br>Victim Confirmed<br>Filename: test<br>USNG: 15S WD 60928 8079<br>Lat,Long: 38.9195040,-92.2971813<br>Elevation: 228.6776123]]></description>
54
+ <description><![CDATA[18-OCT-09 2:18:36PM<br>003<br>Victim Confirmed<br>Filename: test<br>USNG: 15S WD 60928 8079<br>Lat,Long: 38.9195040,-92.2971813<br>Elevation: 228.6776123]]></description>
55
55
  <Point>
56
56
  <coordinates>-92.2971813,38.9195040</coordinates>
57
57
  </Point>
@@ -66,7 +66,7 @@
66
66
  </Icon>
67
67
  </IconStyle>
68
68
  </Style>
69
- <description><![CDATA[18-OCT-09 2:19:49PM<br>Collection Point<br>Filename: test<br>USNG: 15S WD 60883 8039<br>Lat,Long: 38.9191455,-92.2977024<br>Elevation: 230.8405762]]></description>
69
+ <description><![CDATA[18-OCT-09 2:19:49PM<br>004<br>Collection Point<br>Filename: test<br>USNG: 15S WD 60883 8039<br>Lat,Long: 38.9191455,-92.2977024<br>Elevation: 230.8405762]]></description>
70
70
  <Point>
71
71
  <coordinates>-92.2977024,38.9191455</coordinates>
72
72
  </Point>
@@ -81,7 +81,7 @@
81
81
  </Icon>
82
82
  </IconStyle>
83
83
  </Style>
84
- <description><![CDATA[18-OCT-09 2:20:33PM<br>Structure Damage / Safe<br>Filename: test<br>USNG: 15S WD 60912 8043<br>Lat,Long: 38.9191831,-92.2973642<br>Elevation: 234.6857910]]></description>
84
+ <description><![CDATA[18-OCT-09 2:20:33PM<br>005<br>Structure Damage / Safe<br>Filename: test<br>USNG: 15S WD 60912 8043<br>Lat,Long: 38.9191831,-92.2973642<br>Elevation: 234.6857910]]></description>
85
85
  <Point>
86
86
  <coordinates>-92.2973642,38.9191831</coordinates>
87
87
  </Point>
@@ -96,7 +96,7 @@
96
96
  </Icon>
97
97
  </IconStyle>
98
98
  </Style>
99
- <description><![CDATA[18-OCT-09 2:21:40PM<br>Criminal Activity<br>Filename: test<br>USNG: 15S WD 60966 8093<br>Lat,Long: 38.9196337,-92.2967348<br>Elevation: 237.3294678]]></description>
99
+ <description><![CDATA[18-OCT-09 2:21:40PM<br>006<br>Criminal Activity<br>Filename: test<br>USNG: 15S WD 60966 8093<br>Lat,Long: 38.9196337,-92.2967348<br>Elevation: 237.3294678]]></description>
100
100
  <Point>
101
101
  <coordinates>-92.2967348,38.9196337</coordinates>
102
102
  </Point>
@@ -111,7 +111,7 @@
111
111
  </Icon>
112
112
  </IconStyle>
113
113
  </Style>
114
- <description><![CDATA[18-OCT-09 2:22:29PM<br>Command Post<br>Filename: test<br>USNG: 15S WD 61002 8066<br>Lat,Long: 38.9193832,-92.2963225<br>Elevation: 239.7326660]]></description>
114
+ <description><![CDATA[18-OCT-09 2:22:29PM<br>007<br>Command Post<br>Filename: test<br>USNG: 15S WD 61002 8066<br>Lat,Long: 38.9193832,-92.2963225<br>Elevation: 239.7326660]]></description>
115
115
  <Point>
116
116
  <coordinates>-92.2963225,38.9193832</coordinates>
117
117
  </Point>
@@ -126,7 +126,7 @@
126
126
  </Icon>
127
127
  </IconStyle>
128
128
  </Style>
129
- <description><![CDATA[18-OCT-09 2:23:14PM<br>Staging Area<br>Filename: test<br>USNG: 15S WD 61033 8055<br>Lat,Long: 38.9192829,-92.2959630<br>Elevation: 239.9730225]]></description>
129
+ <description><![CDATA[18-OCT-09 2:23:14PM<br>008<br>Staging Area<br>Filename: test<br>USNG: 15S WD 61033 8055<br>Lat,Long: 38.9192829,-92.2959630<br>Elevation: 239.9730225]]></description>
130
130
  <Point>
131
131
  <coordinates>-92.2959630,38.9192829</coordinates>
132
132
  </Point>
@@ -141,7 +141,7 @@
141
141
  </Icon>
142
142
  </IconStyle>
143
143
  </Style>
144
- <description><![CDATA[18-OCT-09 2:24:06PM<br>Meaning 19<br>Filename: test<br>USNG: 15S WD 60985 8098<br>Lat,Long: 38.9196773,-92.2965171<br>Elevation: 238.5311279]]></description>
144
+ <description><![CDATA[18-OCT-09 2:24:06PM<br>009<br>Meaning 19<br>Filename: test<br>USNG: 15S WD 60985 8098<br>Lat,Long: 38.9196773,-92.2965171<br>Elevation: 238.5311279]]></description>
145
145
  <Point>
146
146
  <coordinates>-92.2965171,38.9196773</coordinates>
147
147
  </Point>
@@ -156,7 +156,7 @@
156
156
  </Icon>
157
157
  </IconStyle>
158
158
  </Style>
159
- <description><![CDATA[18-OCT-09 2:25:24PM<br>Meaning 16<br>Filename: test<br>USNG: 15S WD 60909 8156<br>Lat,Long: 38.9202020,-92.2973907<br>Elevation: 237.5697021]]></description>
159
+ <description><![CDATA[18-OCT-09 2:25:24PM<br>010<br>Meaning 16<br>Filename: test<br>USNG: 15S WD 60909 8156<br>Lat,Long: 38.9202020,-92.2973907<br>Elevation: 237.5697021]]></description>
160
160
  <Point>
161
161
  <coordinates>-92.2973907,38.9202020</coordinates>
162
162
  </Point>
@@ -171,7 +171,7 @@
171
171
  </Icon>
172
172
  </IconStyle>
173
173
  </Style>
174
- <description><![CDATA[18-OCT-09 2:26:20PM<br>Extra 21<br>Filename: test<br>USNG: 15S WD 60918 8213<br>Lat,Long: 38.9207150,-92.2972759<br>Elevation: 236.1278076]]></description>
174
+ <description><![CDATA[18-OCT-09 2:26:20PM<br>011<br>Extra 21<br>Filename: test<br>USNG: 15S WD 60918 8213<br>Lat,Long: 38.9207150,-92.2972759<br>Elevation: 236.1278076]]></description>
175
175
  <Point>
176
176
  <coordinates>-92.2972759,38.9207150</coordinates>
177
177
  </Point>
@@ -186,7 +186,7 @@
186
186
  </Icon>
187
187
  </IconStyle>
188
188
  </Style>
189
- <description><![CDATA[18-OCT-09 2:26:40PM<br>Extra 22<br>Filename: test<br>USNG: 15S WD 60902 8223<br>Lat,Long: 38.9208083,-92.2974574<br>Elevation: 234.9260254]]></description>
189
+ <description><![CDATA[18-OCT-09 2:26:40PM<br>012<br>Extra 22<br>Filename: test<br>USNG: 15S WD 60902 8223<br>Lat,Long: 38.9208083,-92.2974574<br>Elevation: 234.9260254]]></description>
190
190
  <Point>
191
191
  <coordinates>-92.2974574,38.9208083</coordinates>
192
192
  </Point>
@@ -201,7 +201,7 @@
201
201
  </Icon>
202
202
  </IconStyle>
203
203
  </Style>
204
- <description><![CDATA[18-OCT-09 2:27:10PM<br>Extra 23<br>Filename: test<br>USNG: 15S WD 60880 8191<br>Lat,Long: 38.9205154,-92.2977240<br>Elevation: 235.6469727]]></description>
204
+ <description><![CDATA[18-OCT-09 2:27:10PM<br>013<br>Extra 23<br>Filename: test<br>USNG: 15S WD 60880 8191<br>Lat,Long: 38.9205154,-92.2977240<br>Elevation: 235.6469727]]></description>
205
205
  <Point>
206
206
  <coordinates>-92.2977240,38.9205154</coordinates>
207
207
  </Point>
@@ -216,7 +216,7 @@
216
216
  </Icon>
217
217
  </IconStyle>
218
218
  </Style>
219
- <description><![CDATA[18-OCT-09 2:29:16PM<br>Search Stop<br>Filename: test<br>USNG: 15S WD 60822 8145<br>Lat,Long: 38.9201116,-92.2983951<br>Elevation: 234.6857910]]></description>
219
+ <description><![CDATA[18-OCT-09 2:29:16PM<br>014<br>Search Stop<br>Filename: test<br>USNG: 15S WD 60822 8145<br>Lat,Long: 38.9201116,-92.2983951<br>Elevation: 234.6857910]]></description>
220
220
  <Point>
221
221
  <coordinates>-92.2983951,38.9201116</coordinates>
222
222
  </Point>
@@ -231,7 +231,7 @@
231
231
  </Icon>
232
232
  </IconStyle>
233
233
  </Style>
234
- <description><![CDATA[Weber Home<br>Default<br>Filename: test<br>USNG: 15S WD 60826 8138<br>Lat,Long: 38.9200473,-92.2983507<br>Elevation: 235.8873291]]></description>
234
+ <description><![CDATA[Weber Home<br>2804 Wild Plum<br>Default<br>Filename: test<br>USNG: 15S WD 60826 8138<br>Lat,Long: 38.9200473,-92.2983507<br>Elevation: 235.8873291]]></description>
235
235
  <Point>
236
236
  <coordinates>-92.2983507,38.9200473</coordinates>
237
237
  </Point>
@@ -11,4 +11,26 @@ describe TF1Converter::Config do
11
11
  TF1Converter::Config.parse_row(['Blue', nil])
12
12
  TF1Converter::Config.colors['Blue'].should_not be_nil
13
13
  end
14
+
15
+ it "can load both platforms" do
16
+ TF1Converter::Config.parse_row(["PLATFORM"])
17
+ TF1Converter::Config.parse_row(['windows'])
18
+ TF1Converter::Config.platform.should == "WINDOWS"
19
+ TF1Converter::Config.is_windows?.should be_true
20
+
21
+ TF1Converter::Config.parse_row(["PLATFORM"])
22
+ TF1Converter::Config.parse_row(["mac"])
23
+ TF1Converter::Config.platform.should == "MAC"
24
+ TF1Converter::Config.is_windows?.should be_false
25
+ end
26
+
27
+ it 'has a configuration for displaying symbol names in google earth' do
28
+ TF1Converter::Config.parse_row(["GE_SYMBOL_NAME"])
29
+ TF1Converter::Config.parse_row(["ON"])
30
+ TF1Converter::Config.show_ge_symbol_names?.should be_true
31
+
32
+ TF1Converter::Config.parse_row(["GE_SYMBOL_NAME"])
33
+ TF1Converter::Config.parse_row(["OFF"])
34
+ TF1Converter::Config.show_ge_symbol_names?.should be_false
35
+ end
14
36
  end
@@ -5,25 +5,33 @@ module TF1Converter
5
5
  describe CsvFile do
6
6
 
7
7
  describe '#to_csv!' do
8
+ let(:base_path){ '/some/long.path/with.file/test.gpx' }
9
+ let(:csv) { [] }
10
+
11
+ before do
12
+ CSV.stub(:open).and_yield(csv)
13
+ end
14
+
8
15
  it 'writes waypoints to the csv file' do
9
16
  waypoints = [double('waypoint').as_null_object]
10
- base_path = '/some/long.path/with.file/test.gpx'
11
- csv = []
12
- CSV.stub(:open).and_yield(csv)
13
17
  CsvFile.new(waypoints, base_path).to_csv!
14
- csv[1].first.should == '/some/long.path/with.file/test'
18
+ csv[1].first.should == '/some/long.path/with.file/test.csv'
15
19
  end
16
20
 
17
21
  it 'writes a blank string when theres no elevation' do
18
22
  waypoint = double('waypoint', elevation: Gpx::Waypoint::NoElevation).as_null_object
19
23
  waypoints = [waypoint]
20
- base_path = '/some/long.path/with.file/test.gpx'
21
- csv = []
22
- CSV.stub(:open).and_yield(csv)
23
24
  CsvFile.new(waypoints, base_path).to_csv!
24
25
  csv[1].last.should == ''
25
26
  end
26
27
 
28
+ it "uses windows separators if the platform is windows" do
29
+ ::TF1Converter::Config.stub(platform: 'WINDOWS')
30
+ waypoints = [double('waypoint').as_null_object]
31
+ CsvFile.new(waypoints, base_path).to_csv!
32
+ csv[1].first.should == '\some\long.path\with.file\test.csv'
33
+ end
34
+
27
35
  end
28
36
 
29
37
  describe '.translate_filename' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: open_gpx_2_kml
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-10 00:00:00.000000000 Z
12
+ date: 2013-09-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -165,6 +165,7 @@ extra_rdoc_files: []
165
165
  files:
166
166
  - .gitignore
167
167
  - .rbenv-version
168
+ - .rspec
168
169
  - Gemfile
169
170
  - Gemfile.lock
170
171
  - README.md
@@ -182,6 +183,7 @@ files:
182
183
  - lib/tf1_converter/gpx/trackpoint.rb
183
184
  - lib/tf1_converter/gpx/waypoint.rb
184
185
  - lib/tf1_converter/gpx_file.rb
186
+ - lib/tf1_converter/kml/placemark.rb
185
187
  - lib/tf1_converter/kml/track_color.rb
186
188
  - lib/tf1_converter/kml/track_node.rb
187
189
  - lib/tf1_converter/kml_file.rb
@@ -255,7 +257,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
255
257
  version: '0'
256
258
  segments:
257
259
  - 0
258
- hash: 634324867566425609
260
+ hash: 1029358299529324430
259
261
  required_rubygems_version: !ruby/object:Gem::Requirement
260
262
  none: false
261
263
  requirements:
@@ -264,7 +266,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
264
266
  version: '0'
265
267
  segments:
266
268
  - 0
267
- hash: 634324867566425609
269
+ hash: 1029358299529324430
268
270
  requirements: []
269
271
  rubyforge_project:
270
272
  rubygems_version: 1.8.23