Todos os produtos
Search
Central de documentação

ApsaraDB RDS:ST_AsMVTEx

Última atualização: Jul 05, 2026

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

row

anyelement

Dados de linha com pelo menos uma coluna de geometria.

scale_factor

int4

Intensidade da filtragem. Valores maiores filtram mais elementos e geram um MVT menor. Valores válidos: de 1 a extent - 1.

1

mvt_size_limit

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.

2147483647

name

text

Nome da camada.

default

extent

int4

Extensão do tile no espaço da tela, conforme a especificação MVT.

4096

geom_name

text

Nome da coluna de geometria nos dados de linha.

Primeira coluna de geometria

feature_id_name

text

Nome da coluna Feature ID. O Feature ID não é definido para valores NULL ou negativos. A primeira coluna correspondente ao nome e com tipo válido (smallint, integer ou bigint) é usada como Feature ID; as colunas correspondentes subsequentes são adicionadas como propriedades. Não há suporte a propriedades JSON.

Observações de uso

  • Um valor alto de extent degrada o desempenho do sistema.

  • A função ST_AsMVTEx nã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)