2013-04-10 2 views
3

Я пытаюсь сделать привязку полилинии к дороге из заданных точек маркера. Моя проблема в том, что тот же самый код иногда дает хорошие результаты, как и в этом образе enter image description hereКак сделать полилинию Google Maps V3 на дорогу от заданных точек?

и иногда плохой результат, как это: enter image description here

Любые идеи, почему это hapenning? А также есть ли ограничение для полилинии на дороге?

Моего код карты иня:

var myLatlng = new google.maps.LatLng(47.6557, 23.5833); 
var mapOptions = { 
    zoom: 14, 
    minZoom: 13, 
    maxZoom: 19, 
    center: myLatlng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP, 
    disableDefaultUI: true, 
    overviewMapControl: false, 
    streetViewControl: false, 
    scaleControl:  false, 
    mapTypeControl:  false, 
    panControl:   true, 
    panControlOptions:{ 
     position: google.maps.ControlPosition.TOP_RIGHT 
    }, 
    zoomControl: true, 
    zoomControlOptions: { 
     style: google.maps.ZoomControlStyle.LARGE, 
     position: google.maps.ControlPosition.TOP_RIGHT 
    } 
} 
var map = new google.maps.Map(document.getElementById("map"), mapOptions); 

Мой ломаный код маршрут оснастка:

var polys = new google.maps.Polyline({ 
       map: map, 
       strokeColor: "#5555FF" 
      }); 
    myCoord = [ 
         new google.maps.LatLng(47.663383463156144, 23.58100461977301), 
         new google.maps.LatLng(47.659221287827435, 23.586240291770082), 
         new google.maps.LatLng(47.65534785438211, 23.576713085349184), 
         new google.maps.LatLng(47.66020405359421, 23.572249889548402) 
      ]; 

    // BEGIN: Snap to road 
    var service = new google.maps.DirectionsService(),polys,snap_path=[];    
    polys.setMap(map); 
    placeMarker(myCoord[0], map); 
    for(j=0;j<myCoord.length-1;j++){    
      service.route({origin: myCoord[j],destination: myCoord[j+1],travelMode: google.maps.DirectionsTravelMode.DRIVING},function(result, status) {     
       if(status == google.maps.DirectionsStatus.OK) {     
         snap_path = snap_path.concat(result.routes[0].overview_path); 
         polys.setPath(snap_path); 
       }   
      }); 
    } 
+0

ничего не нужно менять, ваш код сохраняет мой день, и все работает очень хорошо ... Thankx –

ответ

11

Если вы хотите направления с путевыми точками, вы должны просто вызвать directionsService один раз с теми точками, что-то вроде это (не проверено):

var service = new google.maps.DirectionsService(); 
var directionsDisplay = new google.maps.DirectionsRenderer();  
directionsDisplay.setMap(map); 

var waypts = []; 
for(j=1;j<myCoord.length-1;j++){    
     waypts.push({location: myCoord[j], 
        stopover: true}); 
} 

var request = { 
    origin: myCoord[0], 
    destination: myCoord[myCoord.length-1], 
    waypoints: waypts, 
    travelMode: google.maps.DirectionsTravelMode.DRIVING 
}; 

service.route(request,function(result, status) {     
    if(status == google.maps.DirectionsStatus.OK) {     
      directionsDisplay.setDirections(result); 
    } else { alert("Directions request failed:" +status); } 
}); 

Примечание: существует максимум 8 путевые точки с бесплатным API.

+0

Спасибо. Я попробовал ваш код и, похоже, работает. Я проведу еще несколько тестов. –

+0

Обновлен код в соответствии с предлагаемым правлением, не уверен, почему он был отклонен, это правильно. Я никак не мог найти «отказаться от него» или принять его. Спасибо, что попытались это исправить. – geocodezip

+0

Я тестировал ваш код весь день, и до сих пор он отлично работает. Еще раз спасибо, вы спасли мой день. –

Смежные вопросы