As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Dados espaciais
O Amazon Neptune agora oferece suporte a consultas espaciais, permitindo que você armazene e analise dados geométricos em seu gráfico. Embora sejam comumente usados para localizações geográficas (como coordenadas em um mapa), os recursos espaciais funcionam com qualquer dado bidimensional em que a posição e a proximidade sejam importantes. Use esse recurso para responder perguntas como “Quais lojas estão a menos de 5 milhas desse cliente?” , “Encontre todas as rotas de entrega que se cruzam com essa área de serviço” ou “Quais componentes dessa planta se sobrepõem à zona de HVAC?” O Neptune implementa suporte espacial usando funções de tipos espaciais padrão do setor que funcionam com pontos, polígonos e outras formas geométricas. Você pode armazenar dados espaciais como propriedades em nós e bordas e, em seguida, usar funções espaciais para calcular distâncias, verificar se os pontos estão dentro dos limites ou encontrar regiões sobrepostas, tudo dentro de suas consultas do OpenCypher.
Casos de uso comuns:
-
Aplicações geográficas: recomendações baseadas em localização, delimitação geográfica, planejamento de rotas e análise de território
-
Gerenciamento de instalações e espaços: layouts de planta baixa, posicionamento de equipamentos e cobertura de zonas
-
Topologia de rede: mapeamento da infraestrutura física, áreas de cobertura e limites de serviço
-
Design e CAD: posicionamento de componentes, detecção de colisões e relações espaciais em projetos 2D
-
Desenvolvimento do jogo: posicionamento de personagens, detecção de colisões e cálculos area-of-effect
A implementação de tipos espaciais no Amazon Neptune segue as diretivas 13249-3:2016, ISO/IEC assim como outros bancos de dados. Eles Funções espaciais estão disponíveis na linguagem de consulta OpenCypher.
Sistema de coordenadas
Neptune tem um identificador de referência espacial (SRID) para um banco de dados inteiro. A homogeneidade do sistema de coordenadas reduz os erros do usuário nas consultas e melhora o desempenho do banco de dados. A primeira versão (1.4.7.0) suporta o sistema de coordenadas cartesianas, também conhecido como SRID 0.
A implementação do SRID 0 no Neptune é compatível com valores de longitude e latitude. Use ST_DistanceSpheroid para calcular distâncias com base em WGS84 /SRID 4326.
A implementação atual suporta o armazenamento de coordenadas tridimensionais. Atualmente, as funções espaciais suportam apenas o uso das coordenadas dos eixos x e y (bidimensionais). Atualmente, as coordenadas do eixo z não são suportadas pelas funções espaciais disponíveis.
Armazenando dados de localização
Armazene dados de localização em nós e bordas usando o tipo de propriedade Geometry. Crie valores de geometria a partir do formato Texto Conhecido (WKT), uma forma padrão de representar formas geográficas como texto. Por exemplo, para armazenar a localização de um ponto:
CREATE (n:airport {code: 'ATL', location: ST_GeomFromText('POINT (-84.4281 33.6367)')})
Ao trabalhar com coordenadas geográficas, o primeiro argumento (x) representa a longitude e o segundo argumento (y) representa a latitude. Isso segue a ordem de coordenadas padrão usada em bancos de dados espaciais e o padrão ISO 19125.
nota
O Neptune agora suporta um novo tipo de dados chamado “Geometria”. A propriedade Geometry de um nó ou borda pode ser criada a partir de uma string WKT usando a ST_GeomFromText função.
O Neptune armazenará automaticamente os dados de pontos em um índice espacial especializado para melhorar o desempenho das funções de tipos espaciais. Por exemplo, ST_Contains usado para encontrar os pontos dentro de um polígono é acelerado pelo índice espacial especializado.
Página da Wikipedia para representação de geometria em texto conhecido
Carregamento de dados espaciais em massa
Ao carregar dados em massa, especifique o tipo de geometria no cabeçalho CSV. O Neptune analisará as cadeias de caracteres WKT e criará as propriedades geométricas apropriadas:
: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 obter detalhes completos do formato CSV, consulte o formato de carregamento em massa do OpenCypher.
Consultar dados espaciais
Os exemplos de consulta a seguir usam o conjunto de dados de rotas aéreas
Se seus dados tiverem propriedades separadas de latitude e longitude em vez de uma propriedade de geometria, você poderá convertê-los em pontos no momento da consulta. Encontre os 10 aeroportos mais próximos de um determinado local:
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 você já tiver locais armazenados comoST_Point, poderá usar esses valores de localização diretamente:
-
Definir a propriedade de
MATCH (a:airport) SET a.location = ST_GeomFromText('POINT (' + a.lon + ' ' + a.lat + ')') -
Consulta usando 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
Usando o driver Bolt
A maioria dos métodos de consulta retorna valores de geometria como cadeias de caracteres WKT, que são legíveis por humanos. Se você estiver usando o driver Bolt, os valores de geometria serão retornados no formato WKB (binário conhecido) para maior eficiência. Converta WKB em um objeto de geometria em seu aplicativo:
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); }