creation of markers along a route

function gMilestone creates markers along a google.maps.DirectionsRoute

HTML

<script type="text/javascript" src="http://maps.google.com/maps/api/js?libraries=geometry&sensor=false"></script>
<div id="map_canvas" style="float:left;width:70%;height:400px;"></div>
<ul></ul>
<script>
  var directions={};
   
   
  function ginit() 
  {
    var opts = {
      zoom: 15,
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      center: new google.maps.LatLng(52.524268, 13.406290000000013)
    }
    
    map = new google.maps.Map(document.getElementById("map_canvas"), opts);
    
   
    var routes=[
                { label:'Erkner',
                  request:{
                    origin: new google.maps.LatLng(52.524268, 13.406290000000013), 
                    destination: new google.maps.LatLng(52.4244119, 13.749783200000024), 
                    travelMode: google.maps.DirectionsTravelMode.DRIVING},
                  rendering:{marker:{icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png'},draggable:true}
                },
                { label:'Potsdam',
                  request:{
                    origin: new google.maps.LatLng(52.524268, 13.406290000000013), 
                    destination: new google.maps.LatLng(52.3941887, 13.072690999999963), 
                    travelMode: google.maps.DirectionsTravelMode.DRIVING},
                  rendering:{marker:{icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png'},draggable:true}
                },
                { label:'Bernau',
                  request:{
                    origin: new google.maps.LatLng(52.524268, 13.406290000000013), 
                    destination: new google.maps.LatLng(52.683483, 13.587553999999955), 
                    travelMode: google.maps.DirectionsTravelMode.DRIVING},
                  rendering:{marker:{icon: 'http://labs.google.com/ridefinder/images/mm_20_yellow.png'},draggable:true}
                }
               ];
    var bounds=new google.maps.LatLngBounds();
        
    var dists=[5000,3000,1000];
    var...

JavaScript

/** 
    * creates markers along a google.maps.DirectionsRoute
    *     
    * @param route object google.maps.DirectionsRoute
    * @param dist  int    interval for milestones in meters
    * @param opts  object google.maps.MarkerOptions  
    * @return array Array populated with created google.maps.Marker-objects
    **/     
  
  function gMilestone(route,dist,opts)
  {
    
    var markers=[],
        geo=google.maps.geometry.spherical,
        path=route.overview_path,
        point=path[0],
        distance=0,
        leg,
        overflow,
        pos;
              
      for(var p=1;p<path.length;++p)
      { 
        leg=Math.round(geo.computeDistanceBetween(point,path[p]));
        d1=distance+0
        distance+=leg;        
        overflow=dist-(d1%dist);
        
        if(distance>=dist && leg>=overflow)
        {
          if(overflow && leg>=overflow)
          { 
            pos=geo.computeOffset(point,overflow,geo.computeHeading(point,path[p]));
            opts.position=pos;
            markers.push(new google.maps.Marker(opts));
            distance-=dist;
          }
          
          while(distance>=dist)
          { 
            pos=geo.computeOffset(point,dist+overflow,geo.computeHeading(point,path[p]));
            opts.position=pos;
            markers.push(new google.maps.Marker(opts));
            distance-=dist;
          }
        }
        point=path[p]
      }
    return markers;    
  }