Tous les produits
Search
Centre de documentation

ApsaraDB RDS:ST_AsHMT

Dernière mise à jour :Oct 12, 2026

Agrège un ensemble d'objets géométriques en une tuile de carte thermique (HMT) selon une étendue et une résolution spécifiées.

Syntaxe

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

Valeur renvoyée

Renvoie une structure de données binaire basée sur Protocol Buffers (Protobuf) représentant la valeur agrégée pour chaque cellule de la grille. Le schéma est le suivant :

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; // spatial reference identifier
    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;
    }
}
Remarque

L'objet HMT renvoyé contient les champs suivants :

  • Le champ type est déterminé par le type de données de la valeur d'entrée. Il est défini sur INT32 pour le comptage des quantités et sur DOUBLE pour le calcul des métriques.

  • Les champs rows et columns correspondent respectivement aux paramètres height et width.

  • Le champ matrix contient un tableau de valeurs organisées selon l'ordre ligne par ligne (row-major).

  • La grille est organisée avec des valeurs x croissantes de gauche à droite et des valeurs y décroissantes du haut vers le bas. Cette disposition est standard pour le rendu d'image.

  • Pour convertir le résultat binaire en un tableau lisible, utilisez la fonction ST_HMTAsArray.

Paramètres

Paramètre

Description

geometry_set

Colonne géométrique utilisée par la fonction d'agrégation.

extent

Étendue géographique pour l'agrégation. Seule la boîte englobante de cette géométrie est utilisée. Utilisez la fonction ST_TileEnvelope pour générer une étendue.

width

Largeur de la grille de sortie. Cette valeur correspond au champ columns du résultat.

height

Hauteur de la grille de sortie. Cette valeur correspond au champ rows du résultat.

value

Valeur numérique à agréger. La fonction calcule la somme de cette valeur.

point_mode

Indique s'il faut utiliser le mode point. Si la valeur est true, la fonction agrège uniquement les points situés dans une cellule de la grille.

config

Chaîne au format JSON spécifiant les options d'agrégation avancées pour la carte thermique.

Description

Cette fonction convertit un ensemble d'objets géométriques en une tuile de carte thermique (HMT) selon une étendue géographique et une résolution spécifiées.

La fonction transforme automatiquement les géométries d'entrée pour qu'elles correspondent à la référence spatiale du paramètre extent si elles diffèrent.

Le paramètre config est une chaîne JSON qui spécifie la méthode de calcul. Le tableau suivant décrit les options disponibles.

Paramètre

Description

Type

Valeur par défaut

Description

type

Type de fonction d'agrégation.

string

sum

Valeurs valides :

  • sum

  • min

  • max

  • avg

point_mod

Indique s'il faut utiliser le mode point.

boolean

false

Notez l'orthographe point_mod, qui diffère du paramètre de fonction point_mode.

Remarque

Lors de l'utilisation d'un type int4 pour calculer une somme, l'opération peut provoquer un dépassement de capacité si le résultat dépasse la limite INT32 (-2147483648 à 2147483647). Pour éviter tout dépassement avec des nombres importants, utilisez le type float8.

Exemples

-- The following examples use a sample table named test_table, which is created with this statement.
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;

-- Count the number of geometries in each grid cell.
-- This is the simplest use case and does not require a `value` parameter.
SELECT ST_AsHMT(geom, -- geometry column
    ST_MakeEnvelope(0, 0, 10, 10, 4326), -- Extent
    1024,        -- Width, in pixels
    800        -- height
)
FROM test_table;

---------
\x080010a0061880083284...

-- Sum the values in the `weight` column for each grid cell.
SELECT ST_AsHMT(geom, -- geometry column
    ST_MakeEnvelope(0, 0, 10, 10, 4326), -- Extent
    1024,        -- Width
    800,       -- height
    weight     -- value column
)
FROM test_table;
---------
\x080010a0061880...

-- Sum the result of a computed expression for each grid cell.
-- The function returns a DOUBLE type matrix because the expression returns a float8 value.
SELECT ST_AsHMT(geom, -- geometry column
    ST_MakeEnvelope(0, 0, 10, 10, 4326), -- Extent
    1024,        -- Width
    800,        -- height
    weight / volume * 1.2     -- complex value
)
FROM test_table;
---------
\x080110a0061880083a85...

-- Use point mode to count only geometries whose centers are in a grid cell.
SELECT ST_AsHMT(geom, -- geometry column
    ST_MakeEnvelope(0, 0, 10, 10, 4326), -- Extent
    1024,        -- Width, in pixels
    800,        -- height
    1::integer,  -- value
    true        -- point mode
)
FROM test_table;
---------
\x080010a0061880083...

-- Filter the input data before aggregation by using a WHERE clause.
SELECT ST_AsHMT(geom, -- geometry column
    ST_MakeEnvelope(0, 0, 10, 10, 4326), -- Extent
    1024,        -- Width, in pixels
    800        -- height
)
FROM test_table
WHERE num <5;
---------
\x080010a00618...

-- Calculate the average weight by using the `config` parameter.
SELECT ST_AsHMT(geom,
    ST_MakeEnvelope(0, 0, 10, 10, 4326), -- Extent
    256,        -- Width, in pixels
    256,        -- height
    weight, 
    '{"type":"avg"}'::cstring)
FROM test_table;
---------
\x080010a00618...

-- Find the minimum weight in point mode by using the `config` parameter.
SELECT ST_AsHMT(geom,
    ST_MakeEnvelope(0, 0, 10, 10, 4326), -- Extent
    256,        -- Width, in pixels
    256,        -- height
    weight, 
    '{"type":"min", "point_mod":true}'::cstring)
FROM test_table;
---------
\x080010a00618...