X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/71cb2c50fcaf29e2b933fc981e40a00223d94d34..c441a4dc15f2de78e6c43a51a850b394a25aa5a9:/lib/gpx.rb diff --git a/lib/gpx.rb b/lib/gpx.rb index 3e1cb9afa..921dce12c 100644 --- a/lib/gpx.rb +++ b/lib/gpx.rb @@ -27,10 +27,12 @@ module GPX point.timestamp = Time.parse(reader.read_string).utc end when XML::Reader::TYPE_END_ELEMENT - if reader.name == "trkpt" && point && point.valid? + if reader.name == "trkpt" && point&.valid? point.altitude ||= 0 yield point @actual_points += 1 + @lats << point.latitude + @lons << point.longitude elsif reader.name == "trkseg" @tracksegs += 1 end @@ -44,6 +46,8 @@ module GPX @possible_points = 0 @actual_points = 0 @tracksegs = 0 + @lats = [] + @lons = [] begin Archive::Reader.open_filename(@file).each_entry_with_data do |entry, data| @@ -57,7 +61,7 @@ module GPX when "application/x-bzip" then io = Bzip2::FFI::Reader.open(@file) end - parse_file(XML::Reader.io(io), &block) + parse_file(XML::Reader.io(io, :options => XML::Parser::Options::NOERROR), &block) end end @@ -94,9 +98,9 @@ module GPX first = true - points.each_with_index do |p, pt| - px = proj.x(p.longitude) - py = proj.y(p.latitude) + @actual_points.times do |pt| + px = proj.x @lons[pt] + py = proj.y @lats[pt] if (pt >= (points_per_frame * n)) && (pt <= (points_per_frame * (n + 1))) pen.thickness = 3 @@ -151,9 +155,9 @@ module GPX first = true - points do |p| - px = proj.x(p.longitude) - py = proj.y(p.latitude) + @actual_points.times do |pt| + px = proj.x @lons[pt] + py = proj.y @lats[pt] pen.line(px, py, oldpx, oldpy) unless first