2016-03-06 2 views
-1

Я пытаюсь закодировать 2 независимых многоугольника с привязкой к дороге, созданных из 2-х разных массивов точек lat-lon. Когда я изменяю код только для одного полигона, он выглядит великолепно. Но когда я меняю код на оба полигона, у меня разные полигоны, чем я видел, когда делал по одному. Кроме того, я заметил, что второй многоугольник больше не привязан к дорогам, как должен, и, как я видел, только для кодирования одного полигона.API-интерфейс Google Maps Javascript API для нескольких многоугольников дорог

Я довольно смущен этим. Кажется, что JS API изо всех сил пытается свести многоугольник и привязать к дорогам. Это слишком много точек lat/lon?

Я ценю любую помощь. Пожалуйста, не стесняйтесь спрашивать, не предоставляю ли я достаточную информацию.

Вот мой код:

<script> 

function initMap() { 

var pos = {lat: 29.744860,lng: -95.361302}; 

var myOptions = { 
    zoom: 11, 
    center: pos, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
}; 

var map = new google.maps.Map(document.getElementById('map'), myOptions); 

map.setCenter(pos); 


//FIRST POLYLINE SNAP TO ROAD 

roadTrip1 = [ 

{lat: 29.596497, lng: -95.426788}, 
{lat: 29.540731, lng: -95.415950}, 
{lat: 29.533925, lng: -95.400490}, 
{lat: 29.526571, lng: -95.383886}, 
{lat: 29.493418, lng: -95.246661}, 
{lat: 29.429157, lng: -95.240067}, 
{lat: 29.475006, lng: -94.981166}, 
{lat: 29.652252, lng: -95.033159}, 
{lat: 29.637473, lng: -95.163095}, 
{lat: 29.596965, lng: -95.415699} 
    ]; 

var traceroadTrip1 = new google.maps.Polygon({ 
    path: roadTrip1, 
        strokeColor: '#5c6670', 
        strokeOpacity: 0.8, 
        strokeWeight: 4, 
        fillColor: '#5c6670', 
        fillOpacity: 0.25 
}); 

var service1 = new google.maps.DirectionsService(),traceroadTrip1,snap_path=[]; 
traceroadTrip1.setMap(map); 
for(j=0;j<roadTrip1.length-1;j++){ 
    service1.route({origin: roadTrip1[j],destination: 
    roadTrip1[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); 
      traceroadTrip1.setPath(snap_path); 
     } 
    }); 
} 


// SECOND POLYLINE SNAP TO ROAD 
roadtrip2 = [ 
{lat: 29.704807, lng: -95.374714}, 
{lat: 29.753679, lng: -95.354992}, 
{lat: 29.770151, lng: -95.350105}, 
{lat: 29.813047, lng: -95.399361}, 
{lat: 29.780510, lng: -95.501962}, 
{lat: 29.731015, lng: -95.501280}, 
{lat: 29.678863, lng: -95.493037}, 
{lat: 29.678526, lng: -95.492811}, 
{lat: 29.696583, lng: -95.417439}, 
{lat: 29.693119, lng: -95.413344}, 
{lat: 29.701318, lng: -95.374242}, 
{lat: 29.704807, lng: -95.374714} 
    ]; 

var traceroadtrip2 = new google.maps.Polygon({ 
    path: roadtrip2, 
        strokeColor: '#5c6670', 
        strokeOpacity: 0.8, 
        strokeWeight: 4, 
        fillColor: '#5c6670', 
        fillOpacity: 0.25 
}); 

var service2 = new google.maps.DirectionsService(),traceroadtrip2,snap_path2=[]; 
traceroadtrip2.setMap(map); 
for(j=0;j<roadtrip2.length-1;j++){ 
    service2.route({origin: roadtrip2[j],destination: roadtrip2[j+1],travelMode: google.maps.DirectionsTravelMode.DRIVING},function(result, status) { 
    if(status == google.maps.DirectionsStatus.OK) { 
     snap_path2 = snap_path2.concat(result.routes[0].overview_path); 
     traceroadtrip2.setPath(snap_path2); 
     } 
    }); 
} 


}; 


window.onload = function() { initMap();}; 





</script> 
     <script async defer 
    src="https://maps.googleapis.com/maps/api/js?key=API&signed_in=true&callback=initMap"></script> 

ответ

0

Ваш код получает статус OVER_QUERY_LIMIT и молча неудачу, если вы добавляете сигнал, когда он выходит из строя, вы будете видеть неудачи:

if(status == google.maps.DirectionsStatus.OK) { 
    //... 
} else alert("directions service 2 failed:"+status); 

fiddle with added alert code

изменить свой код, чтобы обработать ограничение по запросу, см. Этот вопрос:

OVER_QUERY_LIMIT in Google Maps API v3: How do I pause/delay in Javascript to slow it down? (относительно геокодера, но аналогичная стратегия будет работать для обслуживания маршрутов)