對(duì)矢量金字塔進(jìn)行局部更新,更新范圍由參數(shù)update_extent(Box2D格式)指定。主要用于,當(dāng)原始矢量數(shù)據(jù)表進(jìn)行了數(shù)據(jù)更新(插入、刪除或修改)后,將更新發(fā)生的坐標(biāo)系范圍作為參數(shù)調(diào)用本函數(shù),從而允許用戶看到更新后的可視化結(jié)果。

語(yǔ)法

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

參數(shù)

參數(shù)名稱 描述
table 矢量數(shù)據(jù)表的名稱。
geom_field 矢量數(shù)據(jù)表中Geometry屬性的列名。
id_field 矢量數(shù)據(jù)表中ID屬性的列名。
update_extent 需要進(jìn)行更新的EPSG格式坐標(biāo)區(qū)域范圍(Box2D格式),EPSG格式由參數(shù)rules指定,默認(rèn)為4326。

例如:Box2D(ST_GeomFromText('LINESTRING(-120 -80, -100 -50)'))指定-120<經(jīng)度<-100, -80<緯度<-50的更新范圍。

rules JSON格式的更新參數(shù)值,參數(shù)包括updateBoxScalesourceSRS。
  • 參數(shù)updateBoxScale會(huì)影響到更新自底向上最高傳遞到哪一層,如updateBoxScale=2,用戶指定的更新區(qū)域的最大寬高值為100時(shí),只會(huì)更新Level1的瓦片(假設(shè)全局范圍是全球經(jīng)緯度),因?yàn)?span id="z68uejxpaoma" class="help-letter-space">Level1的瓦片的最大寬高值除以100小于2,而Level0的瓦片的最大寬高值除以100大于2。updateBoxScale默認(rèn)值為10。
  • sourceSRS指定參數(shù)update_extentEPSG格式,默認(rèn)值為4326。
說(shuō)明
updateBoxScale用于控制更新在精度和效率之間的取舍:
  • 使用較小的updateBoxScale時(shí),需要更新的瓦片較少,但是會(huì)有更多較淺的瓦片不能體現(xiàn)出數(shù)據(jù)更新的結(jié)果。
  • 使用較大的updateBoxScale時(shí),需要更新的瓦片較多,但是更新能夠體現(xiàn)在更多瓦片上,比如updateBoxScale=100000,則一直向上更新到包括根結(jié)點(diǎn)(假設(shè)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;
CREATE INDEX ON test_update_line using gist(geom);
SELECT ST_BuildPyramid('test_update_line', 'geom', 'id', '{"parallel":16}');
st_buildpyramid
-----------------
t
(1 row)
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}';
st_updatepyramid
-----------------
t
(1 row)