Consultar dados espaciais no Amazon Redshift - Amazon Redshift

Consultar dados espaciais no Amazon Redshift

Dados espaciais descrevem a posição e a forma de uma geometria em um espaço definido (um sistema de referência espacial). O Amazon Redshift oferece suporte a dados espaciais com os tipos de dados GEOMETRY e GEOGRAPHY, que contêm dados espaciais e, opcionalmente, o identificador do sistema de referência espacial (SRID) dos dados.

Os dados espaciais contêm dados geométricos que você pode usar para representar recursos geográficos. Entre os exemplos desse tipo de dados estão previsões do tempo, rotas em mapa, tweets com posições geográficas, locais de lojas e rotas aéreas. Os dados espaciais têm uma função importante na análise comercial, na geração de relatórios e na previsão.

É possível consultar dados espaciais com funções SQL do Amazon Redshift. Os dados espaciais contêm valores geométricos de um objeto.

As operações do tipo de dados GEOMETRY funcionam no plano cartesiano. Embora o identificador do sistema de referência espacial (SRID) seja armazenado dentro do objeto, o SRID é meramente um identificador do sistema de coordenadas e não tem nenhuma função nos algoritmos usados para processar os objetos GEOMETRY. Por outro lado, as operações do tipo de dados GEOGRAPHY tratam as coordenadas dentro dos objetos como coordenadas esféricas em um esferoide. Esse esferoide é definido pelo SRID, que faz referência a um sistema de referência espacial geográfica. Por padrão, os tipos de dados GEOGRAPHY são criados com referência espacial (SRID) 4326, referenciando o sistema geodésico mundial (WGS) 84. Para obter mais informações sobre SRIDs consulte Sistema de referência espacial na Wikipédia.

É possível usar a função ST_Transform para transformar as coordenadas de vários sistemas de referência espacial. Após concluir a transformação das coordenadas, você também pode usar um cast simples entre os dois, desde que a entrada GEOMETRY esteja codificada com o SRID geográfico. Esse cast simplesmente copia coordenadas sem realizar nenhuma outra transformação. Por exemplo:

SELECT ST_AsEWKT(ST_GeomFromEWKT('SRID=4326;POINT(10 20)')::geography);
st_asewkt ------------------------ SRID=4326;POINT(10 20)

Para entender melhor a diferença entre os tipos de dados GEOMETRY e GEOGRAPHY, calcule a distância entre o aeroporto de Berlim (BER) e o aeroporto de São Francisco (SFO) usando o sistema geodésico mundial (WGS) 84. Com o tipo de dados GEOGRAPHY, o resultado é exibido em metros. Ao usar um tipo de dados GEOMETRY com SRID 4326, o resultado é exibido em graus, que não pode ser convertido em metros porque a distância de um grau depende de onde as geometrias do globo estão localizadas.

Utilizam-se cálculos com o tipo de dados GEOGRAPHY sobretudo para cálculos realistas de terra redonda, como a área exata de um país sem distorção. Mas a computação deles é muito mais cara. Portanto, o ST_Transform pode transformar suas coordenadas em um sistema de coordenadas projetado local adequado e fazer o cálculo com o tipo de dados GEOMETRY mais rápido.

Usando dados espaciais, você pode executar consultas para fazer o seguinte:

  • Encontrar a distância entre dois pontos.

  • Verificar se uma área (polígono) contém outra.

  • Verificar se uma linestring intercepta outra linestring ou polígono.

É possível usar o tipo de dados GEOMETRY para manter os valores de dados espaciais. No Amazon Redshift, um valor GEOMETRY pode definir tipos de dados primitivos de geometria bidimensionais (2D), tridimensionais (3DM), bidimensionais com uma medida (3DM) e quadridimensionais (4D):

  • Uma geometria bidimensional (2D) é especificada por duas coordenadas cartesianas (x, y) em um plano.

  • Uma geometria tridimensional (3DZ) é especificada por três coordenadas cartesianas (x, y, z) no espaço.

  • Uma geometria bidimensional com medida (3DM) é especificada por três coordenadas (x, y, m), onde as duas primeiras são coordenadas cartesianas em um plano e a terceira é uma medida.

  • Uma geometria quadridimensional (4D) é especificada por quatro coordenadas (x, y, z, m), onde as três primeiras são coordenadas cartesianas em um espaço e a quarta é uma medida.

Para obter mais informações sobre tipos de dados primitivos de geometria, consulte Well-known text representation of geometry na Wikipedia.

É possível usar o tipo de dados GEOGRAPHY para manter os valores de dados espaciais. No Amazon Redshift, um valor GEOGRAPHY pode definir tipos de dados primitivos de geometria bidimensionais (2D), tridimensionais (3DM), bidimensionais com uma medida (3DM) e quadridimensionais (4D):

  • Uma geometria bidimensional (2D) é especificada por coordenadas de longitude e latitude em um esferoide.

  • Uma geometria tridimensional (3DZ) é especificada por coordenadas de longitude, latitude e latitude em um esferoide.

  • Uma geometria bidimensional com medida (3DM) é especificada por três coordenadas (longitude, latitude e medida), em que as duas primeiras são coordenadas angulares em um plano e a terceira é uma medida.

  • Uma geometria quadridimensional (4D) é especificada por quatro coordenadas (longitude, latitude, altitude, medida), em que as três primeiras são longitude, latitude e altitude, e a quarta é uma medida.

Para obter mais informações sobre os sistemas de coordenadas geográficas, consulte Sistema das coordenadas geográficas e Sistema esférico de coordenadas na Wikipédia.

Os tipos de dados GEOMETRY e GEOGRAPHY têm os seguintes subtipos:

  • POINT

  • LINESTRING

  • POLYGON

  • MULTIPOINT

  • MULTILINESTRING

  • MULTIPOLYGON

  • GEOMETRYCOLLECTION

Existem funções SQL do Amazon Redshift que suportam as seguintes representações de dados geométricos:

  • GeoJSON

  • Well-Known Text (WKT - texto bem-conhecido).

  • Extended well-known text (EWKT - texto bem-conhecido estendido)

  • Representação de Well-known binary (WKB - binário bem-conhecido)

  • Extended well-known binary (EWKB - binário bem-conhecido estendido)

Você pode converter os tipos de dados GEOMETRY e GEOGRAPHY.

O SQL a seguir converte uma linestring de GEOMETRY para GEOGRAPHY.

SELECT ST_AsEWKT(ST_GeomFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)')::geography);
st_asewkt ---------------------------------------------- SRID=4326;LINESTRING(110 40,2 3,-10 80,-7 9)

O SQL a seguir converte uma linestring de GEOGRAPHY para GEOMETRY.

SELECT ST_AsEWKT(ST_GeogFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)')::geometry);
st_asewkt ---------------------------------------------- SRID=4326;LINESTRING(110 40,2 3,-10 80,-7 9)

O Amazon Redshift oferece muitas funções SQL para consultar dados espaciais. Exceto a função ST_IsValid, funções espaciais que aceitam um objeto GEOMETRY como um argumento esperam que este objeto GEOMETRY seja uma geometria válida. Se o objeto GEOMETRY ou GEOGRAPHY não for válido, o comportamento da função espacial é indefinido. Para obter mais informações sobre validação, consulte Validade geométrica.

Para obter detalhes sobre as funções SQL para consultar dados espaciais, consulte Funções espaciais.

Para obter detalhes sobre como carregar dados espaciais, consulte Carregar uma coluna do tipo de dados GEOMETRY ou GEOGRAPHY.