- latradius = 2 * asin(sqrt(sin(radius / 6372.795 / 2) ** 2))
- lonradius = 2 * asin(sqrt(sin(radius / 6372.795 / 2) ** 2 / cos(@lat) ** 2))
- minlat = (@lat - latradius) * 180 / PI
- maxlat = (@lat + latradius) * 180 / PI
- minlon = (@lon - lonradius) * 180 / PI
- maxlon = (@lon + lonradius) * 180 / PI
- return { :minlat => minlat, :maxlat => maxlat, :minlon => minlon, :maxlon => maxlon }
- end
- end
-
- class GeoRSS
- 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"
- rss['xmlns:geo'] = "http://www.w3.org/2003/01/geo/wgs84_pos#"
- @channel = XML::Node.new 'channel'
- rss << @channel
- title = XML::Node.new 'title'
- title << feed_title
- @channel << title
- description_el = XML::Node.new 'description'
- @channel << description_el
-
- description_el << feed_description
- link = XML::Node.new 'link'
- link << feed_url
- @channel << link
- image = XML::Node.new 'image'
- @channel << image
- url = XML::Node.new 'url'
- url << 'http://www.openstreetmap.org/feeds/mag_map-rss2.0.png'
- image << url
- title = XML::Node.new 'title'
- title << "OpenStreetMap"
- image << title
- width = XML::Node.new 'width'
- width << '100'
- image << width
- height = XML::Node.new 'height'
- height << '100'
- image << height
- link = XML::Node.new 'link'
- link << feed_url
- image << link
- end
-
- def add(latitude=0, longitude=0, title_text='dummy title', author_text='anonymous', url='http://www.example.com/', description_text='dummy description', timestamp=DateTime.now)
- item = XML::Node.new 'item'
-
- title = XML::Node.new 'title'
- item << title
- title << title_text
- link = XML::Node.new 'link'
- link << url
- item << link
-
- guid = XML::Node.new 'guid'
- guid << url
- item << guid
-
- description = XML::Node.new 'description'
- description << description_text
- item << description
-
- author = XML::Node.new 'author'
- author << author_text
- item << author
-
- pubDate = XML::Node.new 'pubDate'
- pubDate << timestamp.to_s(:rfc822)
- item << pubDate
-
- if latitude
- lat_el = XML::Node.new 'geo:lat'
- lat_el << latitude.to_s
- item << lat_el
- end