Todos os produtos
Search
Central de documentação

MaxCompute:Tipo de dados GEOGRAPHY

Última atualização: Oct 10, 2026

O MaxCompute oferece suporte nativo ao tipo de dados GEOGRAPHY, que representa objetos geográficos como pontos, linhas e polígonos na superfície da Terra. Esse recurso permite armazenar, construir e executar operações em dados geoespaciais de forma eficiente. O tipo de dados GEOGRAPHY no MaxCompute utiliza a biblioteca S2 Geometry.

Tipos de geometria suportados

O MaxCompute aceita os seguintes tipos de geometria:

Tipo de geometria

Descrição

Point

Uma posição na superfície da Terra definida por coordenadas de longitude e latitude, com a longitude especificada primeiro, seguida pela latitude. Exemplo:
ST_GEOGFROMTEXT('POINT (10 20)')

LineString

Uma curva unidimensional composta por uma série de pontos e as linhas geodésicas que os conectam. Exemplo:
ST_GEOGFROMTEXT('LINESTRING (10 20, 30 50, 70 80)')

Polygon

Uma superfície bidimensional descrita por um ou mais loops fechados. O primeiro loop define o limite externo (shell), e quaisquer loops subsequentes definem buracos dentro do polígono. Os buracos especificam áreas excluídas dentro do polígono. Exemplos:

-- A polygon with only an outer boundary and no holes
ST_GEOGFROMTEXT('POLYGON ((0 0, 1 1, 1 0, 0 0))')

-- A polygon with one hole
ST_GEOGFROMTEXT('POLYGON ((-10 -10, 10 -10, 10 10, -10 10, -10 -10), (-5 -5, 5 -5, 5 5, -5 5, -5 -5))')

-- Nested holes are not currently supported. The following construction is invalid:
ST_GEOGFROMTEXT('POLYGON ((-10 -10, 10 -10, 10 10, -10 10, -10 -10), (-5 -5, 5 -5, 5 5, -5 5, -5 -5), (-2 -2, 2 -2, 2 2, -2 2, -2 -2))')

MultiPoint

Uma coleção de pontos.
ST_GEOGFROMTEXT('MULTIPOINT(0 0, 1 1)')

MultiLineString

Uma coleção de LineStrings.
ST_GEOGFROMTEXT('MULTILINESTRING ((0 0, 1 1), (2 2, 3 3))')

MultiPolygon

Uma coleção de Polygons.
ST_GEOGFROMTEXT('MULTIPOLYGON (((1 1, 1 3, 3 3, 3 1, 1 1)), ((4 3, 6 3, 6 1, 4 1, 4 3)))')

GeometryCollection

Uma coleção de objetos de diferentes tipos de geometria.
ST_GEOGFROMTEXT('GEOMETRYCOLLECTION (MULTIPOINT ((0 0), (1 1)), POINT (3 4), LINESTRING (2 3, 3 4))')

  • As coordenadas são especificadas como (longitude, latitude) em graus, seguindo o sistema de coordenadas WGS84. A longitude deve estar no intervalo [-180, 180] e a latitude deve estar no intervalo [-90, 90].

  • O tipo de dados GEOGRAPHY do MaxCompute usa a biblioteca S2 Geometry. Diferentemente das bibliotecas tradicionais de Sistemas de Informações Geográficas (GIS), a S2 Geometry não utiliza projeções de mapa planas, como a projeção de Mercator. Em vez disso, ela trata a Terra como uma esfera perfeita. Primeiro, converte as coordenadas de latitude e longitude para coordenadas cartesianas tridimensionais (x, y, z) na esfera. Essa abordagem evita o aumento de erros computacionais que as projeções planas podem causar, especialmente perto dos polos.

  • A biblioteca S2 Geometry usa o tipo DOUBLE para descrever as coordenadas de objetos geográficos. Ao converter dados de entrada em objetos S2, pode ocorrer uma pequena perda de precisão, resultando em uma discrepância muito pequena entre a entrada e a saída.

Limitações

  • Restrições de versão do cliente: Para consultar dados GEOGRAPHY, use a versão 0.56.0 ou posterior do odpscmd. A configuração use_instance_tunnel=true não é suportada.

  • Restrições de tipo de dados: O tipo de dados GEOGRAPHY não é suportado no sistema de tipos de dados 1.0. Ative o sistema de tipos de dados 2.0 no nível do projeto ou da sessão definindo odps.sql.type.system.odps2=true;.

  • O tipo de dados GEOGRAPHY não aceita operações de comparação. Portanto, não é possível usá-lo em cláusulas SELECT DISTINCT, GROUP BY ou ORDER BY, nem como condição para uma junção de igualdade (equi-join) em uma cláusula JOIN.

  • Este tipo de dados não suporta as dimensões Z (elevação) ou M (medida) para objetos geográficos.

  • Não há suporte para a construção de um objeto geográfico maior que um hemisfério com o tipo GEOGRAPHY. Por exemplo, a instrução SQL a seguir tenta criar um objeto geográfico que cobre quase todo o globo, de 179 graus de longitude oeste a 179 graus de longitude leste. No entanto, o resultado real é um objeto menor que um hemisfério, cuja longitude se estende para leste a partir de 179°E, cruza o meridiano de 180° e termina em 179°W.

    -- Insert data: Construct GEOGRAPHY objects using geography functions.
    INSERT INTO spatial_points VALUES
      (1, 'Beijing Center', ST_GEOGPOINT(116.4074, 39.9042),
                    ST_GEOGFROMTEXT('POLYGON((116.3 39.8, 116.5 39.8, 116.5 40.0, 116.3 40.0, 116.3 39.8))')),
      (2, 'The Bund', ST_GEOGPOINT(121.4894, 31.2403),
                    ST_MAKEPOLYGON(ST_MAKELINE(ARRAY(
                      ST_GEOGPOINT(121.4, 31.2),
                      ST_GEOGPOINT(121.5, 31.2),
                      ST_GEOGPOINT(121.5, 31.3),
                      ST_GEOGPOINT(121.4, 31.3),
                      ST_GEOGPOINT(121.4, 31.2)
                    ))));
    
    -- Query the inserted data.
    SELECT * FROM spatial_points;
    -- Result:
    +------------+--------------+--------------------------+--------+
    | id         | name         | location                 | region |
    +------------+--------------+--------------------------+--------+
    | 1          | Beijing Center | POINT (116.4074 39.9042) | POLYGON ((116.3 39.8, 116.5 39.8, 116.5 40, 116.3 40, 116.3 39.8)) |
    | 2          | The Bund       | POINT (121.4894 31.2403) | POLYGON ((121.4 31.2, 121.5 31.2, 121.5 31.3, 121.4 31.3, 121.4 31.2)) |
    +------------+--------------+--------------------------+--------+

Criar e usar dados GEOGRAPHY

Utilize o tipo de dados GEOGRAPHY como tipo de campo ao criar uma tabela:

-- Insert data: Construct GEOGRAPHY objects using geography functions.
INSERT INTO spatial_points VALUES
  (1, 'Beijing Center', ST_GEOGPOINT(116.4074, 39.9042),
                ST_GEOGFROMTEXT('POLYGON((116.3 39.8, 116.5 39.8, 116.5 40.0, 116.3 40.0, 116.3 39.8))')),
  (2, 'The Bund', ST_GEOGPOINT(121.4894, 31.2403),
                ST_MAKEPOLYGON(ST_MAKELINE(ARRAY(
                  ST_GEOGPOINT(121.4, 31.2),
                  ST_GEOGPOINT(121.5, 31.2),
                  ST_GEOGPOINT(121.5, 31.3),
                  ST_GEOGPOINT(121.4, 31.3),
                  ST_GEOGPOINT(121.4, 31.2)
                ))));

-- Query the inserted data.
SELECT * FROM spatial_points;
-- Result:
+------------+--------------+--------------------------+--------+
| id         | name         | location                 | region |
+------------+--------------+--------------------------+--------+
| 1          | Beijing Center | POINT (116.4074 39.9042) | POLYGON ((116.3 39.8, 116.5 39.8, 116.5 40, 116.3 40, 116.3 39.8)) |
| 2          | The Bund       | POINT (121.4894 31.2403) | POLYGON ((121.4 31.2, 121.5 31.2, 121.5 31.3, 121.4 31.3, 121.4 31.2)) |
+------------+--------------+--------------------------+--------+

Funções integradas como ST_GEOGPOINT, ST_GEOGFROMTEXT, ST_GEOGFROMWKB, ST_MAKELINE e ST_MAKEPOLYGON permitem construir objetos geográficos. Para obter mais informações, consulte Visão geral das funções geográficas.

-- Insert data: Construct GEOGRAPHY objects using geography functions.
INSERT INTO spatial_points VALUES
  (1, 'Beijing Center', ST_GEOGPOINT(116.4074, 39.9042),
                ST_GEOGFROMTEXT('POLYGON((116.3 39.8, 116.5 39.8, 116.5 40.0, 116.3 40.0, 116.3 39.8))')),
  (2, 'The Bund', ST_GEOGPOINT(121.4894, 31.2403),
                ST_MAKEPOLYGON(ST_MAKELINE(ARRAY(
                  ST_GEOGPOINT(121.4, 31.2),
                  ST_GEOGPOINT(121.5, 31.2),
                  ST_GEOGPOINT(121.5, 31.3),
                  ST_GEOGPOINT(121.4, 31.3),
                  ST_GEOGPOINT(121.4, 31.2)
                ))));

-- Query the inserted data.
SELECT * FROM spatial_points;
-- Result:
+------------+--------------+--------------------------+--------+
| id         | name         | location                 | region |
+------------+--------------+--------------------------+--------+
| 1          | Beijing Center | POINT (116.4074 39.9042) | POLYGON ((116.3 39.8, 116.5 39.8, 116.5 40, 116.3 40, 116.3 39.8)) |
| 2          | The Bund       | POINT (121.4894 31.2403) | POLYGON ((121.4 31.2, 121.5 31.2, 121.5 31.3, 121.4 31.3, 121.4 31.2)) |
+------------+--------------+--------------------------+--------+

Funções geográficas

O MaxCompute fornece uma série de funções geográficas com o prefixo ST_ para construir, converter e analisar dados GEOGRAPHY. Use essas funções para criar objetos geográficos, como pontos, linhas e polígonos, a partir de coordenadas de longitude e latitude ou de texto WKT/WKB. Também é possível extrair propriedades como coordenadas e caixas delimitadoras, determinar relações espaciais como contenção, interseção e cobertura, além de calcular a distância entre objetos geográficos.

Para obter mais informações, consulte Visão geral das funções geográficas.

As seguintes funções geográficas são suportadas:

Categoria

Função

Descrição

Construção e análise


ST_GEOGPOINT

Constrói um objeto geográfico de ponto a partir da longitude e latitude especificadas.

ST_MAKELINE

Constrói um objeto geográfico de linha a partir dos endpoints especificados.

ST_MAKEPOLYGON

Constrói um objeto geográfico de polígono a partir de um limite externo (shell) especificado e zero ou mais buracos.

ST_GEOGFROMTEXT

Converte uma string no formato WKT para um objeto GEOGRAPHY.

ST_GEOGFROMWKB

Converte um valor BINARY no formato WKB para um objeto GEOGRAPHY.

Formatação

ST_ASBINARY

Converte um valor GEOGRAPHY para um valor BINARY no formato WKB.

ST_ASTEXT

Converte um valor GEOGRAPHY para um valor STRING no formato WKT.

Acesso a propriedades

ST_BOUNDINGBOX

Retorna a caixa delimitadora de um valor GEOGRAPHY.

ST_X

Retorna a longitude de um objeto geográfico de ponto.

ST_Y

Retorna a latitude de um objeto geográfico de ponto.

Operações espaciais


ST_CONTAINS

Verifica se o primeiro objeto geográfico contém o segundo.

ST_COVERS

Verifica se o primeiro objeto geográfico cobre o segundo (todos os pontos do segundo objeto estão no limite ou dentro do primeiro).

ST_INTERSECTS

Verifica se dois objetos geográficos se interceptam (eles têm pelo menos um ponto em comum).

ST_WITHIN

Verifica se o primeiro objeto geográfico está dentro do segundo.

ST_DWITHIN

Verifica se a menor distância entre dois objetos geográficos é menor ou igual a uma distância especificada.

ST_DISTANCE

Calcula a menor distância entre dois objetos geográficos, em metros.

Junção espacial

Uma junção espacial é uma operação de junção sem igualdade (non-equi join) entre duas tabelas que contêm dados GEOGRAPHY. A condição de junção usa uma função de predicado espacial (como ST_CONTAINS ou ST_INTERSECTS) que avalia a relação espacial entre os objetos geográficos.

  • Um caso de uso comum envolve utilizar uma função geográfica como condição JOIN para avaliar a relação espacial entre colunas GEOGRAPHY.

  • Cenários típicos incluem determinar se um ponto de interesse (POI) está dentro de uma área especificada ou analisar a interseção de uma trajetória com uma geocerca.

O MaxCompute implementa junções espaciais com base em uma tabela de broadcast. Use um MAPJOIN HINT para especificar qual tabela deve ser transmitida via broadcast.

Para obter mais informações, consulte Spatial JOIN.