gpx 0.7 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a9b34462ca830301f69200682dfcf151ab8ffb0b
4
- data.tar.gz: 5be1f021827ad63d9374fa7aca82a33bbfb0738d
3
+ metadata.gz: 2d9422311878830d3e5f57b2a671379cc2c5d972
4
+ data.tar.gz: a08f7e74bb07c826d57fbaf8095c54d6057ab5cf
5
5
  SHA512:
6
- metadata.gz: df4469f3dae0f31aa753637f6d77f8dc9a45e6f70f419cea351b7976f16297f12fd06fda990ef42025181b497c403aa4e0e3a9911fca64c8ae3401d0a9591383
7
- data.tar.gz: 40433303bd14de58e1f9b6c9d5891429d90d71a65b60f8ba8cf00cc01e59c3b55bf50ac9fbff2b9d207603b6b0eb8e9ee65065d8154e45f4a56dc9b0bd79a4c7
6
+ metadata.gz: 904238365d5532474c876b710dd62a025e211f626e8a95585046d0473e9eb046c191de2c87418a3c59fbf9a047ce6fee67ed514f82f85b81d58ae944262d8436
7
+ data.tar.gz: e08bde0c7857f130ab3c6ad24a565c922377a5b965fe54b5be4d3af8ec609c1d77af8aeed39ebf7cd31a0d5f9e431b32f447fb11763c4e71e4dd9111658e4711
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ tests/output/*
2
+ .*.swp
3
+ Gemfile.lock
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0
5
+ - 2.1
6
+ - 2.2
7
+ - jruby-19mode
8
+ script: "bundle exec rake ci:build"
data/CHANGELOG.md ADDED
@@ -0,0 +1,82 @@
1
+ ## [0.8.1] - 2015-08-01
2
+
3
+ * Added support for a GPX `desc` tag. (@doc75)
4
+
5
+ ## [0.8] - 2015-05-14
6
+
7
+ ### Introduced changes from andrewhao/gpx fork:
8
+
9
+ * Fix Rakefiles and move to use Nokigiri (Guillaume Dott)
10
+ * Fix compatibility with 1.0 GPX schemas (Douglas Robertson)
11
+ * Added Ruby 2.2 compatibility and GPX track smoothing capabilities
12
+ (@kbb29)
13
+ * Adding time to waypoints, restore xmlns:nsi attribute (@merlos)
14
+ * Refactor distance calculation methods to the TrackPoint (Andrew Hao)
15
+ * Adding Travis, Code Climate badges.
16
+
17
+ ## [0.7] - 2015-05-09
18
+
19
+ * @rb2k: Make tests and code ruby 1.9 compatible (#3)
20
+ * Switch XML parsing library to hpricot from libxml
21
+ * @ustas-v: Fix bug #2160. Invalid elevation segment. (#4)
22
+ * Doug Fales explicitly released this library under MIT license.
23
+ * Updated changelog and fixing some indentation in waypoint.rb.
24
+
25
+ ## [0.6] - 2010-02-27
26
+
27
+ * Putting the gem building stuff into a gemspec.
28
+ * Fixing some tests since git does not believe in empty directories.
29
+ * Fixing README formatting.
30
+ * README edits.
31
+ * More rdoc tweaks.
32
+ * Changing README to rdoc ext for github.
33
+ * Adding the ability to write GPX to a string in addition to a file. Thanks to Douglas Robertson for the patch.
34
+ * Adding a patch from Douglas Robertson that allows using version 1.0 of the schema for output.
35
+
36
+ ## [0.5] - 2009-07-07
37
+
38
+ * Adding changelog.
39
+ * Revving to version 0.5.
40
+ * Changing my contact email address.
41
+ * Patches from Tom Verbeure (mtbguru.com) to work with libxml-ruby 1.x.
42
+ * Patch from Kang-min Liu to support speed element.
43
+
44
+ ## [0.4] - 2008-02-19
45
+
46
+ * Revving to 0.4.
47
+ * Adding some new unit tests and fixing several file export bugs reported by Jochen Topf. New unit tests also uncovered a bug where the number of trackpoints reported in a file was twice the actual number.
48
+
49
+ ## [0.3] - 2008-02-11
50
+
51
+ * Going to version 0.3.
52
+ * Updating unit tests in light of recent fixes to routes and waypoints code.
53
+ * Thanks to Mike Gauland for discovering some route- and waypoint-related bugs. I've fixed them and also added #to_s on Waypoint so it's easier to debug.
54
+ * Thanks to Christian Koerner for finding and fixing these bugs in the waypoint code.
55
+ * Another patch from Gaku Ueda. This one allows you to pass in a string of GPX data using the :gpx_date => option. Thanks Gaku!
56
+
57
+ ## [0.2] - 2007-11-30
58
+
59
+ * Updating the version #.
60
+ * Updates courtesy of Gaku Ueda:
61
+ * Adding support for GPX 1.0 as well as 1.1 (since libxml namespace parsing was hard-coded to 1.1. previously).
62
+ * Adding a GPX 1.0 unit test file.
63
+ * Miscellaneous updates to make it work with Ruby 1.8.6.
64
+ * First stab at using libxml-ruby instead of REXML. I'm seeing the unit tests finish in under 14 seconds. That is compared to 2 minutes using REXML. (Doug Fales <doug@falesafeconsulting.com>)
65
+ * Fixing more nil time exceptions. (Doug Fales <doug@falesafeconsulting.com>)
66
+ * Fixing an exception in contains_time?. (Doug Fales <doug@falesafeconsulting.com>)
67
+ * A couple of fixes to make the library comply with the different attribute names possible on the bounds element. (Doug Fales <doug@falesafeconsulting.com>)
68
+ * Fixing nil time bug. (Doug Fales <doug@falesafeconsulting.com>)
69
+
70
+ ## [0.1] - 2006-10-14
71
+
72
+ * Initial import of gpx gem. (Doug Fales <doug@falesafeconsulting.com>)
73
+
74
+ [unreleased]: https://github.com/dougfales/gpx/compare/v0.8...HEAD
75
+ [0.8]: https://github.com/dougfales/gpx/compare/v0.7...v0.8
76
+ [0.7]: https://github.com/dougfales/gpx/compare/v0.6...v0.7
77
+ [0.6]: https://github.com/dougfales/gpx/compare/v0.5...v0.6
78
+ [0.5]: https://github.com/dougfales/gpx/compare/v0.4...v0.5
79
+ [0.4]: https://github.com/dougfales/gpx/compare/v0.3...v0.4
80
+ [0.3]: https://github.com/dougfales/gpx/compare/v0.2...v0.3
81
+ [0.2]: https://github.com/dougfales/gpx/compare/v0.1...v0.2
82
+ [0.1]: https://github.com/dougfales/gpx/commit/371a3fa0b971c9a66c66f941eb4f5c3fa18e424f
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in seryz.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,100 @@
1
+ # GPX Gem
2
+
3
+ [<img src="https://travis-ci.org/dougfales/gpx.svg" alt="Build Status" />](https://travis-ci.org/dougfales/gpx)
4
+ [![Code Climate](https://codeclimate.com/github/dougfales/gpx/badges/gpa.svg)](https://codeclimate.com/github/dougfales/gpx)
5
+
6
+ Copyright (C) 2006 Doug Fales doug@falesafeconsulting.com
7
+
8
+ Released under the MIT License.
9
+
10
+ ## What It Does
11
+
12
+ This library reads GPX files and provides an API for reading and manipulating
13
+ the data as objects. For more info on the GPX format, see
14
+ http://www.topografix.com/gpx.asp.
15
+
16
+ In addition to parsing GPX files, this library is capable of converting
17
+ Magellan NMEA files to GPX, and writing new GPX files. It can crop and delete
18
+ rectangular areas within a file, and it also calculates some meta-data about
19
+ the tracks and points in a file (such as distance, duration, average speed,
20
+ etc).
21
+
22
+ ## Examples
23
+
24
+ Reading a GPX file, and cropping its contents to a given area:
25
+ ```ruby
26
+ gpx = GPX::GPXFile.new(:gpx_file => filename) # Read GPX file
27
+ bounds = GPX::Bounds.new(params) # Create a rectangular area to crop
28
+ gpx.crop(bounds) # Crop it
29
+ gpx.write(filename) # Save it
30
+ ```
31
+
32
+ Converting a Magellan track log to GPX:
33
+ ```ruby
34
+ if GPX::MagellanTrackLog::is_magellan_file?(filename)
35
+ GPX::MagellanTrackLog::convert_to_gpx(filename, "#{filename}.gpx")
36
+ end
37
+ ```
38
+
39
+ Exporting an ActiveRecord to GPXFile (as Waypoints)
40
+ ```ruby
41
+ #
42
+ # Our active record in this example is called stop
43
+ #
44
+
45
+ # models/stop.rb
46
+ class Stop < ActiveRecord::Base
47
+ # This model has the following attributes:
48
+ # name
49
+ # lat
50
+ # lon
51
+ # updated_at
52
+
53
+ def self.to_gpx
54
+ require 'GPX'
55
+ gpx = GPX::GPXFile.new
56
+ all.each do |stop|
57
+ gpx.waypoints << GPX::Waypoint.new({name: stop.name, lat: stop.lat, lon: stop.lon, time: stop.updated_at})
58
+ end
59
+ gpx.to_s
60
+ end
61
+ end # class
62
+
63
+
64
+ # controllers/stops.rb
65
+ def index
66
+ @stops = Stop.all
67
+ respond_to do |format|
68
+ format.html {render :index}
69
+ format.gpx { send_data @stops.to_gpx, filename: controller_name + '.gpx' }
70
+ end
71
+ end
72
+
73
+
74
+ # Add this line to config/initializers/mime_types.rb
75
+ Mime::Type.register "application/gpx+xml", :gpx
76
+
77
+
78
+ # To get the xml file:
79
+ # http://localhost:3000/stops.gpx
80
+ ```
81
+
82
+ You have a complete example on how to create a gpx file from scratch on `tests/output_text.rb`.
83
+
84
+
85
+ ## Notes
86
+
87
+ This library was written to bridge the gap between my Garmin Geko
88
+ and my website, WalkingBoss.org (RIP). For that reason, it has always been more of a
89
+ work-in-progress than an attempt at full GPX compliance. The track side of the
90
+ library has seen much more use than the route/waypoint side, so if you're doing
91
+ something with routes or waypoints, you may need to tweak some things.
92
+
93
+ Since this code uses XML to read an entire GPX file into memory, it is not
94
+ the fastest possible solution for working with GPX data, especially if you are
95
+ working with tracks from several days or weeks.
96
+
97
+ Finally, it should be noted that none of the distance/speed calculation or
98
+ crop/delete code has been tested under International Date Line-crossing
99
+ conditions. That particular part of the code will likely be unreliable if
100
+ you're zig-zagging across 180 degrees longitude routinely.
data/Rakefile CHANGED
@@ -1,24 +1,18 @@
1
- require 'rubygems'
2
- require 'rake'
1
+ require 'bundler/gem_tasks'
3
2
  require 'rake/testtask'
4
- require 'rake/rdoctask'
5
- require 'rake/gempackagetask'
6
- require File.dirname(__FILE__) + '/lib/gpx'
7
-
8
- PKG_VERSION = GPX::VERSION
9
- PKG_NAME = "gpx"
10
- PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
11
- RUBY_FORGE_PROJECT = "gpx"
12
- RUBY_FORGE_USER = ENV['RUBY_FORGE_USER'] || "dougfales"
13
- RELEASE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
14
-
15
- PKG_FILES = FileList[
16
- "lib/**/*", "bin/*", "tests/**/*", "[A-Z]*", "Rakefile", "doc/**/*"
17
- ]
3
+ require 'rdoc/task'
18
4
 
19
5
  desc "Default Task"
20
6
  task :default => [ :test ]
21
7
 
8
+ namespace :ci do
9
+ task :build do
10
+ puts "Creating tests/output directory..."
11
+ FileUtils.mkdir_p "tests/output"
12
+ Rake::Task[:test].invoke
13
+ end
14
+ end
15
+
22
16
  # Run the unit tests
23
17
  desc "Run all unit tests"
24
18
  Rake::TestTask.new("test") { |t|
@@ -27,12 +21,6 @@ Rake::TestTask.new("test") { |t|
27
21
  t.verbose = true
28
22
  }
29
23
 
30
- # Make a console, useful when working on tests
31
- desc "Generate a test console"
32
- task :console do
33
- verbose( false ) { sh "irb -I lib/ -r 'gpx'" }
34
- end
35
-
36
24
  # Genereate the RDoc documentation
37
25
  desc "Create documentation"
38
26
  Rake::RDocTask.new("doc") { |rdoc|
@@ -41,12 +29,3 @@ Rake::RDocTask.new("doc") { |rdoc|
41
29
  rdoc.rdoc_files.include('README')
42
30
  rdoc.rdoc_files.include('lib/**/*.rb')
43
31
  }
44
-
45
- desc "Report code statistics (KLOCs, etc) from the application"
46
- task :stats do
47
- require 'code_statistics'
48
- CodeStatistics.new(
49
- ["Library", "lib"],
50
- ["Units", "tests"]
51
- ).to_s
52
- end
data/bin/gpx_distance ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path('../../lib/gpx', __FILE__)
4
+
5
+ filename = ARGV[0]
6
+ gpx = GPX::GPXFile.new(:gpx_file => filename)
7
+ puts "read track with distance #{gpx.distance}"
8
+
9
+
10
+
data/bin/gpx_smooth ADDED
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path('../../lib/gpx', __FILE__)
4
+ require 'optparse'
5
+
6
+
7
+ def str_to_int_or_time(str)
8
+ if str =~ /\A\d{10}\Z/
9
+ return Time.at(str.to_i)
10
+ elsif str =~ /\A\d+\Z/
11
+ return str.to_i
12
+ else
13
+ return DateTime.strptime(str, '%Y%m%d-%H:%M:%S').to_time
14
+ end
15
+ end
16
+
17
+
18
+ options = {}
19
+ OptionParser.new do |opts|
20
+ opts.banner = "Usage: smooth [options]"
21
+
22
+ opts.on("-i", "--input-file FILE", "Input file to read gpx data from (if omitted, data will be read from stdin)") do |v|
23
+ options[:infile] = v
24
+ end
25
+ opts.on("-o", "--output-file FILE", "Output file to write smoothed gpx data to (if omitted, data will be written to stdout)") do |v|
26
+ options[:outfile] = v
27
+ end
28
+ opts.on("-s", "--start-time [YYYYMMDD-HH:MM:SS|EPOCH|OFFSET]", "Start smoothing from time or offset specified (if omitted start from the start of the file)") do |v|
29
+ options[:start] = v
30
+ end
31
+ opts.on("-e", "--end-time [YYYYMMDD-HH:MM:SS|EPOCH|OFFSET]", "Finish smoothing from time or offset specified (if omitted finish at the end of the file)") do |v|
32
+ options[:end] = v
33
+ end
34
+ end.parse!
35
+
36
+
37
+ if options[:infile]
38
+ input = File.open(options[:infile])
39
+ else
40
+ input = $stdin
41
+ end
42
+
43
+ options[:start] = str_to_int_or_time(options[:start]) if options[:start]
44
+ options[:end] = str_to_int_or_time(options[:end]) if options[:end]
45
+
46
+ gpx = GPX::GPXFile.new(:gpx_data => input)
47
+ $stderr.puts "read track with distance #{gpx.distance}"
48
+
49
+ #1419062980
50
+ gpx.tracks.each do |track|
51
+ track.segments.each do |segment|
52
+ segment.smooth_location_by_average({:end => options[:end], :start => options[:start]})
53
+ end
54
+ end
55
+ gpx.recalculate_distance
56
+ $stderr.puts "smoothed distance #{gpx.distance}"
57
+
58
+ if options[:outfile]
59
+ gpx.write(options[:outfile], false)
60
+ else
61
+ puts gpx.to_s(false)
62
+ end
63
+
data/gpx.gemspec CHANGED
@@ -1,16 +1,24 @@
1
- require './lib/gpx/gpx' # load this just to get GPX::VERSION
2
- require 'rake' # For FileList
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'gpx/version'
5
+
3
6
  Gem::Specification.new do |s|
4
7
  s.name = 'gpx'
5
8
  s.version = GPX::VERSION
9
+ s.authors = ["Guillaume Dott", "Doug Fales", "Andrew Hao"]
10
+ s.email = ["guillaume+github@dott.fr", "doug.fales@gmail.com", "andrewhao@gmail.com"]
6
11
  s.summary = %q{A basic API for reading and writing GPX files.}
7
12
  s.description = %q{A basic API for reading and writing GPX files.}
8
- s.files = FileList[ "lib/**/*", "bin/*", "tests/**/*", "[A-Z]*", "Rakefile", "doc/**/*" ]
9
- s.require_path = 'lib'
13
+
14
+ s.files = `git ls-files`.split($/)
15
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
16
+ s.require_paths = ["lib"]
10
17
  s.has_rdoc = true
11
- s.author = "Doug Fales"
12
- s.email = "doug.fales@gmail.com"
13
- s.homepage = "http://dougfales.github.com/gpx/"
14
- s.rubyforge_project = "gpx"
15
- s.add_dependency('hpricot')
18
+
19
+ s.homepage = "http://www.github.com/dougfales/gpx"
20
+ s.add_dependency 'rake'
21
+ s.add_dependency 'nokogiri'
22
+ s.add_development_dependency 'bundler'
23
+ s.add_development_dependency 'minitest'
16
24
  end
data/lib/gpx.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2006 Doug Fales
2
+ # Copyright (c) 2006 Doug Fales
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -20,19 +20,19 @@
20
20
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
- $:.unshift(File.dirname(__FILE__))
24
- require 'rubygems'
25
- require 'hpricot'
26
- require 'date'
23
+
27
24
  require 'time'
28
- require 'csv'
29
- require 'gpx/gpx'
30
- require 'gpx/gpx_file'
31
- require 'gpx/bounds'
32
- require 'gpx/track'
33
- require 'gpx/route'
34
- require 'gpx/segment'
35
- require 'gpx/point'
36
- require 'gpx/trackpoint'
37
- require 'gpx/waypoint'
38
- require 'gpx/magellan_track_log'
25
+ require 'nokogiri'
26
+
27
+ require File.expand_path('../gpx/version', __FILE__)
28
+
29
+ require File.expand_path('../gpx/gpx', __FILE__)
30
+ require File.expand_path('../gpx/gpx_file', __FILE__)
31
+ require File.expand_path('../gpx/bounds', __FILE__)
32
+ require File.expand_path('../gpx/track', __FILE__)
33
+ require File.expand_path('../gpx/route', __FILE__)
34
+ require File.expand_path('../gpx/segment', __FILE__)
35
+ require File.expand_path('../gpx/point', __FILE__)
36
+ require File.expand_path('../gpx/trackpoint', __FILE__)
37
+ require File.expand_path('../gpx/waypoint', __FILE__)
38
+ require File.expand_path('../gpx/magellan_track_log', __FILE__)
data/lib/gpx/bounds.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (c) 2006 Doug Fales
2
+ # Copyright (c) 2006 Doug Fales
3
3
  #
4
4
  # Permission is hereby granted, free of charge, to any person obtaining
5
5
  # a copy of this software and associated documentation files (the
@@ -21,63 +21,54 @@
21
21
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
  #++
23
23
  module GPX
24
- class Bounds < Base
25
- attr_accessor :min_lat, :max_lat, :max_lon, :min_lon, :center_lat, :center_lon
24
+ class Bounds < Base
25
+ attr_accessor :min_lat, :max_lat, :max_lon, :min_lon, :center_lat, :center_lon
26
26
 
27
- # Creates a new bounds object with the passed-in min and max longitudes
28
- # and latitudes.
29
- def initialize(opts = { :min_lat => 90.0, :max_lat => -90.0, :min_lon => 180.0, :max_lon => -180.0})
30
- @min_lat, @max_lat = opts[:min_lat].to_f, opts[:max_lat].to_f
31
- @min_lon, @max_lon = opts[:min_lon].to_f, opts[:max_lon].to_f
32
- end
27
+ # Creates a new bounds object with the passed-in min and max longitudes
28
+ # and latitudes.
29
+ def initialize(opts = { :min_lat => 90.0, :max_lat => -90.0, :min_lon => 180.0, :max_lon => -180.0})
30
+ @min_lat, @max_lat = opts[:min_lat].to_f, opts[:max_lat].to_f
31
+ @min_lon, @max_lon = opts[:min_lon].to_f, opts[:max_lon].to_f
32
+ end
33
33
 
34
- # Returns the middle latitude.
35
- def center_lat
36
- distance = (max_lat - min_lat)/2.0
37
- (min_lat + distance)
38
- end
34
+ # Returns the middle latitude.
35
+ def center_lat
36
+ distance = (max_lat - min_lat)/2.0
37
+ (min_lat + distance)
38
+ end
39
39
 
40
- # Returns the middle longitude.
41
- def center_lon
42
- distance = (max_lon - min_lon)/2.0
43
- (min_lon + distance)
44
- end
40
+ # Returns the middle longitude.
41
+ def center_lon
42
+ distance = (max_lon - min_lon)/2.0
43
+ (min_lon + distance)
44
+ end
45
45
 
46
- def to_xml
47
- bnd = XML::Node.new('bounds')
48
- bnd['minlat'] = min_lat.to_s
49
- bnd['minlon'] = min_lon.to_s
50
- bnd['maxlat'] = max_lat.to_s
51
- bnd['maxlon'] = max_lon.to_s
52
- bnd
53
- end
46
+ # Returns true if the pt is within these bounds.
47
+ def contains?(pt)
48
+ (pt.lat >= min_lat and pt.lat <= max_lat and pt.lon >= min_lon and pt.lon <= max_lon)
49
+ end
54
50
 
55
- # Returns true if the pt is within these bounds.
56
- def contains?(pt)
57
- (pt.lat >= min_lat and pt.lat <= max_lat and pt.lon >= min_lon and pt.lon <= max_lon)
51
+ # Adds an item to itself, expanding its min/max lat/lon as needed to
52
+ # contain the given item. The item can be either another instance of
53
+ # Bounds or a Point.
54
+ def add(item)
55
+ if(item.respond_to?(:lat) and item.respond_to?(:lon))
56
+ @min_lat = item.lat if item.lat < @min_lat
57
+ @min_lon = item.lon if item.lon < @min_lon
58
+ @max_lat = item.lat if item.lat > @max_lat
59
+ @max_lon = item.lon if item.lon > @max_lon
60
+ else
61
+ @min_lat = item.min_lat if item.min_lat < @min_lat
62
+ @min_lon = item.min_lon if item.min_lon < @min_lon
63
+ @max_lat = item.max_lat if item.max_lat > @max_lat
64
+ @max_lon = item.max_lon if item.max_lon > @max_lon
58
65
  end
66
+ end
59
67
 
60
- # Adds an item to itself, expanding its min/max lat/lon as needed to
61
- # contain the given item. The item can be either another instance of
62
- # Bounds or a Point.
63
- def add(item)
64
- if(item.respond_to?(:lat) and item.respond_to?(:lon))
65
- @min_lat = item.lat if item.lat < @min_lat
66
- @min_lon = item.lon if item.lon < @min_lon
67
- @max_lat = item.lat if item.lat > @max_lat
68
- @max_lon = item.lon if item.lon > @max_lon
69
- else
70
- @min_lat = item.min_lat if item.min_lat < @min_lat
71
- @min_lon = item.min_lon if item.min_lon < @min_lon
72
- @max_lat = item.max_lat if item.max_lat > @max_lat
73
- @max_lon = item.max_lon if item.max_lon > @max_lon
74
- end
75
- end
76
-
77
- # Returns the min_lat, min_lon, max_lat, and max_lon in a labeled string.
78
- def to_s
79
- "min_lat: #{min_lat} min_lon: #{min_lon} max_lat: #{max_lat} max_lon: #{max_lon}"
80
- end
68
+ # Returns the min_lat, min_lon, max_lat, and max_lon in a labeled string.
69
+ def to_s
70
+ "min_lat: #{min_lat} min_lon: #{min_lon} max_lat: #{max_lat} max_lon: #{max_lon}"
71
+ end
81
72
 
82
- end
73
+ end
83
74
  end