Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Datos espaciales
Amazon Neptune ahora admite consultas espaciales, lo que le permite almacenar y analizar datos geométricos en su gráfica. Si bien se utilizan habitualmente para ubicaciones geográficas (como las coordenadas de un mapa), las características espaciales funcionan con cualquier dato bidimensional en el que la posición y la proximidad sean importantes. Usa esta función para responder a preguntas como «¿Qué tiendas están a menos de 8 km de este cliente?» , «Busque todas las rutas de entrega que se crucen con esta área de servicio» o «¿Qué componentes de este plano de planta se superponen con la zona de HVAC?» Neptune implementa el soporte espacial mediante funciones de tipos espaciales estándares del sector que funcionan con puntos, polígonos y otras formas geométricas. Puede almacenar datos espaciales como propiedades en nodos y bordes y, a continuación, utilizar funciones espaciales para calcular distancias, comprobar si los puntos se encuentran dentro de los límites o buscar regiones superpuestas, todo ello dentro de sus consultas de OpenCypher.
Casos de uso comunes:
-
Aplicaciones geográficas: recomendaciones basadas en la ubicación, geocercado, planificación de rutas y análisis del territorio
-
Administración de instalaciones y espacios: distribución de los planos de planta, ubicación de los equipos y cobertura de zonas
-
Topología de la red: mapeo de la infraestructura física, áreas de cobertura y límites de servicio
-
Diseño y CAD: posicionamiento de componentes, detección de colisiones y relaciones espaciales en diseños 2D
-
Desarrollo del juego: posicionamiento de personajes, detección de colisiones y area-of-effect cálculos
La implementación de tipos espaciales en Amazon Neptune sigue las directivas ISO/IEC 13249-3:2016, al igual que otras bases de datos. Funciones espacialesEstán disponibles en el lenguaje de consulta OpenCypher.
Sistema de coordenadas
Neptune tiene un identificador de referencia espacial (SRID) para toda la base de datos. La homogeneidad del sistema de coordenadas reduce los errores de los usuarios al realizar consultas y mejora el rendimiento de la base de datos. La primera versión (1.4.7.0) admite el sistema de coordenadas cartesianas, también denominado SRID 0.
La implementación del SRID 0 en Neptune es compatible con los valores de longitud y latitud. Se utiliza ST_DistanceSpheroid para calcular las distancias en función del WGS84 /SRID 4326.
La implementación actual admite el almacenamiento de coordenadas tridimensionales. Actualmente, las funciones espaciales solo admiten el uso de las coordenadas de los ejes x e y (bidimensionales). Actualmente, las funciones espaciales disponibles no admiten las coordenadas del eje z.
Almacenamiento de datos de ubicación
Almacene los datos de ubicación en los nodos y las aristas mediante el tipo de propiedad Geometría. Cree valores geométricos a partir del formato de texto conocido (WKT), una forma estándar de representar formas geográficas como texto. Por ejemplo, para almacenar la ubicación de un punto:
CREATE (n:airport {code: 'ATL', location: ST_GeomFromText('POINT (-84.4281 33.6367)')})
Al trabajar con coordenadas geográficas, el primer argumento (x) representa la longitud y el segundo argumento (y) representa la latitud. Esto sigue el orden de coordenadas estándar utilizado en las bases de datos espaciales y la norma ISO 19125.
nota
Neptune ahora admite un nuevo tipo de datos llamado «Geometría». La propiedad geométrica de un nodo o una arista se puede crear a partir de una cadena WKT mediante la ST_GeomFromText función.
Neptune almacenará automáticamente los datos de puntos en un índice espacial especializado para mejorar el rendimiento de las funciones de tipos espaciales. Por ejemplo, el índice espacial especializado acelera el proceso que se ST_Contains utiliza para encontrar los puntos dentro de un polígono.
Página de Wikipedia sobre una conocida representación textual de la geometría
Carga de datos espaciales de forma masiva
Al cargar datos de forma masiva, especifique el tipo de geometría en el encabezado de su CSV. Neptune analizará las cadenas WKT y creará las propiedades geométricas adecuadas:
: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)
Para obtener información completa sobre el formato CSV, consulte el formato de carga masiva de OpenCypher.
Consulta de datos espaciales
Los siguientes ejemplos de consultas utilizan el conjunto de datos de rutas aéreas
Si los datos tienen propiedades de latitud y longitud independientes en lugar de una propiedad geométrica, puede convertirlos en puntos en el momento de la consulta. Busque los 10 aeropuertos más cercanos a una ubicación determinada:
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
Si ya tienes ubicaciones almacenadasST_Point, puedes usar esos valores de ubicación directamente:
-
Establecimiento de la propiedad de
MATCH (a:airport) SET a.location = ST_GeomFromText('POINT (' + a.lon + ' ' + a.lat + ')') -
Consulta mediante 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
Uso del controlador Bolt
La mayoría de los métodos de consulta devuelven los valores geométricos como cadenas WKT, que son legibles por humanos. Si utiliza el controlador Bolt, los valores geométricos se devuelven en formato WKB (conocido binario) para mejorar la eficiencia. Convierta WKB en un objeto geométrico en su aplicación:
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); }