

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**: Location-based raccomandazioni, 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 calcolo dell'area d'effetto

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 ha uno 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 per calcolare le `ST_DistanceSpheroid` distanze in base a 4326. WGS84/SRID 

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 Well-Known Testo (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 Well-Known la rappresentazione testuale della geometria](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\_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
   ```

### 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 in formato WKB (binario) per maggiore efficienza. Well-Known 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);
}
```