Gera um tile vetorial binário do Mapbox (MVT) a partir de dados de linha, com filtragem integrada de elementos para reduzir o tamanho do tile e melhorar a eficiência da visualização.
A função ST_AsMVTEx funciona de modo semelhante à ST_AsMVT, mas filtra elementos vetoriais com pouco impacto na exibição com base nas relações entre eles. Dois parâmetros adicionais controlam esse comportamento: scale_factor define a intensidade da filtragem e mvt_size_limit limita o número total de elementos no tile de saída.
Sintaxe
bytea ST_AsMVTEx(anyelement row);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit, text name);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit, text name, int4 extent);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit, text name, int4 extent, text geom_name);
bytea ST_AsMVTEx(anyelement row, int4 scale_factor, int4 mvt_size_limit, text name, int4 extent, text geom_name, text feature_id_name);
Valor de retorno
Retorna um valor bytea — um MVT binário que representa uma camada de tile. O conjunto de linhas de entrada determina o conteúdo do tile.
Parâmetros
|
Parâmetro |
Tipo |
Descrição |
Padrão |
|
|
anyelement |
Dados de linha com pelo menos uma coluna de geometria. |
— |
|
|
int4 |
Intensidade da filtragem. Valores maiores filtram mais elementos e geram um MVT menor. Valores válidos: de |
|
|
|
int4 |
Número máximo de elementos vetoriais no MVT de saída. Se a contagem de elementos exceder esse limite após a filtragem, o sistema descarta o excesso aleatoriamente. |
|
|
|
text |
Nome da camada. |
|
|
|
int4 |
Extensão do tile no espaço da tela, conforme a especificação MVT. |
|
|
|
text |
Nome da coluna de geometria nos dados de linha. |
Primeira coluna de geometria |
|
|
text |
Nome da coluna Feature ID. O Feature ID não é definido para valores |
— |
Observações de uso
Um valor alto de
extentdegrada o desempenho do sistema.A função
ST_AsMVTExnão é adequada para conjuntos de dados compostos por grandes planos.
Exemplos
Os exemplos abaixo usam uma tabela com um polígono, uma linha e 9.998 pontos. Todos utilizam ST_AsMVTGeom para preparar as geometrias e ST_AsMVTEx para gerar o tile.
Defina a tabela de exemplo:
-- Create a vector data table and insert one plane, one line, and 9998 points.
CREATE TABLE example_table(id integer, geom Geometry);
INSERT INTO example_table(id, geom) VALUES
(1, ST_MakeEnvelope(150, 75, 170, 80, 4326));
INSERT INTO example_table(id, geom) VALUES
(2, ST_GeomFromText('LINESTRING(-160 -70, 160 -70)', 4326));
INSERT INTO example_table(id, geom)
SELECT i,
ST_SetSRID(ST_MakePoint((random() * 20) + 150, (random() * 10) + 70), 4326)
FROM generate_series(3, 10000) i;
Exemplo 1: Usar a filtragem padrão (scale_factor=1)
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)) FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 1)) FROM mvtgeom;
Saída:
length
-------
54237
(1 row)
Exemplo 2: Aumentar a filtragem para reduzir o tamanho do tile (scale_factor=4)
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)) FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 4)) FROM mvtgeom;
Saída:
length
-------
39211
(1 row)
Exemplo 3: Limitar a contagem de elementos a 100 (scale_factor=4, mvt_size_limit=100)
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)) FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 4, 100)) FROM mvtgeom;
Saída:
length
-------
1117
(1 row)
Exemplo 4: Definir resolução de tile personalizada e nome da camada
Define scale_factor como 4, mvt_size_limit como 100, resolução do tile como 10000 × 10000 e nome da camada como layer_name.
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326), 10000) FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 4, 100, 'layer_name', 10000)) FROM mvtgeom;
Saída:
length
-------
1220
(1 row)
Exemplo 5: Especifique colunas de geometria e Feature ID
Define scale_factor como 4, mvt_size_limit como 100, resolução do tile como 10000 × 10000, nome da camada como layer_name, coluna de geometria como geom_field e coluna Feature ID como id_field.
WITH mvtgeom AS
(
SELECT ST_AsMVTGeom(geom, ST_Transform(ST_TileEnvelope(1, 1, 0), 4326), 10000) AS geom_field, id AS id_field FROM example_table
WHERE geom && ST_Transform(ST_TileEnvelope(1, 1, 0), 4326)
)
SELECT length(ST_AsMVTEx(mvtgeom.*, 4, 100, 'layer_name', 10000, 'geom_field', 'id_field')) FROM mvtgeom;
Saída:
length
-------
1520
(1 row)