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 interrogazioni spaziali, consentendoti di archiviare e analizzare dati geometrici nel tuo grafico. Sebbene siano comunemente utilizzate per le posizioni geografiche (come le coordinate su una mappa), le funzionalità spaziali funzionano con qualsiasi dato bidimensionale in cui posizione e prossimità sono importanti. Usa questa funzione per rispondere a domande come «Quali negozi si trovano nel raggio di 5 miglia da questo cliente?» , «Trova tutti i percorsi di consegna che si intersecano con quest'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. Puoi memorizzare i dati spaziali come proprietà su nodi e bordi, quindi utilizzare le funzioni spaziali per calcolare le distanze, controllare se i punti rientrano nei limiti o trovare regioni sovrapposte, il tutto all'interno delle tue query OpenCypher.
Casi d'uso comuni:
-
Applicazioni geografiche: Location-based raccomandazioni, geofencing, pianificazione dei percorsi e analisi del territorio
-
Gestione delle strutture e degli spazi: layout della planimetria, posizionamento delle apparecchiature e copertura delle zone
-
Topologia di rete: mappatura dell'infrastruttura fisica, aree di copertura e confini dei servizi
-
Progettazione e CAD: posizionamento dei componenti, rilevamento delle collisioni e relazioni spaziali nei progetti 2D
-
Sviluppo del gioco: posizionamento dei personaggi, rilevamento delle collisioni e calcolo dell'area di effetto
L'implementazione di Spatial Types in Amazon Neptune segue le direttive 13249-3:2016, come altri database ISO/IEC . Sono Funzioni spaziali disponibili nel linguaggio di interrogazione OpenCypher.
Sistema di coordinate
Neptune ha un identificatore di riferimento spaziale (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. ST_DistanceSpheroidDa utilizzare per calcolare le distanze in base al 4326. WGS84/SRID
L'implementazione corrente supporta la memorizzazione di coordinate tridimensionali. Le funzioni spaziali attualmente supportano solo l'uso 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
Memorizza i dati sulla posizione su nodi e bordi utilizzando il tipo di proprietà Geometry. Crea valori di geometria dal formato Well-Known 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 coordinate geografiche, il primo argomento (x) rappresenta la longitudine e il secondo argomento (y) rappresenta la latitudine. Questo segue l'ordine delle coordinate standard utilizzato nei database spaziali e lo standard ISO 19125.
Nota
Neptune ora supporta un nuovo tipo di dati chiamato «Geometry». La proprietà Geometry di un nodo o di un bordo 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 Spatial Types. Ad esempio, ST_Contains utilizzato 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
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, vedi OpenCypher bulk load format. Formato di caricamento dei dati openCypher
Query su dati spaziali
I seguenti esempi di query utilizzano il set di dati airroutes per dimostrare come utilizzare le funzioni spaziali
Se i dati hanno proprietà di latitudine e longitudine separate anziché una proprietà Geometry, è possibile convertirli in punti al momento dell'interrogazione. 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 hai già delle sedi memorizzateST_Point, puoi utilizzare direttamente questi valori di posizione:
-
Impostazione della proprietà
MATCH (a:airport) SET a.location = ST_GeomFromText('POINT (' + a.lon + ' ' + a.lat + ')') -
Interroga 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 Geometry vengono restituiti in formato WKB (binario) per una maggiore efficienza. Well-Known Converti WKB in un oggetto Geometry 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); }