2011-10-20 15 views
26

Sto cercando di capire come funziona MongoDB e ricerche geospaziali. Fondamentalmente quello che voglio è che gli utenti siano in grado di interrogare i documenti (immagini) che vengono girati entro una distanza prestabilita dalla posizione corrente degli utenti. Quindi, l'utente sta cercando tutte le immagini che sono state scattate entro 1 km da dove si trova. Provo a usare l'esempio sotto ma non ho idea di cosa impostare come valore di distanza massima.Unità da utilizzare per maxdistance e MongoDB?

db.places.find({ loc : { $near : [50,50] , $maxDistance : 5 }}) 

Quindi la mia domanda è che cosa ho impostato come maxDistance se sto cercando per i documenti entro un raggio di 1 km?

Sono completamente bloccato qui.

risposta

62

Per utilizzare le query di mongodb $near con limiti di km, è necessario convertire il valore del raggio in km. Per impostazione predefinita, mongodb $ near accetta $maxDistance come radius.

distanza Converti da 111.12 (un grado è di circa 111.12 chilometri) quando si utilizza km, o lasciare la distanza in quanto è sull'utilizzo di laurea

alla tua domanda

quello che faccio a impostare come maxDistance se io sto cercando documenti all'interno di un raggio di 1 km ?

è possibile utilizzare questo

db.places.find({ loc : { $near : [50,50] , $maxDistance : 1/111.12 } }) 

ho risposto come utilizzare mongo geospatial features here in detail. È possibile controllare

+0

Freddo, grazie! Qual è la differenza tra $ near e $ nearSphere? –

+13

$ vicino assume un modello idealizzato di una terra piatta, nel senso che un arcodegree di latitudine (y) e longitudine (x) rappresentano la stessa distanza ovunque. Quindi devi convertire il raggio di 111 o 69 per ottenere i risultati.Ma $ nearSphere devi convertire il raggio di (6371 km o 3959 miglia) per farlo funzionare ... puoi leggere di più su [qui] (http : //www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-TheEarthisRoundbutMapsareFlat) – RameshVel

+0

È possibile interrogare una frazione? – Karl

15

A partire dalla versione 2.4 di MongoDB è possibile specificare il raggio direttamente in metri come un valore di $ maxDistance, in questo modo:

db.<collection>.find({loc: {$near : 
           {$geometry : 
            { 
            type: 'Point', 
            coordinates: [<longitude> , <latitude>]  
            } 
           }, 
           $maxDistance: 10*100 
          } 
        }); 
+1

Dipende dall'indice. Se l'indice è '2d', questo non funzionerà, perché un indice 2D assume" il formato radiante ". Se l'indice invece è '2dsphere', hai ragione. :-) Documentazione: https://docs.mongodb.com/manual/reference/operator/query/near/#query-on-legacy-coordinates – qualbeen