Dieses Kapitel führt ein, wie MongoDB geografische Daten speichert. Um die geografische Abfragefunktionalität von MongoDB zu nutzen, müssen wir zunächst verstehen, wie geografische Daten gespeichert werden.

Geografische Daten bestehen hauptsächlich aus Punkten, Linien und geometrischen Formen.

Ein Punkt auf einer Karte wird durch seine Längen- und Breitengradkoordinaten definiert. Mehrere Punkte bilden eine Linie, und mehrere Linien können verschiedene Formen bilden.

In der praktischen Anwendung: Die Lage eines Geschäfts, "Wo bin ich?", und "Wo ist die Schule?" können alle mittels Koordinaten dargestellt werden. Die Beschreibung des Ausmaßes eines Campus oder eines Einkaufszentrums erfordert geometrische Formen.

GeoJSON-Objekt

MongoDB verwendet GeoJSON-Objekte zur Darstellung geografischer Informationen.

Häufige GeoJSON-Typen sind:

  • Punkt - repräsentiert einen Koordinatenpunkt
  • LineString - repräsentiert eine Linie
  • Polygon - repräsentiert ein Polygon

Das Format zur Speicherung von GeoJSON-Objekten in MongoDB-Feldern ist wie folgt:

<field>: { type: <GeoJSON-Typ>, coordinates: <Koordinaten> }

Erklärung:

  • - Feldname
  • type - GeoJSON-Typ
  • coordinates - Ein Array von Koordinatenpunkten. Das Format variiert je nach GeoJSON-Typ.

Beispiel:

location: {
      type: "Point",  // Typ der geografischen Daten, in diesem Fall handelt es sich um einen Koordinatenpunkt
      coordinates: [-73.856077, 40.848447] // Längengrad, Breitengrad
}

Erklärung: Das Feld "location" speichert geografische Daten vom Typ Koordinatenpunkt.

Koordinatenpunkt (Point)

Format:

{ type: "Point", coordinates: [ Längengrad, Breitengrad ] }

Beispiel:

{ type: "Point", coordinates: [ 40, 5 ] }

Linie (LineString)

Format:

{ type: "LineString", coordinates: [ Punkt1, Punkt2, ...] }

Beispiel:

{ type: "LineString", coordinates: [ [ 40, 5 ], [ 41, 6 ] ] }

Polygon

Kann aus einer oder mehreren Linien bestehen. Format:

{
  type: "Polygon",
  coordinates: [ 
		Linie1,
		Linie2,
		....
	]
}

Hinweis: Die Anfangs- und Endkoordinaten jedes Liniensegments müssen gleich sein, um eine geschlossene Form zu bilden.

Form, die aus einem einzigen Linienabschnitt besteht

{
  type: "Polygon",
  coordinates: [
  		[ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0  ] ] // Koordinatenpunkte des Liniensegments, beachten Sie, dass die ersten und letzten Koordinaten gleich sind.
	]
}

Form, die aus mehreren Linienabschnitten besteht

{
  type : "Polygon",
  coordinates : [
     [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ], // Linienabschnitt 1
     [ [ 2 , 2 ] , [ 3 , 3 ] , [ 4 , 2 ] , [ 2 , 2 ] ]  // Linienabschnitt 2
  ]
}

Geografischer Index

MongoDB unterstützt zwei Arten von geografischen Indizes, um die Abfrage von GeoJSON-Daten zu beschleunigen.

2dsphere

Dies ist ein sphärischer Geometrieindex-Typ, was bedeutet, dass bei der Berechnung des Abstands zwischen zwei Punkten 2dsphere die Erde als Kugel betrachtet.

Beispiel zur Erstellung eines 2dsphere-Index:

db.collection.createIndex( { location : "2dsphere" } )

Erstellt einen Index für das Feld "location".

2d

2D ist ein Typ der planaren Geometrie, der verwendet wird, um den Abstand zwischen zwei Punkten zu berechnen, als ob sie in einer Ebene wären. Beispiel zur Erstellung eines 2D-Index:

db.collection.createIndex( { location : "2d" } )

Dies erstellt einen Index für das Feld "location".

Arten von geografischen Abfragen

Geografische Abfragen sind alle mit geometrischen Berechnungen verbunden. Im Folgenden sind die von MongoDB unterstützten Abfragetypen aufgeführt:

  • $geoIntersects - Wird verwendet, um Dokumente mit einem spezifischen geometrischen Schnittpunkt abzugleichen.
  • $geoWithin - Gleicht Dokumente innerhalb eines bestimmten geometrischen Bereichs ab.
  • $near - Wird in der Regel verwendet, um nach Dokumenten zu suchen, die am nächsten zu einem bestimmten Koordinatenpunkt liegen.

Hinweis: Weitere Informationen zu geografischen Abfragen finden Sie in den folgenden Kapiteln.