I’ve made a ruler to measure distances on a Google Map V3. The file Ruler.js contains a two function: one to calculate the distance between two points on the map with their position expressed in decimal degrees, and one function that add the ruler. Ther “ruler” is composed with two markers, a poly and two labels which show the distance. The labels are placed on the map with the Labels.js class from Marc Ridley, downloaded from his blog.

Here is the link to the demo and here is the link for download it.

Here is the code for ruler.js addruler function:

function addruler() { ruler1 = new google.maps.Marker({ position: map.getCenter() , map: map, draggable: true }); ruler2 = new google.maps.Marker({ position: map.getCenter() , map: map, draggable: true }); var ruler1label = new Label({ map: map }); var ruler2label = new Label({ map: map }); ruler1label.bindTo('position', ruler1, 'position'); ruler2label.bindTo('position', ruler2, 'position'); rulerpoly = new google.maps.Polyline({ path: [ruler1.position, ruler2.position] , strokeColor: "#FFFF00", strokeOpacity: .7, strokeWeight: 8 }); rulerpoly.setMap(map); ruler1label.set('text',"0m"); ruler2label.set('text',"0m"); google.maps.event.addListener(ruler1, 'drag', function() { rulerpoly.setPath([ruler1.getPosition(), ruler2.getPosition()]); ruler1label.set('text',distance( ruler1.getPosition().lat(), ruler1.getPosition().lng(), ruler2.getPosition().lat(), ruler2.getPosition().lng())); ruler2label.set('text',distance( ruler1.getPosition().lat(), ruler1.getPosition().lng(), ruler2.getPosition().lat(), ruler2.getPosition().lng())); }); google.maps.event.addListener(ruler2, 'drag', function() { rulerpoly.setPath([ruler1.getPosition(), ruler2.getPosition()]); ruler1label.set('text',distance( ruler1.getPosition().lat(), ruler1.getPosition().lng(), ruler2.getPosition().lat(), ruler2.getPosition().lng())); ruler2label.set('text',distance( ruler1.getPosition().lat(), ruler1.getPosition().lng(), ruler2.getPosition().lat(), ruler2.getPosition().lng())); }); }

And this is the function to calculate distances:

function distance(lat1,lon1,lat2,lon2) { var R = 6371; // km (change this constant to get miles) var dLat = (lat2-lat1) * Math.PI / 180; var dLon = (lon2-lon1) * Math.PI / 180; var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(lat1 * Math.PI / 180 ) * Math.cos(lat2 * Math.PI / 180 ) * Math.sin(dLon/2) * Math.sin(dLon/2); var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); var d = R * c; if (d>1) return Math.round(d)+"km"; else if (d<=1) return Math.round(d*1000)+"m"; return d; }

## Anything to say?