X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/07e84496255ebd1d53108894e0fb8ce98b55ccee..5f8ab9e9244550b20b8d3bd97b3567df7020d06d:/lib/osm.rb diff --git a/lib/osm.rb b/lib/osm.rb index de5e73d29..c038ab2d5 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,50 @@ module OSM require 'digest/md5' require 'RMagick' + # The base class for API Errors. + class APIError < RuntimeError + def render_opts + { :text => "", :status => :internal_server_error } + end + 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 + def render_opts + { :text => "", :status => :precondition_failed } + end + end + + # Raised when to delete an already-deleted object. + class APIAlreadyDeletedError < APIError + def render_opts + { :text => "", :status => :gone } + end + end + + # Raised when the provided version is not equal to the latest in the db. + class APIVersionMismatchError < APIError + def initialize(provided, latest) + @provided, @latest = provided, latest + end + + attr_reader :provided, :latest + + def render_opts + { :text => "Version mismatch: Provided " + provided.to_s + + ", server had: " + latest.to_s, :status => :bad_request } + end + 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,6 +94,13 @@ 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 @@ -279,7 +318,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" @@ -424,4 +463,6 @@ module OSM return "#{tilesql} AND #{prefix}latitude BETWEEN #{minlat} AND #{maxlat} AND #{prefix}longitude BETWEEN #{minlon} AND #{maxlon}" end + + end