2016-10-18 62 views
0

我想讓我的REST API只發送給我一些特定半徑內的項目。我已經編寫了代碼來計算兩點之間的距離,並只發送給我所需半徑內的距離。但是,到目前爲止,我使用任意的經緯度作爲比較點。我如何使用自己的位置來實現這個算法?如何使用我的位置來計算使用緯度和經度的兩點之間的距離

app.get('/posts', function(req, res) { 

// Get 'posts' collection from db 
db.collection('posts', function(err, collection) { 

    // Get all documents in the 'posts' collection 
    collection.find().toArray(function(err, items) { 

     // Documents to send back 
     var results = [] 

//Function that calculates distance between two points. 
    function calculateDistance (lat1, lat2, lon1, lon2) { 
     var dLat = deg2rad(lat2-lat1); 
     var dLon = deg2rad(lon2-lon1); 
     var a = 
      (Math.sin(dLat/2) * Math.sin(dLat/2) + 
      Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
      Math.sin(dLon/2) * Math.sin(dLon/2)) 
      ; 
     var c = (2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a))); 
     var d = (6371 * c); // Distance in km 
     var e = (d/1.6) //Convert distance in km to miles. 
      return e 
    } 

     // Iterate over each document and check if the distance is correct 
     for (var i = 0; i < items.length; i++) { 
      var item = items[i] 
      if ((calculateDistance(item.latitude, 43.7035798, item.longitude, -72.2887838) > 25)) { 
       results.push(item) 
      } 

     }   
     res.send(results); 
    }); 
}); 
}); 
+1

任何不使用MongoDB [**'$ near' **運算符並使用**'$ maxDistance ** **]的原因(https://docs.mongodb.com/manual/reference/operator/query/near/ #op._S_near)設置? –

回答

相關問題