abajo te copio el codigo completo de una herramienta para medir, mira el codigo y puedes usar lo que quieras de el incluso modificarlo a tu gusto...
!DOCTYPE html>
<html>
<head>
<title> Herramienta De Medicion </title>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<script type="text/javascript">
// INICiALIZACION DE MAPA: CREO MAPA, MARCADORES, CENTRO EL ZOOM, DIBUJO LINEA, DIBUJO ETIQUETAS
function initialize() {
geocoder = new google.maps.Geocoder();
latLng = new google.maps.LatLng(9.01430,-79.5220);
latLng2 = new google.maps.LatLng(9.01495,-79.5230);
latLng3 = new google.maps.LatLng(9.01497,-79.5235);
map = new google.maps.Map(document.getElementById('mapCanvas'), {
zoom:10,
center: latLng,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
/// CREACION DEL MARCADOR P3
var image = 'img/3.png';
marker = new google.maps.Marker({
position: latLng2,
title: 'Punto C',
map: map,
draggable: true,
icon: image
});
// CREACION DEL MARCADOR P2
var image = 'img/1.png';
marker2 = new google.maps.Marker({
position: latLng2,
title: 'Punto A',
map: map,
draggable: true,
icon: image,
});
// CREACION DEL MARCADOR P1
var image = 'img/2.png';
marker3 = new google.maps.Marker({
position: latLng2,
title: 'Punto intermedio',
map: map,
draggable: true,
icon: image
});
// Escucho el CLICK sobre el mama y si se produce actualizo la posicion del marcador
google.maps.event.addListener(map, 'click', function(event) {
updateMarker(event.latLng);
ib.open(map, this);
});
// geocodePosition(latLng);
// Permito los eventos drag/drop sobre marcador P1 (marker)
google.maps.event.addListener(marker, 'dragstart', function() {
updatePolyline ();
});
google.maps.event.addListener (marker, 'drag', function() {
updatePolyline ();
});
google.maps.event.addListener(marker, 'dragend', function() {
updatePolyline ();
//geocodePosition(marker.getPosition());
});
// Permito los eventos drag/drop sobre ambos marcador P2
google.maps.event.addListener(marker2, 'dragstart', function() {
updatePolyline ();
});
google.maps.event.addListener(marker2, 'drag', function() {
updatePolyline ();
});
google.maps.event.addListener(marker2, 'dragend', function() {
updatePolyline ();
});
// Permito los eventos drag/drop sobre ambos marcador P2
google.maps.event.addListener(marker3, 'dragstart', function() {
updatePolyline ();
});
google.maps.event.addListener(marker3, 'drag', function() {
updatePolyline ();
});
google.maps.event.addListener(marker3, 'dragend', function() {
updatePolyline ();
});
// CENTRO EL MAPA UTILIZANDO fitBound,
// para ello creo el array bounds, a¤ado todos mis marcadores
var bounds = new google.maps.LatLngBounds();
bounds.extend(latLng);
bounds.extend(latLng2);
bounds.extend(latLng3);
map.fitBounds(bounds);
// Esto es necesario para que se pueda reajustar el zoom
google.maps.event.addListener(map, 'zoom_changed', function() {
zoomChangeBoundsListener =
google.maps.event.addListener(map, 'bounds_changed', function(event) {
if (this.getZoom() > 18 && this.initialZoom == true) {
// Change max/min zoom here
this.setZoom(18);
this.initialZoom = false;
}
// this.setZoom(17);
google.maps.event.removeListener(zoomChangeBoundsListener);
});
});
// Ahora realizo el ajuste de forma que quede el zoom ajustado
// y los marcadores centrados
map.initialZoom = true;
map.fitBounds(bounds);
//INICIALIZACION POLILINEA
flightPlanCoordinates = [
latLng, latLng3,latLng2 ];
flightPath = new google.maps.Polyline({
path: flightPlanCoordinates,
strokeWeight: 6,
strokeOpacity: "0.4",
strokeColor: '#0000FF'
});
flightPath.setMap(map);
// ETIQUETAS PARA LAS DISTANCIAS
label1 = new Label({ map: map });
label1.set('zIndex', 1234);
label1.bindTo('position', marker, 'position');
label1.set('text', '');
label2 = new Label({ map: map });
label2.set('zIndex', 1234);
label2.bindTo('position', marker2, 'position');
label2.set('text', '');
label3 = new Label({ map: map });
label3.set('zIndex', 1234);
label3.bindTo('position', marker3, 'position');
label3.set('text', '');
updatePolyline();
} // FIN INICIALIZACION
// REDIBUJA LA POLILINEA EN EL MAPA
function updatePolyline() {
// Borro la linea anterior
flightPath.setMap(null);
// CALCULO LAS NUEVAS POSICIONES DE LOS MARCADORES
var l1=marker.getPosition();
var l2=marker2.getPosition();
var l3=marker3.getPosition();
// DIBUJO LA POLILINEA
flightPath.setPath([l1, l3, l2]);
flightPath.setMap(map);
// CALCULO LAS DISTANCIAS NUEVAS Y LAS IMPRIMO
var dist_a= Math.round(google.maps.geometry.spherical.computeDistanceBetween (l2, l3));
var dist_b= Math.round(google.maps.geometry.spherical.computeDistanceBetween (l1, l3));
var dist_t= dist_a+dist_b;
label1.set('text', dist_t+' mts');
label2.set('text', dist_a+' mts');
label3.set('text', dist_b+' mts');
}
// ACTUALIZO LA POSICION DEL MARCADOR 3 AL HACER CLICK
function updateMarker(location) {
marker.setPosition(location);
marker2.setPosition(location);
marker3.setPosition(location);
updatePolyline();
}
// CALCULO LA DISTANCIA TOTAL
</script>
<style>
*
{
border: 0;
margin: 0;
padding:0
}
body
{
background: lavender;
font-family: Helvetica;
font-size: 16px
text-align: center;
}
fieldset
{
backgrounf: white;
broder: thin solid skyblue;
border-radius: 1em;
padding: 1em;
}
#mapCanvas {
width: 80%;
height: 450px;
margin: auto;
border-radius: 1em;
padding: 1em
#text{
font-size: 20px
}
}
</style>
</head>
<body onload="initialize()">
</style>
<div id="mapCanvas"></div>
</fieldset>
</body>
</html>