2010-08-12 18 views
5

sto usando MongoDB geospaziali query - $near, geoNear, ecc - e mi piacerebbe sapere come trasformare il dis risultato del comando geoNear così come il radius argomento per le query $within a/da unità leggibili come miglia o chilometri.MongoDB geo distanza/distanza per unità utili

+0

Sembra che ci sia una risposta molto migliore di quella contrassegnata corretta. È possibile cambiarlo? – JohnAllen

risposta

4

se i dati sono in coordinate geografiche (ad esempio 30.47921 N -121.45724 W), allora è necessario convertire la proiezione sottostante con le unità che si desidera (scegliere una proiezione che mantiene la distanza) o è necessario convertire la distanza in coordinate a qualcosa come miglia.

Utilizzare la formula per il calcolo Haversine http://www.movable-type.co.uk/scripts/latlong.html

+0

Grazie per la tua risposta! I miei dati sono in effetti punti di latitudine/longitudine, e sono stato in grado di utilizzare la formula di Haversine per calcolare la distanza tra i risultati e il punto di origine collegando entrambi i set di punti lat/lon, ma non sono ancora sicuro su cosa fare in particolare con 'dis' e 'raggio'. Potresti chiarire cosa intendevi per "convertire la proiezione sottostante"? Sembra che potrebbe essere più semplice convertire 'dis' piuttosto che collegare entrambi i set di lat/lon, no? Avrei bisogno di riorganizzare la formula di Haversine per soddisfare le mie esigenze qui? In tal caso, quale variabile (s) nell'equazione potrebbe "dis"/"radius" inserire? –

+1

Ciao Chris, ho avuto una domanda simile (http://stackoverflow.com/questions/3878702/mongodb-bound-queries-how-do-i-convert-mile-to-radian). Se non vi dispiace, potete spiegare più dettagliatamente la soluzione? Devi usare la mappa/ridurre? Grazie ancora! – Abe

+0

Se state usando Mongo> 1.8 potete usare il modello sferico: http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-TheEarthisRoundbutMapsareFlat – TheSteve0

20

utilizzando il comando geoNear per un valore dis chilometriche aggiungere il parametro:

distanceMultiplier: (6371 * Math::PI/180.0) 
1

Nota Se si utilizza MongoDB versione 2.6.0 c'è un bug che consente sempre al nuovo comportamento dei sistemi di coordinate sferiche di restituire la distanza in metri (in base alle coordinate WGS84).

La documentazione afferma che fornire il parametro $near nelle coordinate legacy anziché su GeoJSON deve comunque restituire i radianti. Questo è stato corretto nelle versioni più recenti.

Il bug report: Bug #13540