2012-05-09 15 views
25

In google maps api v2 è stato facile,polilinea scatto alla strada utilizzando Google Maps API v3

var map = new GMap2(document.getElementById("map")); 
    map.setCenter(new GLatLng(53.7877, -2.9832),13) 
// map.addControl(new GLargeMapControl()); 
// map.addControl(new GMapTypeControl()); 
    var dirn = new GDirections(); 

//  var firstpoint = true; 
    var gmarkers = []; 
    var gpolys = []; 
    var dist = 0; 

// == When the user clicks on a the map, get directiobns from that point to itself == 

gmarkers.push(new google.maps.LatLng(53.7877, -2.9832)); 
gmarkers.push(new google.maps.LatLng(53.9007, -2.9832)); 
gmarkers.push(new GLatLng(53.600, -2.700)); 



for (var i = 0; i < gmarkers.length-1; i++) { 
    console.log(gmarkers[i]); 
       dirn.loadFromWaypoints([gmarkers[i].toUrlValue(6),gmarkers[i+1].toUrlValue(6)],{getPolyline:true}); 

} 


// == when the load event completes, plot the point on the street == 
    GEvent.addListener(dirn,"load", function() { 
// snap to last vertex in the polyline 
     var n = dirn.getPolyline().getVertexCount(); 
      map.addOverlay(dirn.getPolyline()); 
      gpolys.push(dirn.getPolyline()); 
      dist += dirn.getPolyline().getDistance(); 
      document.getElementById("distance").innerHTML="Path length: "+(dist/1000).toFixed(2)+" km. "+(dist/1609.344).toFixed(2)+" miles."; 
      }); 
    GEvent.addListener(dirn,"error", function() { 
     GLog.write("Failed: "+dirn.getStatus().code); 
    }); 
console.log(dirn); 

in Google API V3 questo modo semplice non funziona. C'è qualcosa come il servizio di indicazioni stradali, ma non ho idea di come sia possibile disegnare la polilinea attraverso i miei punti e la polilinea verrà fissata su strada.

risposta

67

Sei stato sulla strada giusta con il servizio di indicazioni stradali. Ecco il codice di esempio:

var map, path = new google.maps.MVCArray(), 
    service = new google.maps.DirectionsService(), poly; 

function Init() { 
    var myOptions = { 
    zoom: 17, 
    center: new google.maps.LatLng(37.2008385157313, -93.2812106609344), 
    mapTypeId: google.maps.MapTypeId.HYBRID, 
    mapTypeControlOptions: { 
     mapTypeIds: [google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.HYBRID, 
      google.maps.MapTypeId.SATELLITE] 
    }, 
    disableDoubleClickZoom: true, 
    scrollwheel: false, 
    draggableCursor: "crosshair" 
    } 

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
    poly = new google.maps.Polyline({ map: map }); 
    google.maps.event.addListener(map, "click", function(evt) { 
    if (path.getLength() === 0) { 
     path.push(evt.latLng); 
     poly.setPath(path); 
    } else { 
     service.route({ 
     origin: path.getAt(path.getLength() - 1), 
     destination: evt.latLng, 
     travelMode: google.maps.DirectionsTravelMode.DRIVING 
     }, function(result, status) { 
     if (status == google.maps.DirectionsStatus.OK) { 
      for (var i = 0, len = result.routes[0].overview_path.length; 
       i < len; i++) { 
      path.push(result.routes[0].overview_path[i]); 
      } 
     } 
     }); 
    } 
    }); 
} 

Inoltre, vedi il mio esempio di lavoro: http://people.missouristate.edu/chadkillingsworth/mapsexamples/snaptoroad.htm

+0

Grazie, pulito e conciso. –

+0

@ chad-killingsworth quindi se sto leggendo questo correttamente, si aggira la limitazione massima di 8 waypoint, chiamando il DirectionsService ad ogni clic, e quindi memorizzando tutti quei risultati in un array? Diciamo che volevo mostrare automaticamente un marcatore ad ogni incremento di 1 miglio, simile a gmaps-pedometer.com; qualche idea su come farlo usando l'API? –

+0

Spiacente, ignorare la seconda metà della domanda precedente; trovato la risposta qui: http://stackoverflow.com/questions/2698112/how-to-add-markers-on-google-maps-polylines-based-on-distance-along-the-line .. non esattamente semplice e sembra che debba essere rielaborato per la v3, ma sembra in grado ... –

1

è più opportuno utilizzare Snap alle strade API, e impostare interpolare su true per ottenere perfetta polilinea snaped. https://developers.google.com/maps/documentation/roads/snap

+0

come aggiungere marcatori (ad esempio & marcatori = colore: rosso | etichetta: D | 54.5661310, -1.2505580) nell'url mappa statica? –

Problemi correlati