Otimização do FeatureView

Ao exportar um FeatureCollection como um recurso FeatureView, é possível definir parâmetros que priorizam quais elementos são renderizados em um determinado nível de zoom (redução) e como os elementos sobrepostos são ordenados (ordem z). Essas configurações afetam a velocidade e as características de exibição dos objetos FeatureView. As seções a seguir descrevem os parâmetros de otimização e demonstram o impacto deles usando diagramas conceituais em que os blocos do mapa são delineados por linhas tracejadas, os elementos visíveis são polígonos de linhas sólidas e os elementos descartados (reduzidos) são polígonos com linhas tracejadas e sem preenchimento.

O bloco de código a seguir é um exemplo de exportação de FeatureCollection para FeatureView que destaca os parâmetros de otimização descritos nesta página.

Export.table.toFeatureView({
  collection: fooFc,
  assetId: 'foo-featureview-demo',
  description: 'foo-featureview-demo',
  maxFeaturesPerTile: 1500,
  thinningStrategy: 'HIGHER_DENSITY',
  thinningRanking: ['my-property DESC'],
  zOrderRanking: ['my-property DESC']
});

Recursos máximos por bloco

O parâmetro de recursos máximo por bloco (maxFeaturesPerTile) define o número máximo de elementos a serem renderizados em um único bloco de mapa. Esse valor é um limite máximo e pode ser significativamente menor, dependendo da estratégia de redução. Esse valor pode ser definido como qualquer valor entre 1 e 2.000. Valores mais altos mostram mais recursos por bloco, mas os blocos levam mais tempo para carregar.

Observe na tabela a seguir que, à medida que o valor do parâmetro maxFeaturesPerTile diminui, o número de elementos que se cruzam em cada bloco do mapa também diminui. Um bloco pode ter menos do que o máximo, mas não mais.

Todos os recursos (para referência)

maxFeaturesPerTile: 5

Não mostra mais de cinco recursos por bloco.

maxFeaturesPerTile: 2

Não mostra mais de dois recursos por bloco.

Classificação de desbaste

O parâmetro de classificação de redução (thinningRanking) controla como os dados são priorizados para redução com base no tipo de geometria, no tamanho do elemento e nos valores da propriedade do elemento. Ele aceita um conjunto de regras que informam ao algoritmo de redução quais recursos devem ser reduzidos antes de outros quando maxFeaturesPerTile é alcançado. Cada regra inclui uma propriedade de recurso seguida pela direção de classificação (crescente/ASC ou decrescente/DESC). Pode haver uma ou mais regras. Além das propriedades de elementos tradicionais, há duas propriedades especiais que podem ser usadas para priorizar o alisamento: .geometryType e .minZoomLevel.

  • .geometryType: caracteriza elementos como pontos, linhas ou polígonos. Esses tipos de geometria são quantificados como pequeno, médio e grande, respectivamente, para fins de classificação.
  • .minZoomLevel: o nível de zoom mínimo do mapa em que um elemento pode ser renderizado em um bloco. Os níveis de zoom abaixo desse valor não vão mostrar o recurso. Os níveis de zoom maiores ou iguais a esse valor podem mostrar o recurso. Os níveis de zoom baixos representam uma região geográfica maior por bloco de mapa do que os níveis de zoom mais altos. Os elementos pontuais recebem um valor de 0, que é visível em todos os níveis de zoom. As geometrias de linha e polígono recebem valores com base nos limites (linhas) ou na área (polígonos): elementos grandes têm valores de .minZoomLevel menores do que elementos menores.

As regras de classificação de redução podem ser fornecidas como uma string ou uma lista de strings, em que um nome de propriedade e a direção de classificação desejada são separados por um espaço:

// String input format for setting thinning ranking based on 3 rules.
'my-property DESC, .geometryType ASC, .minZoomLevel ASC'

// List of strings input format for setting thinning ranking based on 3 rules.
['my-property DESC', '.geometryType ASC', '.minZoomLevel ASC']

As regras acima direcionam o algoritmo de redução para priorizar elementos com um atributo "my-property" maior (reduzir elementos com um valor "my-property" menor primeiro), priorizar elementos com um tipo de geometria menor (por exemplo, reduzir polígonos antes de linhas e linhas antes de pontos) e priorizar elementos com um nível mínimo de zoom menor (pontos sobre polígonos grandes sobre polígonos menores).

A tabela a seguir ilustra como a alteração da regra thinningRanking para uma propriedade size afeta os recursos que são renderizados. O número total de recursos por bloco (coluna "Todos os recursos") é maior que 5, portanto, o lixamento é aplicado para limitar os recursos que são renderizados (coluna thinningRanking: 5). Na primeira linha, os recursos são ordenados por size, do maior para o menor, o que significa que os recursos maiores têm prioridade sobre os menores (os recursos são desenhados em ordem decrescente por tamanho até que maxFeaturesPerTile seja alcançado). Na segunda linha, os elementos são ordenados por tamanho crescente, de modo que os elementos menores são desenhados primeiro, em ordem de tamanho, até que maxFeaturesPerTile seja alcançado.

thinningRanking Todos os recursos (para referência) maxFeaturesPerTile: 5

'size DESC'

Priorize os recursos com size maior (reduzindo os recursos com size menor primeiro).

'size ASC'

Priorize os recursos com size menor (reduz os recursos com size maior primeiro)

Estratégia de redução

O parâmetro de estratégia de redução (thinningStrategy) é usado com a classificação de redução (thinningRanking) para reduzir os dados no momento da exportação e melhorar a performance de renderização. Há duas estratégias compatíveis: HIGHER_DENSITY e GLOBALLY_CONSISTENT. Ao reduzir o número de elementos em um nível de zoom específico, uma estratégia de redução de densidade maior significa que cada bloco pode ficar o mais próximo possível do limite de maxFeaturesPerTile sem considerar a classificação dos elementos em outros blocos. A estratégia de redução consistente globalmente significa que, se um elemento for removido por redução de qualquer bloco, todos os elementos com classificação de redução igual ou inferior serão removidos de todos os blocos, independentemente de um bloco exigir redução (excede o limite de maxFeaturesPerTile). Use a estratégia HIGHER_DENSITY para otimizar a densidade de recursos e a estratégia GLOBALLY_CONSISTENT para otimizar a representação consistente de classificação de recursos entre os blocos.

A tabela a seguir demonstra como a alteração de thinningStrategy afeta o desbaste. Neste exemplo, os dados são reduzidos usando a forma/cor dos pontos. Os círculos azuis, quadrados verdes e triângulos vermelhos têm classificações de redução, da melhor para a pior. Para cada thinningStrategy (HIGHER_DENSITY e GLOBALLY_CONSISTENT), há três valores diferentes para maxFeaturesPerTile especificados: um número grande o suficiente para mostrar todos os recursos, 10 recursos e 9 recursos.

Com HIGHER_DENSITY e 10 maxFeaturesPerTile, seis triângulos vermelhos (menor prioridade no rank de redução) são eliminados do bloco no canto superior esquerdo, e um triângulo vermelho é eliminado do bloco no canto inferior esquerdo. Com HIGHER_DENSITY e 9 maxFeaturesPerTile, sete triângulos vermelhos são reduzidos no bloco de canto superior esquerdo, e um triângulo vermelho e um quadrado verde são reduzidos no bloco de canto inferior esquerdo. Nesses exemplos, cada bloco é reduzido de forma independente, sem considerar a classificação de redução de recursos em blocos vizinhos. Dependendo das características dos dados, essa estratégia de redução pode fazer com que os blocos de mapa adjacentes pareçam diferentes uns dos outros, mas maximiza o número de elementos desenhados.

Lembre-se de que o GLOBALLY_CONSISTENT significa que, se um recurso for removido por redução de detalhes de qualquer bloco, todos os outros recursos com thinningRank igual ou pior também serão removidos. Com maxFeaturesPerTile definido como 10, os triângulos vermelhos não aparecem em nenhum bloco porque um triângulo vermelho é reduzido nos blocos de canto superior esquerdo e inferior esquerdo. Com maxFeaturesPerTile definido como 9, os quadrados verdes não aparecem em nenhum bloco porque um quadrado verde é reduzido no bloco inferior esquerdo. Essa estratégia de redução tem menos probabilidade de produzir a aparência distinta que a estratégia HIGHER_DENSITY pode, mas tem o potencial de reduzir os blocos para um número de recursos muito abaixo do limite de maxFeaturesPerTile.

thinningStrategy Todos os recursos (para referência) maxFeaturesPerTile: 10 maxFeaturesPerTile: 9

'HIGHER_DENSITY'

Redução menos agressiva.

Mantém alta densidade de elementos com a redução de elementos dentro dos blocos.

'GLOBALLY_CONSISTENT'

Redução mais agressiva.

Mantém a classificação mínima de redução consistente em todo o mundo com a redução entre blocos.

Classificação em ordem Z

O parâmetro de classificação de ordem Z (zOrderRanking) controla a ordem dos elementos sobrepostos. Ele aceita um conjunto de regras que definem quais recursos devem aparecer abaixo/acima de outros quando eles se sobrepõem. A lógica e o formato da regra para definir a ordem de recursos é o mesmo que reduzir a classificação. Consulte essa seção para mais detalhes.

As regras de classificação de ordem Z podem ser fornecidas como uma string ou uma lista de strings, em que um nome de propriedade e a direção de classificação desejada são separados por um espaço:

// String input format for setting z-order ranking based on 3 rules.
'my-property DESC, .geometryType ASC, .minZoomLevel ASC'

// List of strings input format for setting z-order ranking based on 3 rules.
['my-property DESC', '.geometryType ASC', '.minZoomLevel ASC']

As regras acima especificam que os elementos com um valor maior de "my-property" precisam aparecer abaixo dos elementos com um valor menor. Os elementos com um tipo de geometria menor precisam aparecer abaixo dos elementos com um tipo de geometria maior (por exemplo, pontos abaixo de linhas e linhas abaixo de polígonos). Os elementos com um nível mínimo de zoom menor (elementos maiores) precisam aparecer abaixo dos elementos com um nível mínimo de zoom maior (elementos menores).

A tabela a seguir demonstra como a alteração da regra zOrderRanking para uma propriedade "size" afeta quais recursos aparecem na frente de outros quando se sobrepõem. Na primeira linha, os recursos são classificados por tamanho em ordem decrescente, o que significa que os recursos maiores precisam aparecer abaixo dos menores (os maiores são desenhados primeiro). Por outro lado, na segunda linha, os recursos são classificados por tamanho em ordem crescente, o que significa que recursos de tamanho menor precisam aparecer abaixo de recursos maiores (os menores são desenhados primeiro).

zOrderRanking: 'size DESC'

Os elementos com size menores aparecem acima dos elementos com size maiores.

zOrderRanking: 'size ASC'

Os elementos com size maiores aparecem acima dos elementos com size menores.