Visão geral do FeatureView

Um FeatureView é uma representação acelerada de visualização somente de um FeatureCollection. Ao contrário de um FeatureCollection, cujos blocos de mapa raster são gerados em tempo real, os blocos de mapa raster FeatureView são pré-calculados para renderização rápida. Além de renderizar mais rápido, os recursos FeatureView implementam o recurso de redução de detalhes de acordo com o nível de zoom. O efeito é que os conjuntos de dados densos podem parecer incompletos quando o zoom está desativado (os elementos pequenos não são desenhados), mas mais dados ficam visíveis quando você aumenta o zoom, o que pode melhorar a estética do mapa em níveis de zoom mais baixos. O comportamento de redução de um conjunto de dados é controlado por vários parâmetros de otimização definidos durante a exportação de um FeatureCollection para um recurso FeatureView.

Como um recurso somente de leitura, os objetos FeatureView não podem ser incluídos em computações ou expressões, mas podem ser visualizados e inspecionados no Editor de código JavaScript e nos apps do Earth Engine como um FeatureViewLayer. Eles também podem ser integrados aos aplicativos da API Google Maps.

Como criar uma FeatureView

A criação de um FeatureView envolve preparar um FeatureCollection com seus dados, chamar a função Export.table.toFeatureView e iniciar a tarefa de exportação. O exemplo a seguir demonstra como exportar visualizações do conjunto de dados de polígonos da WDPA. No seu próprio aplicativo, use qualquer conjunto de dados FeatureCollection arquivado no catálogo de dados do Earth Engine ou crie o seu próprio conjunto de dados fazendo upload de um conjunto de dados vetorial como um recurso do Earth Engine.

Um FeatureView pode ser personalizado usando vários parâmetros na função Export.table.toFeatureView.

  • maxFeaturesPerTile: define o número máximo de elementos exibidos em um bloco de mapa em um determinado nível de zoom. Use esse parâmetro para otimizar a velocidade ou a densidade de recursos.
  • thinningStrategy: controla se o recurso de redução de detalhes de um determinado bloco e o nível de zoom precisam ser otimizados para maior densidade ou consistência na densidade entre os blocos. A otimização para densidades mais altas pode fazer com que os limites do bloco fiquem distintos, já que a densidade de elementos por bloco é independente.
  • thinningRanking: define a prioridade de redução de recursos. Por exemplo, você pode otimizar o alisamento para segmentar a retenção de uma propriedade de recurso específica com valores altos. Em outras palavras, à medida que você diminui o zoom, os recursos que têm um valor baixo para a propriedade selecionada são reduzidos primeiro, deixando os mais importantes (de acordo com suas regras) visíveis.
  • zOrderRanking: define a ordem z (ordem de pilha) dos elementos exibidos no mapa. Esse parâmetro controla como os elementos sobrepostos são exibidos, permitindo que você defina regras de prioridade com base nas propriedades do elemento, no tipo de geometria e no nível de zoom. Por exemplo, é possível priorizar recursos com valores altos de uma propriedade específica para que eles se sobreponham a recursos que se cruzam com valores baixos.

Consulte a página de otimização de FeatureView para mais detalhes sobre esses parâmetros e os argumentos aceitos.

No exemplo abaixo, os argumentos especificados para esses parâmetros produzem um FeatureView em que os elementos máximos por bloco em um determinado nível de zoom são 1.500, a densidade de elementos por bloco é independente e pode alcançar o máximo de 1.500, os polígonos menores são reduzidos primeiro e os menores ficam sobre os maiores.

Editor de código (JavaScript)

// Import the WDPA feature collection.
var wdpa = ee.FeatureCollection('WCMC/WDPA/current/polygons');

// Export the WDPA FeatureCollection as a FeatureView asset.
Export.table.toFeatureView({
  collection: wdpa,
  assetId: 'wdpa-featureview-demo',
  description: 'wdpa-featureview-demo',
  maxFeaturesPerTile: 1500,
  thinningStrategy: 'HIGHER_DENSITY',
  thinningRanking: ['REP_AREA DESC'],
  zOrderRanking: ['REP_AREA DESC'],
});

A execução do snippet de código acima no editor de código gera uma tarefa de exportação. Execute a tarefa para iniciar a exportação.

Localização de recursos do FeatureView

Os recursos FeatureView podem ser encontrados no Data Catalog público e entre seus recursos pessoais na guia Resources do Editor de código. Todos os recursos FeatureCollection relevantes no Data Catalog têm um recurso FeatureView complementar com configurações de transferência geralmente aplicáveis. O arquivo de recursos pessoais inclui todos os FeatureView que você cria.

Importar recursos do FeatureView para scripts

Os recursos FeatureView podem ser importados para scripts do Code Editor usando botões nas caixas de diálogo de recursos do Code Editor e entradas de recursos pessoais, além de fornecer um ID de recurso FeatureView como entrada para o construtor ui.Map.FeatureViewLayer.

Caixa de diálogo de recursos do Data Catalog

As caixas de diálogo de recursos de tabela do Data Catalog, acessadas na barra de pesquisa do editor de código, têm um botão Importar no canto inferior direito com um menu suspenso. No menu suspenso, selecione "Import FeatureView". O recurso será incluído na seção Importações na parte de cima do script.

Caixa de diálogo de recursos pessoais

As caixas de diálogo de recursos FeatureView pessoais, acessadas selecionando um recurso na guia Recursos do Editor de código, têm um botão Importar no canto superior direito. A ativação do botão inclui o recurso na seção Imports na parte de cima do script. Também é possível usar o botão de atalho de importação (ícone de seta para a direita) que aparece quando você passa o cursor sobre um recurso na guia Recursos.

Código do recurso

Os recursos FeatureView têm um ID que pode ser fornecido como entrada para o construtor ui.Map.FeatureViewLayer, o que dá acesso ao recurso no script. Os snippets de importação pré-construídos podem ser encontrados nas páginas de recursos do Data Catalog e nas caixas de diálogo de recursos no editor de código.

Figura 1. Caixa de diálogo de recursos do Data Catalog destacando os métodos de importação FeatureView.

Metadados do FeatureView

As informações e os metadados de FeatureView estão disponíveis nas caixas de diálogo de recursos mencionadas na seção Locais de recursos do FeatureView acima. Além da descrição e das propriedades que podem ser compartilhadas com a origem FeatureCollection, há cinco propriedades exclusivas para FeatureView. Elas incluem as configurações de parâmetro de transferência descritas na seção Como criar uma visualização de recurso e sourceVersion, que é o carimbo de data/hora "última modificação" do recurso de tabela em que a FeatureView foi criada. A Figura 1 acima mostra propriedades específicas de FeatureView em uma caixa de diálogo de recurso do Data Catalog. Assim como outros recursos, você também pode buscar propriedades de forma programática no dicionário retornado por ee.data.getAsset.

Como visualizar um FeatureView

Um objeto FeatureView pode ser visualizado no Code Editor, nos apps do Earth Engine e no Google Maps.

Editor de código

O editor de código inclui o componente ui.Map.FeatureViewLayer para visualizar recursos FeatureView em um mapa. O exemplo a seguir define um ID de recurso FeatureView, importa o recurso como FeatureViewLayer e o exibe no mapa.

Editor de código (JavaScript)

// Define the FeatureView asset ID.
var assetId = 'WCMC/WDPA/current/polygons_FeatureView';

// Import the FeatureView asset as a FeatureViewLayer.
var layer = ui.Map.FeatureViewLayer(assetId);

// Add the FeatureViewLayer to the map.
Map.add(layer);

Estilo

É possível estilizar o FeatureViewLayer transmitindo um dicionário de estilo para a função ui.Map.FeatureViewLayer ou adicionando-o a uma camada usando o método setVisParams. Confira abaixo um exemplo que define estilos:

  • cores de contorno com base na propriedade "MARINE" (se a área protegida está totalmente ou parcialmente no ambiente marinho),
  • cor de preenchimento com base na propriedade "IUCN_CAT" (categoria da União Internacional pela Conservação da Natureza (IUCN, na sigla em inglês)) e
  • preencher a opacidade com base no tamanho da área protegida definida pela propriedade "REP_AREA".

Acesse a página Estilo do FeatureView para mais detalhes sobre as opções de estilo disponíveis.

Editor de código (JavaScript)

// Set visualization properties for the defined layer.
layer.setVisParams({
  color: {
    property: 'MARINE',
    categories: [
      ['0', 'purple'],
      ['1', 'green'],
      ['2', 'blue'],
    ]
  },
  fillColor: {
    property: 'IUCN_CAT',
    defaultValue: 'd3d3d3',
    categories: [
      ['Ia', 'a6cee3'],
      ['Ib', '1f78b4'],
      ['II', 'b2df8a'],
      ['III', '33a02c'],
      ['IV', 'fb9a99'],
      ['V', 'e31a1c'],
      ['VI', 'fdbf6f'],
    ]
  },
  fillOpacity: {
    property: 'REP_AREA',
    mode: 'interval',
    palette: [
      [0, 0.5],
      [80, 0.35],
      [2000, 0.22],
      [5000, 0.15],
    ],
  },
  width: 1.0,
  pointSize: 6.0,
});

Filtragem

As regras de filtro podem ser aplicadas para estilizar ou ocultar recursos seletivamente com base nas propriedades deles. Por exemplo, para filtrar áreas protegidas menores que uma determinada área fornecida por um widget de controle deslizante, use o seguinte código. Consulte a seção Regras específicas da página Estilo FeatureView para saber mais sobre o campo rules.

Editor de código (JavaScript)

// Define the FeatureView asset ID.
var assetId = 'WCMC/WDPA/current/polygons_FeatureView';

// Import the FeatureView asset as a FeatureViewLayer.
var layer = ui.Map.FeatureViewLayer(assetId, null, 'WDPA FeatureViewLayer');

// Callback function to update FeatureViewLayer style.
var updateVisParams = function() {
  layer.setVisParams({
    color: {
      property: 'MARINE',
      categories: [
        ['0', 'purple'],
        ['1', 'green'],
        ['2', 'blue'],
      ]
    },
    fillColor: {
      property: 'IUCN_CAT',
      defaultValue: 'd3d3d3',
      categories: [
        ['Ia', 'a6cee3'],
        ['Ib', '1f78b4'],
        ['II', 'b2df8a'],
        ['III', '33a02c'],
        ['IV', 'fb9a99'],
        ['V', 'e31a1c'],
        ['VI', 'fdbf6f'],
      ]
    },
    fillOpacity: {
      property: 'REP_AREA',
      mode: 'interval',
      palette: [
        [0, 0.5],
        [80, 0.35],
        [2000, 0.22],
        [5000, 0.15],
      ],
    },
    width: 1.0,
    pointSize: 6.0,
    rules: [
      {
        filter: ee.Filter.lt('REP_AREA', filterSlider.getValue()),
        isVisible: false,
      },
    ],
  });
};

// Slider widget that calls the updateVisParams function on change.
var filterSlider = ui.Slider({
  min: 0,
  max: 10000,
  step: 10,
  value: 0,
  style: { stretch: 'horizontal'},
  onChange: updateVisParams,
});
var filterSliderLabel = ui.Label(
  'Adjust slider to hide features less than the specified area (km²)');

// Add the slider to the map.
Map.add(ui.Panel([filterSliderLabel, filterSlider]));

// Initialize the FeatureViewLayer style.
updateVisParams();

// Add the FeatureViewLayer to the map.
Map.add(layer);

Figura 2. Visualização FeatureViewLayer com um widget de controle deslizante para ocultar recursos menores que a área especificada.

API Google Maps

O processo de visualização de um recurso FeatureView usando a API Google Maps é composto por quatro partes: consiga uma chave de blocos usando ee.data.getFeatureViewTilesKey, transmita-a a uma instância de FeatureViewTileSource, construa um ee.layer.ImageOverlay e adicione a sobreposição à instância google.maps.Map. O exemplo de código para construir o ImageOverlay em JavaScript é mostrado abaixo.

var tilesKey = ee.data.getFeatureViewTilesKey({
  assetId: 'WCMC/WDPA/current/polygons_FeatureView',
  visParams: {  },
});

var tileSource = new ee.layers.FeatureViewTileSource(tilesKey);
var overlay = new ee.layers.ImageOverlay(tileSource);

Depois disso, adicione a sobreposição à instância google.maps.Map, conforme mostrado abaixo.

// embeddedMap is your google.maps.Map instance.
embeddedMap.overlayMapTypes.setAt(0, overlay);

Como inspecionar um FeatureView

Uma camada FeatureViewLayer adicionada ao mapa padrão do Code Editor pode ser inspecionada usando a ferramenta Inspector. A funcionalidade é a mesma de um FeatureCollection. Os resultados retornados para o local clicado listam apenas os elementos que estão visíveis no nível de zoom atual. As geometrias não são mostradas para os elementos inspecionados, porque são simplificadas como parte do processo de exportação FeatureView.

Figura 3. Inspeção de um FeatureViewLayer. O inspetor mostra a camada, os elementos, o ID do recurso e os parâmetros de visualização.