I suppose the Canberra Rails Crew meet up has officially begun even though unofficially Hugh, Tim and myself met up at the Front December 2007. This week Hugh & Chris couldn’t make it but we had the right mix of food, chatting, hac-king and Guitar Hero (thank you Allan). While hacking I was badly suffering from Mac-envy but it won’t last long as I will soon own a MacBook. I learned a lot from the guys especially about migrating to Rails 2.0 something that’s coming in handy as we update GeoRuby for Rails 2.0. Thank you for making it a worthwhile evening guys. Thank you Ian (my house mate), your hospitality earns you the “honorary geek” for the evening. Next meet up Feb the 15th. If you would like to focus on a particular topic for the evening feel free to suggest ideas in comments.
I can get the ball rolling by picking up the theme of benefit of Rails in the Enterprise and Government and see if we can get some traction by holding a public tutorial on Intro to Ruby/Rails.
I suppose the Canberra Rails Crew meet up has officially begun even though unofficially Hugh, Tim and myself met up at the Front December 2007. This week Hugh & Chris couldn’t make it but we had the right mix of food, chatting, hacking and Guitar Hero (thank you Allan). While hacking I was badly suffering from Mac-envy but it won’t last long as I will soon own a MacBook. I learned a lot from the guys especially about migrating to Rails 2.0 something that’s coming in handy as we update GeoRuby for Rails 2.0. Thank you for making it a worthwhile evening guys. Thank you Ian (my house mate), your hospitality earns you the “honorary geek” for the evening. Next meet up Feb the 15th. If you would like to focus on a particular topic for the evening feel free to suggest ideas in comments.
I can get the ball rolling by picking up the theme of benefit of Rails in the Enterprise and Government and see if we can get some traction by holding a public tutorial on Intro to Ruby/Rails.
In this post I’ll demonstrate how your rails application can be made to talk to Google Earth. As a simple example, our rails app will put a cross hair in the center of the Google Earth window, every time the camera moves.
create a rails app rails ge_01
add a new mimetype for kml in config/initializers/mime_types.rb
Mime::Type.register "application/vnd.google-earth.kml+xml", :kmlcreate a lesson_one controller & index action/view; you may use the controller generator
setup database (sqlite3 will do)
create a google earth network link as a kml this can be done in a number of ways: you can create a kml file by hand or create a builder template to generate the kml
create network_link action which can be given to your clients
create a builder template (network_link.kml.builder)
server = url_for :controller => 'lesson_one', :only_path => false xml.instruct! xml.kml(:xmlns => "http://earth.google.com/kml/2.2") { xml.Document { xml.name("Pass parameters to my Rails app") xml.open(1) xml.visible(1) xml.NetworkLink { xml.name("My rails app being passed parameters") xml.open(1) xml.visibility(0) xml.Link { xml.href("#{server}") xml.viewRefreshMode("onStop") xml.viewRefreshTime(0.5) xml.viewFormat("BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]&CENTRE=[lookatLon],[lookatLat]") } } } }edit the index action in the lesson_one controller to capture the parameters from Google Earth in instance variables holding the Longitude and Latitude values for the centre
create an index.kml.builder template to respond to the request from Google Earth. Here we’ll use instance variables to create a marker for that point on the map.
text = "<font><em> Centre Lng: #{@centre[0]} Centre Lat: #{@centre[1]} X Min: #{@bbox[0]} Y Min: #{@bbox[1]} X Max: #{@bbox[2]} Y Max: #{@bbox[3]} </em></font>" xml.instruct! :xml xml.kml(:xmlns => "http://earth.google.com/kml/2.2") do xml.Document { xml.Placemark { xml.Snippet(:maxLines => "9") { xml.cdata!(text) } xml.name("cross-hair") xml.Style { xml.LabelStyle { xml.scale(0) } xml.IconStyle { xml.color("ffefebde") xml.Icon { xml.href("root://icons/palette-3.png") xml.x(128) xml.y(32) xml.w(32) xml.h(32) } } } xml.Point { xml.coordinates("#{@centre[0]}, #{@centre[1]}"); } } } endAll this works pretty much unchanged in merb. One only needs to register the kml mime type by adding this to config/merb_init.rb:
Merb.add_mime_type(:kml, :to_kml, %w[application/vnd.google-earth.kml+xml], :Encoding => "UTF-8")Time permitting I’ll try to make a screen-cast of this.

Aleks has just sent us the updated slides for the Rails GIS hacks tutorial. So if you attended today’s tutorial and were wondering where to get the slides - download them while they’re hot: Rails GIS Hacks Slides. Don’t forget to leave us feedback if you have any. See the RailsConfEurope page for all the tutorial material
Keynote Dave Thomas:
Today’s keynote was by Dave Thomas who as David. A. Black said needs no introduction. That talk was titled “Art and Software Engineering” and contained gems of wisdom. It successfully drew analogies between art/artists & poets and software/programmers and had some hilarious metaphors from the art-world. Stories about being “off-by-one robotic cameras”, “poets who dislike people” and “angels mooning god”. Dave showed that these art-metaphors applied equally to the programming-world and that programmers should be learning from them. So what did I get out of the talk? I will try to summarize some of the talk in dot-point
In this post I’ll demonstrate how your rails application can be made to talk to google-earth.
create a rails app rails ge_01
add a new mimetype for kml
Mime::Type.register "application/vnd.google-earth.kml+xml", :kmlcreate a lesson_one controller & index action/view; you may use the controller generator
setup database (sqlite will do)
create a google earth network link as a kml this can be done a number of ways: you can create a kml file by hand or create a builder template to generate the kml
create network_link action which can be given to your clients
create a builder template (network_link.kml.builder)
server = url_for :controller => 'lesson_one', :only_path => false xml.instruct! xml.kml(:xmlns => "http://earth.google.com/kml/2.2") { xml.Document { xml.name("Pass parameters to my Rails app") xml.open(1) xml.visible(1) xml.NetworkLink { xml.name("My rails app being passed parameters") xml.open(1) xml.visibility(0) xml.Link { xml.href("#{server}") xml.viewRefreshMode("onStop") xml.viewRefreshTime(0.5) xml.viewFormat("BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]&CENTRE=[lookatLon],[lookatLat]") } } } }edit the index action in the lesson_one controller to
capture the parameters from Google Earth in instance
variables holding the Longitude and Latitude values
for the centre
create an index.kml.builder template to respond to the request from GE. Here we’ll use instance variables to create a marker for that point on the map.
text = "<font><em> Centre Lng: #{@centre[0]} Centre Lat: #{@centre[1]} X Min: #{@bbox[0]} Y Min: #{@bbox[1]} X Max: #{@bbox[2]} Y Max: #{@bbox[3]} </em></font>" xml.instruct! :xml xml.kml(:xmlns => "http://earth.google.com/kml/2.2") do xml.Document { xml.Placemark { xml.Snippet(:maxLines => "9") { xml.cdata!(text) } xml.name("cross-hair") xml.Style { xml.LabelStyle { xml.scale(0) } xml.IconStyle { xml.color("ffefebde") xml.Icon { xml.href("root://icons/palette-3.png") xml.x(128) xml.y(32) xml.w(32) xml.h(32) } } } xml.Point { xml.coordinates("#{@centre[0]}, #{@centre[1]}"); } } } endTime permitting I’ll try to make a screen-cast of this.
