矢量金字塔是为了能够快速显示大规模空间几何数据(千万级以上)而设计的一种结构。
概述
矢量金字塔对空间几何数据创建稀疏索引,按规则对密集区域预处理,可以输出标准的mvt-pbf格式数据。
通过Ganos提供的矢量金字塔,亿条空间几何记录可以实现分钟级预处理、秒级终端显示。
快速入门
- 创建扩展
CREATE EXTENSION ganos_geometry_pyramid CASCADE;
- 创建空间表的金字塔
--为数据表test创建金字塔,指定表test的要素ID字段名, 必须为int4或int8类型。 --指定表test的空间字段名称, 需要先为该字段创建空间索引,坐标系支持EPSG:4326/4490。 SELECT ST_BuildPyramid('test', 'geom', 'id', '');
- 读取金字塔中MVT数据
--从金字塔中读取瓦片编号为'0_0_0'的数据(任意编号,不管金字塔中是否存在,都可返回数据)。 --瓦片编号方式为: z_x_y,投影坐标系为EPSG:3857。 SELECT ST_Tile('test', '0_0_0');
- 删除金字塔
--删除名为test的金字塔。 SELECT ST_DeletePyramid('test');
- 删除扩展
DROP EXTENSION ganos_geometry_pyramid CASCADE;
参数设置
- 为金字塔命名
金字塔默认和数据表同名,您也可以指定金字塔名称,实现一份数据对应多个金字塔。
--为test表创建一个名为hello的金字塔。 SELECT ST_BuildPyramid('test', 'geom', 'id', '{"name": "hello"}');
- 并行构建
指定构建矢量金字塔的并行任务数,默认为0(表示并行最大化)。并行任务数最大不应该超过CPU数量的4倍。
--使用4个CPU来并行构建矢量金字塔。 SELECT ST_BuildPyramid('test', 'geom', 'id','{"parallel": 4}');
- 瓦片参数
您可以指定瓦片的尺寸、外扩大小。
- 尺寸取值为0~4096,且必须是256的整数倍。
- 外扩大小取值为0~256。
--指定瓦片的大小为512,外扩大小为8。 SELECT ST_BuildPyramid('test', 'geom', 'id','{ "tileSize": 512, "tileExtend": 8 }');
- 金字塔最大层级
您可以指定金字塔的最大层级(默认为16),当地图的zoom层级大于某级时,就不再使用这个图层或者不需要生成金字塔。如不设置,矢量金字塔会根据数据的密度自动计算出合理的最大层级。
--指定金字塔的最大层级为12级,超过12级则会实时读取数据生成mvt。 SELECT ST_BuildPyramid('test', 'geom', 'id', '{"maxLevel": 12}');
- 分层处理
您可以为金字塔的每个层级设置不同的处理条件,例如显示字段、过滤条件等。
通过添加
buildRules
规则,为每个层级设置生成条件。--分层处理生成金字塔 --第0层到第5层,不显示任何数据,设置过滤条件为"1!=1"生成空的mvt。 --第6层到第9层,显示code=1的数据,并且包含name字段。 --第10层到第15层,无过滤条件,包含name、width两个字段。 SELECT ST_BuildPyramid('test', 'geom', 'id', '{ "buildRules":[ { "level":[0,1,2,3,4,5], "value": { "filter": "1 != 1" } }, { "level":[6,7,8,9], "value": { "filter": "code = 1", "attrFields": ["name"] } }, { "level":[10,11,12,13,14,15], "value": { "attrFields": ["name", "width"] } } ] }');
高级功能
- 按规则融合数据
您可以按属性规则对瓦片范围内的数据进行融合,减少数据量。
--将code=1、code=2的数据,分别进行融合处理。 SELECT ST_BuildPyramid('test', 'geom', 'id', '{ "buildRules":[ { "level":[0,1,2,3,4,5], "value": { "merge": ["code=1","code=2"] } } ] }');
- 按规则剔除数据
您可以按属性规则对瓦片范围内的数据进行要素剔除,每个像素上只保留一个几何要素。
--将code=1、code=2的数据,分别进行剔除处理。 SELECT ST_BuildPyramid('test', 'geom', 'id', '{ "buildRules":[ { "level":[0,1,2,3,4,5], "value": { "cull": ["code=1","code=2"] } } ] }');
在文档使用中是否遇到以下问题
更多建议
匿名提交