2012-07-17 9 views
5

Tengo un mapa con ruta (varios destinos, no solo A, B como en la página siguiente). Las direcciones son arrastrables. Me gustaría guardar las rutas modificadas. La página a continuación es lo que iba ... pordirecciones Gmaps guardado de rutas, puntos intermedios

http://vikku.info/programming/google-maps-v3/draggable-directions/saving-draggable-directions-saving-waypoints-google-directions-google-maps-v3.htm

Esto es lo que tengo:

google.maps.event.addListener(directionsDisplay, 'directions_changed', function() { 
      console.log('reroute'); 

      var rleg_count = directionsDisplay.directions.routes[0].legs.length; 

      data.start = { 
       'lat':directionsDisplay.directions.routes[0].legs[0].start_location.lat(), 
       'lng':directionsDisplay.directions.routes[0].legs[0].start_location.lng() 
      }; 
      data.end = { 
       'lat':directionsDisplay.directions.routes[0].legs[rleg_count-1].end_location.lat(), 
       'lng':directionsDisplay.directions.routes[0].legs[rleg_count-1].end_location.lng() 
      }; 

      var wp=[]; 
      var w = []; 
      var route = directionsDisplay.directions.routes[0]; 
      for (var l = 0; l < route.legs.length; l++) 
      { 
       for(var j = 0; j < route.legs[l].via_waypoints.length; j++) 
       { 
        w.push({ 
         location:{'lat':route.legs[l].via_waypoints[j].lat(), 'lng':route.legs[l].via_waypoints[j].lng()}, 
         stopover:true 
        }); 
       } 
      } 

      data.waypoints = w; 
     }); 

Y la función setroute:

function setRoute(os) 
    { 
     var wp = []; 
     for(var i=0;i<os.waypoints.length;i++) 
     { 
      wp[i] = { 
       'location': new google.maps.LatLng(os.waypoints[i].location.lat, os.waypoints[i].location.lng), 
       'stopover': os.waypoints[i].stopover 
      } 
     } 

     var request = { 
      'origin':new google.maps.LatLng(os.start.lat, os.start.lng), 
      'destination':new google.maps.LatLng(os.end.lat, os.end.lng), 
      'waypoints': wp, 
      optimizeWaypoints: false, 
      avoidHighways: false, 
      avoidTolls: false, 
      travelMode: google.maps.TravelMode.DRIVING, 
     } 

     directionsService.route(request, function(res,sts){ 
      // console.log(res); 
      // console.log(sts); 
      if(sts=='OK') 
       directionsDisplay.setDirections(res); 
     }); 
    } 

El problema es que el código funciona si solo hay 2 destinos (A, B), pero tan pronto como hay más destinos ... no funciona bien ... ignora los otros destinos

Por lo que he podido decir, los waypoints son correctos. Parece que hay un problema con múltiples destinos y no sé cómo rectificarlo.

Gracias!

Respuesta

0

he logrado solucionar el problema con la siguiente actualización de mi código:

google.maps.event.addListener(directionsDisplay, 'directions_changed', function() { 
      console.log('reroute'); 

      var rleg_count = directionsDisplay.directions.routes[0].legs.length; 

      data.start = { 
       'lat':directionsDisplay.directions.routes[0].legs[0].start_location.lat(), 
       'lng':directionsDisplay.directions.routes[0].legs[0].start_location.lng() 
      }; 
      data.end = { 
       'lat':directionsDisplay.directions.routes[0].legs[rleg_count-1].end_location.lat(), 
       'lng':directionsDisplay.directions.routes[0].legs[rleg_count-1].end_location.lng() 
      }; 

      var wp=[]; 
      var w = []; 
      var route = directionsDisplay.directions.routes[0]; 
      for (var l = 0; l < route.legs.length; l++) 
      { 
        // Skip first and last leg - for more than 2 legs 
      if(l != 0 || l != rleg_count-1) 
      { 
/* start solution */ 
       w.push({ 
        location:{'lat':route.legs[l].start_location.lat(), 'lng':route.legs[l].start_location.lng()}, 
        stopover:true 
       }); 
      } 
/* end solution */ 
       for(var j = 0; j < route.legs[l].via_waypoints.length; j++) 
       { 
        w.push({ 
         location:{'lat':route.legs[l].via_waypoints[j].lat(), 'lng':route.legs[l].via_waypoints[j].lng()}, 
         stopover:false 
        }); 
       } 
      } 

      data.waypoints = w; 
     }); 
Cuestiones relacionadas