Topik ini menjelaskan fungsi ST_MapAlgebra, yang menggunakan ekspresi aljabar sesuai dengan Bahasa Komputasi Aljabar untuk mentransformasikan beberapa objek raster asli menjadi satu objek raster.
Sintaksis
raster ST_MapAlgebra(raster[] rasters ,
cstring algebraExpr default NULL,
cstring storageoption default '')Parameter
| Parameter | Deskripsi |
| rasters | Objek raster asli yang ingin Anda transformasikan. |
| algebraExpr | String JSON yang menentukan ekspresi aljabar yang ingin Anda gunakan. |
| storageOption | String JSON yang menentukan cara menyimpan objek raster baru. |
Setiap objek JSON anak dalam string JSON yang ditentukan oleh parameter algebraExpr mewakili bidang yang dikaitkan dengan ekspresi aljabar. Tabel berikut menjelaskan bidang-bidang tersebut.
| Bidang | Deskripsi | Tipe | Nilai default | Catatan pengaturan |
| algebraExpr | Ekspresi aljabar yang ingin Anda gunakan. | String | Tidak tersedia | Tidak tersedia. |
| nodata | Menentukan apakah nilai nodata valid. | Boolean | false |
|
| nodataValue | Nilai nodata yang akan dikembalikan untuk objek raster baru. | float8 | 0 | Tidak tersedia. |
Ekspresi aljabar yang ditentukan oleh bidang algebraExpr berisi kata kunci berikut:
- [r, b]
- r: menunjukkan ID objek raster baru dalam larik yang ditentukan oleh parameter rasters. Format: 0-n-1.
- b: menunjukkan nomor band objek raster baru. Format: 0-n-1.
- x
Nomor urut kolom tempat piksel yang ditentukan berada.
- y
Nomor urut baris tempat piksel yang ditentukan berada.
Tabel berikut mencantumkan operasi yang dapat Anda masukkan dalam ekspresi aljabar.
| Tipe | Operator atau fungsi | Catatan |
| Operator |
| Tidak tersedia. |
| Operasi bitwise |
| Tidak tersedia. |
| Operasi logika |
| Tidak tersedia. |
| Operasi pada fungsi |
| Anda hanya dapat menentukan satu operasi pada fungsi. |
| Fungsi statistik |
| Anda harus menentukan dua atau lebih fungsi statistik. |
- Contoh 1
Transformasikan objek raster asli menjadi objek raster baru yang hanya memiliki satu band. Hasil yang dikembalikan adalah sebagai berikut: raster[0]band[0] + raster[1]band[0] * raster[1]band[1].
[ { "expr":"([0,0] + [1,0] * [1,1]) ", "nodata": true, "nodataValue":999 } ] - Contoh 2
Hitung varians dari tiga band.
[ { "expr":"(std([0,0],[0,1],[0,2]))", "nodata": true, "nodataValue":999 } ] - Contoh 3
Transformasikan objek raster asli menjadi objek raster baru yang memiliki tiga band. Setiap band ditransformasikan menggunakan ekspresi unik.
[ { "expr":"(min([0,0],[0,1],[0,2]))", "nodata": true, "nodataValue":999 }, { "expr":"(max([0,0],[0,1],[0,2]))", "nodata": true, "nodataValue":999 }, { "expr":"(mean([0,0],[0,1],[0,2]))", "nodata": true, "nodataValue":999 } ]
Tabel berikut menjelaskan bidang dalam parameter storageOption.
| Bidang | Deskripsi | Tipe | Nilai default | Catatan pengaturan |
| chunking | Menentukan apakah akan menyimpan objek raster baru sebagai chunk. | Boolean | Sama dengan objek raster asli | Tidak tersedia. |
| chunkdim | Dimensi yang digunakan untuk menyimpan objek raster baru sebagai chunk. | String | Sama dengan objek raster asli | Bidang ini hanya berlaku ketika bidang chunking diatur ke true. |
| chunktable | Nama tabel chunk. | String | String kosong ('') | Secara default, tabel chunk sementara dengan nama acak dibuat untuk menyimpan data. Tabel chunk sementara ini hanya valid dalam sesi saat ini. Untuk menyimpan objek raster baru secara permanen, Anda harus menentukan bahwa Anda ingin membuat tabel chunk permanen di bidang chunktable. |
| compression | Format yang digunakan untuk kompresi gambar. | String | Sama dengan objek raster asli | Enam format kompresi didukung: None, JPEG, Zlib, PNG, LZO, dan LZ4. |
| quality | Kualitas gambar objek raster baru. | Integer | Sama dengan objek raster asli | Bidang ini hanya berlaku dalam format JPEG. |
| interleaving | Tipe interleaving objek raster baru. | String | Sama dengan objek raster asli | Nilai valid:
|
| endian | Format endian objek raster baru. | String | Sama dengan objek raster asli | Nilai valid:
|
Contoh
-- Buat tabel chunk permanen.
CREATE TABLE rast_mapalgebra_result(id integer, rast raster);
-- Masukkan data ke dalam tabel chunk.
WITH foo AS (
SELECT 1 AS rid, rast AS rast from t1 WHERE id = 1
UNION ALL
SELECT 2 AS rid, rast AS rast from t2 WHERE id = 2
)
INSERT INTO rast_mapalgebra_result
SELECT 1, ST_MapAlgebra(
ARRAY(SELECT rast FROM foo ORDER BY rid),
'[{"expr":"([0,0] + 0.5 * [1,0] - ([1,1])","nodata": true, "nodataValue":999}]',
'{"chunktable":"algebra_rbt"}'
);