

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Geodaten mit Amazon DocumentDB abfragen
<a name="geospatial"></a>

In diesem Abschnitt wird beschrieben, wie Sie Geodaten mit Amazon DocumentDB abfragen können. Nachdem Sie diesen Abschnitt gelesen haben, können Sie beantworten, wie Geodaten in Amazon DocumentDB gespeichert, abgefragt und indexiert werden. 

**Topics**
+ [-Übersicht](#overview)
+ [Indizierung und Speicherung von Geodaten](#indexing)
+ [Abfragen von koordinatenbasierten Daten](#querying_geospatial)
+ [Einschränkungen](#limitations)

## -Übersicht
<a name="overview"></a>

Zu den häufigsten Anwendungsfällen für Geospatial gehört die Näherungsanalyse Ihrer Daten. Zum Beispiel „Suche nach allen Flughäfen im Umkreis von 50 Meilen von Seattle“ oder „Suche nach den nächstgelegenen Restaurants an einem bestimmten Ort“. Amazon DocumentDB verwendet die [GeoJSON-Spezifikation](https://datatracker.ietf.org/doc/html/rfc7946) zur Darstellung von Geodaten. GeoJSON ist eine Open-Source-Spezifikation für die JSON-Formatierung von Formen in einem Koordinatenraum. GeoJSON-Koordinaten erfassen sowohl Längen- als auch Breitengrad und repräsentieren Positionen auf einer erdähnlichen Kugel.

## Indizierung und Speicherung von Geodaten
<a name="indexing"></a>

Amazon DocumentDB verwendet den GeoJSON-Typ „Point“ zum Speichern von Geodaten. Jedes GeoJSON-Dokument (oder Unterdokument) besteht im Allgemeinen aus zwei Feldern:
+ **type** — die dargestellte Form, die Amazon DocumentDB darüber informiert, wie das Feld „Koordinaten“ zu interpretieren ist. Derzeit unterstützt Amazon DocumentDB nur Punkte
+ **Koordinaten** — ein Paar aus Breitengrad und Längengrad, dargestellt als Objekt in einem Array — [Längengrad, Breitengrad]

Amazon DocumentDB verwendet auch 2dSphere-Indizes, um Geodaten zu indizieren. Amazon DocumentDB unterstützt Indexierungspunkte. Amazon DocumentDB unterstützt Proximity-Abfragen mit 2dSphere-Indexierung.

Stellen wir uns ein Szenario vor, in dem Sie eine Anwendung für den Lieferservice von Lebensmitteln erstellen. Sie möchten die Längen- und Breitengrade verschiedener Restaurants in Amazon DocumentDB speichern. Zu diesem Zweck empfehlen wir Ihnen, zunächst einen Index für das Geospatial-Feld zu erstellen, das das Breitengrad- und Längengradpaar enthält. 

```
use restaurantsdb 
db.usarestaurants.createIndex({location:"2dsphere"})
```

Die Ausgabe dieses Befehls würde etwa so aussehen:

```
{
	"createdCollectionAutomatically" : true,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}
```

Sobald Sie einen Index erstellt haben, können Sie damit beginnen, Daten in Ihre Amazon DocumentDB-Sammlung einzufügen.

```
db.usarestaurants.insert({
   "state":"Washington",
   "city":"Seattle",
   "name":"Thai Palace",
   "rating": 4.8,
   "location":{
      "type":"Point",
      "coordinates":[
         -122.3264,
         47.6009
      ]
   }
});

db.usarestaurants.insert({
   "state":"Washington",
   "city":"Seattle",
   "name":"Noodle House",
   "rating": 4.8,
   "location":{
      "type":"Point",
      "coordinates":[
        -122.3517,
         47.6159
      ]
   }
});

db.usarestaurants.insert({
   "state":"Washington",
   "city":"Seattle",
   "name":"Curry House",
   "rating": 4.8,
   "location":{
      "type":"Point",
      "coordinates":[
         -121.4517,
         47.6229
      ]
   }
});
```

## Abfragen von koordinatenbasierten Daten
<a name="querying_geospatial"></a>

Amazon DocumentDB unterstützt die Abfrage von räumlichen Daten nach Nähe, Inklusion und Schnittmenge. Ein gutes Beispiel für eine Näherungsabfrage ist die Suche nach allen Punkten (allen Flughäfen), die weniger als eine bestimmte Entfernung und mehr als eine Entfernung von einem anderen Punkt (Stadt) liegen. Ein gutes Beispiel für Inklusionsabfragen ist die Suche nach allen Punkten (allen Flughäfen), die sich in einem bestimmten Bereich area/polygon (Bundesstaat New York) befinden. Ein gutes Beispiel für eine Kreuzungsabfrage ist die Suche nach einem Polygon (Bundesstaat), das sich mit einem Punkt (Stadt) überschneidet. Sie können die folgenden Geospatial-Operatoren verwenden, um Erkenntnisse aus Ihren Daten zu gewinnen.
+ `$nearSphere`- `$nearSphere` ist ein Suchoperator, der das Suchen von Punkten unterstützt, die einem GeoJSON-Punkt am nächsten und am weitesten entfernt sind.
+ `$geoNear`- `$geoNear` ist ein Aggregationsoperator, der die Berechnung der Entfernung von einem GeoJSON-Punkt in Metern unterstützt.
+ `$minDistance`- `$minDistance` ist ein Suchoperator, der in Verbindung mit `$nearSphere` oder `$geoNear` zum Filtern von Dokumenten verwendet wird, die sich mindestens in der angegebenen Mindestentfernung vom Mittelpunkt befinden.
+ `$maxDistance`- `$maxDistance` ist ein Suchoperator, der in Verbindung mit `$nearSphere` oder verwendet wird, `$geoNear` um Dokumente zu filtern, die sich höchstens in der angegebenen maximalen Entfernung vom Mittelpunkt befinden.
+ `$geoWithin`- `$geoWithin` ist ein Suchoperator, der die Suche nach Dokumenten mit Geodaten unterstützt, die vollständig innerhalb einer bestimmten Form, z. B. eines Polygons, existieren.
+ `$geoIntersects`- `$geoIntersects` ist ein Suchoperator, der die Suche nach Dokumenten unterstützt, deren Geodaten sich mit einem angegebenen GeoJSON-Objekt überschneiden.

**Anmerkung**  
`$geoNear`und `$nearSphere` benötigen einen 2dSphere-Index für das GeoJSON-Feld, das Sie in Ihrer Näherungsabfrage verwenden.

### Beispiel 1
<a name="w2aac47c23c11b9"></a>

In diesem Beispiel erfahren Sie, wie Sie alle Restaurants (Punkte) nach der nächstgelegenen Entfernung zu einer Adresse (Punkt) sortiert finden.

Um eine solche Abfrage durchzuführen, können Sie die Entfernung einer Reihe von Punkten `$geoNear` zu einem anderen Punkt berechnen. Sie können auch das hinzufügen`distanceMultiplier`, um die Entfernung in Kilometern zu messen. 

```
db.usarestaurants.aggregate([
   {
      "$geoNear":{
         "near":{
            "type":"Point",
            "coordinates":[
               -122.3516,
               47.6156
            ]
         },
         "spherical":true,
         "distanceField":"DistanceKilometers",
         "distanceMultiplier":0.001
      }
   }
])
```

Mit dem obigen Befehl würden die Restaurants sortiert nach der Entfernung (am nächsten zum weitesten) vom angegebenen Punkt zurückgegeben. Die Ausgabe dieses Befehls würde ungefähr so aussehen 

```
{ "_id" : ObjectId("611f3da985009a81ad38e74b"), "state" : "Washington", "city" : "Seattle", "name" : "Noodle House", "rating" : 4.8, "location" : { "type" : "Point", "coordinates" : [ -122.3517, 47.6159 ] }, "DistanceKilometers" : 0.03422834547294996 }
{ "_id" : ObjectId("611f3da185009a81ad38e74a"), "state" : "Washington", "city" : "Seattle", "name" : "Thai Palace", "rating" : 4.8, "location" : { "type" : "Point", "coordinates" : [ -122.3264, 47.6009 ] }, "DistanceKilometers" : 2.5009390081704277 }
{ "_id" : ObjectId("611f3dae85009a81ad38e74c"), "state" : "Washington", "city" : "Seattle", "name" : "Curry House", "rating" : 4.8, "location" : { "type" : "Point", "coordinates" : [ -121.4517, 47.6229 ] }, "DistanceKilometers" : 67.52845344856914 }
```

Um die Anzahl der Ergebnisse in einer Abfrage zu begrenzen, verwenden Sie die `num` Option `limit` oder.

`limit`:

```
db.usarestaurants.aggregate([
   {
      "$geoNear":{
         "near":{
            "type":"Point",
            "coordinates":[
               -122.3516,
               47.6156
            ]
         },
         "spherical":true,
         "distanceField":"DistanceKilometers",
         "distanceMultiplier":0.001,
         "limit": 10
      }
   }
])
```

`num`:

```
db.usarestaurants.aggregate([
   {
      "$geoNear":{
         "near":{
            "type":"Point",
            "coordinates":[
               -122.3516,
               47.6156
            ]
         },
         "spherical":true,
         "distanceField":"DistanceKilometers",
         "distanceMultiplier":0.001,
         "num": 10
      }
   }
])
```

**Anmerkung**  
`$geoNear`stage unterstützt die `num` Optionen `limit` und, um die maximale Anzahl zurückzugebender Dokumente anzugeben. `$geoNear`gibt standardmäßig maximal 100 Dokumente zurück, wenn die `num` Optionen `limit` oder nicht angegeben sind. Dies wird durch den Wert der `$limit` Stufe außer Kraft gesetzt, falls vorhanden und der Wert kleiner als 100 ist.

### Beispiel 2
<a name="w2aac47c23c11c11"></a>

In diesem Beispiel erfahren Sie, wie Sie alle Restaurants (Punkte) im Umkreis von 2 Kilometern von einer bestimmten Adresse (Punkt) finden. Um eine solche Abfrage durchzuführen, können Sie `$nearSphere` innerhalb eines Minimums `$minDistance` und Maximums `$maxDistance` von einem GeoJSON-Punkt aus verwenden

```
db.usarestaurants.find({
   "location":{
      "$nearSphere":{
         "$geometry":{
            "type":"Point",
            "coordinates":[
               -122.3516,
               47.6156
            ]
         },
         "$minDistance":1,
         "$maxDistance":2000
      }
   }
},
{
   "name":1
})
```

Der obige Befehl würde Restaurants in einer maximalen Entfernung von 2 Kilometern vom angegebenen Punkt zurückgeben. Die Ausgabe dieses Befehls würde ungefähr so aussehen 

```
{ "_id" : ObjectId("611f3da985009a81ad38e74b"), "name" : "Noodle House" }
```

## Einschränkungen
<a name="limitations"></a>

Amazon DocumentDB unterstützt nicht die Abfrage oder Indizierung von Polygonen,,, LineString, MultiPoint und. MultiPolygon MultiLineString GeometryCollection