X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/5bf4ce35c0a8c2f8fa468ab6271e7bd1d8cf97b3..3052bd7bedc504728e6258a7dec01fd4f8df0e5f:/lib/osm.rb diff --git a/lib/osm.rb b/lib/osm.rb index aca4031eb..bd9351026 100644 --- a/lib/osm.rb +++ b/lib/osm.rb @@ -1,13 +1,6 @@ +# The OSM module provides support functions for OSM. module OSM - # This piece of magic reads a GPX with SAX and spits out - # lat/lng and stuff - # - # This would print every latitude value: - # - # gpx = OSM::GPXImporter.new('somefile.gpx') - # gpx.points {|p| puts p['latitude']} - require 'time' require 'rexml/parsers/sax2parser' require 'rexml/text' @@ -15,11 +8,27 @@ module OSM require 'digest/md5' require 'RMagick' + # The base class for API Errors. + class APIError < RuntimeError + end + + # Raised when an API object is not found. + class APINotFoundError < APIError + end + + # Raised when a precondition to an API action fails sanity check. + class APIPreconditionFailedError < APIError + end + + # Raised when to delete an already-deleted object. + class APIAlreadyDeletedError < APIError + end + + # Helper methods for going to/from mercator and lat/lng. class Mercator include Math #init me with your bounding box and the size of your image - def initialize(min_lat, min_lon, max_lat, max_lon, width, height) xsize = xsheet(max_lon) - xsheet(min_lon) ysize = ysheet(max_lat) - ysheet(min_lat) @@ -62,14 +71,21 @@ module OSM end + # This piece of magic reads a GPX with SAX and spits out + # lat/lng and stuff + # + # This would print every latitude value: + # + # gpx = OSM::GPXImporter.new('somefile.gpx') + # gpx.points {|p| puts p['latitude']} class GPXImporter # FIXME swap REXML for libXML attr_reader :possible_points attr_reader :actual_points attr_reader :tracksegs - def initialize(filename) - @filename = filename + def initialize(file) + @file = file end def points @@ -85,7 +101,9 @@ module OSM gotele = false gotdate = false - parser = REXML::Parsers::SAX2Parser.new(File.new(@filename)) + @file.rewind + + parser = REXML::Parsers::SAX2Parser.new(@file) parser.listen( :start_element, %w{ trkpt }) do |uri,localname,qname,attributes| lat = attributes['lat'].to_f @@ -277,7 +295,7 @@ module OSM def initialize(feed_title='OpenStreetMap GPS Traces', feed_description='OpenStreetMap GPS Traces', feed_url='http://www.openstreetmap.org/traces/') @doc = XML::Document.new @doc.encoding = 'UTF-8' - + rss = XML::Node.new 'rss' @doc.root = rss rss['version'] = "2.0" @@ -422,4 +440,6 @@ module OSM return "#{tilesql} AND #{prefix}latitude BETWEEN #{minlat} AND #{maxlat} AND #{prefix}longitude BETWEEN #{minlon} AND #{maxlon}" end + + end