How to dynamically serve a KML file with Ruby on Rails

Serving a KML file in Ruby on Rails is way easier than doing it in

Here’s how I do it for my little display kml on a google map application.

First of all, you want to trick Google into thinking that the kml file is just a regular file with the extension “kml”. I do this by using a custom route in routes.rb that looks a little something like this:

map.connect ':controller/:action/:ignore_this_bit/:uuid.:format
#The :ignore_this_bit is optional if you want to get around the google
#caching issue detailed below

So that means you could serve the file with a url like this:'random_number'/11.kml

If you put a random number in there then you’ll get around Googles 4 minute cache. Next you create a controller method that will spit out theKMLand render it to the browser using the send_data function like the example detailed below. (I load my kml data using aUUIDby the way – but you can do it any way you want):

def get_kml
  @kml_data = KmlData.find_by_uuid(params[:uuid])
  if @kml_data.kml
    send_data @kml_data.kml
    render :text => 'Kml is empty'

The @kml_data.kml variable contains the raw xml formatted kml.

The real guts of the function is the send_data function. This is rubys way of sending a file to the browser, which is how google expects to view the file.

And that’s it! Piece of cake!

Subscribe via RSS

Back to all blog posts