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