flickrの各画像サイズのurl改
やっぱcontrolleが何を表示するか?を決めて、viewがどう表示するか?を担当した方がいいので
http://shokai.mag.keio.ac.jp/geophoto/photos.kml?lat=35&lon=135&size=thumb
でサイズ指定できるようにしてみた
controllers/photos_controller.rb
def index dist = 5 dist = params[:dist].to_i if params[:dist] != nil lat = params[:lat].to_i if params[:lat] != nil lon = params[:lon].to_i if params[:lon] != nil if (lat != nil && lon != nil) @photos = Photo.find_by_sql ["SELECT * FROM photos WHERE ? < lat AND lat < ? AND ? < lon AND lon < ? LIMIT 500", lat - dist, lat + dist, lon - dist, lon + dist] else @photos = Photo.find(:all, :limit => 50) end @photos.each{ |photo| photo.size = params[:size] } respond_to do |format| format.html format.xml { render :xml => @photos } format.js { render :json => @photos } format.kml { render :kml => @photos } end end
views/photos/index.kml.erb
<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://earth.google.com/kml/2.1"> <Document> <name>flickr geophoto</name> <% for photo in @photos %> <Style id="geophoto<%=h photo.photo_id %>"> <IconStyle> <color>ffffffff</color> <scale>2</scale> <Icon> <href><%=h photo.source_url_size %></href> </Icon> <hotSpot x="20" y="20" xunits="pixels" yunits="pixels"/> </IconStyle> </Style> <Placemark> <name><%=h photo.title %></name> <LookAt> <longitude><%=h photo.lon %></longitude> <latitude><%=h photo.lat %></latitude> <altitude>0</altitude> <range>110000</range> <tilt><%= rand(90) %></tilt> <heading><%= rand(360) %></heading> <altitudeMode>RelativeToGroundAltitudeGE</altitudeMode> </LookAt> <styleUrl>#geophoto<%=h photo.photo_id %></styleUrl> <Point> <coordinates><%=h photo.lon %>,<%=h photo.lat %></coordinates> </Point> </Placemark> <% end %> </Document> </kml>
models/photo.rb
class Photo < ActiveRecord::Base def size=(size = 'medium') @disp_size = size end def source_url_size() if @disp_size == 'square' return source_url.sub(/\.jpg/, '_s.jpg') elsif @disp_size == 'thumb' return source_url.sub(/\.jpg/, '_t.jpg') elsif @disp_size == 'small' return source_url.sub(/\.jpg/, '_m.jpg') elsif @disp_size == 'large' return source_url.sub(/\.jpg/, '_b.jpg') end return source_url end end