2013-05-25 4 views
0

Pour un objet, je veux associer plusieurs paires lat/lng, de sorte que lorsque je reçois ma géolocalisation, je peux obtenir l'objet le plus proche de moi [c.-à-d. Bien que je sache faire une recherche géospatiale si un objet ne possède qu'une seule paire lat/lng, je suis bloqué à cette recherche géospatiale multiple. Je me demande comment y parvenir avec MySQL, Sphinx ou MongoDB? S'il y a d'autres technologies qui peuvent y parvenir, je serais également reconnaissant d'en être informé. Merci beaucoup!Recherche un-à-plusieurs géospatiale

Répondre

1

Vous pouvez utiliser un tableau d'emplacements dans MongoDB.

> db.array.insert({locs:[ [ 1, 2], [1.5, 1.8], [2, 1] ]}) 
Inserted 1 record(s) in 134ms 
> db.array.ensureIndex({locs:'2d'}) 
Inserted 1 record(s) in 6ms 
> db.array.insert({locs:[ [ 1, 2], [7.5, 1.8], [2, 5] ]}) 
Inserted 1 record(s) in 2ms 
> db.array.find({locs:{$near:[1,2]}}) 
{ "_id" : ObjectId("51a193f11192cab2195f7a8a"), "locs" : [ [ 1, 2 ], [ 1.5, 1.8 ], [ 2, 1 ] ] } 
{ "_id" : ObjectId("51a1940b1192cab2195f7a8c"), "locs" : [ [ 1, 2 ], [ 7.5, 1.8 ], [ 2, 5 ] ] } 
{ "_id" : ObjectId("51a193f11192cab2195f7a8a"), "locs" : [ [ 1, 2 ], [ 1.5, 1.8 ], [ 2, 1 ] ] } 
{ "_id" : ObjectId("51a193f11192cab2195f7a8a"), "locs" : [ [ 1, 2 ], [ 1.5, 1.8 ], [ 2, 1 ] ] } 
{ "_id" : ObjectId("51a1940b1192cab2195f7a8c"), "locs" : [ [ 1, 2 ], [ 7.5, 1.8 ], [ 2, 5 ] ] } 
{ "_id" : ObjectId("51a1940b1192cab2195f7a8c"), "locs" : [ [ 1, 2 ], [ 7.5, 1.8 ], [ 2, 5 ] ] } 
Fetched 6 record(s) in 8ms 
1

Créer une nouvelle table - une relation 1-à-meny. Donc, ayez votre table d'objets, et deuxième avec un object_id et un lat/long. Si un objet a plusieurs emplacements, il a plusieurs lignes dans cette nouvelle table.

Ensuite, recherchez simplement cette nouvelle table comme vous le feriez autrement. (soit ce mysql ou sphinx)

(Vous avez déjà une réponse pour MongoDB :)

Questions connexes