

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.

# Räumliche Daten
<a name="access-graph-opencypher-22-spatial-data"></a>

Amazon Neptune unterstützt jetzt räumliche Abfragen, sodass Sie geometrische Daten in Ihrem Diagramm speichern und analysieren können. Räumliche Merkmale werden zwar häufig für geografische Standorte (wie Koordinaten auf einer Karte) verwendet, funktionieren aber mit allen zweidimensionalen Daten, bei denen Position und Nähe eine Rolle spielen. Verwenden Sie diese Funktion, um Fragen wie „Welche Geschäfte befinden sich im Umkreis von 8 Meilen von diesem Kunden?“ zu beantworten. , „Finden Sie alle Lieferwege, die sich mit diesem Servicebereich kreuzen“ oder „Welche Komponenten in diesem Grundriss überschneiden sich mit der HLK-Zone?“ Neptune implementiert die räumliche Unterstützung mithilfe branchenüblicher Funktionen für räumliche Typen, die mit Punkten, Polygonen und anderen geometrischen Formen funktionieren. Sie können räumliche Daten als Eigenschaften auf Knoten und Kanten speichern und dann mithilfe räumlicher Funktionen Entfernungen berechnen, überprüfen, ob Punkte innerhalb von Grenzen liegen, oder überlappende Regionen finden — alles innerhalb Ihrer OpenCypher-Abfragen.

**Häufige Anwendungsfälle: **
+ **Geografische Anwendungen**: Location-based Empfehlungen, Geofencing, Routenplanung und Gebietsanalyse
+ **Anlagen- und Raummanagement**: Grundrisse, Platzierung der Ausrüstung und Zonenabdeckung
+ **Netzwerktopologie**: Kartierung der physischen Infrastruktur, Versorgungsbereiche und Servicegrenzen
+ **Design und CAD**: Komponentenpositionierung, Kollisionserkennung und räumliche Beziehungen in 2D-Konstruktionen
+ **Spieleentwicklung**: Charakterpositionierung, Kollisionserkennung und Berechnung des Wirkungsbereichs

Die Implementierung von Spatial Types in Amazon Neptune folgt wie andere Datenbanken den Richtlinien ISO/IEC 13249-3:2016. Die [Geofunktionen](access-graph-opencypher-22-spatial-functions.md) sind in der OpenCypher-Abfragesprache verfügbar.

## Koordinatensystem
<a name="access-graph-opencypher-22-spatial-data-coordinate-system"></a>

Neptun hat einen Spatial Reference Identifier (SRID) für eine gesamte Datenbank. Die Homogenität des Koordinatensystems reduziert Benutzerfehler bei Abfragen und verbessert die Datenbankleistung. Die erste Version (1.4.7.0) unterstützt das kartesische Koordinatensystem, das auch als SRID 0 bezeichnet wird.

Die Neptune-Implementierung von SRID 0 ist mit Längen- und Breitengradwerten kompatibel. Wird verwendet`ST_DistanceSpheroid`, um Entfernungen auf der Grundlage von 4326 zu berechnen. WGS84/SRID 

Die aktuelle Implementierung unterstützt das Speichern von dreidimensionalen Koordinaten. Die räumlichen Funktionen unterstützen derzeit nur die Verwendung der Koordinaten der X- und Y-Achse (2-dimensional). Die Z-Achsenkoordinaten werden derzeit von den verfügbaren räumlichen Funktionen nicht unterstützt.

## Speichern von Standortdaten
<a name="storing-spatial-data"></a>

Speichern Sie Positionsdaten auf Knoten und Kanten mithilfe des Eigenschaftstyps Geometry. Erstellen Sie Geometriewerte aus dem Well-Known Textformat (WKT), einer Standardmethode zur Darstellung geografischer Formen als Text. Um beispielsweise eine Punktposition zu speichern:

```
CREATE (n:airport {code: 'ATL', location: ST_GeomFromText('POINT (-84.4281 33.6367)')})
```

Bei der Arbeit mit geographischen Koordinaten steht das erste Argument (x) für den Längengrad und das zweite Argument (y) für den Breitengrad. Dies folgt der in räumlichen Datenbanken verwendeten Standardkoordinatenreihenfolge und dem ISO-19125-Standard.

**Anmerkung**  
 Neptune unterstützt jetzt einen neuen Datentyp namens „Geometrie“. Die Geometrieeigenschaft eines Knotens oder einer Kante kann mithilfe der Funktion aus einer WKT-Zeichenfolge erstellt werden. `ST_GeomFromText`  
Neptune speichert Punktdaten automatisch in einem speziellen räumlichen Index, um die Leistung der Funktionen für räumliche Typen zu verbessern. `ST_Contains`Wird beispielsweise zum Auffinden der Punkte innerhalb eines Polygons verwendet, durch den speziellen räumlichen Index beschleunigt.  
[Wikipedia-Seite zur Well-Known Textdarstellung von Geometrie ](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry)

## Laden räumlicher Daten in großen Mengen
<a name="loading-spatial-data-bulk"></a>

Geben Sie beim Massenladen von Daten den Geometrietyp in Ihrem CSV-Header an. Neptune analysiert WKT-Zeichenfolgen und erstellt die entsprechenden Geometrieeigenschaften:

```
:ID,:LABEL,code:String,city:String,location:Geometry
21,airport,ATL,Atlanta,POINT (-84.42810059 33.63669968)
32,airport,ANC,Anchorage,POINT (-149.9960022 61.17440033)
43,airport,AUS,Austin,POINT (-97.66989899 30.19449997)
```

Vollständige Informationen zum CSV-Format finden Sie unter [ OpenCypher-Massenladeformat. ](bulk-load-tutorial-format-opencypher.md)

## Abfrage von Geodaten
<a name="querying-spatial-data"></a>

In den folgenden Abfragebeispielen wird anhand des [ Airroute-Datasets veranschaulicht](https://github.com/krlawrence/graph/tree/main/sample-data), wie räumliche Funktionen in Neptune verwendet werden.

Wenn Ihre Daten separate Eigenschaften für Breitengrad und Längengrad anstelle einer Geometrieeigenschaft haben, können Sie sie bei der Abfrage in Punkte umwandeln. Finden Sie die 10 Flughäfen, die einem bestimmten Standort am nächsten sind:

```
MATCH (a:airport)
WITH a, ST_GeomFromText('POINT (' + a.lon + ' ' + a.lat + ')') AS airportLocation
WITH a, airportLocation, ST_Distance(ST_GeomFromText('POINT (-84.4281 33.6367)'), airportLocation) AS distance
WHERE distance IS NOT NULL
RETURN a.code, a.city, distance
ORDER BY distance ASC
LIMIT 10
```

Wenn Sie bereits Standorte als gespeichert haben, können `ST_Point` Sie diese Standortwerte direkt verwenden:

1. Festlegen der -Eigenschaft

   ```
   MATCH (a:airport)
   SET a.location = ST_GeomFromText('POINT (' + a.lon + ' ' + a.lat + ')')
   ```

1. Abfrage mit ST\_Distance:

   ```
   MATCH (a:airport)
   WHERE a.location IS NOT NULL
   WITH a, ST_Distance(ST_GeomFromText('POINT (-84.4281 33.6367)'), a.location) AS distance
   RETURN a.code, a.city, distance
   ORDER BY distance ASC
   LIMIT 10
   ```

### Mit dem Bolt-Treiber
<a name="querying-spatial-data-bolt"></a>

Die meisten Abfragemethoden geben Geometriewerte als WKT-Zeichenfolgen zurück, die für Menschen lesbar sind. Wenn Sie den Bolt-Treiber verwenden, werden Geometriewerte aus Effizienzgründen im WKB-Format (Well-Known Binär) zurückgegeben. Konvertieren Sie WKB in Ihrer Anwendung in ein Geometrieobjekt:

```
try (Session session = driver.session()) {
    Result result = session.run("MATCH (n:airport {code: 'ATL'}) RETURN n.location as geom");
    
    Record record = result.single();
    byte[] wkbBytes = record.get("geom").asByteArray();
    
    // Convert WKB to Geometry object using JTS library
    WKBReader wkbReader = new WKBReader();
    Geometry geom = wkbReader.read(wkbBytes);
}
```