Jak wdrożyć funkcje geoprzestrzenne MongoDB

Jak Wdrozyc Funkcje Geoprzestrzenne Mongodb



Funkcja geoprzestrzenna MongoDB zapewnia prosty sposób przechowywania danych geograficznych w bazie danych. Zasadniczo możemy przechowywać dane geoprzestrzenne w MongoDB jako obiekty GeoJSON. GeoJSON to darmowy format typu open source, który opiera się na notacji obiektowej JavaScript z prostymi danymi geograficznymi. Ta funkcja jest ważna w przypadku aplikacji wymagających usług opartych na lokalizacji, takich jak proces mapowania, wyszukiwanie lokalizacji i inne. W tym artykule omówiono funkcję geoprzestrzenną na przykładowej implementacji.

Dodawanie dokumentów do kolekcji obiektów geoprzestrzennych

Aby zademonstrować funkcjonalność funkcji Geoprzestrzennej MongoDB, potrzebujemy dokumentów dla konkretnej kolekcji. Wstawiamy kilka dokumentów do kolekcji „obszar”, jak pokazano poniżej:

db.area.insertMany( [
{
nazwa: „Park Dziecięcy” ,
Typ Lokacji: 'Punkt' , współrzędne: [ - 60,97 , 30,77 ] },
Kategoria: 'Ogród'
},
{
nazwa: „Strefa studencka” ,
Typ Lokacji: 'Punkt' , współrzędne: [ - 60,9928 , 30.7193 ] },
Kategoria: 'Ogród'
},
{
nazwa: 'Boisko do piłki nożnej' ,
Typ Lokacji: 'Punkt' , współrzędne: [ - 60,9375 , 30.8303 ] },
Kategoria: 'Stadion'
}
] )

Posiadamy dokumenty zawierające dane lokalizacyjne takie jak współrzędne. Dodatkowo tworzymy w terenie indeks geoprzestrzenny w celu optymalizacji wydajności zapytań geoprzestrzennych.









Przykład 1: Użycie operatora zapytania $geoIntersects

Najpierw mamy operator $geoIntersects funkcji geoprzestrzennej, który przecina dostarczony obiekt. Rozważmy następującą implementację operatora $geoIntersects:



db.area.find({ lokalizacja: { $geoIntersects: { $geometry: { typ: 'Punkt' ,

współrzędne: [ - 60,97 , 30,77 ] } } } })

W przykładzie wywołujemy kolekcję „obszar” wraz z operacją „znajdź”. Do metody find() przekazujemy zestawy pól „lokalizacja” do operatora zapytania $geoIntersects obiektu geoprzestrzennego. Służy do sprawdzania, czy określony punkt przecina się z geometrią zapisaną w polu geometrii.





Następnie operator $geoIntesects przyjmuje operator $geometry, gdzie w polu typu ustawiana jest wartość „Punkt”, a w polu współrzędnych podawane są wartości „współrzędnych”. Tutaj zdefiniowano geometrię na potrzeby porównania geoprzestrzennego.

Poniższe dane wyjściowe wskazują, gdzie jest pobierany oczekiwany dokument i gdzie pole geometrii zawiera obiekt geometryczny przecinający się z określonym punktem:



Przykład 2: Użycie operatora zapytania $near

Operator $near to także funkcja geoprzestrzenna używana do wykonywania zapytań geoprzestrzennych w celu identyfikacji dokumentów znajdujących się geograficznie blisko danego miejsca. Pobiera dokumenty ułożone według odległości od określonej lokalizacji. Tutaj zapewniamy implementację operatora $near:

db.area.find(
{
Lokalizacja:
{$blisko:
{
$geometria: {wpisz: 'Punkt' , współrzędne: [ - 60,9667 , 30,78 ] },
$minOdległość: 1000 ,
$maxOdległość: 5000
}
}
}
)

W przykładzie definiujemy pole „lokalizacja” kolekcji „obszar” w ramach operacji „znajdź”. Następnie ustawiamy operator zapytania $near obiektu geoprzestrzennego na to pole „lokalizacja”. Operator $near wyszukuje najbliższy punkt o podanych współrzędnych punktu. Następnie wykorzystujemy parametry $minDistance i $maxDistance w operatorze $near, którym opatrzone są określone wartości, aby pobrać dokumenty w określonym zakresie odległości od danego punktu.

Dokument jest pobierany w danych wyjściowych znajdujących się w pobliżu określonych lokalizacji lub punktów szczególnych w kolekcji „obszarów” geoprzestrzennych:

Przykład 3: Użycie operatora zapytania $nearsphere

Alternatywnie mamy operator $nearsphere, który jest podobny do operatora $near, ale $nearSphere uwzględnia kulisty kształt Ziemi podczas obliczania odległości.

db.area.find(
{
Lokalizacja: {
$nearSphere: {
$geometria: {
typ : 'Punkt' ,
współrzędne: [ - 60,9667 , 30,78 ]
},
$minOdległość: 1000 ,
$maxOdległość: 5000
}
}
}
)

W przykładzie używamy operatora $nearsphere zapytania geoprzestrzennego. Operator $nearspehere wyszukuje tutaj dokument, którego najbliższe punkty znajdują się blisko punktów określonych w zapytaniu, a punkty są ustawiane w tablicy pól współrzędnych.

Następnie udoskonalamy wyniki, ustalając parametry $minDistance i $maxDistance. Parametr $minDistance zapewnia, że ​​zwracane dokumenty znajdują się w odległości co najmniej 1000 metrów od określonego punktu, natomiast parametr $maxDistance ogranicza wyniki do lokalizacji oddalonych nie dalej niż 5000 metrów.

Dokument zostanie wyświetlony na wyjściu z lokalizacją w promieniu określonego metra od punktu o podanych współrzędnych:

Przykład 4: Użycie operatora zapytania $geoWithin

Następnie mamy operator $geoWithin w MongoDB, który jest używany w zapytaniach geoprzestrzennych w celu znalezienia dokumentów, które całkowicie mieszczą się w określonym kształcie, takim jak okrąg. Zobaczmy następującą demonstrację zapytania $geoWithin:

db.area.find({ lokalizacja:

{ $geoWewnątrz:

{ $centerSphere: [ [ - 60,93414657 , 30.82302903 ], 3 / 3963.2 ] } } })

W przykładzie używamy operatora $geoWithin, aby znaleźć dokumenty z kolekcji „obszarowej” w określonym okrągłym obszarze kuli 2D. W tym celu określamy operator $centerSphere wewnątrz operatora $geoWithin, który przyjmuje dwa argumenty jako punkt środkowy, który prawdopodobnie reprezentuje tutaj współrzędne punktu, oraz promień okręgu, który reprezentuje wartość odległości w milach.

Wynikowy dokument jest odtwarzany w następujący sposób, który reprezentuje punkt geoprzestrzenny mieszczący się w okręgu zdefiniowanym przez dany punkt środkowy i promień około 3 mil:

Przykład 5: Użycie operatora zapytania $geoNear

Co więcej, operator $geoNear jest także operatorem geoprzestrzennym używanym w potoku agregacji. Wykonuje zapytanie geoprzestrzenne i zwraca dokumenty posortowane według odległości od określonego punktu. Tutaj daliśmy operator $geoNear, który jest wywoływany wewnątrz potoku agregacji.

db.area.aggregate([
{
$geoBlisko: {
blisko: {wpisz: 'Punkt' , współrzędne: [ - 60,99279 , 30.719296 ] },
Pole odległości: „obliczony odk.” ,
maksymalna odległość: 2 ,
zapytanie: {kategoria: 'Ogród' },
uwzględnijLoc: 'odległość.lokalizacja' ,
kulisty: prawda
}
}
])

W przykładzie wywołujemy metodę agregującą MongoDB i definiujemy w niej operator $geoNear. Operator $geoNear ma ustawionych kilka parametrów określających zachowanie zapytania. Najpierw ustawiamy parametr „near”, który dostarcza wartości „współrzędnych” jako punkt odniesienia do wyszukiwania.

Następnie używamy parametru „distanceField”, aby określić dostarczone pole jako pole wynikowe. To ustawione pole wyniku przechowuje odległość pomiędzy każdym dokumentem a punktem odniesienia. Następnie definiujemy parametr „maxDistance” o wartości „2”, która reprezentuje maksymalną odległość w metrach.

Następnie mamy parametr „query”, który filtruje dokumenty według pola „kategoria” i uwzględnia tylko te dokumenty, których „kategorią” jest „Parki”. Następnie wywołujemy parametr „includeLocs”, który zawiera informacje o lokalizacji. Na koniec podajemy parametr „sferyczny” z wartością „true”, która oblicza odległości przy użyciu sferycznego układu współrzędnych 2D.

Potok agregacji reprezentuje dokument na wyjściu, który odpowiednio wyświetla informacje dotyczące parametru. W poniższym polu „dist.calculated” wyświetlana jest odległość każdego dokumentu od punktu odniesienia:

Wniosek

Dowiedzieliśmy się, że możliwości geoprzestrzenne MongoDB pomagają nam efektywnie obsługiwać informacje oparte na lokalizacji i wysyłać do nich zapytania. Implementację cechy geoprzestrzennej nauczyliśmy się z wykorzystaniem jej różnych operatorów w przykładowym programie. Mamy o wiele więcej funkcjonalności i metod, które są również korzystne dla szerokiego zakresu zastosowań.