2013-06-23 49 views
1

我目前正在嘗試創建一個小型網絡應用程序,該應用程序會查找附近正在使用它的其他人。數據庫/地理位置。查找附近的人

當我使用地理定位功能,我在服務器上保存的用戶的「最後已知位置」約一小時後,這是我從數據庫集合(我用的MongoDB)中移除這個位置

每時間,我將這個位置與所有最近簽到的人(位置集合中的那些人)進行比較,以找到離得近的人。

儘管這種方法看起來效率不高,但人數可能會非常龐大​​,這意味着需要重複一個長列表並將位置與處於不同國家/地區的人員進行比較。

我在考慮將每個國家或時區分成多個表格。這會阻止應用程序搜索太多。

任何建議或想法?

謝謝

回答

2

我會在這裏使用MongoDB 2.4的地理空間支持。對於每個用戶,存儲在以下格式的位置(這是GeoJSON的):

{ 
    _id: ..., 
    name: ..., 
    last_known_location: { 
     "type": "Point", 
     "coordinates": [ longitude, latitude ] 
    } 
} 

,並設置以下指標:

db.location.ensureIndex({ last_known_location: "2dsphere" }); 

現在你可以很輕鬆地搜索所有接近目前的人用戶,用下面的查詢:

db.location.find({ 
    last_known_location: { 
     $near: { 
      $geometry: { 
       "type" : "Point", 
       "coordinates" : [ -0.1485302, 51.5250157 ] 
      } 
     }, 
     $maxDistance: 10 
    } 
}); 

以$ maxDistance您可以控制如何走多少米從提供的座標「最接近」的用戶可能。

+0

很好,謝謝! – krik