Неперехваченная ошибка типа: Не удается прочитать свойство «применить» неопределенного значения при попытке найти матрицу расстояний Javascript

#javascript #google-maps #google-distancematrix-api #distance-matrix

Вопрос:

Я пытаюсь найти матрицу расстояний между двумя точками в Google Maps API и получаю эту ошибку.

 Uncaught TypeError: Cannot read property 'apply' of undefined
at distance_matrix.js:4
at Ku.j (distance_matrix.js:3)
at Object.c [as _jr083s] (common.js:110)
at DistanceMatrixService.GetDistanceMatrix?1m1amp;2s35.853308276088036amp;1m1amp;2s-
 

Я пытаюсь получить ответ матрицы расстояний, чтобы получить расстояние в милях. Вот код, который у меня есть

 function initMap() {
const momilets = { lat: 35.853308276088036, lng: -78.57256943168214};
const map = new google.maps.Map(document.getElementById('map'), {zoom: 12, center: momilets, disableDefaultUI: true});
const marker = new google.maps.Marker({position: momilets, map: map});

const geocoder = new google.maps.Geocoder();
document.getElementById('submit').addEventListener('click', () => {
    geocodeAddress(geocoder, map);
})

}

function geocodeAddress(geocoder, resultsMap) {
    const address = document.getElementById('address').value;
    geocoder.geocode({ address: address }, (results, status) => {
        if(status = 'OK') {
            resultsMap.setCenter(results[0].geometry.location);
            const marker2 = new google.maps.Marker({
              map: resultsMap,
              position: results[0].geometry.location,
            });
            var lat = results[0].geometry.location.lat();
            var lng = results[0].geometry.location.lng();

            var service = new google.maps.DistanceMatrixService();
            service.getDistanceMatrix(
              {
                    origins: ['35.853308276088036', '-78.57256943168214'],
                    destinations: [toString(lat), toString(lng)],
                    unitSystem: google.maps.UnitSystem.IMPERIAL,
                    travelMode: 'DRIVING'
          } );
        } else {
            alert("Unsuccessful because: "   status);
          }
        });
    }

    function callback(response, status) {
        if (status == 'OK') {
          var origins = response.originAddresses;
          var destinations = response.destinationAddresses;
      
          for (var i = 0; i < origins.length; i  ) {
            var results = response.rows[i].elements;
            for (var j = 0; j < results.length; j  ) {
              var element = results[j];
              var distance = element.distance.text;
              var duration = element.duration.text;
              var from = origins[i];
              var to = destinations[j];
            }
          }
        }
      }
 

если кто-нибудь может помочь мне устранить эту ошибку, я был бы очень признателен

Комментарии:

1. пожалуйста, добавьте свой html-код

Ответ №1:

вы не предоставили функцию обратного вызова в методе service.getDistanceMatrix (), поэтому получили вышеуказанную ошибку.

 service.getDistanceMatrix({
        origins: ['35.853308276088036', '-78.57256943168214'],
        destinations: [toString(lat), toString(lng)],
        unitSystem: google.maps.UnitSystem.IMPERIAL,
        travelMode: 'DRIVING'
      }, (response, status) => {
        console.log("response data: ", response);
        console.log("status: ", status);
});
 

Вы можете перейти по ссылке JSFiddle ниже для получения полного рабочего кода.

 <script async src="//jsfiddle.net/y4zbkudo/4/embed/js,html,css,result/dark/"></script>