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;
}