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;
}
}
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:
|
point_mod | Menentukan apakah akan menggunakan mode titik. | boolean | false | - |
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...