对矢量金字塔进行局部更新,更新范围由参数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)'))指定 |
rules | JSON格式的更新参数值,参数包括updateBoxScale和sourceSRS。
说明 updateBoxScale用于控制更新在精度和效率之间的取舍:
|
示例
-- 删除重明表
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}';