All Products
Search
Document Center

ApsaraDB RDS:ST_AsHMT

Last Updated:Jun 25, 2025

Fungsi ini mengonversi sekumpulan objek geometri menjadi ubin peta panas (HMT) berdasarkan rentang dan resolusi yang ditentukan.

Sintaksis

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

Nilai Pengembalian

Sebuah matriks data biner berbasis protobuf dikembalikan. Contoh berikut menunjukkan file proto.

syntax = "proto2";
option optimize_for = LITE_RUNTIME;

message HMT {
    required Type type = 1; // tipe nilai data
    required uint32 rows = 2;   // jumlah baris dalam matriks
    required uint32 columns = 3; // jumlah kolom dalam matriks
    required uint32 srid = 4; // jumlah kolom dalam matriks
    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;
    }
}
Catatan

  • Nilai parameter tipe ditentukan oleh parameter input, dan dapat berupa tipe int32 atau double. Tipe int32 digunakan untuk menghitung informasi seperti kuantitas, sedangkan tipe double digunakan untuk menghitung informasi seperti metrik.

  • Parameter baris menunjukkan jumlah baris dalam matriks, dan parameter kolom menunjukkan jumlah kolom dalam matriks.

  • Nilai dalam matriks adalah larik dari tipe data tertentu dan diatur dalam baris.

  • Dalam matriks, nilai disusun secara menaik dalam arah X dan menurun dalam arah Y untuk memudahkan konversi menjadi gambar.

  • Anda dapat menggunakan fungsi ST_HMTAsArray untuk mengonversi nilai pengembalian ke representasi larik. Untuk informasi lebih lanjut tentang fungsi ST_HMTAsArray, lihat ST_HMTAsArray.

Parameter

Parameter

Deskripsi

geometry_set

Kolom bidang geometri.

extent

Rentang geografis. Hanya kotak pembatas yang digunakan. Dapat digunakan bersama dengan fungsi ST_TileEnvelope.

width

Lebar mesh, yang sesuai dengan parameter kolom dalam hasil.

height

Tinggi mesh, yang sesuai dengan parameter baris dalam hasil.

value

Nilai statistik. Nilai tersebut dijumlahkan dalam proses.

point_mode

Menentukan apakah akan menggunakan mode titik. Jika mode titik digunakan, hanya titik-titik dalam mesh yang dihitung.

config

String JSON yang menunjukkan gaya peta panas.

Catatan Penggunaan

Fungsi ini mengonversi sekumpulan objek geometri menjadi HMT berdasarkan rentang dan resolusi yang ditentukan.

Jika referensi spasial data tidak konsisten dengan referensi spasial rentang input, referensi spasial rentang input akan digunakan untuk data.

Parameter config menunjukkan metode perhitungan dalam string JSON. Tabel berikut menjelaskan opsi yang dapat Anda konfigurasikan untuk parameter tersebut.

Opsi

Deskripsi

Tipe

Nilai Default

Catatan

type

Tipe agregasi.

string

sum

Nilai valid:

  • sum

  • min

  • max

  • avg

point_mod

Menentukan apakah akan menggunakan mode titik.

boolean

false

-

Catatan

Jika Anda menggunakan tipe int4 untuk menghitung nilai penjumlahan, nilai tidak valid mungkin dikembalikan karena nilai valid dari tipe int32 berkisar antara -2.147.483.648 hingga 2.147.483.647. Kami merekomendasikan agar Anda menggunakan tipe float8.

Contoh

-- membuat tabel
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;

-- menghitung kuantitas
SELECT ST_AsHMT(geom, --tipe geometri
    ST_MakeEnvelope(0, 0, 10, 10, 4326), -- Rentang
    1024,        -- Lebar, dalam piksel
    800        -- tinggi
)
FROM test_table;

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

-- menghitung nilai
SELECT ST_AsHMT(geom, --tipe geometri
    ST_MakeEnvelope(0, 0, 10, 10, 4326), -- Rentang
    1024,        -- Lebar
    800,       -- tinggi
    weight     -- kolom nilai
)
FROM test_table;
---------
\x080010a0061880...

-- hitungan kompleks
SELECT ST_AsHMT(geom, --tipe geometri
    ST_MakeEnvelope(0, 0, 10, 10, 4326), -- Rentang
    1024,        -- Lebar
    800,        -- tinggi
    weight / volume * 1.2     -- nilai kompleks
)
FROM test_table;
---------
\x080110a0061880083a85...

-- mode titik
SELECT ST_AsHMT(geom, --tipe geometri
    ST_MakeEnvelope(0, 0, 10, 10, 4326), -- Rentang
    1024,        -- Lebar, dalam piksel
    800,        -- tinggi,
    1::integer,  -- nilai
    true        -- mode titik
)
FROM test_table;
---------
\x080010a0061880083...

-- klausa where
SELECT ST_AsHMT(geom, --tipe geometri
    ST_MakeEnvelope(0, 0, 10, 10, 4326), -- Rentang
    1024,        -- Lebar, dalam piksel
    800        -- tinggi
)
FROM test_table
WHERE num <5;
---------
\x080010a00618...

-- rata-rata 
SELECT ST_AsHMT(the_geom,
    ST_MakeEnvelope(0, 0, 10, 10, 4326), -- Rentang
    256,        -- Lebar, dalam piksel
    256        -- tinggi
    weight, 
    '{"type":"avg"}'::cstring)
FROM test_table;
---------
\x080010a00618...

-- Gunakan min, mode titik 
SELECT ST_AsHMT(the_geom,
    ST_MakeEnvelope(0, 0, 10, 10, 4326), -- Rentang
    256,        -- Lebar, dalam piksel
    256        -- tinggi
    weight, 
    '{"type":"min", "point_mode":true}'::cstring)
FROM test_table;
---------
\x080010a00618...