2010-08-12 14 views
5

Ich bin mit MongoDB geospatial Abfragen - $near, geoNear usw. - und ich würde gerne wissen, wie das dis Ergebnis des geoNear Befehls drehen sowie die radius Argument für $within Abfragen zu/von lesbaren Einheiten wie Meilen oder Kilometer.MongoDB geo Abstand/Radius zu nützlichen Einheiten

+0

Es sieht aus wie es eine viel bessere Antwort ist als derjenige richtig gekennzeichnet. Ist es möglich, es zu ändern? – JohnAllen

Antwort

4

Wenn Ihre Daten in geographischen Koordinaten vorliegen (z. B. 30.47921 N -121.45724 W), müssen Sie die zugrunde liegende Projektion mit den gewünschten Einheiten konvertieren (wählen Sie eine Projektion, die die Entfernung berücksichtigt), oder Sie müssen die Entfernung in Koordinaten umrechnen so etwas wie Meilen.

Verwenden Sie die Haversine Formel für Berechnungen http://www.movable-type.co.uk/scripts/latlong.html

+0

Danke für Ihre Antwort! Meine Daten sind in der Tat Breiten-/Längengradpunkte, und ich konnte die Haversine-Formel verwenden, um die Entfernung zwischen den Ergebnissen und dem Ursprungspunkt zu berechnen, indem ich beide Sätze von Breiten-/Längenpunkten einfüge, aber ich bin mir immer noch nicht sicher, womit ich konkret verfahren soll "dis" und "radius". Könnten Sie erklären, was Sie mit "konvertieren Sie Ihre zugrunde liegende Projektion" gemeint haben? Sieht so aus, als wäre es einfacher, "dis" zu konvertieren, als beide lat/lon-Sets anzuschließen, nicht wahr? Würde ich die Haversine-Formel neu anordnen müssen, um meine Bedürfnisse hier zu erfüllen? Wenn ja, in welche Variable (n) könnte "dis"/"radius" passen? –

+1

Hallo Chris, ich hatte eine ähnliche Frage (http://stackoverflow.com/questions/3878702/mongodb-bound-abfragen-how-do-i-convert-mile-to-radian). Wenn es Ihnen nichts ausmacht, können Sie die Lösung genauer erklären? Müssen Sie map/reduce verwenden? Danke noch einmal! – Abe

+0

Wenn Sie Mongo> 1.8 verwenden, können Sie das sphärische Modell verwenden: http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-TheEarthisRoundbutMapsareFlat – TheSteve0

20

Mit geoNear Befehl für einen dis Wert in Kilometern fügen Sie den Parameter:

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

Hinweis wenn Sie mit MongoDB Version 2.6.0 gibt es eine ist Fehler, der das neue Verhalten für sphärische Koordinatensysteme immer ermöglicht, die Entfernung in Metern zurückzugeben (basierend auf WGS84-Koordinaten).

Die Dokumentation besagt, dass die Angabe des $near-Parameters in Legacy-Koordinaten anstelle von GeoJSON immer noch das Radiant zurückgibt. Dies wurde in neueren Versionen behoben.

Der Bug-Report: Bug #13540

Verwandte Themen