

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Dati spaziali
<a name="access-graph-opencypher-22-spatial-data"></a>

Amazon Neptune ora supporta le query spaziali, consentendoti di archiviare e analizzare dati geometrici nel tuo grafico. Sebbene siano comunemente utilizzate per posizioni geografiche (come le coordinate su una mappa), le caratteristiche spaziali funzionano con qualsiasi dato bidimensionale in cui posizione e prossimità sono importanti. Utilizza questa funzione per rispondere a domande come «Quali negozi si trovano nel raggio di 5 miglia da questo cliente?» , «Trova tutte le rotte di consegna che si intersecano con questa area di servizio» o «Quali componenti di questa planimetria si sovrappongono alla zona HVAC?» Neptune implementa il supporto spaziale utilizzando funzioni Spatial Types standard del settore che funzionano con punti, poligoni e altre forme geometriche. È possibile memorizzare i dati spaziali come proprietà su nodi e bordi, quindi utilizzare le funzioni spaziali per calcolare le distanze, verificare se i punti rientrano nei limiti o trovare regioni sovrapposte, il tutto all'interno delle query OpenCypher.

**Casi** d'uso comuni:
+ **Applicazioni geografiche**: raccomandazioni basate sulla posizione, geofencing, pianificazione del percorso e analisi del territorio
+ **Gestione della struttura e dello spazio**: layout della planimetria, posizionamento delle apparecchiature e copertura delle zone
+ **Topologia di rete**: mappatura dell'infrastruttura fisica, aree di copertura e confini del servizio
+ **Progettazione e CAD**: posizionamento dei componenti, rilevamento delle collisioni e relazioni spaziali nei progetti 2D
+ **Sviluppo del gioco**: posizionamento del personaggio, rilevamento delle collisioni e calcoli area-of-effect

L'implementazione dei tipi spaziali in Amazon Neptune ISO/IEC segue le direttive 13249-3:2016, come altri database. Sono [Funzioni spaziali](access-graph-opencypher-22-spatial-functions.md) disponibili nel linguaggio di interrogazione OpenCypher.

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

Neptune dispone di un unico Spatial Reference Identifier (SRID) per un intero database. L'omogeneità del sistema di coordinate riduce gli errori degli utenti nelle interrogazioni e migliora le prestazioni del database. La prima versione (1.4.7.0) supporta il sistema di coordinate cartesiane, noto anche come SRID 0.

L'implementazione Neptune di SRID 0 è compatibile con i valori di longitudine e latitudine. Viene utilizzato `ST_DistanceSpheroid` per calcolare le distanze in base a /SRID 4326. WGS84

L'attuale implementazione supporta la memorizzazione di coordinate tridimensionali. Le funzioni spaziali attualmente supportano solo l'utilizzo delle coordinate degli assi x e y (bidimensionali). Le coordinate dell'asse z non sono attualmente supportate dalle funzioni spaziali disponibili.

## Memorizzazione dei dati sulla posizione
<a name="storing-spatial-data"></a>

Memorizzate i dati di posizione su nodi e spigoli utilizzando il tipo di proprietà Geometry. Crea valori geometrici dal formato Wooden Text (WKT), un modo standard per rappresentare le forme geografiche come testo. Ad esempio, per memorizzare la posizione di un punto:

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

Quando si lavora con le coordinate geografiche, il primo argomento (x) rappresenta la longitudine e il secondo argomento (y) rappresenta la latitudine. Questo segue l'ordine di coordinate standard utilizzato nei database spaziali e lo standard ISO 19125.

**Nota**  
 Neptune ora supporta un nuovo tipo di dati chiamato «Geometria». La proprietà Geometry di un nodo o di uno spigolo può essere creata da una stringa WKT utilizzando la funzione. `ST_GeomFromText`  
Neptune memorizzerà automaticamente i dati dei punti in un indice spaziale specializzato per migliorare le prestazioni delle funzioni dei tipi spaziali. Ad esempio, `ST_Contains` usato per trovare i punti all'interno di un poligono viene accelerato dall'indice spaziale specializzato.  
[Pagina di Wikipedia per la rappresentazione della geometria in un testo ben noto](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry)

## Caricamento di dati spaziali in blocco
<a name="loading-spatial-data-bulk"></a>

Quando carichi dati in blocco, specifica il tipo di geometria nell'intestazione CSV. Neptune analizzerà le stringhe WKT e creerà le proprietà geometriche appropriate:

```
: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)
```

[Per i dettagli completi sul formato CSV, consulta il formato di caricamento in blocco di OpenCypher.](bulk-load-tutorial-format-opencypher.md)

## Query su dati spaziali
<a name="querying-spatial-data"></a>

I seguenti esempi di query utilizzano il [set di dati delle rotte aeree](https://github.com/krlawrence/graph/tree/main/sample-data) per dimostrare come utilizzare le funzioni spaziali in Neptune.

Se i dati hanno proprietà di latitudine e longitudine separate anziché una proprietà Geometry, è possibile convertirli in punti al momento della query. Trova i 10 aeroporti più vicini a una determinata località:

```
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
```

Se disponi già di sedi memorizzate`ST_Point`, puoi utilizzare direttamente tali valori di posizione:

1. Impostazione della proprietà 

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

1. Interrogazione utilizzando ST\$1Distance:

   ```
   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
   ```

### Utilizzo del driver Bolt
<a name="querying-spatial-data-bolt"></a>

La maggior parte dei metodi di interrogazione restituisce i valori di Geometry come stringhe WKT, che sono leggibili dall'uomo. Se si utilizza il driver Bolt, i valori di Geometry vengono restituiti nel formato WKB (Wellknown Binary) per maggiore efficienza. Converti WKB in un oggetto geometrico nella tua applicazione:

```
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);
}
```