2013-06-23 3 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