Todos os produtos
Search
Central de documentação

MaxCompute:Tipo de dados GEOGRAPHY

Última atualização: Aug 26, 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 tipo permite armazenar, construir e operar dados geoespaciais com eficiência. O tipo de dados GEOGRAPHY no MaxCompute utiliza a biblioteca S2 Geometry.

Tipos de geometria suportados

O MaxCompute suporta os seguintes tipos de geometria:

Tipo de geometria

Descrição

Point

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

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

Polygon

Superfície bidimensional descrita por um ou mais loops fechados. O primeiro loop define o limite externo (shell), e os loops subsequentes definem buracos dentro do polígono. Os buracos especificam áreas excluídas 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

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

MultiLineString

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

MultiPolygon

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

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))')

  • Especifique as coordenadas como (longitude, latitude) em graus, seguindo o sistema de coordenadas WGS84. A longitude deve estar no intervalo [-180, 180] e a latitude 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 planares, como a projeção de Mercator. Em vez disso, trata a Terra como uma esfera perfeita. Primeiro, converte as coordenadas de latitude e longitude em coordenadas cartesianas tridimensionais (x, y, z) na esfera. Essa abordagem evita o aumento de erros computacionais causados por projeções planares, 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 mínima entre a entrada e a saída.

Limitações

  • Restrições de versão do cliente: Para consultar dados GEOGRAPHY, use o odpscmd versão 0.56.0 ou posterior. 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 suporta 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 equi-join em uma cláusula JOIN.

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

  • O tipo de dados GEOGRAPHY não suporta a construção de um objeto geográfico maior que um hemisfério. Por exemplo, a seguinte instrução SQL tenta criar um objeto geográfico que cobre quase todo o globo, da longitude 179 graus oeste até 179 graus 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.

    SELECT ST_GEOGFROMTEXT(
      'POLYGON ((-179 -89, 179 -89, 179 89, -179 89, -179 -89))'
    );
    
    -- Result:
    +------+
    | _c0  |
    +------+
    | POLYGON ((-179 89, 179 89, 179 -89, -179 -89, -179 89)) |
    +------+

Crie e use dados GEOGRAPHY

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

SET odps.sql.type.system.odps2=true;

CREATE TABLE spatial_points (
    id BIGINT,
    name STRING,
    location GEOGRAPHY,
    region GEOGRAPHY
);

Utilize funções integradas, como ST_GEOGPOINT, ST_GEOGFROMTEXT, ST_GEOGFROMWKB, ST_MAKELINE e ST_MAKEPOLYGON, para construir objetos geográficos. Para mais informações, consulte Geography function overview.

-- 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 de geografia

O MaxCompute fornece uma série de funções de geografia com o prefixo ST_ para construir, converter e analisar dados GEOGRAPHY. Essas funções permitem 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 mais informações, consulte Geography function overview.

As seguintes funções de geografia 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.

Spatial join

Um spatial join é uma operação de junção não equitativa 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) para avaliar a relação espacial entre os objetos geográficos.

  • Um caso de uso comum envolve utilizar uma função de geografia 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 um geofence.

O MaxCompute implementa spatial joins com base em uma tabela de broadcast. Use um MAPJOIN HINT para especificar qual tabela transmitir via broadcast.

Para mais informações, consulte Spatial JOIN.