2011-10-20 10 views
26

Próbuję zrozumieć moją analizę MongoDB i wyszukiwania geoprzestrzennego. Zasadniczo chcę, aby użytkownicy mogli wysyłać zapytania do dokumentów (obrazów), że są kręcone w ustalonej odległości od bieżącej lokalizacji użytkownika. Więc ja szukam wszystkich zdjęć, które są kręcone w odległości 1 km od miejsca, w którym się znajduje Próbuję użyć poniższego przykładu , ale nie mam pojęcia, co ustawić jako wartość maxdistance.Jednostki do użycia dla maxdistance i MongoDB?

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

Więc moje pytanie jest, co mam ustawiony jako maxdistance jeśli szukam dokumentów w promieniu 1 km?

Jestem całkowicie utknąłem tutaj.

Odpowiedz

62

Aby korzystać z zapytań mongodb $near z ograniczeniami km, należy przekonwertować wartość promienia na km. Domyślnie mongodb $ near akceptuje $maxDistance jako radius.

Konwersja odległość przez 111.12 (jeden stopień wynosi około 111.12 kilometrów) przy użyciu km, lub zostawić dystans, jak to jest na wykorzystaniu stopnia

do Twojego pytania

co mam ustawiony jako maxdistance gdybym szukam dokumentów w promieniu 1 km od ?

można użyć tego

db.places.find({ loc : { $near : [50,50] , $maxDistance : 1/111.12 } }) 

ja odpowiedziałem, jak korzystać mongo geospatial features here in detail. Możesz sprawdzić

+0

super, dzięki! Jaka jest różnica między $ near i $ nearSphere? –

+13

$ near zakłada wyidealizowany model płaskiej ziemi, co oznacza, że ​​kąt arccegree szerokości geograficznej (y) i długości geograficznej (x) przedstawia wszędzie tę samą odległość. Musisz więc przekonwertować promień o 111 lub 69, aby uzyskać wyniki. Ale $ NearSphere musisz przekonwertować promień o (6371 km lub 3959 mil), aby go uruchomić ... możesz przeczytać więcej o [tutaj] (http : //www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing- TheEarthisRoundbutMapsareFlat) – RameshVel

+0

Czy możliwe jest zapytanie o ułamek? – Karl

15

Od wersji 2,4 z MongoDB można określić promień bezpośrednio w metrach jako wartość $ maxDistance coś takiego:

db.<collection>.find({loc: {$near : 
           {$geometry : 
            { 
            type: 'Point', 
            coordinates: [<longitude> , <latitude>]  
            } 
           }, 
           $maxDistance: 10*100 
          } 
        }); 
+1

To zależy od indeksu. Jeśli indeks jest "2d", to nie zadziała, ponieważ indeks 2d przyjmuje "format radianowy". Jeśli indeks z drugiej strony to '2dsphere', masz rację. :-) Dokumentacja: https://docs.mongodb.com/manual/reference/operator/query/near/#query-on-legacy-coordinates – qualbeen

Powiązane problemy