2011-07-25 20 views
7

Funkcja computeDistanceBetween() w bibliotece geometrii map google nie zwróci mi wartości. Używając funkcji alert mówi się, że odległość wynosi "[obiekt, obiekt]". Czy ktoś może zobaczyć, gdzie idę źle? tutaj są ważne części kodu w pytaniu:Nie można pobrać mapy google computeDistanceBetween() w celu zwrócenia wartości

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&libraries=geometry"></script> 
<script type="text/javascript" > 

    var myArray1= [['location1', lat1, lng1], ['location2', lat2, lng2], ...]; 
    var myArray2= [['locationA', latA, lngA], ['locationB', latB, lngB], ...]; 
    var arrays = [myArray1, myArray2]; 

    function codeStart() { 
     var orig; 
     var startAddress = document.getElementById("start").value; 
     geocoder.geocode({ 'address': startAddress}, function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
       var i = 0; 
       var input = results[0].geometry.location; 
       while (i < arrays.length) {    
        orig = closest(input, arrays[i]); 
       } 
      } 
     }); 
    } 

    function closest(latlng, array){ 
     var distance; 
     var c = 0; 
     while (c < array.length){ 
      var location = array[c]; 
      var locationlatlng = new google.maps.LatLng(location[1],location[2]); 
      distance = new google.maps.geometry.spherical.computeDistanceBetween(latlng, locationlatlng); 
      alert(distance); // popup box says "[object, Object]" 
      c++; 
     } 
    } 

</script> 

Odpowiedz

11

computeDistanceBetween jest sposób statyczny. Więc ten wiersz:

distance = new google.maps.geometry.spherical.computeDistanceBetween(latlng, locationlatlng); 

powinno być zamiast tego:

distance = google.maps.geometry.spherical.computeDistanceBetween(latlng, locationlatlng) 

Nawiasem mówiąc, kiedy alert() mówi, że coś jest obiektem, jest to dobry czas, aby przełączyć się console.dir() zamiast alert() więc może (przynajmniej w niektórych przeglądarkach) sprawdzić zawartość obiektu w narzędziach konsoli/dewelopera. Jeśli nie wiesz zbyt wiele na temat konsoli JavaScript, sprawdź to. Zaoszczędzi to mnóstwo czasu.

2
distance = new google.maps.geometry.spherical.computeDistanceBetween(latlng, locationlatlng); 

Z jakiegoś powodu już używany składnię, aby utworzyć nowy obiekt. Dlatego po alert(distance) widzisz, że obiekt jest distance.

computeDistanceBetween is just a function:

distance = google.maps.geometry.spherical.computeDistanceBetween(latlng, locationlatlng); 
Powiązane problemy