FeatureCollection の削減

FeatureCollection のプロパティでデータを集計するには、featureCollection.reduceColumns() を使用します。たとえば、流域 FeatureCollection の面積プロパティを確認するには、このコードで Earth Engine で計算された面積に対する二乗平均平方根誤差(RMSE)を計算します。

コードエディタ(JavaScript)

// Load watersheds from a data table and filter to the continental US.
var sheds = ee.FeatureCollection('USGS/WBD/2017/HUC06')
  .filterBounds(ee.Geometry.Rectangle(-127.18, 19.39, -62.75, 51.29));

// This function computes the squared difference between an area property
// and area computed directly from the feature's geometry.
var areaDiff = function(feature) {
  // Compute area in sq. km directly from the geometry.
  var area = feature.geometry().area().divide(1000 * 1000);
  // Compute the difference between computed area and the area property.
  var diff = area.subtract(ee.Number.parse(feature.get('areasqkm')));
  // Return the feature with the squared difference set to the 'diff' property.
  return feature.set('diff', diff.pow(2));
};

// Calculate RMSE for population of difference pairs.
var rmse = ee.Number(
  // Map the difference function over the collection.
  sheds.map(areaDiff)
  // Reduce to get the mean squared difference.
  .reduceColumns(ee.Reducer.mean(), ['diff'])
  .get('mean')
)
// Compute the square root of the mean square to get RMSE.
.sqrt();

// Print the result.
print('RMSE=', rmse);

Python の設定

Python API とインタラクティブな開発で geemap を使用する方法については、 Python 環境のページをご覧ください。

import ee
import geemap.core as geemap

Colab(Python)

# Load watersheds from a data table and filter to the continental US.
sheds = ee.FeatureCollection('USGS/WBD/2017/HUC06').filterBounds(
    ee.Geometry.Rectangle(-127.18, 19.39, -62.75, 51.29)
)

# This function computes the squared difference between an area property
# and area computed directly from the feature's geometry.
def area_diff(feature):
  # Compute area in sq. km directly from the geometry.
  area = feature.geometry().area().divide(1000 * 1000)
  # Compute the difference between computed area and the area property.
  diff = area.subtract(ee.Number.parse(feature.get('areasqkm')))
  # Return the feature with the squared difference set to the 'diff' property.
  return feature.set('diff', diff.pow(2))

# Calculate RMSE for population of difference pairs.
rmse = (
    ee.Number(
        # Map the difference function over the collection.
        sheds.map(area_diff)
        # Reduce to get the mean squared difference.
        .reduceColumns(ee.Reducer.mean(), ['diff']).get('mean')
    )
    # Compute the square root of the mean square to get RMSE.
    .sqrt()
)

# Print the result.
display('RMSE=', rmse)

この例では、reduceColumns() の戻り値はキー ‘mean’ のディクショナリです。平均を取得するには、dictionary.get() の結果を ee.Number() で数値にキャストしてから、sqrt() を呼び出します。Earth Engine の補助データ構造の詳細については、こちらのチュートリアルをご覧ください。

画像に対象物を重ねるには、featureCollection.reduceRegions() を使用します。たとえば、米国本土の流域の降水量を計算するには、reduceRegions() の後に map() を使用します。

コードエディタ(JavaScript)

// Load an image of daily precipitation in mm/day.
var precip = ee.Image(ee.ImageCollection('NASA/ORNL/DAYMET_V3').first());

// Load watersheds from a data table and filter to the continental US.
var sheds = ee.FeatureCollection('USGS/WBD/2017/HUC06')
  .filterBounds(ee.Geometry.Rectangle(-127.18, 19.39, -62.75, 51.29));

// Add the mean of each image as new properties of each feature.
var withPrecip = precip.reduceRegions(sheds, ee.Reducer.mean())
  .filter(ee.Filter.notNull(['prcp']));

// This function computes total rainfall in cubic meters.
var prcpVolume = function(feature) {
  // Precipitation in mm/day -> meters -> sq. meters.
  var volume = ee.Number(feature.get('prcp'))
    .divide(1000).multiply(feature.geometry().area());
  return feature.set('volume', volume);
};

var highVolume = withPrecip
  // Map the function over the collection.
  .map(prcpVolume)
  // Sort descending.
  .sort('volume', false)
  // Get only the 5 highest volume watersheds.
  .limit(5)
  // Extract the names to a list.
  .reduceColumns(ee.Reducer.toList(), ['name']).get('list');

// Print the resulting FeatureCollection.
print(highVolume);

Python の設定

Python API とインタラクティブな開発で geemap を使用する方法については、 Python 環境のページをご覧ください。

import ee
import geemap.core as geemap

Colab(Python)

# Load an image of daily precipitation in mm/day.
precip = ee.Image(ee.ImageCollection('NASA/ORNL/DAYMET_V3').first())

# Load watersheds from a data table and filter to the continental US.
sheds = ee.FeatureCollection('USGS/WBD/2017/HUC06').filterBounds(
    ee.Geometry.Rectangle(-127.18, 19.39, -62.75, 51.29)
)

# Add the mean of each image as new properties of each feature.
with_precip = precip.reduceRegions(sheds, ee.Reducer.mean()).filter(
    ee.Filter.notNull(['prcp'])
)


# This function computes total rainfall in cubic meters.
def prcp_volume(feature):
  # Precipitation in mm/day -> meters -> sq. meters.
  volume = (
      ee.Number(feature.get('prcp'))
      .divide(1000)
      .multiply(feature.geometry().area())
  )
  return feature.set('volume', volume)

high_volume = (
    # Map the function over the collection.
    with_precip.map(prcp_volume)
    # Sort descending and get only the 5 highest volume watersheds.
    .sort('volume', False).limit(5)
    # Extract the names to a list.
    .reduceColumns(ee.Reducer.toList(), ['name']).get('list')
)

# Print the resulting FeatureCollection.
display(high_volume)

特徴コレクションの削減の詳細については、FeatureCollection 列の統計情報ベクターからラスターへの変換をご覧ください。