

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
<a name="access-graph-opencypher-22-spatial-data"></a>

Agora, o Amazon Neptune 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 são 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 em suas consultas do OpenCypher.

**Casos de uso comuns**:
+ **Aplicações geográficas**: Location-based recomendações, geofencing, planejamento de rotas e análise de territórios
+ **Gerenciamento de instalações e espaços**: layouts de plantas baixas, 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 de jogos**: posicionamento de personagens, detecção de colisões e cálculos de área de efeito

A implementação de tipos espaciais no Amazon Neptune segue as diretivas ISO/IEC 13249-3:2016, assim como em outros bancos de dados. Eles [Funções espaciais](access-graph-opencypher-22-spatial-functions.md) estão disponíveis na linguagem de consulta OpenCypher.

## Sistema de coordenadas
<a name="access-graph-opencypher-22-spatial-data-coordinate-system"></a>

O Neptune tem um Spatial Reference Identifier (SRID) para um banco de dados inteiro. A homogeneidade do sistema de coordenadas reduz os erros do usuário na consulta 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 em Netuno é 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). As coordenadas do eixo z atualmente não são suportadas pelas funções espaciais disponíveis.

## Armazenamento de dados de localização
<a name="storing-spatial-data"></a>

Armazene dados de localização em nós e bordas usando o tipo de propriedade Geometria. Crie valores de geometria a partir do formato Well-Known Texto (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 Geometria 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 Well-Known textual da geometria ](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry)

## Carregando dados espaciais em massa
<a name="loading-spatial-data-bulk"></a>

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 Formato de carregamento em massa do [ OpenCypher. ](bulk-load-tutorial-format-opencypher.md)

## Consultar dados espaciais
<a name="querying-spatial-data"></a>

Os exemplos de consulta a seguir usam o conjunto de dados de [ rotas aéreas ](https://github.com/krlawrence/graph/tree/main/sample-data) para demonstrar como usar funções espaciais em Netuno.

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 como`ST_Point`, poderá usar esses valores de localização diretamente:

1. Definir a propriedade de 

   ```
   MATCH (a:airport)
   SET a.location = ST_GeomFromText('POINT (' + a.lon + ' ' + a.lat + ')')
   ```

1. 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 acionador Bolt
<a name="querying-spatial-data-bolt"></a>

A maioria dos métodos de consulta retorna valores de geometria como strings 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 (Well-Known binário) 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);
}
```