All Products
Search
Document Center

:ST_UpdatePyramid

Last Updated:Jun 25, 2025

Topik ini menjelaskan fungsi ST_UpdatePyramid, yang memperbarui beberapa piramida vektor. Rentang pembaruan ditentukan oleh parameter update_extent, dengan nilai diberi label menggunakan Box2D. Fungsi ini dapat dipanggil ketika tabel vektor asli dimodifikasi, seperti saat data ditambahkan atau dihapus. Dengan memberikan rentang pembaruan koordinat ke parameter update_extent, Anda dapat melihat hasil pembaruan.

Sintaksis

boolean ST_UpdatePyramid(cstring table, cstring geom_field, cstring id_field, BOX2D update_extent, cstring rules) ;

Parameter

Parameter

Deskripsi

table

Nama tabel vektor.

geom_field

Nama kolom yang memiliki atribut Geometri dalam tabel vektor.

id_field

Nama kolom yang memiliki atribut ID dalam tabel vektor.

update_extent

Rentang koordinat yang ingin Anda perbarui. Rentang tersebut dalam format Box2D. Koordinat dalam format EPSG ditentukan oleh parameter rules. Nilai default: 4326.

Sebagai contoh, Box2D(ST_GeomFromText('LINESTRING(-120 -80, -100 -50)')) menentukan rentang pembaruan -120 < Longitude < -100, -80 < Latitude < -50.

rules

Aturan yang digunakan untuk memperbarui beberapa piramida vektor. Nilai dari parameter ini dalam format JSON dan terdiri dari bidang updateBoxScale dan sourceSRS.

  • Bidang updateBoxScale menentukan lapisan tertinggi ke mana pembaruan diteruskan. Sebagai contoh, jika updateBoxScale diatur ke 2 dan lebar maksimum rentang pembaruan yang ditentukan adalah 100, hanya ubin level-1 dari piramida vektor yang diperbarui. Alasannya adalah bahwa lebar maksimum ubin level-1 dibagi 100 kurang dari 2, dan lebar maksimum ubin level-0 dibagi 100 lebih besar dari 2. Dalam contoh ini, rentang global mencakup longitude dan latitude global. Nilai default dari bidang updateBoxScale adalah 10.

  • Bidang sourceSRS menentukan nilai parameter update_extent dalam format EPSG. Nilai default: 4326.

Catatan

Bidang UpdateBoxScale digunakan untuk menyeimbangkan akurasi dan efisiensi pembaruan.

  • Ketika updateBoxScale diatur ke nilai kecil, sejumlah kecil ubin diperbarui, tetapi beberapa ubin tidak dapat mencerminkan hasil pembaruan.

  • Ketika updateBoxScale diatur ke nilai besar, sejumlah besar ubin diperbarui, tetapi hasil pembaruan tercermin oleh lebih banyak ubin. Sebagai contoh, jika updateBoxScale diatur ke 100000 dan maxLevel adalah 16, pembaruan diteruskan dari bawah hingga ke node root.

Contoh

-- Hapus tabel yang memiliki nama sama dengan tabel lain.
DROP TABLE IF EXISTS test_update_line;

-- Buat tabel uji.
CREATE TABLE test_update_line(id int primary key, geom geometry(LineString, 4326));

-- Masukkan data ke dalam tabel uji.
INSERT INTO test_update_line(id, geom)
SELECT i,
    ST_GeomFromText(format('LINESTRING(%s %s,%s %s)',
                        (floor(i/100)*0.01+10), (floor(i%100)*0.01+10),
                        (floor(i/100+1)*0.01+10), (floor(i%100+1)*0.01+10)), 4326)
FROM generate_series(1, 10000) i;

-- Buat indeks untuk kolom geom.
CREATE INDEX ON test_update_line using gist(geom);

-- Buat piramida vektor untuk mempercepat tampilan data. Selain itu, jika ekstensi Raster diinstal, Anda harus menambahkan ::cstring ke setiap parameter untuk menghindari konflik.
SELECT ST_BuildPyramid('test_update_line', 'geom', 'id', '{"parallel":16}');

-- Masukkan data uji.
INSERT INTO test_update_line(id, geom)
SELECT i,
    ST_GeomFromText(
    format('LINESTRING(%s %s,%s %s)',
          (floor(i/100)*0.01-10), (floor(i%100)*0.01-10),
          (floor(i/100+1)*0.01+10), (floor(i%100+1)*0.01+10)),
          4326)
  FROM generate_series(10001, 15000) i;
  
-- Perbarui sebagian data dari piramida vektor.
SELECT ST_UpdatePyramid('test_update_line', 'geom', 'id', Box2D(ST_GeomFromText('LINESTRING(-20 -20, 20 20)')), '{"updateBoxScale":10}';