Todos os produtos
Search
Central de documentação

ApsaraDB RDS:ST_AsHMT

Última atualização: Sep 02, 2026

Função que converte um conjunto de objetos de geometria em tiles de mapa de calor (HMT) com base em uma extensão e resolução especificadas. O valor retornado é uma matriz binária codificada em protobuf, adequada para renderização de mapas de calor.

Sintaxe

bytea ST_AsHMT(geometry geometry_set, geometry extent, int4 width, int4 height, int4 value default 1, boolean point_mode default false);
bytea ST_AsHMT(geometry geometry_set, geometry extent, int4 width, int4 height, int4 value);
bytea ST_AsHMT(geometry geometry_set, geometry extent, int4 width, int4 height, int4 value, boolean point_mode);
bytea ST_AsHMT(geometry geometry_set, geometry extent, int4 width, int4 height, float8 value);
bytea ST_AsHMT(geometry geometry_set, geometry extent, int4 width, int4 height, float8 value, boolean point_mode);
bytea ST_AsHMT(geometry geometry_set, geometry extent, int4 width, int4 height, int4 value, cstring config);
bytea ST_AsHMT(geometry geometry_set, geometry extent, int4 width, int4 height, float8 value, cstring config);

Escolha da variante:

  • Count geometries (sem argumento value): use a primeira variante com os valores padrão value=1 e point_mode=false.

  • **Somar uma coluna int4** (por exemplo, contagens ou quantidades): use as variantes com int4 value. Se a soma puder exceder 2.147.483.647, prefira float8 value para evitar estouro.

  • **Somar uma coluna float8** (por exemplo, métricas ou razões): use as variantes com float8 value.

  • Agregação avançada (min, max, avg ou modo de ponto via JSON): use as variantes com cstring config.

Valores de retorno

Retorna uma matriz de dados binários baseada em protobuf (bytea). O schema proto é:

syntax = "proto2";
option optimize_for = LITE_RUNTIME;

message HMT {
    required Type type = 1;       // data value type
    required uint32 rows = 2;     // rows of matrix
    required uint32 columns = 3;  // columns of matrix
    required uint32 srid = 4;
    required float  xmin = 5;     // xmin
    required float  ymin = 6;     // ymin
    required float  xmax = 7;     // xmax
    required float  ymax = 8;     // ymax

    oneof matrix {
        intMatrix intValues = 10;
        doubleMatrix doubleValues = 11;
    }

    message intMatrix {
        repeated sint32 values = 12 [packed = true];
    }

    message doubleMatrix {
        repeated double values = 13 [packed = true];
    }

    enum Type {
        INT32 = 0;
        DOUBLE = 1;
    }
}

Layout da matriz:

  • O campo type depende do parâmetro de entrada value: INT32 para int4 e DOUBLE para float8.

  • Os campos rows e columns correspondem aos parâmetros height e width, respectivamente.

  • Os valores são armazenados linha por linha, em ordem ascendente no eixo X e descendente no eixo Y, seguindo as convenções padrão de coordenadas de imagem.

Para converter o valor de retorno em uma representação de array, use ST_HMTAsArray.

Parâmetros

Parâmetro

Tipo

Padrão

Descrição

geometry_set

geometry

Coluna de geometria a agregar.

extent

geometry

Extensão geográfica. Apenas a bounding box é utilizada. Compatível com ST_TileEnvelope.

width

int4

Largura da grade em pixels. Corresponde a columns na matriz resultante.

height

int4

Altura da grade em pixels. Corresponde a rows na matriz resultante.

value

int4 ou float8

1

Valor a somar por célula da grade. Use float8 quando a soma puder exceder o intervalo do int32 (–2.147.483.648 a 2.147.483.647).

point_mode

boolean

false

Quando definido como true, apenas os pontos dentro da malha são contabilizados.

config

cstring

String JSON para opções avançadas de agregação. Consulte a tabela de opções de configuração abaixo.

Opções de configuração

Opção

Tipo

Padrão

Valores válidos

type

string

sum

sum, min, max, avg

point_mod

boolean

false

true, false

O nome da opção de configuração é point_mod (e não point_mode ).

Observações de uso

Divergência de SRID: Se a referência espacial de geometry_set diferir da referência espacial de extent, a função aplicará a referência espacial de extent aos dados. Para garantir que ambos usem o mesmo SRID antes de chamar a função, execute ST_SRID() em uma geometria de amostra e compare o resultado com o SRID incorporado em extent.

Estouro de int4: Ao usar int4 value para calcular somas, os valores ficam limitados ao intervalo do int32 (–2.147.483.648 a 2.147.483.647). Para dados cuja soma possa ultrapassar esse limite, passe uma coluna ou expressão float8.

Exemplos

Todos os exemplos usam uma tabela de teste criada com:

CREATE TABLE test_table AS
SELECT i num,
    ST_SetSrid(st_makepoint((i-0.5)::numeric, (i-0.5)::numeric), 4326) geom,
    i*100::int4 weight,
    i*i*i::float8 volume
FROM generate_series(1, 10) i;

Contar geometrias (ponto de partida recomendado)

Conte o número de objetos de geometria em cada célula da grade. Este é o caso de uso mais simples e não requer o argumento value.

SELECT ST_AsHMT(geom,
    ST_MakeEnvelope(0, 0, 10, 10, 4326),  -- extent
    1024,                                  -- width, in pixels
    800                                    -- height, in pixels
)
FROM test_table;
---------
\x080010a0061880083284...

Somar uma coluna

Some uma coluna int4 (weight) por célula da grade.

SELECT ST_AsHMT(geom,
    ST_MakeEnvelope(0, 0, 10, 10, 4326),  -- extent
    1024,                                  -- width
    800,                                   -- height
    weight                                 -- value column
)
FROM test_table;
---------
\x080010a0061880...

Somar uma expressão calculada

Passe uma expressão float8 como valor. A matriz resultante usa o tipo DOUBLE.

SELECT ST_AsHMT(geom,
    ST_MakeEnvelope(0, 0, 10, 10, 4326),  -- extent
    1024,                                  -- width
    800,                                   -- height
    weight / volume * 1.2                  -- float8 expression
)
FROM test_table;
---------
\x080110a0061880083a85...

Usar o modo de ponto

Contabilize apenas os pontos dentro da malha.

SELECT ST_AsHMT(geom,
    ST_MakeEnvelope(0, 0, 10, 10, 4326),  -- extent
    1024,                                  -- width, in pixels
    800,                                   -- height
    1::integer,                            -- value
    true                                   -- point mode
)
FROM test_table;
---------
\x080010a0061880083...

Filtrar com uma cláusula WHERE

Aplique um filtro antes da agregação.

SELECT ST_AsHMT(geom,
    ST_MakeEnvelope(0, 0, 10, 10, 4326),  -- extent
    1024,                                  -- width, in pixels
    800                                    -- height
)
FROM test_table
WHERE num < 5;
---------
\x080010a00618...

Calcular média usando o parâmetro config

Use a string JSON config para especifique a agregação avg.

SELECT ST_AsHMT(the_geom,
    ST_MakeEnvelope(0, 0, 10, 10, 4326),  -- extent
    256,                                   -- width, in pixels
    256,                                   -- height
    weight,
    '{"type":"avg"}'::cstring)
FROM test_table;
---------
\x080010a00618...

Valor mínimo com modo de ponto usando o parâmetro config

Use a string JSON config para combinar a agregação min com o modo de ponto.

SELECT ST_AsHMT(the_geom,
    ST_MakeEnvelope(0, 0, 10, 10, 4326),  -- extent
    256,                                   -- width, in pixels
    256,                                   -- height
    weight,
    '{"type":"min", "point_mode":true}'::cstring)
FROM test_table;
---------
\x080010a00618...

Próximos passos

  • ST_HMTAsArray — converta um valor binário HMT para uma representação de array