#!/usr/local/bin/perl -w
 use strict;
 use Template;
 use YAML qw( Load );

 my $trip = Load( join "", <> );
 my $data = join "", <DATA>;

 my $mappoints = join ", ",
   map {
     mappoint( $_->{ lat }, $_->{ lon } )
   } @$trip;

 if( scalar @$trip <= 1 ) {
     die "Need at least one track point";
 }

 my $first = $trip->[0];
 my $center =
   mappoint(
     $first->{ lat }, $first->{ lon } );

 my $tmpl = Template->new;
 $tmpl->process( \$data,
   { mappoints => $mappoints,
     center => $center } ) or
   die $tmpl->error();

 sub mappoint {
   my( $lat, $lon ) = @_;

   return
     "new google.maps.LatLng( $lat, $lon )";
 }

 __DATA__
 <!DOCTYPE html>
 <html>
 <head>
 <script src="http://maps.googleapis.com/maps/api/js">
 </script>

 <script>
 function initialize() {
   var mapProp = {
     center:[% center %],
     zoom:16,
     mapTypeId:google.maps.MapTypeId.HYBRID
   };

   var map=new google.maps.Map(
     document.getElementById("googleMap"),
     mapProp);

   var tracks=[ [% mappoints %] ];

   var path=new google.maps.Polyline({
     path:tracks,
     strokeColor:"#f9290c",
     strokeOpacity:0.7,
     strokeWeight:4
   });

   path.setMap(map);
 }

 google.maps.event.addDomListener(window,
   'load', initialize);
 </script>
 </head>

 <body>
 <div id="googleMap"
   style="width:1000px;height:600px;"></div>
 </body>
 </html>