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、ビジュアリゼーション パラメータが表示されます。