2017-08-04 38 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