Topik ini menjelaskan fungsi ST_AsMVTEx, yang memiliki fungsi serupa dengan ST_AsMVT. Dibandingkan dengan ST_AsMVT, ST_AsMVTEx menyaring elemen vektor dengan pengaruh minimal pada tampilan berdasarkan hubungan antar elemen vektor. Hal ini mengurangi ukuran mapbox vector tiles (MVTs) dan meningkatkan efisiensi visualisasi. Parameter scale_factor ditambahkan untuk mengontrol efek penyaringan, serta parameter mvt_size_limit untuk membatasi jumlah maksimum elemen vektor yang dapat dimuat oleh MVT.
Sintaksis
bytea ST_AsMVTEx(anyelement row);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit, text name);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit, text name, int4 extent);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit, text name, int4 extent, text geom_name);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit, text name, int4 extent, text geom_name, text feature_id_name);Nilai Kembali
Mengembalikan representasi biner MVT sesuai dengan lapisan ubin. Konten ubin ditentukan oleh kumpulan baris.
Parameter
Parameter | Deskripsi |
row | Data baris dengan setidaknya satu kolom geometri. |
scale_factor | Efek penyaringan. Semakin besar nilainya, semakin banyak elemen vektor yang disaring, dan semakin kecil ukuran MVT. Nilai valid: 1 hingga extent-1. Nilai default: 1. |
mvt_size_limit | Jumlah maksimum elemen vektor yang dapat dimuat oleh MVT. Elemen vektor yang melebihi batas dibuang. Nilai default adalah nilai INTEGER maksimum, yaitu 2147483647. |
name | Nama lapisan. Nilai default adalah string |
extent | Luas ubin dalam ruang layar seperti yang didefinisikan oleh spesifikasi. Nilai default: 4096. |
geom_name | Nama kolom geometri dalam data baris. Nilai default adalah kolom geometri pertama. |
feature_id_name | Nama kolom Feature ID dalam data baris. Feature ID tidak disetel untuk nilai NULL atau negatif. Kolom pertama yang cocok dengan nama dan tipe valid termasuk smallint, integer, dan bigint digunakan sebagai Feature ID. Setiap kolom berikutnya ditambahkan sebagai properti. Properti JSON tidak didukung. |
Deskripsi
Fungsi ini memiliki fungsi serupa dengan ST_AsMVT. Namun, ST_AsMVTEx menyaring elemen vektor dengan dampak visual minimal untuk mengurangi ukuran MVT dan meningkatkan efisiensi visualisasi. Parameter
scale_factormengontrol intensitas penyaringan, dengan rentang nilai dari 1 hingga extent-1. Semakin besar nilaiscale_factor, semakin banyak elemen vektor yang disaring.Parameter
mvt_size_limitmenentukan jumlah maksimum elemen vektor yang dapat dimuat oleh MVT. Jika jumlah elemen melebihi nilaimvt_size_limitsetelah penyaringan, sistem secara acak memilih dan membuang elemen vektor berlebih.Jika nilai parameter
extentterlalu besar, kinerja sistem dapat terpengaruh.Fungsi ini tidak direkomendasikan untuk dataset yang terdiri dari bidang besar.
Contoh
-- Buat tabel data vektor dan sisipkan satu bidang, satu garis, dan 9998 titik.
CREATE TABLE example_table(id integer, geom Geometry);
INSERT INTO example_table(id, geom) VALUES
(1, ST_MakeEnvelope(150, 75, 170, 80, 4326));
INSERT INTO example_table(id, geom) VALUES
(2, ST_GeomFromText('LINESTRING(-160 -70, 160 -70)', 4326));
INSERT INTO example_table(id, geom)
SELECT i,
ST_SetSRID(ST_MakePoint((random() * 20) + 150, (random() * 10) + 70), 4326)
FROM generate_series(3, 10000) i;
-- Atur scale_factor menjadi 1.
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)) FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 1)) FROM mvtgeom;
length
-------
54237
(1 row)
-- Atur scale_factor menjadi 4.
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)) FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 4)) FROM mvtgeom;
length
-------
39211
(1 row)
-- Atur scale_factor menjadi 4, dan jumlah maksimum elemen vektor yang dapat dimuat oleh MVT menjadi 100.
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)) FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 4, 100)) FROM mvtgeom;
length
-------
1117
(1 row)
-- Atur scale_factor menjadi 4, atur jumlah maksimum elemen vektor yang dapat dimuat oleh MVT menjadi 100, atur resolusi ubin menjadi 10000 × 10000, dan atur nama lapisan menjadi layer_name.
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326), 10000) FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 4, 100, 'layer_name', 10000)) FROM mvtgeom;
length
-------
1220
(1 row)
-- Atur scale_factor menjadi 4, atur jumlah maksimum elemen vektor yang dapat dimuat oleh MVT menjadi 100, atur resolusi ubin menjadi 10000 × 10000, dan atur nama lapisan menjadi layer_name.
-- Atur nama kolom geometri menjadi geom_field dan nama kolom ID menjadi id_field.
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326), 10000) AS geom_field, id AS id_field FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 4, 100, 'layer_name', 10000, 'geom_field', 'id_field')) FROM mvtgeom;
length
-------
1520
(1 row)