From dd1f94e3414d1cbea71706dcb0e3a418db208efd Mon Sep 17 00:00:00 2001 From: Steve Coast Date: Fri, 8 Dec 2006 15:31:04 +0000 Subject: [PATCH] trace bits and a georss class --- app/controllers/trace_controller.rb | 6 +++ app/views/trace/_trace.rhtml | 8 ++- lib/osm.rb | 76 +++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 1 deletion(-) diff --git a/app/controllers/trace_controller.rb b/app/controllers/trace_controller.rb index 41802a89b..3448b43ac 100644 --- a/app/controllers/trace_controller.rb +++ b/app/controllers/trace_controller.rb @@ -38,6 +38,12 @@ class TraceController < ApplicationController redirect_to :action => 'mine' end + def georss + traces = Trace.find(:all, :conditions => ['public = true'], :order => 'timestamp DESC', :limit => 20) + + + end + def picture trace = Trace.find(params[:id]) send_data(trace.large_picture, :filename => "#{trace.id}.gif", :type => 'image/png', :disposition => 'inline') if trace.public diff --git a/app/views/trace/_trace.rhtml b/app/views/trace/_trace.rhtml index f7ea77219..1b85898d0 100644 --- a/app/views/trace/_trace.rhtml +++ b/app/views/trace/_trace.rhtml @@ -7,7 +7,7 @@ <% end %> - <%= link_to trace.name, {:controller => 'trace', :action => 'onetrace', :id => trace.id} %> + <%= link_to trace.name, {:controller => 'trace', :action => 'view', :id => trace.id} %> ... <% if trace.inserted %> (<%= trace.size %> points) @@ -18,5 +18,11 @@ <%= trace.description %>
by <%= link_to trace.user.display_name, {:controller => 'trace', :action => 'list', :user => trace.user.display_name} %> + in + <% if trace.tags %> + <% trace.tags.each do |tag| %> + <%= link_to tag.tag, :controller => 'trace', :action => 'bytag', :tag => tag.tag %> + <% end %> + <% end %> diff --git a/lib/osm.rb b/lib/osm.rb index f9f77d1b5..e230b5791 100644 --- a/lib/osm.rb +++ b/lib/osm.rb @@ -11,6 +11,7 @@ module OSM require 'time' require 'rexml/parsers/sax2parser' require 'rexml/text' + require 'xml/libxml' require 'RMagick' class Mercator @@ -61,6 +62,7 @@ module OSM class GPXImporter + # FIXME swap REXML for libXML attr_reader :possible_points attr_reader :actual_points attr_reader :tracksegs @@ -231,4 +233,78 @@ module OSM end end + + class GeoRSS + def initialize(description='OpenStreetMap GPS 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 << 'OpenStreetMap GPS Traces' + @channel << title + description_el = XML::Node.new 'description' + @channel << description_el + + description_el << description + link = XML::Node.new 'link' + link << 'http://www.openstreetmap.org/traces/' + @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 << 'http://www.openstreetmap.org/traces/' + image << link + end + + def add(latitude=0, longitude=0, title_text='dummy title', url='http://www.example.com/', description_text='dummy description', timestamp=Time.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 + + description = XML::Node.new 'description' + description << description_text + item << description + + pubDate = XML::Node.new 'pubDate' + pubDate << timestamp.xmlschema + item << pubDate + + lat_el = XML::Node.new 'geo:lat' + lat_el << latitude.to_s + item << lat_el + + lon_el = XML::Node.new 'geo:lon' + lon_el << longitude.to_s + item << lat_el + + @channel << item + end + + def to_s + return @doc.to_s + end + end end -- 2.39.5