Как Google Map API получить результат ZERO RESULT

Я пытаюсь вычислить расстояние от 2 очень далеких мест, и я ожидаю, что Google выдаст мне ошибку ZERO RESULT, потому что не могу найти правильный путь из этих 2 мест, но не дает мне эту ошибку И я не могу перехватить эту ошибку, просто скажите мне:

Uncaught TypeError: Невозможно прочитать свойство 'text' из неопределенного

Теперь мой вопрос, как я могу перехватить эту ошибку ZERO RESULT?

var map;

function initMap() {
    map = new google.maps.Map(document.getElementById('map'), {
        zoom: 5,
        center: {
            lat: -15.7942357,
            lng: -47.8821945
        }
    });
    
    var bounds = new google.maps.LatLngBounds;

        var origin1 = {lat: -33.8688197, lng: 151.209295500000058};
        var destinationB = {lat: 50.087, lng: 14.421};


        var geocoder = new google.maps.Geocoder;

        var service = new google.maps.DistanceMatrixService;
        service.getDistanceMatrix({
          origins: [origin1],
          destinations: [destinationB],
          travelMode: 'DRIVING',
          unitSystem: google.maps.UnitSystem.METRIC,
          avoidHighways: false,
          avoidTolls: false
        }, function(response, status) {
            
          if (status !== 'OK') {
            alert('Error was: ' + status);
          } else {
            var originList = response.originAddresses;
            var destinationList = response.destinationAddresses;

            var outputDiv = document.getElementById('output');



            var showGeocodedAddressOnMap = function(asDestination) {
              return function(results, status) {
         
                  
                if (status === 'OK') {
                  map.fitBounds(bounds.extend(results[0].geometry.location));

                } else {
                  alert('Geocode was not successful due to: ' + status);
                }
              };
            };

            for (var i = 0; i < originList.length; i++) {
              var results = response.rows[i].elements;
      
                     
              geocoder.geocode({'address': originList[i]},
                  showGeocodedAddressOnMap(false));
              for (var j = 0; j < results.length; j++) {
                geocoder.geocode({'address': destinationList[j]},
                    showGeocodedAddressOnMap(true));

                    alert(results[j].distance.text);
                    alert(results[j].duration.text);  

              }
            }
          }
        });

    
    
      }
#map{
width:100%;
height:300px;
}
<html>
<head>
</head>
<body>
<div id="map"></div>
<script async defer
    src="https://maps.googleapis.com/maps/api/js?key=AIzaSpQw&libraries=places&callback=initMap">
    </script>

</body>
</html>

2 ответа

Решение

Как я уже упоминал, запрос в порядке, следовательно, почему он возвращает статус, хорошо, вам нужно проверить каждый элемент на предмет его статуса. Посмотрите код ниже, особенно строку results[j].status !== "OK"

var map;

function initMap() {
  map = new google.maps.Map(document.getElementById('map'), {
    zoom: 5,
    center: {
      lat: -15.7942357,
      lng: -47.8821945
    }
  });

  var bounds = new google.maps.LatLngBounds;

  var origin1 = {
    lat: -33.8688197,
    lng: 151.209295500000058
  };
  var destinationB = {
    lat: 50.087,
    lng: 14.421
  };


  var geocoder = new google.maps.Geocoder;

  var service = new google.maps.DistanceMatrixService;
  service.getDistanceMatrix({
    origins: [origin1],
    destinations: [destinationB],
    travelMode: 'DRIVING',
    unitSystem: google.maps.UnitSystem.METRIC,
    avoidHighways: false,
    avoidTolls: false
  }, function(response, status) {

    if (status !== 'OK') {
      alert('Error was: ' + status);
    } else {
      var originList = response.originAddresses;
      var destinationList = response.destinationAddresses;

      var outputDiv = document.getElementById('output');



      var showGeocodedAddressOnMap = function(asDestination) {
        return function(results, status) {


          if (status === 'OK') {
            map.fitBounds(bounds.extend(results[0].geometry.location));

          } else {
            alert('Geocode was not successful due to: ' + status);
          }
        };
      };

      for (var i = 0; i < originList.length; i++) {
        var results = response.rows[i].elements;


        geocoder.geocode({
            'address': originList[i]
          },
          showGeocodedAddressOnMap(false));
        for (var j = 0; j < results.length; j++) {
          geocoder.geocode({
              'address': destinationList[j]
            },
            showGeocodedAddressOnMap(true));

          if (results[j].status !== "OK") {
            alert("Not okay");
            return;
          }

          alert(results[j].distance.text);
          alert(results[j].duration.text);

        }
      }
    }
  });



}
#map {
  width: 100%;
  height: 300px;
}
<html>

<head>
</head>

<body>
  <div id="map"></div>
  <script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCp5RzbQjgID4oHJYe6VRGhKGXpQTGtCmw&libraries=places&callback=initMap">
  </script>

</body>

</html>

Перед предупреждением сделайте проверку, как показано ниже

// check if it has results
if(results[j].status === "OK") {
    // do something with result
    alert(results[j].distance.text);
    alert(results[j].duration.text);
}

Код статуса API Карт Google.

Другие вопросы по тегам