So implementieren Sie Geodatenfunktionen von MongoDB

So Implementieren Sie Geodatenfunktionen Von Mongodb



Die Geodatenfunktion von MongoDB bietet eine einfache Möglichkeit, geografische Daten in einer Datenbank zu speichern. Im Wesentlichen können wir die Geodaten in MongoDB als GeoJSON-Objekte speichern. GeoJSON ist ein kostenloses Open-Source-Format, das auf der JavaScript-Objektnotation mit einfachen geografischen Daten basiert. Diese Funktionalität ist wichtig für Apps, die standortbasierte Dienste benötigen, wie z. B. den Kartierungsprozess, die standortbasierte Suche und andere. In diesem Artikel wird die Geodatenfunktion anhand der Beispielimplementierung behandelt.

Hinzufügen von Dokumenten zur Sammlung für Geodaten-Features

Um die Funktionalität der MongoDB Geospatial-Funktion zu demonstrieren, benötigen wir die Dokumente für die jeweilige Sammlung. Wir fügen einige Dokumente in die „Bereich“-Sammlung ein, wie im Folgenden gezeigt:

db.area.insertMany( [
{
Name: „Kinderpark“ ,
Standort: { Typ: 'Punkt' , Koordinaten: [ - 60,97 , 30.77 ] },
Kategorie: 'Garten'
},
{
Name: „Studentenbereich“ ,
Standort: { Typ: 'Punkt' , Koordinaten: [ - 60.9928 , 30.7193 ] },
Kategorie: 'Garten'
},
{
Name: 'Fußballplatz' ,
Standort: { Typ: 'Punkt' , Koordinaten: [ - 60.9375 , 30.8303 ] },
Kategorie: 'Stadion'
}
] )

Wir verfügen über Dokumente, die Standortdaten wie Koordinaten enthalten. Darüber hinaus erstellen wir einen Geodatenindex für das Feld, um die Leistung von Geodatenabfragen zu optimieren.









Beispiel 1: Verwendung des $geoIntersects-Abfrageoperators

Zuerst haben wir den $geoIntersects-Operator des Geodaten-Features, der das bereitgestellte Objekt schneidet. Betrachten Sie die folgende Implementierung des $geoIntersects-Operators:



db.area.find({ location: { $geoIntersects: { $geometry: { type: 'Punkt' ,

Koordinaten: [ - 60,97 , 30.77 ] } } } })

Im Beispiel rufen wir die Sammlung „area“ zusammen mit der Operation „find“ auf. An die Methode find() übergeben wir die Feldsätze „Standort“ an den Abfrageoperator $geoIntersects des Geodaten-Features. Damit wird überprüft, ob der angegebene Punkt die im Geometriefeld gespeicherte Geometrie schneidet.





Dann übernimmt der $geoIntesects-Operator den $geometry-Operator, wobei das Typfeld mit dem „Punkt“-Wert und das Koordinatenfeld mit den „Koordinaten“-Werten festgelegt wird. Hier wird die $geometry für den Geodatenvergleich definiert.

In der folgenden Ausgabe wird das erwartete Dokument abgerufen und das Geometriefeld enthält ein geometrisches Objekt, das den angegebenen Punkt schneidet:



Beispiel 2: Verwendung des $near-Abfrageoperators

Der $near-Operator ist auch die Geodatenfunktion, die für Geodatenabfragen verwendet wird, um die Dokumente zu identifizieren, die sich geografisch in der Nähe eines bestimmten Ortes befinden. Es ruft die Dokumente ab, die nach ihrer Nähe zum angegebenen Ort geordnet sind. Hier stellen wir die Implementierung des $near-Operators bereit:

db.area.find(
{
Standort:
{ $near :
{
$geometry: { Typ: 'Punkt' , Koordinaten: [ - 60.9667 , 30.78 ] },
$minDistance: 1000 ,
$maxDistance: 5000
}
}
}
)

Im Beispiel definieren wir das Feld „location“ der Sammlung „area“ innerhalb der Operation „find“. Dann setzen wir den $near-Abfrageoperator des Geodatenmerkmals auf dieses „Standort“-Feld. Der Operator $near sucht nach dem Nahpunkt mit dem angegebenen Koordinatenpunkt. Als Nächstes verwenden wir die Parameter $minDistance und $maxDistance im $near-Operator, die mit bestimmten Werten versehen sind, um die Dokumente innerhalb des angegebenen Entfernungsbereichs vom angegebenen Punkt abzurufen.

Das Dokument wird in der Ausgabe abgerufen, die sich in der Nähe der angegebenen Orte oder Points of Interest in einer Geodaten-„Gebiets“-Sammlung befindet:

Beispiel 3: Verwendung des $nearsphere-Abfrageoperators

Alternativ haben wir den Operator $nearsphere, der dem Operator $near ähnelt, aber $nearSphere berücksichtigt bei der Berechnung der Entfernungen die Kugelform der Erde.

db.area.find(
{
Standort: {
$nearSphere: {
$geometry: {
Typ : 'Punkt' ,
Koordinaten: [ - 60.9667 , 30.78 ]
},
$minDistance: 1000 ,
$maxDistance: 5000
}
}
}
)

Im Beispiel verwenden wir den $nearsphere-Operator der Geodatenabfrage. Der $nearspehere-Operator sucht hier nach dem Dokument, dessen nächstgelegene Punkte nahe an den in der Abfrage angegebenen Punkten liegen, und die Punkte werden auf das Koordinatenfeld-Array gesetzt.

Anschließend verfeinern wir die Ergebnisse, indem wir die Parameter $minDistance und $maxDistance festlegen. Der Parameter $minDistance stellt sicher, dass die zurückgegebenen Dokumente mindestens 1000 Meter vom angegebenen Punkt entfernt sind, während der Parameter $maxDistance die Ergebnisse auf die Orte beschränkt, die nicht mehr als 5000 Meter entfernt sind.

Das Dokument wird in der Ausgabe mit einem Standort innerhalb eines angegebenen Meters vom Punkt mit den angegebenen Koordinaten angezeigt:

Beispiel 4: Verwendung des $geoWithin-Abfrageoperators

Als nächstes haben wir den $geoWithin-Operator in MongoDB, der für Geodatenabfragen verwendet wird, um Dokumente zu finden, die vollständig innerhalb einer bestimmten Form, beispielsweise eines Kreises, liegen. Lassen Sie uns die folgende Demonstration der $geoWithin-Abfrage durchführen:

db.area.find({ Standort:

{ $geoWithin:

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

Im Beispiel verwenden wir den Operator $geoWithin, um die Dokumente der „area“-Sammlung innerhalb einer bestimmten kreisförmigen Fläche auf einer 2D-Kugel zu finden. Dazu geben wir den $centerSphere-Operator innerhalb des $geoWithin-Operators an, der die beiden Argumente als zentrischen Punkt, der hier wahrscheinlich den Koordinatenpunkt darstellt, und den Radius des Kreises, der den Entfernungswert in Meilen darstellt, annimmt.

Das resultierende Dokument wird im Folgenden abgerufen und stellt einen Geodatenpunkt dar, der innerhalb des Kreises liegt, der durch den angegebenen Mittelpunkt und den Radius von etwa 3 Meilen definiert wird:

Beispiel 5: Verwendung des $geoNear-Abfrageoperators

Darüber hinaus ist der $geoNear-Operator auch ein Geodatenoperator, der für die Aggregationspipeline verwendet wird. Es führt eine Geodatenabfrage durch und gibt die Dokumente sortiert nach ihrer Nähe zu einem bestimmten Punkt zurück. Hier haben wir den Operator $geoNear angegeben, der innerhalb der Aggregationspipeline aufgerufen wird.

db.area.aggregate([
{
$geoNear: {
in der Nähe: { Typ: 'Punkt' , Koordinaten: [ - 60.99279 , 30.719296 ] },
distanceField: „dist.berechnet“ ,
maximale Entfernung: 2 ,
Abfrage: { Kategorie: 'Garten' },
includeLocs: „dist.location“ ,
sphärisch: wahr
}
}
])

Im Beispiel rufen wir die Aggregatmethode von MongoDB auf und definieren darin den Operator $geoNear. Der $geoNear-Operator wird mit mehreren Parametern festgelegt, um das Abfrageverhalten festzulegen. Zuerst legen wir den Parameter „nahe“ fest, der die „Koordinaten“-Werte als Referenzpunkt für die Suche bereitstellt.

Anschließend verwenden wir den Parameter „distanceField“, um das bereitgestellte Feld als Ergebnisfeld anzugeben. Dieses festgelegte Ergebnisfeld speichert den Abstand zwischen jedem Dokument und dem Referenzpunkt. Als nächstes definieren wir den Parameter „maxDistance“ mit dem Wert „2“, der die maximale Entfernung in Metern darstellt.

Danach haben wir den Parameter „query“, der die Dokumente nach dem Feld „category“ filtert und nur die Dokumente berücksichtigt, bei denen die „category“ „Parks“ lautet. Anschließend rufen wir den Parameter „includeLocs“ auf, um die Standortinformationen aufzunehmen. Schließlich geben wir den „sphärischen“ Parameter mit dem „wahren“ Wert an, der die Abstände mithilfe eines 2D-sphärischen Koordinatensystems berechnet.

Die Aggregationspipeline stellt das Dokument in der Ausgabe dar, das die Informationen für den Parameter entsprechend anzeigt. Das folgende Feld „dist.calculated“ zeigt den Abstand jedes Dokuments vom Referenzpunkt an:

Abschluss

Wir haben festgestellt, dass die Geodatenfunktionen von MongoDB uns dabei helfen, die standortbezogenen Informationen effizient zu verarbeiten und abzufragen. Wir haben die Implementierung der Geodatenfunktion mithilfe ihrer verschiedenen Operatoren anhand des Beispielprogramms erlernt. Wir verfügen über viele weitere Funktionalitäten und Methoden, die auch für eine Vielzahl von Anwendungen von Nutzen sind.