FeatureView の概要

FeatureView は、FeatureCollection の表示専用の高速表現です。ラスター地図タイルがオンザフライで生成される FeatureCollection とは異なり、FeatureView ラスタータイルは事前計算され、高速レンダリングが可能です。FeatureView アセットは、レンダリングが高速であるだけでなく、ズームレベルに依存する特徴の細分化を実装します。その結果、ズームアウトすると密集したデータセットが不完全に見え(小さな対象物は描画されない)、ズームインするとより多くのデータが表示されるため、ズームレベルが低い地図の美観が向上します。データセットのスキニング動作は、FeatureCollection から FeatureView アセットへのエクスポート時に設定される複数の最適化パラメータによって制御されます。

FeatureView オブジェクトは表示専用アセットであるため、計算や式に含めることはできませんが、JavaScript コード エディタと Earth Engine アプリで FeatureViewLayer として可視化および検査できます。Google Maps API アプリケーションに統合することもできます。

FeatureView の作成

FeatureView の作成には、データを含む FeatureCollection の準備、Export.table.toFeatureView 関数の呼び出し、エクスポート タスクの開始が含まれます。次の例は、WDPA ポリゴン データセットのビューをエクスポートする方法を示しています。独自のアプリケーションで、Earth Engine Data Catalog にアーカイブされている FeatureCollection データセットを使用するか、ベクター データセットをアップロードして Earth Engine アセットとして独自のデータセットを作成します。

FeatureView は、Export.table.toFeatureView 関数の複数のパラメータを使用してカスタマイズできます。

  • maxFeaturesPerTile - 特定のズームレベルで地図タイル内に表示される対象物の最大数を定義します。このパラメータは、速度または特徴密度を最適化するために使用します。
  • thinningStrategy - 特定のタイルとズームレベルの特徴の細分化を、密度を高めるように最適化するのか、タイル間の密度を一定に保つように最適化するのかを制御します。密度を高くするように最適化すると、タイルあたりの特徴密度が独立しているため、タイル境界が明確になる可能性があります。
  • thinningRanking - 特徴の細分化の優先度を定義します。たとえば、値の高い特定の特徴プロパティの保持をターゲットに絞って、間引きを最適化できます。つまり、ズームアウトすると、選択したプロパティの値が低い特徴が最初に間引かれ、(ルールに従って)最も重要な特徴が残ります。
  • zOrderRanking - 地図上に表示される対象物の Z 順序(重ね順序)を定義します。このパラメータは、対象物のプロパティ、ジオメトリ タイプ、ズームレベルに基づいて優先ルールを設定することで、重複する対象物の表示方法を制御します。たとえば、特定のプロパティの値が高い特徴に優先度を付けて、値が低い交差する特徴の上に重ねることができます。

これらのパラメータと指定できる引数の詳細については、FeatureView の最適化ページをご覧ください。

次の例では、これらのパラメータに指定された引数により、FeatureView が生成されます。この場合、特定のズームレベルでタイルあたりの最大フィーチャー数は 1,500 で、タイルあたりのフィーチャーの密度は独立しており、最大 1,500 に達することが許可されます。また、小さいポリゴンが先に間引かれ、小さいポリゴンが大きいポリゴンの上に重ねられます。

コードエディタ(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'],
});

Code Editor で上記のコード スニペットを実行すると、エクスポート タスクが生成されます。このタスクを実行してエクスポートを開始します。

FeatureView アセットのロケーション

FeatureView アセットは、公開の データカタログで確認できます。また、Code Editor の [アセット] タブの個人アセットでも確認できます。Data Catalog 内の関連するすべての FeatureCollection アセットには、一般に適用可能な取り込み設定を持つコンパニオン FeatureView アセットがあります。個人アセット アーカイブには、作成した FeatureView アセットが含まれます。

FeatureView アセットをスクリプトにインポートする

FeatureView アセットは、Code Editor アセット ダイアログのボタンと個人アセットのエントリを使用して、Code Editor スクリプトにインポートできます。また、ui.Map.FeatureViewLayer コンストラクタに FeatureView アセット ID を入力してインポートすることもできます。

Data Catalog アセット ダイアログ

コードエディタの検索バーからアクセスできる Data Catalog テーブル アセット ダイアログの右下には、プルダウン メニュー付きの [インポート] ボタンがあります。プルダウン メニューから [FeatureView をインポート] を選択します。アセットは、スクリプトの上部にある [Imports] セクションに追加されます。

個人アセットのダイアログ

個人の FeatureView アセット ダイアログは、Code Editor の [アセット] タブからアセットを選択してアクセスできます。右上には [インポート] ボタンがあります。ボタンを有効にすると、スクリプトの上部にある [インポート] セクションにアセットが追加されます。[アセット] タブでアセットにカーソルを合わせると表示されるインポート ショートカット ボタン(右矢印アイコン)を使用することもできます。

アセット ID

FeatureView アセットには ID があり、これを ui.Map.FeatureViewLayer コンストラクタに入力として指定することで、スクリプト内でアセットにアクセスできます。事前構築されたインポート スニペットは、Data Catalog のアセットページと、Code Editor のアセット ダイアログで確認できます。

図 1. FeatureView インポート方法がハイライト表示された Data Catalog アセット ダイアログ。

FeatureView メタデータ

FeatureView の情報とメタデータは、上記のFeatureView アセットのロケーション セクションで説明されているアセット ダイアログで確認できます。ソース FeatureCollection と共有される説明とプロパティに加えて、FeatureView に固有の 5 つのプロパティがあります。これには、FeatureView の作成セクションで説明されている取り込みパラメータの設定と、FeatureView が作成されたテーブル アセットの「最終更新日時」タイムスタンプである sourceVersion が含まれます。上の図 1 は、Data Catalog アセット ダイアログの FeatureView 固有のプロパティを示しています。他のアセットと同様に、ee.data.getAsset によって返された辞書からプロパティをプログラムで取得することもできます。

FeatureView の可視化

FeatureView オブジェクトは、Code Editor、Earth Engine アプリ、Google マップで可視化できます。

コードエディタ

Code Editor には、FeatureView アセットを地図上に可視化する ui.Map.FeatureViewLayer コンポーネントが含まれています。次の例では、FeatureView アセット ID を定義し、アセットを FeatureViewLayer としてインポートして、地図上に表示します。

コードエディタ(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);

スタイル設定

FeatureViewLayer にスタイルを設定するには、スタイル辞書を ui.Map.FeatureViewLayer 関数に渡すか、setVisParams メソッドを使用してレイヤに追加します。以下に、スタイル設定の例を示します。

  • 「MARINE」プロパティに基づくアウトラインの色(保護区域が海洋環境の一部または全部に含まれるかどうか)
  • 「IUCN_CAT」プロパティ(国際自然保護連盟(IUCN)カテゴリ)に基づく塗りつぶしの色
  • 「REP_AREA」プロパティで定義された保護領域のサイズに基づく塗りつぶしの不透明度

使用可能なスタイル設定オプションの詳細については、FeatureView のスタイル設定ページをご覧ください。

コードエディタ(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,
});

フィルタリング

フィルタルールを適用すると、対象物の属性に基づいて対象物を個別にスタイル設定したり、非表示にしたりできます。たとえば、スライダー ウィジェットで指定された特定の領域よりも小さい保護領域を除外するには、次のコードを使用します。rules フィールドの詳細については、FeatureView のスタイル設定ページの特定のルールのセクションをご覧ください。

コードエディタ(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 ビジュアリゼーション。

Google Maps API

Google Maps API を使用して FeatureView アセットを可視化するプロセスは、4 つのパートに分かれています。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 の検査

デフォルトの Code Editor マップに追加された FeatureViewLayer レイヤは、インスペクタ ツールを使用して検査できます。機能は FeatureCollection と同じです。クリックした場所に対して返される結果には、現在のズームレベルで表示されている対象物のみがリストされます。検査対象の対象物にはジオメトリが表示されません。これは、FeatureView エクスポート プロセスの一環としてジオメトリが簡素化されているためです。

図 3. FeatureViewLayer の検査。インスペクタには、レイヤ、対象物、アセット ID、ビジュアリゼーション パラメータが表示されます。