FeatureView 概览

FeatureViewFeatureCollection 的仅限视图的加速表示法。与 FeatureCollection 不同,FeatureView 的光栅地图图块是预先计算的,以便快速呈现。除了渲染速度更快之外,FeatureView 资源还会实现与缩放级别相关的地图项精简。这样一来,在缩小地图时,密集的数据集可能会看起来不完整(系统不会绘制小地图项),但在您放大地图时,系统会显示更多数据,这有助于在较低的缩放级别下改善地图美感。数据集的细化行为由在将 FeatureCollection 导出为 FeatureView 素材资源期间设置的多个优化参数控制。

作为仅限查看的资产,FeatureView 对象无法包含在计算或表达式中,但可以作为 FeatureViewLayer 在 JavaScript 代码编辑器和 Earth Engine 应用中进行可视化和检查。它们还可集成到 Google Maps API 应用中。

创建 FeatureView

创建 FeatureView 涉及准备包含数据的 FeatureCollection、调用 Export.table.toFeatureView 函数并启动导出任务。以下示例演示了如何导出 WDPA 多边形数据集的视图。在您自己的应用中,使用 Earth Engine Data Catalog 中归档的任何 FeatureCollection 数据集,或通过将矢量数据集上传作为 Earth Engine 资产来创建自己的数据集。

您可以使用 Export.table.toFeatureView 函数中的多个参数来自定义 FeatureView

  • maxFeaturesPerTile - 定义在给定缩放级别下地图图块中显示的地图项的数量上限。使用此参数可针对速度或地图项密度进行优化。
  • thinningStrategy - 控制是应针对给定图块和缩放级别优化以提高密度,还是优化以使各个图块的密度保持一致。请注意,针对更高的密度进行优化可能会导致图块边界变得不同,因为每个图块的地图项密度是独立的。
  • thinningRanking - 定义功能精简优先级。例如,您可以优化细化,以保留具有较高值的特定地图项属性。换句话说,当您缩小地图时,系统会先细化具有较低值的所选属性的地图项,从而保留最重要的地图项(根据您的规则)。
  • zOrderRanking - 用于指定地图上显示的地图项的 z 顺序(堆叠顺序)。此参数允许您根据地图项属性、几何图形类型和缩放级别设置优先级规则,从而控制重叠地图项的显示方式。例如,您可以优先处理具有特定属性高值的地图项,以便它们叠加在具有低值的交叉地图项之上。

如需详细了解这些参数及其接受的参数,请参阅 FeatureView 优化页面

在以下示例中,为这些参数指定的参数会生成一个 FeatureView,其中给定缩放级别下每个图块的最大地图项数为 1500,每个图块的地图项密度各不相同,且允许达到 1500 的最大值,系统会先精简较小的多边形,较小的多边形会位于较大的多边形之上。

Code Editor (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'],
});

在代码编辑器中执行上述代码段会生成导出任务;运行该任务即可发起导出。

FeatureView 素材资源位置

您可以在公共 Data Catalog 中找到 FeatureView 素材资源,也可以在 Code Editor 的 Assets(资源)标签页中找到您的个人素材资源。Data Catalog 中的所有相关 FeatureCollection 资产都有配套的 FeatureView 资产,其中包含普遍适用的提取设置。您的个人资产归档文件将包含您创建的所有 FeatureView 资产

将 FeatureView 素材资源导入脚本

您可以使用 Code Editor 资源对话框和个人资源条目的按钮,以及通过将 FeatureView 资源 ID 作为输入提供给 ui.Map.FeatureViewLayer 构造函数,将 FeatureView 资源导入到 Code Editor 脚本中。

Data Catalog 资源对话框

通过代码编辑器的搜索栏访问的数据目录表资产对话框在右下角有一个带下拉菜单的导入按钮。从下拉菜单中选择“Import FeatureView”(导入 FeatureView)。该资源将包含在脚本顶部的导入部分中。

“个人资产”对话框

个人 FeatureView 资产对话框位于代码编辑器的 Assets(资源)标签页中,可通过选择相应资源访问,右上角有一个 Import(导入)按钮。激活该按钮后,该资源将显示在脚本顶部的导入部分中。您还可以使用在素材资源标签页中将鼠标悬停在某个素材资源上时显示的导入快捷方式按钮(向右指向的箭头图标)。

资产 ID

FeatureView 素材资源具有 ID,可作为输入提供给 ui.Map.FeatureViewLayer 构造函数,以便您在脚本中访问该素材资源。您可以在数据目录资产页面和 Code Editor 中的资产对话框中找到预构建的导入代码段。

图 1. 突出显示 FeatureView 导入方法的 Data Catalog 资源对话框。

FeatureView 元数据

FeatureView 信息和元数据可在上文的 FeatureView 素材资源位置部分中提及的素材资源对话框中找到。除了可能与来源 FeatureCollection 共享的说明和属性之外,FeatureView 还有 5 个独特的属性。这些参数包括创建 FeatureView 部分中所述的提取参数设置,以及 sourceVersion,即用于创建 FeatureView 的表资产的“上次修改时间”时间戳。上图 1 显示了 Data Catalog 资源对话框中的 FeatureView 专用属性。与其他素材资源一样,您还可以通过编程方式从 ee.data.getAsset 返回的字典中提取媒体资源。

直观呈现 FeatureView

FeatureView 对象可以在 Code Editor、Earth Engine 应用和 Google 地图中直观呈现。

代码编辑器

代码编辑器包含 ui.Map.FeatureViewLayer 组件,用于在地图上直观呈现 FeatureView 资产。以下示例定义了 FeatureView 资产 ID,将该资产作为 FeatureViewLayer 导入,并将其显示在地图上。

Code Editor (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);

样式

您可以通过将样式字典传递给 ui.Map.FeatureViewLayer 函数或使用 setVisParams 方法将其添加到图层来设置 FeatureViewLayer 的样式。以下示例会设置以下样式:

  • 根据“MARINE”属性(受保护区域是否完全或部分位于海洋环境内)确定的轮廓颜色
  • 根据“IUCN_CAT”属性(国际自然保护联盟 [IUCN] 类别)确定的填充颜色,以及
  • 填充不透明度,基于“REP_AREA”属性定义的受保护区域的大小。

如需详细了解可用的样式选项,请访问 FeatureView 样式设置页面

Code Editor (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,
});

过滤

您可以应用过滤规则,根据地图项的属性选择性地设置其样式或将其隐藏。例如,如需滤除小于滑块 widget 给定特定区域的保护区域,您可以使用以下代码。如需详细了解 rules 字段,请参阅 FeatureView 样式设置页面的具体规则部分。

Code Editor (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);

图 2. FeatureViewLayer 可视化图表,其中包含滑块 widget,用于隐藏小于指定区域的地图项。

Google 地图 API

使用 Google Maps API 可视化 FeatureView 素材资源的过程分为四个部分:使用 ee.data.getFeatureViewTilesKey 获取图块键,将其传递给 FeatureViewTileSource 实例,构建 ee.layer.ImageOverlay,然后将叠加层添加到 google.maps.Map 实例。以下是用于在 JavaScript 中构造 ImageOverlay 的示例代码。

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

完成后,您可以将叠加层添加到 google.maps.Map 实例,如下所示。

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

检查 FeatureView

您可以使用检查器工具检查添加到默认代码编辑器地图的 FeatureViewLayer 图层。其功能与 FeatureCollection 相同。请注意,为点击的地点返回的结果仅列出当前缩放级别可见的地图项。系统不会显示已检查地图项的几何图形,因为这些地图项在 FeatureView 导出流程中已被简化。

图 3. 检查 FeatureViewLayer。检查器会显示图层、地图项、资产 ID 和可视化参数。