2010-10-07 2 views
16

Ich habe eine Sammlung von Geschäften mit einem Geospatial-Index auf dem Standort Property.MongoDB Bound Queries: Wie konvertiere ich Meilen in Radiant?

Was ich versuche zu tun ist gegeben, den Benutzer die Breite, Breite und einen Suchradius (mi), ich möchte die Liste der Geschäfte, die innerhalb dieser Parameter sind.

Ich sah das folgende Beispiel in der MongoDB-Dokumentation (http://www.mongodb.org/display/DOCS/Geospatial+Indexing), aber es sieht so aus, als wäre die Entfernung im Bogenmaß.

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

Also, was ist die Formel zum Konvertieren von Meilen in Radiant?

Lösung Die tollen Leute bei mongodb-user haben mir geholfen, die Antwort zu finden. Was ich wirklich suchte, war eine Möglichkeit, die Entfernung zu begrenzen.

Per, die aktualisierte Dokumentation gibt es einen dritten Parameter an den $ in der Nähe von query: Sie auch $ in der Nähe mit einem maximalen Abstand

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

Der Wert für $ maxDistance ist in Radian verwenden können; Also, ich musste meinen Abstand in Meilen nehmen und ihn durch 69 teilen.

Danke!

+0

konnte ich meine Antwort finden, indem meine Frage nach dem mongdb-Benutzer Google-Gruppe veröffentlichen (http://groups.google.com/group/mongodb-user/browse_thread/thread/d37c781bbfff5f08). – Abe

+4

Hinweis: Die Division durch 69 ist eine grobe Umrechnung von Meilen in * Grad *, nicht im Bogenmaß. Grade sind hier richtig, weil dies eine einfache ol ''$ near'-Abfrage ist (was bedeutet, dass $ maxDistance in denselben Einheiten wie die Koordinaten sein muss), keine sphärische Abfrage (für die * $ maxDistance benötigt wird) im Bogenmaß sein). –

Antwort

15

Als Dokumente sagen:

Alle Entfernungen verwenden Radianten. Dadurch können Sie sich einfach mit dem Radius der Erde (etwa 6371 km oder 3959 Meilen) multiplizieren, um die Entfernung in Ihrer Wahl der Einheiten zu erhalten. Umgekehrt dividiere durch den Radius der Erde bei Abfragen.

so müssen Sie einfach Ihren Radius durch den Erdradius teilen. in Ihrem Beispiel wäre es:

radius = 10/3959
+0

Entschuldigung, ich glaube nicht, dass es das ist. Ich erhalte keine Ergebnisse und wenn ich das Äquivalent in SQL Server ausführe bekomme ich Ergebnisse – Abe

+0

Welche Version von MongoDb benutzt du? – walla

+0

Ich benutze Version 1.6.3 für Windows 64 Bit – Abe