全部產品
Search
文件中心

:ST_UpdatePyramid

更新時間:Feb 28, 2024

對向量金字塔進行局部更新,修改範圍由參數update_extent(Box2D格式)指定。主要用於,當原始向量資料表進行了資料更新(插入、刪除或修改)後,將更新發生的座標系範圍作為參數調用本函數,從而允許使用者看到更新後的可視化結果。

文法

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

參數

參數名稱

描述

table

向量資料表的名稱。

geom_field

向量資料表中Geometry屬性的列名。

id_field

向量資料表中ID屬性的列名。

update_extent

需要進行更新的EPSG格式座標地區範圍(Box2D格式),EPSG格式由參數rules指定,預設為4326。

例如:Box2D(ST_GeomFromText('LINESTRING(-120 -80, -100 -50)'))指定-120<經度<-100, -80<緯度<-50的修改範圍。

rules

JSON格式的更新參數值,參數包括updateBoxScale和sourceSRS。

  • 參數updateBoxScale會影響到更新自底向上最高傳遞到哪一層,如updateBoxScale=2,使用者指定的更新地區的最大寬高值為100時,只會更新Level1的瓦片(假設全域範圍是全球經緯度),因為Level為1的瓦片的最大寬高值除以100小於2,而Level為0的瓦片的最大寬高值除以100大於2。updateBoxScale預設值為10。

  • sourceSRS指定參數update_extent的EPSG格式,預設值為4326。

說明

updateBoxScale用於控制更新在精度和效率之間的取捨:

  • 使用較小的updateBoxScale時,需要更新的瓦片較少,但是會有更多較淺的瓦片不能體現出資料更新的結果。

  • 使用較大的updateBoxScale時,需要更新的瓦片較多,但是更新能夠體現在更多瓦片上,比如updateBoxScale=100000,則一直向上更新到包括根結點(假設maxLevel=16)。

樣本

-- 刪除重明表
DROP TABLE IF EXISTS test_update_line;

-- 建立測試表
CREATE TABLE test_update_line(id int primary key, geom geometry(LineString, 4326));

-- 向測試表中插入資料
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;

-- 為geom列建立索引
CREATE INDEX ON test_update_line using gist(geom);

-- 建立向量金字塔,加速資料顯示,如果同時安裝了Raster外掛程式,則需要給各參數添加::cstring避免衝突。
SELECT ST_BuildPyramid('test_update_line', 'geom', 'id', '{"parallel":16}');

-- 插入測試資料
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;
  
-- 對向量金字塔進行局部更新
SELECT ST_UpdatePyramid('test_update_line', 'geom', 'id', Box2D(ST_GeomFromText('LINESTRING(-20 -20, 20 20)')), '{"updateBoxScale":10}';