すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:ST_AsHMT

最終更新日:Aug 22, 2026

指定された範囲と解像度に基づいて、ジオメトリオブジェクトのセットをヒートマップタイル (HMT) に変換する関数です。戻り値は、ヒートマップのレンダリングに適した protobuf でエンコードされたバイナリマトリックスです。

構文

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

バリアントの選択:

  • ジオメトリのカウント (value 引数なし): デフォルトで value=1point_mode=false が設定されている最初のバリアントを使用します。

  • int4 列の合計 (例: カウント、数量):int4 value バリアントを使用します。合計が 2,147,483,647 を超える可能性がある場合は、オーバーフローを避けるため、代わりに float8 value を使用します。

  • float8 列の合計 (例:メトリック、比率):float8 value バリアントを使用します。

  • 高度な集約 (min、max、avg、または JSON によるポイントモード):cstring config バリアントを使用します。

戻り値

protobuf ベースのバイナリデータマトリックス (bytea) を返します。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;
    }
}

マトリックスのレイアウト:

  • type は、入力 value パラメーターによって決定されます。int4 の場合は INT32float8 の場合は DOUBLE になります。

  • rowscolumns は、それぞれ heightwidth パラメーターに対応します。

  • 値は、標準的なイメージ座標規則に一致するよう、X 軸は昇順、Y 軸は降順で、行ごとに格納されます。

戻り値を配列表現に変換する方法については、「ST_HMTAsArray」をご参照ください。

パラメーター

パラメーター デフォルト 説明
geometry_set ジオメトリ 集約するジオメトリ列。
extent ジオメトリ 地理的範囲。 バウンディングボックスのみが使用されます。 ST_TileEnvelope と互換性があります。
width int4 グリッドの幅 (ピクセル単位)。 結果のマトリックスの columns に対応します。
height int4 グリッドの高さ (ピクセル単位)。 結果のマトリックスの rows に対応します。
value int4 または float8 1 グリッドセルごとに合計する値。 合計が int32 の範囲 (–2,147,483,648~2,147,483,647) を超える可能性がある場合は、float8 を使用します。
point_mode boolean false true の場合、メッシュ内のポイントのみがカウントされます。
config cstring 高度な集約オプションを指定するための JSON 文字列。 以下の設定オプションの表をご参照ください。

設定オプション

オプション デフォルト 有効な値
type string sum summinmaxavg
point_mod boolean false truefalse
設定オプション名は point_mod です (point_mode ではありません)。

注意事項

SRID が不一致の場合の動作: geometry_set の空間参照が extent の空間参照と異なる場合、この関数は extent の空間参照をデータに適用します。 関数を呼び出す前に両方が同じ SRID を使用することを確認するには、サンプルジオメトリで ST_SRID() を実行し、その結果を extent に埋め込まれている SRID と比較します。

int4 オーバーフロー: int4 値 を使用して合計を計算する場合、値は int32 の範囲 (–2,147,483,648~2,147,483,647) に制限されます。合計がこの範囲を超える可能性があるデータについては、代わりに float8 の列または式を渡してください。

すべての例では、次のコマンドで作成されたテストテーブルを使用します:

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;

ジオメトリのカウント (推奨される開始点)

各グリッドセル内のジオメトリオブジェクトの数をカウントします。これは最もシンプルなユースケースで、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...

列の合計

グリッドセルごとに int4 型の列 (weight) を合計します。

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

計算式の合計

float8 式を値として渡します。結果マトリックスは 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...

ポイントモードの使用

メッシュ内のポイントのみをカウントします。

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...

WHERE 句によるフィルタリング

集約の前にフィルターを適用します。

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...

config パラメーターを使用した平均化

config JSON 文字列を使用して、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...

config パラメーターを使用したポイントモードでの最小値の取得

config JSON 文字列を使用して、min 集約とポイントモードを組み合わせます。

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...

次のステップ