Descripción general de FeatureView

Un FeatureView es una representación acelerada de solo lectura de un FeatureCollection. A diferencia de un FeatureCollection, cuyas tarjetas de mapa de trama se generan sobre la marcha, las tarjetas de trama de FeatureView se calculan previamente para proporcionar una renderización rápida. Además de renderizarse más rápido, los recursos FeatureView implementan el adelgazamiento de componentes dependiente del nivel de zoom. El efecto es que los conjuntos de datos densos pueden parecer incompletos cuando se aleja el zoom (no se dibujan los componentes pequeños), pero se vuelve visible una mayor cantidad de datos a medida que se acerca el zoom, lo que puede mejorar la estética del mapa en niveles de zoom más bajos. El comportamiento de adelgazamiento de un conjunto de datos está controlado por varios parámetros de optimización que se establecen durante la exportación de un FeatureCollection a un activo FeatureView.

Como recurso de solo lectura, los objetos FeatureView no se pueden incluir en cálculos ni expresiones, pero se pueden visualizar e inspeccionar en el editor de código de JavaScript y en las apps de Earth Engine como FeatureViewLayer. También se pueden integrar en aplicaciones de la API de Google Maps.

Cómo crear una vista de atributos

Crear un FeatureView implica preparar un FeatureCollection con tus datos, llamar a la función Export.table.toFeatureView y comenzar la tarea de exportación. En el siguiente ejemplo, se muestra cómo exportar vistas del conjunto de datos de polígonos de la WDPA. En tu propia aplicación, usa cualquier conjunto de datos FeatureCollection archivado en el Data Catalog de Earth Engine o crea el tuyo propio. Para ello, sube un conjunto de datos vectoriales como un recurso de Earth Engine.

Se puede personalizar un FeatureView con varios parámetros en la función Export.table.toFeatureView.

  • maxFeaturesPerTile: Define la cantidad máxima de componentes que se muestran en una tarjeta de mapa en un nivel de zoom determinado. Usa este parámetro para optimizar la velocidad o la densidad de componentes.
  • thinningStrategy: Controla si se debe optimizar el adelgazamiento de componentes para una tarjeta y un nivel de zoom determinados para obtener una mayor densidad o coherencia en la densidad entre las tarjetas. Ten en cuenta que la optimización para una densidad más alta puede hacer que los límites de las tarjetas sean distintos, ya que la densidad de componentes por tarjeta es independiente.
  • thinningRanking: Define la prioridad de reducción de componentes. Por ejemplo, puedes optimizar el adelgazamiento para segmentar la retención de una propiedad de componente en particular con valores altos. En otras palabras, a medida que alejas la imagen, los componentes que tienen un valor bajo para la propiedad seleccionada se adelgazan primero, lo que deja visibles los componentes más importantes (según tus reglas).
  • zOrderRanking: Define el orden en z (orden de apilamiento) de los componentes que se muestran en el mapa. Este parámetro controla cómo se muestran los componentes superpuestos, ya que te permite establecer reglas de prioridad según las propiedades de los componentes, el tipo de geometría y el nivel de zoom. Por ejemplo, puedes priorizar los atributos con valores altos de una propiedad en particular para que se superpongan con los atributos que se cruzan con valores bajos.

Consulta la página de optimización de FeatureView para obtener más detalles sobre estos parámetros y sus argumentos aceptados.

En el siguiente ejemplo, los argumentos especificados para estos parámetros producen un FeatureView en el que la cantidad máxima de componentes por mosaico en un nivel de zoom determinado es de 1,500, la densidad de componentes por mosaico es independiente y puede alcanzar el máximo de 1,500, los polígonos más pequeños se diluyen primero y los más pequeños se encuentran sobre los más grandes.

// 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'],
});

Si ejecutas el fragmento de código anterior en el editor de código, se generará una tarea de exportación. Ejecuta la tarea para iniciar la exportación.

Ubicaciones de recursos de FeatureView

Los recursos FeatureView se pueden encontrar en el Data Catalog público y entre tus recursos personales en la pestaña Recursos del Editor de código. Todos los activos FeatureCollection relevantes en Data Catalog tienen un activo FeatureView complementario con parámetros de configuración de transferencia aplicables en general. Tu archivo de recursos personales incluirá todos los recursos FeatureView que crees.

Cómo importar recursos de FeatureView a secuencias de comandos

Los activos FeatureView se pueden importar a las secuencias de comandos del Editor de código con botones en los diálogos de activos y las entradas de activos personales del Editor de código, y proporcionando un ID de activo FeatureView como entrada al constructor ui.Map.FeatureViewLayer.

Diálogo de activos de Data Catalog

Los diálogos de recursos de tablas de Data Catalog, a los que se accede desde la barra de búsqueda del editor de código, tienen un botón Importar en la parte inferior derecha con un menú desplegable. En el menú desplegable, selecciona "Import FeatureView". El recurso se incluirá en la sección Imports en la parte superior de la secuencia de comandos.

Diálogo de recursos personales

Los diálogos de activos FeatureView personales, a los que se accede seleccionando un activo de la pestaña Recursos del Editor de código, tienen un botón Importar en la esquina superior derecha. Si activas el botón, se incluirá el recurso en la sección Imports en la parte superior de la secuencia de comandos. También puedes usar el botón de acceso directo para importar (ícono de flecha que apunta hacia la derecha) que aparece cuando colocas el cursor sobre un recurso en la pestaña Recursos.

ID del activo

Los activos FeatureView tienen un ID que se puede proporcionar como entrada al constructor ui.Map.FeatureViewLayer, lo que te brinda acceso al activo en tu secuencia de comandos. Los fragmentos de importación precompilados se pueden encontrar en las páginas de activos del catálogo de datos y en los diálogos de activos del editor de código.

Figura 1: Diálogo del activo de Data Catalog en el que se destacan los métodos de importación de FeatureView.

Metadatos de FeatureView

La información y los metadatos de FeatureView están disponibles en los diálogos de activos que se mencionaron en la sección Ubicaciones de activos de FeatureView que aparece más arriba. Además de la descripción y las propiedades que se pueden compartir con la fuente FeatureCollection, hay cinco propiedades únicas de FeatureView. Incluyen la configuración del parámetro de transferencia que se describe en la sección Cómo crear un FeatureView y sourceVersion, que es la marca de tiempo de "última modificación" del recurso de tabla a partir del cual se creó FeatureView. En la Figura 1 anterior, se muestran las propiedades específicas de FeatureView en un diálogo de activos de Data Catalog. Al igual que con otros activos, también puedes recuperar propiedades de manera programática desde el diccionario que muestra ee.data.getAsset.

Visualiza una FeatureView

Un objeto FeatureView se puede visualizar en el editor de código, las apps de Earth Engine y Google Maps.

Editor de código

El editor de código incluye el componente ui.Map.FeatureViewLayer para visualizar los recursos FeatureView en un mapa. En el siguiente ejemplo, se define un ID de activo FeatureView, se importa el activo como FeatureViewLayer y se muestra en el mapa.

// 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);

Diseño

Para aplicar diseño a FeatureViewLayer, pasa un diccionario de diseño a la función ui.Map.FeatureViewLayer o agrégalo a una capa con el método setVisParams. A continuación, se muestra un ejemplo que aplica diseño a lo siguiente:

  • colores de contorno según la propiedad "MARINE" (si el área protegida se encuentra total o parcialmente dentro del entorno marino)
  • color de relleno según la propiedad "IUCN_CAT" (categoría de la Unión Internacional para la Conservación de la Naturaleza [UICN])
  • Opacidad de relleno según el tamaño del área protegida definida por la propiedad "REP_AREA".

Visita la página de diseño de FeatureView para obtener más detalles sobre las opciones de diseño disponibles.

// 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,
});

Filtros

Las reglas de filtro se pueden aplicar para aplicar diseño de forma selectiva o ocultar componentes según sus propiedades. Por ejemplo, para filtrar las áreas protegidas más pequeñas que un área determinada que proporciona un widget de control deslizante, puedes usar el siguiente código. Consulta la sección Reglas específicas de la página FeatureView Styling para obtener más información sobre el campo rules.

// 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: Visualización de FeatureViewLayer con un widget de control deslizante para ocultar componentes más pequeños que el área especificada.

API de Google Maps

El proceso para visualizar un recurso FeatureView con la API de Google Maps es un proceso de cuatro partes: obtener una clave de mosaicos con ee.data.getFeatureViewTilesKey, pasarla a una instancia de FeatureViewTileSource, construir un ee.layer.ImageOverlay y, luego, agregar la superposición a tu instancia de google.maps.Map. A continuación, se muestra un código de muestra para construir ImageOverlay en JavaScript.

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);

Una vez que lo hagas, podrás agregar la superposición a tu instancia de google.maps.Map, como se muestra a continuación.

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

Cómo inspeccionar un FeatureView

Una capa FeatureViewLayer agregada al mapa predeterminado del editor de código se puede inspeccionar con la herramienta Inspector. La funcionalidad es la misma que la de un FeatureCollection. Ten en cuenta que los resultados que se muestran para la ubicación en la que se hizo clic solo incluyen los componentes que son visibles en el nivel de zoom actual. No se muestran las geometrías de los componentes inspeccionados, ya que se simplifican como parte del proceso de exportación de FeatureView.

Figura 3: Inspecciona un FeatureViewLayer. El inspector muestra la capa, las componentes, el ID del recurso y los parámetros de visualización.