2017-08-04 78 views
-1

我真的不知道爲什麼這顯示出來。無法讀取拉特的財產undefined

這是我的谷歌地圖腳本標籤:

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=places,geometry"></script> 

正如你可以看到下面我所定義的緯度LAT()。它指向錯誤的是,在distanceInMeters

openMapPage() 
    { 

    // GETTING THE CURRENT USER ADDRESS FOR LATITUDE AND LONGTITUDE 
    var uid = firebase.auth().currentUser.uid; 
    var ref = firebase.database().ref("request/" + uid); 
    ref.once("value").then((snapshot) => { // <------ Here! 
     var a = snapshot.exists(); // true 
     var c = snapshot.hasChild("reqdetails"); // true 
     var d = snapshot.child('reqdetails').exists(); 
     var requestsKey = snapshot.key; 
     var requestsValue = snapshot.val(); 


     ref.once('value', (request) => { 
    var currentUserAddress = request.val().regdetails.address; 
    var geocoder = new google.maps.Geocoder(); 

    geocoder.geocode({ 'address': currentUserAddress}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
     var latitude = results[0].geometry.location.lat(); 
     var longitude = results[0].geometry.location.lng(); 
     var latlng = new LatLng(latitude, longitude); 
     var meterLimit = latlng; 
     //var userAddress = new LatLng(currentUserAddress); 
     console.log("SURESH IS COOL"); 
     console.log(meterLimit); 

    } 
    }); 

});   

//END OF CURRENT USER 
}); 


    // GETTING THE ALL USER ADDRESS FOR LATITUDE AND LONGTITUDE 
    var ref1 = firebase.database().ref("request"); 
    ref1.once("value").then((snapshot1) => { // <------ Here! 
     var a = snapshot1.exists(); // true 
     var c = snapshot1.hasChild("reqdetails"); // true 
     var d = snapshot1.child('reqdetails').exists(); 
     var requestsKey = snapshot1.key; 
     var requestsValue = snapshot1.val(); 


     snapshot1.forEach((childSnapshot) => { // <------ And here! 
      var requestKey = childSnapshot.key; 
      var requestValue = childSnapshot.val(); 
      var reqdetails = requestValue.reqdetails; 
      var AllUserAddress = requestValue.regdetails.address; 

      //console.log("ALL USER ADDRESS"); 
      //console.log(AllUserAddress); 

     var geocoder1 = new google.maps.Geocoder(); 

    geocoder1.geocode({ 'address': AllUserAddress}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
     var latitude1 = results[0].geometry.location.lat(); 
     var longitude1 = results[0].geometry.location.lng(); 
     var latlng1 = new LatLng(latitude1, longitude1); 
     //var userAddress = new LatLng(currentUserAddress); 
     //console.log("SURESH IS COOL"); 
     //console.log(latlng1); 
     var distanceInMeters = google.maps.geometry.spherical.computeDistanceBetween (this.latlng, this.latlng1); 
     console.log("DISTANCE"); 
     console.log(distanceInMeters); 


    } 
    }); 



     }); 

    }); 







    } 

錯誤看起來是這樣的,它不斷地說緯度線120。而我的代碼沒有錯誤。順便說一句,錯誤行120沒有錯誤。 enter image description here

我仍然可以控制檯登錄我的所有用戶地址緯度和經度

enter image description here

+0

您可以爲您提供[R整個代碼? –

+0

請看看。謝謝 – Suresh

+0

貌似'location'是undefined ..你能記錄'results [0] .geometry.location'嗎? –

回答

1

我認爲情況是,你有沒有在全球範圍內定義this.latlng, this.latlng1,所以你不能訪問他們,你試圖訪問你的函數內聲明的局部變量,這就是爲什麼你不能得到distanceInMeters。所以,試試這個:

public latlng; // DECLARE THEM ABOVE THE CONSTRUCTOR OF YOUR CLASS 
public latlng1; 

constructor(){ 
} 

/* 
    DO THE FOLLOWING TO BOTH YOUR GEOCODERS: 
    - GET BOTH LATITUDE AND LONGITUDE OF YOUR. 
    - ACCESS YOUR GLOBAL latlng WITH this. 
*/ 
geocoder1.geocode({ 'address': AllUserAddress}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
    let latitude1 = results[0].geometry.location.lat(); 
    let longitude1 = results[0].geometry.location.lng(); 
    this.latlng1 = new LatLng(latitude1, longitude1); 
    let distanceInMeters = google.maps.geometry.spherical.computeDistanceBetween (this.latlng, this.latlng1); 
    console.log("DISTANCE"); 
    console.log(distanceInMeters); 
    } 
}); 

希望這有助於

+0

解決。非常感謝你 – Suresh