2010-10-07 12 views
16

Mam kolekcję sklepów z indeksem geoprzestrzennym na danym obiekcie.MongoDB Bound Queries: Jak przekonwertować mile na radian?

Co próbuję zrobić, to podać szerokość i szerokość geograficzną użytkownika oraz promień wyszukiwania (mi), chcę zwrócić listę sklepów, które mieszczą się w tych parametrach.

Widziałem następujący przykład na dokumentacji MongoDB (http://www.mongodb.org/display/DOCS/Geospatial+Indexing), ale wygląda na to, że odległość jest w radianach.

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

Jaka jest więc formuła przeliczania mil na radiany?

Rozwiązanie Awesome people at mongodb-user pomógł mi znaleźć odpowiedź. Zasadniczo to, czego naprawdę szukałem, było sposobem na ograniczenie odległości.

Per, zaktualizowana dokumentacja istnieje 3rd parametr do $ najbliższej zapytania: Można również użyć $ pobliżu maksymalnej odległości

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

Wartość $ maxDistance jest w radianach; musiałem więc przebyć dystans w milach i podzielić go przez 69.

Dziękuję!

+0

udało mi się znaleźć odpowiedzi na moje pytanie, zamieszczając na mongdb użytkownika Grupy Google (http://groups.google.com/group/mongodb-user/browse_thread/thread/d37c781bbfff5f08). – Abe

+4

Uwaga: dzielenie przez 69 jest przybliżoną konwersją z mil na * stopnie *, a nie na radiany. Stopnie są tutaj poprawne, ponieważ jest to zwykłe zapytanie 'near $ near' (co oznacza, że ​​'$ maxDistance' musi znajdować się w tych samych jednostkach, co współrzędne), a nie kwerenda sferyczna (która * wymaga * wymaga' $ maxDistance' do być w radianach). –

Odpowiedz

15

Jak docs powiedzieć:

wszystkich dystansach używać radianach. Pozwala to na łatwe pomnożenie przez promień ziemi (około 6371 km lub 3959 mil), aby uzyskać odległość w wybranych jednostkach. I na odwrót, dzieląc się przez promień ziemi podczas wykonywania zapytań.

dzięki czemu wystarczy podzielić swój promień przez promień ziemi. w przykładzie będzie to:

radius = 10/3959
+0

Przepraszam, nie sądzę, że to jest to. Nie uzyskuję żadnych wyników i po uruchomieniu równoważnika w SQL Server otrzymuję wyniki – Abe

+0

Jakiej wersji MongoDb używasz? – walla

+0

Używam wersji 1.6.3 dla systemu Windows 64-bitowego – Abe

Powiązane problemy