指定された範囲と解像度に基づいて、ジオメトリオブジェクトのセットをヒートマップタイル (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=1とpoint_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の場合はINT32、float8の場合はDOUBLEになります。 -
rowsとcolumnsは、それぞれheightとwidthパラメーターに対応します。 -
値は、標準的なイメージ座標規則に一致するよう、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 |
sum、min、max、avg |
point_mod |
boolean | false |
true、false |
設定オプション名は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...
次のステップ
-
ST_HMTAsArray — HMT バイナリ値を配列表現に変換