Dati spaziali - Amazon Neptune

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

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 disponibili nel linguaggio di interrogazione OpenCypher.

Sistema di coordinate

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

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

Caricamento di dati spaziali in blocco

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.

Query su dati spaziali

I seguenti esempi di query utilizzano il set di dati delle rotte aeree 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 memorizzateST_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 + ')')
  2. 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

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