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áfico. Si bien se suelen utilizar 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 5 millas de este cliente?» , «Busque todas las rutas de entrega que se cruzan con esta área de servicio» o «¿Qué componentes de este plano de planta se superponen con la zona de climatización?» Neptune implementa el soporte espacial mediante funciones de tipos espaciales estándar del sector que funcionan con puntos, polígonos y otras formas geométricas. Puedes almacenar datos espaciales como propiedades en nodos y bordes y, a continuación, usar funciones espaciales para calcular distancias, comprobar si los puntos se encuentran dentro de los límites o encontrar regiones superpuestas, todo ello en tus consultas de OpenCypher.
Casos de uso comunes:
-
Aplicaciones geográficas: Location-based recomendaciones, geolocalización, planificación de rutas y análisis del territorio
-
Administración de instalaciones y espacios: diseños de planos de planta, ubicación de equipos y cobertura de zonas
-
Topología de 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 cálculos del área de efecto
La implementación de Spatial Types 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 de SRID 0 en Neptuno es compatible con los valores de longitud y latitud. Se usa ST_DistanceSpheroid para calcular distancias en función del 4326. WGS84/SRID
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). Las coordenadas del eje z no son compatibles actualmente con las funciones espaciales disponibles.
Almacenamiento de datos de ubicación
Almacene los datos de ubicación en los nodos y los bordes mediante el tipo de propiedad Geometría. Cree valores geométricos a partir del formato de Well-Known texto (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)')})
Cuando se trabaja con coordenadas geográficas, el primer argumento (x) representa la longitud y el segundo argumento (y) representa la latitud. Sigue el orden de coordenadas estándar utilizado en las bases de datos espaciales y el estándar 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, si ST_Contains se utiliza para encontrar los puntos dentro de un polígono, se acelera mediante el índice espacial especializado.
Página de Wikipedia sobre la representación Well-Known textual de la geometría
Carga masiva de datos espaciales
Al cargar datos de forma masiva, especifica el tipo de geometría en el encabezado del CSV. Neptune analizará las cadenas de WKT y creará las propiedades geométricas apropiadas:
: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, consulta 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 sus 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 con 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 en forma de cadenas WKT, que son legibles por humanos. Si utiliza el controlador Bolt, los valores geométricos se devuelven en formato WKB (Well-Known binario) para mayor eficiencia. Convierte WKB en un objeto geométrico en tu 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); }