2010-10-07 13 views
16

Ho una collezione di negozi con un indice geospaziale nella posizione corretta.Query vincolate MongoDB: come posso convertire il miglio in radiante?

Quello che sto cercando di fare è dato latitudine, latitudine dell'utente e un raggio di ricerca (mi), voglio restituire l'elenco dei negozi che si trovano all'interno di quei parametri.

Ho visto il seguente esempio nella documentazione di MongoDB (http://www.mongodb.org/display/DOCS/Geospatial+Indexing), ma sembra che la distanza sia in radianti.

center = [50, 50] 
radius = 10 
db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}}) 

Quindi, qual è la formula per convertire le miglia in radianti?

Soluzione Le persone fantastiche di mongodb-user mi hanno aiutato a trovare la risposta. Fondamentalmente, quello che stavo davvero cercando era un modo per limitare la distanza.

Per la documentazione aggiornata, v'è un terzo parametro al $ nei pressi di query: È inoltre possibile utilizzare $ vicino con una distanza massima

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

Il valore per $ maxDistance è in radianti; così, ho dovuto prendere la mia distanza in miglia e dividerlo per 69.

Grazie!

+0

sono stato in grado di trovare la mia risposta inviando la mia domanda sul mongdb-utente di Google Group (http://groups.google.com/group/mongodb-user/browse_thread/filetto/d37c781bbfff5f08). – Abe

+4

Nota: la divisione per 69 è una conversione approssimativa da miglia a * gradi *, non radianti. I gradi sono corretti qui perché questa è una semplice query '$ $ near' (che significa '$ maxDistance' deve essere nella stessa unità di cui sono le coordinate), non una query sferica (che * do * richiede' $ maxDistance' a essere in radianti). –

risposta

15

Come dicono i documenti:

Tutte le distanze utilizzano radianti. Questo ti permette di moltiplicare facilmente per il raggio della terra (circa 6371 km o 3959 miglia) per ottenere la distanza nella tua scelta di unità. Al contrario, dividi per il raggio della terra quando fai domande.

quindi è necessario dividere il raggio per il raggio di terra. nel tuo esempio sarebbe:

radius = 10/3959
+0

Scusa, non penso sia così. Non ottengo risultati e quando eseguo l'equivalente in SQL Server ottengo risultati – Abe

+0

Quale versione di MongoDb usi? – walla

+0

Sto usando la versione 1.6.3 per Windows 64 bit – Abe