2017-08-04 2 views
1

Ok現在のユーザーのLatとlngを他のユーザーlatとlngと比較する方法については、紛失しています。私は以下を試した。現在のユーザーの緯度と経度の近くにいる緯度と経度のすべてのユーザーキーを欲しいです。私は以下を試した。あなたは、特にこの部分で見たよう現在のユーザーのLatitudeとLongtitudeを他のユーザーと比較する方法LatitudeとLongtitude

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 
}); 



    } 

iは、他のユーザの緯度とLNGと、現在のユーザーは、緯度とLNGを比較してみました:

は、ここに私のコードです。 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()の呼び出しで 'this'を指定せずにlatlngおよびlatlng1を使用します。 – dev8080

答えて

2

あなたはGoogleマップを使用しているのでは、以下を使用します。

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); 
    } 

以上を使用するためには、Googleマップ、scriptタグのsrc値に「&ライブラリ=幾何学」を追加する必要があります。

カンマ区切りリストとして複数のライブラリを指定できます。

編集

あなたの優先順位は最寄りアドレスではなく、近くアドレスを表示する場合、あなたは、(ループ内)のすべての距離を計算し、配列に格納する必要がありますこれらを別の配列にソートします。ここで2つを比較して、どの要素/アドレスが最低距離に対応しているかを調べます。

+0

@Suresh 2つのライブラリを追加する方法を尋ねる場合は、カンマで区切る必要があります。 – dev8080

+0

計算された距離がその限界よりも小さい場合は、近くにあるとみなされ、そうでない場合は無視される限界をメートルで決定します。 – dev8080

+0

それはあなたの判断です。あなたには何メートルが良いでしょうか?通常、100〜300メートル近くあります。 – dev8080

関連する問題