2017-08-04 43 views
1

好吧,我如何比較當前用戶的lat和lng與其他用戶lat和lng有關的損失。我已經嘗試了以下。我希望所有用戶密鑰誰是lat和lng誰是當前用戶lat和lng附近。我已經嘗試了以下。如何比較當前用戶的緯度和經度與其他用戶緯度和經度

這裏是我的代碼:

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 userAddress = new LatLng(currentUserAddress); 
     console.log("SURESH IS COOL"); 
     console.log(latlng); 

    } 
    }); 

});   



    // 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 latitude = results[0].geometry.location.lat(); 
     var longitude = results[0].geometry.location.lng(); 
     var latlng1 = new LatLng(latitude, longitude); 
     //var userAddress = new LatLng(currentUserAddress); 
     //console.log("SURESH IS COOL"); 
     //console.log(latlng1); 

     var distanceInMeters = google.maps.geometry.spherical.computeDistanceBetween (this.latlng, this.latlng1); 

    if(distanceInMeters) 
    { 
     console.log("NEARBY ADDRESS that is near current user address"); 
     console.log(latlng1); 
    } 

    } 
    }); 



     }); 

    }); 




//END OF CURRENT USER 
}); 



    } 

正如你在這部分專門看我試圖比較當前用戶的緯度和經度與其他用戶的緯度和經度。使用if語句,但沒有在控制檯中顯示。

var distanceInMeters = google.maps.geometry.spherical.computeDistanceBetween (this.latlng, this.latlng1); 

    if(distanceInMeters) 
    { 
     console.log("NEARBY ADDRESS that is near current user address"); 
     console.log(latlng1); 
    } 
+0

在geocoder.geocode ...方法之外聲明latlng,並在調用computeDistanceBetween()時使用latlng和latlng1而不帶'this'。 – dev8080

回答

2

由於您使用的谷歌地圖,使用以下命令:

var distanceInMeters = google.maps.geometry.spherical.computeDistanceBetween (latlng, latlng1); 
    if(distanceInMeters < meterLimit) //decide some threshold value for 'nearby' places. 
    { 
     console.log("NEARBY ADDRESS that is near current user address"); 
     console.log(distanceInMeters); 
    } 

使用上述,你需要「&庫=幾何」追加到谷歌地圖的腳本標籤的src值。

您可以指定多個庫作爲逗號分隔列表。

編輯

如果你的首要任務是展示最近地址,而不是附近地址,您應該計算(在一個循環中)所有的距離,將它們存儲在陣列中,將這些排序到另一個數組。現在比較兩者,找出哪個元素/地址對應最低距離。

+0

@Suresh如果你想問如何附加兩個庫,你必須用逗號分隔它們。 – dev8080

+0

以米爲單位確定限制,如果計算的距離小於該限制,則認爲是「附近」,否則將被忽略。 – dev8080

+0

這是你的判斷。多少米對你有好處?一般來說,100-300米就在附近。 – dev8080