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ãovalue=1epoint_mode=false.**Somar uma coluna
int4** (por exemplo, contagens ou quantidades): use as variantes comint4 value. Se a soma puder exceder 2.147.483.647, prefirafloat8 valuepara evitar estouro.**Somar uma coluna
float8** (por exemplo, métricas ou razões): use as variantes comfloat8 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
typedepende do parâmetro de entradavalue:INT32paraint4eDOUBLEparafloat8.Os campos
rowsecolumnscorrespondem aos parâmetrosheightewidth, 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 |
— |
Coluna de geometria a agregar. |
|
|
geometry |
— |
Extensão geográfica. Apenas a bounding box é utilizada. Compatível com |
|
|
int4 |
— |
Largura da grade em pixels. Corresponde a |
|
|
int4 |
— |
Altura da grade em pixels. Corresponde a |
|
|
int4 ou float8 |
1 |
Valor a somar por célula da grade. Use |
|
|
boolean |
false |
Quando definido como |
|
|
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 |
|
|
string |
|
|
|
|
boolean |
|
|
O nome da opção de configuração époint_mod(e nãopoint_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