2015-04-06 1 views
0

Я получаю сообщение об ошибке Uncaught InvalidValueError: in property origin: not a string; and not a LatLng or LatLngLiteral: not an Object, когда я звоню в службу навигации по картам Google - даже при этом направления, похоже, добавляются на карту?Непринятое исключение при вызове указаний карт Google Служба

Вот функция, которая вызывает службу направления между текущим местоположением (currentPos) и место не слишком далеко (LatLng(52.705151, -2.741861))

function calcRoute() { 
    var start = currentPos; 
    var end = new google.maps.LatLng(52.705151, -2.741861); 
    var request = { 
     origin: start, 
     destination: end, 
     travelMode: google.maps.TravelMode.WALKING 
    }; 
    directionsService.route(request, function (response, status) { 
     if (status == google.maps.DirectionsStatus.OK) { 
      directionsDisplay.setDirections(response); 
     } 
    }); 
} 

Вот код, который инициализирует карту и вызывает функцию calcRoute() :

var directionsDisplay; 
var directionsService = new google.maps.DirectionsService(); 

var currentPos; 
var destinationPos; 

var map; 

function initialize() { 
    directionsDisplay = new google.maps.DirectionsRenderer(); 
    var mapOptions = { 
     zoom: 14 
    }; 

    map = new google.maps.Map(document.getElementById('map_canvas'), 
     mapOptions); 

    directionsDisplay.setMap(map); 

    var infoWindow = new google.maps.InfoWindow(); 

    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(function (position) { 
      currentPos = new google.maps.LatLng(position.coords.latitude, 
              position.coords.longitude); 

      var marker = new google.maps.Marker({ 
       position: currentPos, 
       map: map, 
       title: "You are here" 
      }); 

      marker.setIcon('http://maps.google.com/mapfiles/ms/icons/green-dot.png') 

      map.setCenter(currentPos); 

      $.ajax({ 
       type: 'GET', 
       url: $('#AddMarkersToMap').val(), 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function (data) { 
        addMarkers(data, infoWindow); 
       }, 
       error: function() { 
        alert("Error"); 
       } 
      }); 


     }, function() { 
      handleNoGeolocation(true); 
     }); 
    } else { 
     handleNoGeolocation(false); 
    } 

    calcRoute(); 


} 

Некоторые Googling предположил, исключение может быть вызвано тем, что карта не загружена, так что я пытался поставить calcRoute вызов, как это, которое не помогло:

$(function() { 
     calcRoute() 
    }); 

ответ

1

Ваш currentPos переменная не определена при вызове calcRoute.
getCurrentPosition является асинхронным и не будет выполнен до calcRoute и поэтому не установлен currentPos.
Если вам нужно использовать currentPos в calcRoute, вы должны позвонить ему в обратном вызове getCurrentPosition, чтобы убедиться, что он определен.

if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(function (position) { 
     currentPos = new google.maps.LatLng(position.coords.latitude, 
             position.coords.longitude); 

     var marker = new google.maps.Marker({ 
      position: currentPos, 
      map: map, 
      title: "You are here" 
     }); 

     marker.setIcon('http://maps.google.com/mapfiles/ms/icons/green-dot.png') 

     map.setCenter(currentPos); 

     $.ajax({ 
      type: 'GET', 
      url: $('#AddMarkersToMap').val(), 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (data) { 
       addMarkers(data, infoWindow); 
      }, 
      error: function() { 
       alert("Error"); 
      } 
     }); 
     calcRoute(); 
     //\\//\\//\\ 
    }, function() { 
     handleNoGeolocation(true); 
    }); 
+0

Отлично, спасибо, что объяснили это так хорошо – NRKirby

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

  • Нет связанных вопросов^_^