‫Dozent: In dieser
‫Vorlesung lernen wir Geodatenabfragen kennen, um ein wirklich
‫cooles Feature zu implementieren, nämlich
‫eine Suchfunktion für Touren innerhalb einer bestimmten Entfernung
‫von einem bestimmten Punkt bereitzustellen.
‫Nehmen wir an,
‫Sie leben an einem bestimmten Punkt und möchten wissen,
‫welche Touren in einer bestimmten Entfernung von Ihnen beginnen, z.
‫B. 250 Meilen, weil Sie nicht weiter
‫fahren möchten, um Ihr Tourerlebnis zu beginnen.
‫Das wäre also eine großartige
‫Funktion und ein wirklich schöner Anwendungsfall für Geodatenabfragen.
‫Und um so etwas zu implementieren, könnten
‫wir hier in unserem Tourrouter eine schöne Route
‫erstellen, so ähnlich.
‫Also werde ich es hier vor diesen allgemeinen Routen hier
‫setzen.
‫Sagen wir also Router-Punkt-Route, und ich
‫nenne das hier Touren, okay?
‫Dann müssen wir auch den Abstand angeben.
‫Deshalb erstellen wir hier einen Distanzparameter.
‫Als nächstes müssen wir auch das Zentrum angeben,
‫und das ist im Grunde der Punkt, an dem Sie leben.
‫Lassen Sie uns es also um die Mitte herum angeben und dann einen
‫Schrägstrich und dann Breiten- und Längengrad angeben.
‫Im Grunde möchten Sie in diese
‫Variable hier die Koordinaten des Ortes eingeben, an dem
‫Sie sich befinden.
‫Nehmen wir an, Sie leben in
‫Los Angeles und möchten alle Touren im Umkreis
‫von 300 Meilen finden.
‫Hier würden Sie also
‫300 sagen, und dann würden Sie
‫hier die Koordinaten Ihres Wohnortes eingeben, in Ordnung?
‫Dann bieten wir auch die Möglichkeit, die Einheit
‫anzugeben.
‫Also, ob diese Entfernung hier in Kilometern oder in Meilen ist.
‫Sagen wir also eine
‫Schrägstrich-Einheit und die Einheit als Parameter.
‫Diese Art der Angabe einer URL ist etwas, das wir noch
‫nie zuvor gemacht haben.
‫Im Grunde sagen wir hier zentrieren
‫und slashen und danach den
‫Längen- und Breitengrad,
‫dann die Slash-Einheit und dann den Abfrageparameter.
‫Und natürlich könnten
‫wir es auch so machen, dass der Benutzer
‫all diese Optionen mit einer Abfragezeichenfolge angeben sollte, aber auf
‫diese Weise sieht es viel sauberer aus und es ist auch eine Art Standardmethode zur
‫Angabe von URLs, die viele Objekte enthalten.
‫Also, was ich sagte, stattdessen könnten wir es
‫natürlich so machen.
‫Tours Entfernung und dann müsste der Benutzer die Entfernung wie
‫folgt hier angeben.
‫Und die Mitte wie folgt, sagen wir minus
‫40 und 45, und dann stellt sich die Einheit auch auf Meilen ein.
‫Okay, dies war eine Möglichkeit, Abfragezeichenfolgen zu verwenden, und
‫wir haben es bereits getan.
‫Und zwar nicht so, sondern so.
‫Okay, aber stattdessen werden wir
‫es wieder so spezifizieren.
‫Was meiner Meinung nach viel schöner aussieht.
‫Also minus 40, 45.
‫Okay, denken Sie, dass
‫das hier wirklich viel sauberer aussieht.
‫Okay, und das ist eine andere Sache,
‫die ich Ihnen zeigen wollte,
‫dass es eine Art Standard für die Angabe von URLs ist, in Ordnung?
‫Wie auch
‫immer, für diese Route brauchen wir
‫natürlich einen Routen-Handler, und der
‫wird beim Tour-Controller sein, und nennen wir diese Handler-Funktion "Tours innerhalb".
‫Lassen Sie uns nun diese Methode für
‫diesen Handler implementieren.
‫Also Tourcontroller und gleich hier unten.
‫Beginnen wir mit dem Abrufen aller Parameter.
‫Lassen Sie mich das alles hier kopieren.
‫Und nur damit wir wissen, wie unsere Daten aussehen.
‫Gut?
‫Also dies, und dann hat dies einen Kommentar.
‫In Ordnung, also lassen Sie uns eine einfache Umstrukturierung verwenden, um
‫alle unsere Daten auf einmal aus den Parametern zu erhalten.
‫Und eigentlich müssen
‫wir const und Distance und Unit sagen.
‫All dies kommt also von Anforderungspunktparametern.
‫Okay, also auf Anfrage. params, wir
‫haben Punktabstand, Punktzentrum und Punkteinheit, oder?
‫Denn dies sind die Namen der
‫drei Parameter, die wir hier angegeben haben.
‫Und eigentlich ist
‫es nicht die Mitte, es ist hier lang, okay,
‫das ist also das Richtige, und dann endlich die Einheit.
‫Auch hier verwenden wir die Umstrukturierung, um alle diese Variablen
‫auf einmal zu erhalten.
‫Als nächstes erhalten wir
‫alle Koordinaten von dieser Breitengrad-Längengrad-Variablen hier.
‫Wie wir sehen, erwarten wir die Daten in diesem Format, und
‫das macht es wirklich einfach, diese Daten von
‫Google Maps zu kopieren.
‫Lassen Sie mich Ihnen das nur schnell zeigen.
‫Es ist wichtig, dass Sie verstehen, wie so
‫etwas auch in der Praxis funktioniert.
‫Lassen Sie uns hier das Beispiel aus Los Angeles verwenden.
‫Okay, und nehmen wir an, du wohnst hier irgendwo.
‫Okay, und so können Sie den Breiten- und Längengrad
‫ganz einfach so ermitteln, okay?
‫Setzen Sie das hier noch einmal als Beispiel ein.
‫Und das ist das Format.
‫Es sieht aus wie Breite und Länge.
‫Lassen Sie uns nun für jede von ihnen eine Variable erstellen.
‫Also einen für den Breitengrad und einen für den Längengrad.
‫Also Breitengrad-Punktaufteilung, weil es eine Zeichenfolge ist und
‫wir sie durch Komma aufteilen möchten.
‫Dadurch wird dann ein Array aus zwei
‫Elementen erstellt, und jetzt können wir wieder Destruktor verwenden, um diese in
‫den beiden Variablen zu speichern, an denen wir interessiert sind.
‫Also Breiten- und Längengrade.
‫Okay, als nächstes möchte ich testen, ob wir tatsächlich
‫die Längen- und Breitengradvariablen finden müssen.
‫Denn wenn nicht, bedeutet dies, dass der Benutzer sie
‫nicht im erforderlichen Format angegeben hat.
‫Angenommen, es gibt keinen
‫Breiten- oder Längengrad, dann möchten wir einen neuen Fehler erstellen.
‫Also wie immer neuer App-Fehler, und ich bin mir nicht sicher, ob
‫wir ihn tatsächlich noch hier haben, und
‫tatsächlich nicht.
‫Also haben wir diesen Teil auskommentiert, weil wir den App-Fehler
‫nach dem Erstellen unserer Handler-Factory-Funktionen nicht mehr brauchten,
‫aber jetzt brauchen wir ihn tatsächlich wieder, und so bringen
‫wir ihn zurück.
‫Und die Nachricht
‫hier wird bitte in folgendem Format sein.
‫Und Fehlercode 400 für diese Anfrage.
‫Großartig, und um zu sehen, ob das alles
‫richtig funktioniert,
‫melden wir uns einfach bei der Konsole ab.
‫Die Entfernung, die Länge und Einheit.
‫Und lassen Sie uns hier auch eine
‫allgemeine Nachricht senden, nur um den Anfrage-zu-Antwort-Zyklus wirklich abzuschließen.
‫Und dafür ist natürlich wie immer das Gleiche.
‫Also Status vorerst erfolgreich, und natürlich werden wir später
‫die Daten senden, die die Abfrage zurückgibt.
‫Also lasst uns das hier eigentlich kopieren.
‫Denn diese Art von ist bereits das, was wir wollen.
‫Also zurück in Postman, lassen Sie uns das alles schließen.
‫Diese brauchen wir nicht mehr.
‫Alles klar, wir müssen auch nicht eingeloggt sein
‫und wollen auch keine Updates.
‫Wie auch immer, wir müssen auch diesen Teil bekommen, für den
‫ich zu faul bin, ihn aufzuschreiben.
‫Und das testen wir jetzt.
‫Und das hat nicht
‫funktioniert, und ich glaube, diese hier haben wir tatsächlich Touren genannt.
‫Haben wir?
‫Also Touren innerhalb.
‫Ich bin mir also nicht sicher, warum ich
‫hier Distanz geschrieben habe. Lassen Sie uns das hier in unseren Beispielen schnell beheben.
‫Und so sind es natürlich Touren im Inneren.
‫Und das funktioniert immer noch nicht, also lassen Sie uns einen Blick auf die Implementierung
‫werfen und sie hier tatsächlich weiterleiten.
‫Hier haben wir das,
‫und ja, das stimmt natürlich überhaupt nicht.
‫Dieser hier sollte also offensichtlich nicht innerhalb der Punktroute liegen.
‫Stattdessen sollte es in der get-Methode enthalten sein.
‫Und so sieht das jetzt viel mehr aus wie das, was
‫wir hier haben.
‫Also dot route und dann dot get.
‫Also ein Versuch weniger und diesmal hat es geklappt.
‫Und werfen wir einen Blick
‫auf die Konsole, und tatsächlich erhalten wir
‫hier die Entfernung, die als Breitengrad und Längengrad angegeben ist, und die Einheit.
‫Großartig, und jetzt ist es an der
‫Zeit, die Abfrage selbst zu schreiben.
‫Nun funktioniert eine Geodatenabfrage eigentlich
‫ganz ähnlich wie eine normale Abfrage.
‫Wir werden also immer noch Touren schreiben, ist gleich Tour. finden und
‫natürlich auf das Ergebnis dieses Versprechens warten.
‫Und dann das alte Spiel, alles als asynchron
‫zu markieren und dann das Asynchrone abzufangen und unsere Funktion darin
‫einzuschließen.
‫Wir haben also alle
‫Touren hier ungenutzt, und lassen Sie uns gleich
‫das Antwortobjekt bearbeiten.
‫Also Daten, und jetzt denken Sie daran, wie wir es Daten genannt haben.
‫Und dann Touren.
‫Okay, und alles, was wir tun müssen, ist hier
‫das Objekt anzugeben oder zu filtern.
‫Denken Sie also daran,
‫dass wir grundsätzlich nach dem
‫Startort abfragen möchten, da das Startortfeld
‫den geografischen Punkt enthält, an dem jede Tour beginnt.
‫Und genau danach suchen wir.
‫Also, start location, und jetzt müssen wir den Wert
‫angeben, nach dem wir suchen.
‫Und dafür verwenden wir jetzt einen
‫Geo-Operator namens geo innerhalb.
‫Wie immer müssen wir
‫das Subjekt angeben, und dann hier, wo
‫wir früher wie einen mathematischen Operator wie
‫größer als verwenden würden, diesmal verwenden wir einen Geo-Operator wie diesen.
‫Geo innerhalb, und dieser Operator tut genau das, was er sagt.
‫Grundsätzlich findet es Dokumente innerhalb einer bestimmten Geometrie.
‫Und diese Geometrie müssen wir im nächsten Schritt definieren.
‫Wir wollen also
‫Dokumente finden, aber wo wollen wir diese Dokumente eigentlich finden?
‫Nun, wir wollen sie innerhalb einer Kugel finden,
‫die an diesem von uns definierten Punkt
‫beginnt und einen Radius der von uns definierten Entfernung hat.
‫Also wieder bei unserem Beispiel in Los
‫Angeles, wenn Sie die
‫Entfernung von 250 Meilen angeben, dann bedeutet das, dass Sie
‫alle Tourdokumente innerhalb einer Kugel finden möchten, die einen Radius von 250 Meilen hat.
‫Okay, sinnvoll?
‫Und jetzt müssen wir
‫die Informationen hier an den Geo-Inner-Operator weitergeben, okay?
‫Und das tun wir, indem wir eine Mittelkugel definieren.
‫Okay, und wieder weiß ich, dass
‫das ziemlich verwirrend aussieht, aber deshalb erkläre ich es hier Schritt für Schritt.
‫Und auch gleich werden wir
‫einen Blick auf die Dokumentation werfen.
‫Der Kugelmitteloperator nimmt also
‫ein Array der Koordinaten und des Radius.
‫Und lassen Sie uns den Code hier
‫tatsächlich formatieren, damit er zumindest ein bisschen einfacher aussieht, okay?
‫Nun, es sieht irgendwie gleich aus, aber wie auch
‫immer, so finden Sie die Koordinaten hier.
‫Und dafür brauchen wir noch
‫ein weiteres Array und dann den Längen- und Breitengrad.
‫Und das ist richtig.
‫Sie müssen immer zuerst den
‫Längengrad und dann den Breitengrad definieren, was
‫etwas kontraintuitiv ist, da normalerweise Koordinatenpaare immer zuerst mit
‫dem Breitengrad und zuerst mit dem Längengrad angegeben werden.
‫Ich glaube, ich habe es bereits
‫erwähnt, dass es in Geo-Angrenzend aus irgendeinem Grund so funktioniert.
‫Das ist also der Mittelpunkt der Kugel.
‫Jetzt müssen wir den Radius angeben.
‫Nun passieren wir hier eigentlich nicht in der Ferne, sondern
‫erwartet stattdessen einen Radius in einer speziellen Einheit
‫namens Radiant.
‫Lassen Sie mich hier die Radiusvariable
‫eingeben, und in einer Sekunde werden wir sie definieren.
‫Lassen Sie uns nun den Radius definieren.
‫Auch hier ist der Radius im Grunde die
‫Distanz, die wir als Radius
‫haben wollen, aber umgerechnet in eine spezielle Einheit namens Bogenmaß.
‫Und um das Bogenmaß
‫zu erhalten, müssen wir unsere Entfernung durch
‫den Erdradius teilen.
‫Das klingt ein bisschen verrückt, aber wirklich so funktioniert es.
‫Okay, jetzt müssen wir hier
‫tatsächlich unsere Einheiten berücksichtigen, denn natürlich ist
‫der Erdradius in Meilen anders als in Kilometern.
‫Lassen Sie uns jetzt hier eine
‫Drehung von größer machen und sagen, dass, wenn die Einheit gleich Meilen
‫ist, das Ergebnis hier die Entfernung sein sollte.
‫Also im Grunde unser ursprünglicher Radius geteilt durch 3963. 2.
‫Okay, das ist noch einmal der Radius der Erde in Meilen.
‫Okay, ansonsten gehen wir dann davon aus,
‫dass es Kilometer sind.
‫Wenn es sich also um Kilometer handelt, ist es die
‫Distanz geteilt durch 6.378. 1 Kilometer.
‫In Ordnung, also wieder ist diese Art von verrückter Umwandlung hier
‫notwendig, weil normalerweise erwartet
‫wird, dass der Radius unserer Kugel im Bogenmaß ist.
‫Und das Bogenmaß erhalten wir, indem
‫wir die Entfernung durch den Erdradius dividieren.
‫Großartig, wir sind also fast bereit, dies jetzt zu testen.
‫Fügen wir einfach die Results-Eigenschaft hinzu, die wir früher hatten.
‫Bei der Anzahl der Ergebnisse im
‫Grunde, und dann
‫ist eine weitere sehr wichtige Sache, dass
‫wir, um nur grundlegende Abfragen durchführen zu können, zuerst dem
‫Feld, in dem sich die Geodaten befinden,
‫nach denen wir suchen, einen Index zuordnen müssen gelagert.
‫In diesem Fall müssen wir also einen Index zum Startort hinzufügen.
‫Also machen wir das hier im Tourmodell.
‫Hier unten brauchen wir also noch einen weiteren Index.
‫Tour-Schema. Index.
‫Startort, aber jetzt werden wir ihn nicht auf eins oder
‫minus eins setzen, da wir
‫diesmal einen anderen Index
‫benötigen.
‫Für Geodaten muss dieser Index also ein
‫2D-Kugelindex sein, wenn die Daten reale Punkte auf der Erde
‫wie eine Kugel beschreiben.
‫Alternativ können wir auch einen 2D-Index verwenden, wenn
‫wir nur fiktive Punkte auf einer einfachen zweidimensionalen Ebene verwenden.
‫In diesem Fall sprechen wir
‫natürlich von realen Punkten
‫auf der Erdoberfläche, daher verwenden wir hier einen 2D-Kugelindex.
‫Also eine 2D-Kugel wie diese.
‫Okay, und wir sagen im Grunde,
‫dass diese Startposition hier auf eine 2D-Kugel indiziert werden sollte.
‫Also eine erdähnliche Kugel, in der sich alle unsere Daten befinden.
‫Super, und damit sollten wir
‫nun eigentlich bereit sein, unsere neue Route auszuprobieren.
‫Okay, lass uns diesen Radius hier
‫einfach um 400 Meilen vergrößern, und mal sehen, was wir bekommen.
‫Nun, wir bekommen diesen seltsam aussehenden Fehler,
‫und ich bin mir nicht wirklich sicher, was das ist.
‫Schauen wir also mal rein.
‫Und wahrscheinlich stimmt hier etwas mit dem Radius nicht,
‫aber eigentlich ist dies ein großartiger Zeitpunkt, um unseren Debugger zu testen.
‫Das habe ich Ihnen schon vor langer Zeit
‫gezeigt, aber dies ist ein guter Anwendungsfall, um sich
‫den Debugger tatsächlich noch einmal anzusehen.
‫Ich denke, wir haben dafür ein NPM-Skript,
‫es heißt Debug.
‫Wir müssen also diesen Prozess kennen und dann sagen, NPM run debug.
‫Okay?
‫Das sollte sich also dieses schöne Fenster öffnen.
‫Und lassen Sie uns alle diese Dateien hier schließen.
‫Okay, und wir sind in unseren Controllern.
‫Tour-Controller.
‫Und jetzt setzen wir hier einen Breakpoint.
‫Okay, denn zu diesem Zeitpunkt haben
‫wir alle unsere Variablen definiert
‫und können uns dann ihre Werte ansehen, um zu sehen, was los ist.
‫Natürlich hätten wir das auch mit einer einfachen
‫Konsole machen können. log, aber in
‫manchen Situationen, in denen viel los
‫ist, ist es auch schön, den Debugger zu verwenden.
‫Daher müssen wir unsere Anfrage senden.
‫Und jetzt sind wir im Debugger an unserem Breakpoint.
‫Und so hat unser
‫Code zu diesem Zeitpunkt wirklich aufgehört.
‫Und wir können hier sehen,
‫dass tatsächlich alle unsere Variablen definiert zu sein scheinen.
‫Schauen wir uns das hier in local an.
‫Wir haben also eine
‫Entfernung, wir haben den Breitengrad, den Längengrad und auch den Radius.
‫Also lass uns hier weitermachen.
‫Also sind wir direkt
‫zur nächsten Zeile gesprungen, weil dieses if hier nicht in den if-Block eingetreten ist.
‫Und so führt es jetzt alle diese Funktionen aus.
‫Aber lassen Sie uns tatsächlich aus
‫ihnen heraustreten, und jetzt bekommen wir tatsächlich undefinierte Touren.
‫Wenn wir also jetzt so
‫weitermachen, werden wir wahrscheinlich denselben Fehler wieder bekommen, oder?
‫Und das tun wir in der Tat.
‫Es muss also etwas hier in dieser
‫Zeile sein, sagen wir, und tatsächlich, ich glaube, ich habe den Fehler gefunden.
‫So schreibt man jetzt Kugel.
‫Sphäre ist also eher so, oder?
‫Also hoffe ich und glaube, dass dies tatsächlich der Fehler war.
‫Schließen wir also den Debugger hier tatsächlich und
‫lassen Sie uns entlasten, und eigentlich hätte das meinen
‫Code hier aktualisieren sollen.
‫Mal sehen, und es tat es tatsächlich nicht.
‫Ich bin mir nicht sicher, warum das so ist, aber in Ordnung.
‫Lassen Sie uns das hier noch einmal ausführen.
‫Nicht dieser Befehl, okay,
‫lass uns einfach NPM starten.
‫Schließen Sie alle diese.
‫Und jetzt versuchen Sie es noch einmal.
‫Ah, und jetzt bekommen wir hier einige echte Ergebnisse, schön.
‫Es sagt mir also, dass diese Touren
‫hier in der angegebenen 400-Meilen-Distanz liegen.
‫Aber wie können wir wirklich wissen, dass es wahr ist?
‫Nun, eigentlich können wir dafür einen Kompass verwenden.
‫Wenn wir hier also den Kompass öffnen, haben wir etwas
‫wirklich Schönes, nämlich dieses Schema.
‫Das machen wir also hier in den Touren.
‫Und so können wir jetzt hier zum Schema kommen
‫und dieses Schema dann analysieren.
‫Analysieren Sie also das Schema, und hier haben wir
‫nun eine schöne Zusammenfassung für alle unsere Felder.
‫Sie sehen
‫beispielsweise, dass der Schwierigkeitsgrad bei 50 %
‫der Dokumente leicht, bei 30 % mittel und bei 20 % schwer ist.
‫Sie sehen auch diese Laufzeiten.
‫In 20% sind es also fünf, und auch neun ist beliebter als
‫die anderen Laufzeiten.
‫Was mich hier wirklich interessiert, sind die Standorte.
‫Oder eigentlich die Startorte, also das ist hier.
‫Und jetzt würden Sie normalerweise hier eine Karte sehen.
‫Aber im Moment gibt es keine Karte, weil
‫wir gerade ein Dokument haben, das keinen Startort hat.
‫Damit dies
‫ordnungsgemäß funktioniert, müssen wir dieses Dokument loswerden.
‫Es war also eines dieser Testdokumente,
‫die wir erstellt haben, die wir aber jetzt eigentlich nicht mehr brauchen.
‫Also lass mich sehen, ob es hier auftaucht.
‫Vielleicht ist es am Ende.
‫Also ja, es ist diese neue Testtour.
‫Lass uns das loswerden.
‫Zurück zu unserem Schema, analysieren wir es noch einmal.
‫Okay, hier haben wir also die Star-Anwendungen.
‫Und hier siehst du schon die Karte, das ist also toll, oder?
‫Das ist wirklich ein praktisches Feature.
‫Wir sollten hier also neun Punkte haben.
‫Also eins, zwei, drei, vier, fünf, sechs, sieben, acht, eins
‫hier oben, das neunte.
‫Also wahrscheinlich ist dieser hier, um die Nordlichter zu sehen.
‫Richtig?
‫Und jetzt können wir diese Abfrage mit dieser
‫grafischen Oberfläche tatsächlich replizieren.
‫Kommen wir also nach Los Angeles und ungefähr zu
‫dem Punkt, an dem wir waren.
‫Sagen wir also hier, und ich zoome ein wenig
‫heraus, nur um etwas mehr Platz
‫zu schaffen, aber jetzt können wir die Umschalttaste drücken und dann ziehen.
‫Also wie es hier unten heißt.
‫Also lege die Hand dort hin, wo unser Punkt war,
‫also im Grunde irgendwo hier in Los Angeles.
‫Jetzt verschieben und dann ziehen, jetzt gut.
‫Sie können also sehen, dass wir, wenn
‫wir beginnen, diese Sphäre zu vergrößern, mehr und
‫mehr zu einigen dieser Punkte hier gelangen, die gelb werden, okay?
‫Und ich glaubte, dass unser Radius ungefähr 0 war. 1 oder
‫so ähnlich, sagen wir.
‫Und so sehen Sie, dass eigentlich drei Dokumente,
‫also drei Touren innerhalb dieser Sphäre, die wir
‫gerade erstellt haben, okay?
‫Wir haben also diese Kugel mit dem Radius 0. 1, wie Sie hier
‫oben sehen können.
‫Und so sieht diese Abfrage tatsächlich genauso aus
‫wie die, die wir gerade in unserer Controller-Funktion mit Code gefüllt
‫haben, oder?
‫Wir erhalten also diese drei Dokumente, die orange markiert sind,
‫also lassen Sie uns jetzt hier nochmal auf Analysieren klicken, und
‫unsere Abfrage hat nun drei Dokumente zurückgegeben.
‫Sehen wir uns also die Namen an.
‫Also wo ist das?
‫Für Sportliebhaber, Weinverkoster
‫und Parkcamper.
‫Und die drei Touren, die wir in Postman
‫bekommen haben, also als Ergebnis für API, sollten genau dieselben drei sein.
‫Also der Sportliebhaber, Weinverkoster und Parkcamper.
‫Also Parkcamper, dann haben Sie, der Sportliebhaber, und der
‫letzte, der sich
‫erinnern sollte, sollte der Weinverkoster sein, und
‫das ist er tatsächlich.
‫Super, das ist wirklich fantastisch.
‫Lassen Sie uns dies jetzt hier auf 200 reduzieren, sehen
‫wir, wie viele Ergebnisse Sie dann erhalten,
‫und tatsächlich ist es nur eines.
‫Kommen wir also zurück zum Kompass.
‫Lassen Sie uns diese Abfrage hier löschen.
‫Wenn wir also zu all unseren Dokumenten zurückkehren, werfen
‫Sie einen Blick auf unsere Karte.
‫Und hier ist LA, okay.
‫Es ist ein anderer Radius, der ungefähr 0 sein sollte. 05.
‫Sagen wir jetzt so etwas, und so
‫bekommen wir tatsächlich nur diese eine Tour, von der
‫ich glaube, dass es sich um die Weinprobe oder so handelt.
‫Ja, das müssen wir analysieren.
‫Also oh, eigentlich ist es der Sportliebhaber.
‫Mal sehen, ob wir das hier haben.
‫Und tatsächlich ist es so.
‫Es ist also der Sportliebhaber, und das
‫ist die einzige Tour, die sich im Umkreis von 200 Meilen von Los Angeles befindet.
‫Fantastisch.
‫Also das finde ich wirklich richtig spannend, richtig cool.
‫Lassen Sie mich Ihnen noch ganz schnell
‫etwas anderes zeigen, damit Sie auch alle unsere Standorte auf der Karte sehen können.
‫Das ist also hier.
‫Dies sind also die Orte
‫aller Touren, also die, die in Ort gespeichert sind.
‫Wir haben also die Koordinaten, und wir haben
‫auch Tage, Beschreibungen und die Uhrzeit, okay?
‫Und natürlich dreht sich unsere Anfrage hier nicht um all das.
‫Für diese Abfrage interessieren uns
‫eigentlich nur die Sternstandorte, aber ich wollte Ihnen
‫trotzdem diese Karte zeigen, auf der wir auch alle Standorte sehen können.
‫Okay, es gibt wirklich ein riesiges Potenzial für die
‫Verwendung von Geodaten mit MongoDB.
‫Die Möglichkeiten für solche Geo-Abfragen
‫sind wirklich endlos.
‫Und ich wollte Ihnen eigentlich
‫zeigen, ob wir in MongoDB noch weitere Geodatenoperatoren haben.
‫Werfen wir also noch einmal einen Blick in die Dokumentation.
‫Kommen wir hier noch
‫einmal zu den Referenz- und Operatoren und den Abfrageoperatoren.
‫Und ich glaube, es ist irgendwo hier unten, ja.
‫Hier haben wir also den Geodatenoperator.
‫Und Sie sehen, dass dies diejenige ist, die wir
‫verwendet haben, also diejenige, die
‫Geometrien innerhalb einer angrenzenden geo-begrenzenden Geometrie auswählt.
‫Das klingt ein bisschen seltsam, aber diese angrenzende
‫geo-angrenzende Geometrie ist die Kugel, die wir in unserem
‫Code definiert haben, oder?
‫Jetzt hätten wir hier auch die Snear verwenden können,
‫schauen wir uns das an.
‫Und so hätte das ein bisschen anders ausgesehen.
‫In diesem Fall würden wir also den Punkt
‫mit dem erhaltenen Längen- und Breitengrad definieren
‫und dann die maximale Entfernung
‫hier in Metern angeben.
‫Und in diesem Fall mussten
‫wir die Umrechnung in Radiant nicht vornehmen.
‫Okay, das Schöne daran ist
‫auch, dass wir einen Mindestabstand angeben können.
‫Damit könnten wir zum Beispiel Touren
‫ausschließen, die nur 80 km von unserem Ausgangspunkt entfernt
‫sind, okay?
‫Wenn Sie also eines Tages so
‫etwas brauchen, können Sie auch hier immer den neuen Operator verwenden.
‫OK großartig.
‫Mit dieser hier gerade definierten Geo-Abfrage
‫haben wir also grundsätzlich Dokumente gefunden, die sich in
‫einer gewissen Entfernung von unserem Ausgangspunkt befinden.
‫Aber was wäre, wenn wir eigentlich
‫die genauen Entfernungen aller Touren zu diesem Startpunkt wissen wollten?
‫Genau das werden wir in der
‫nächsten Vorlesung berechnen.