A FeatureView
is a view-only, accelerated representation of a
FeatureCollection
.
Unlike a FeatureCollection
, whose raster map tiles are generated on the
fly, FeatureView
raster tiles are pre-computed to provide rapid rendering.
In addition to rendering faster, FeatureView
assets implement zoom
level-dependent feature thinning. The effect is that dense datasets might look
incomplete when zoomed out (small features are not drawn), but more of the data
becomes visible as you zoom in, which can improve map aesthetics at lower zoom
levels. The thinning behavior of a dataset is controlled by several
optimization parameters
that are set during export of a FeatureCollection
to a FeatureView
asset.
As a view-only asset, FeatureView
objects cannot be included in computations
or expressions, but can be visualized and inspected in the JavaScript Code
Editor and Earth Engine Apps as a FeatureViewLayer
. They can also be
integrated into Google Maps API applications.
Creating a FeatureView
Creating a FeatureView
involves preparing a FeatureCollection
with your
data, calling the Export.table.toFeatureView
function, and starting the
export task. The following example demonstrates exporting views of the
WDPA polygons dataset.
In your own application, use any FeatureCollection
dataset archived in the
Earth Engine Data Catalog or create your own by
uploading a vector dataset
as an Earth Engine asset.
A FeatureView
can be customized using several parameters in the
Export.table.toFeatureView
function.
maxFeaturesPerTile
— defines the maximum number of features displayed in a map tile at a given zoom level. Use this parameter to optimize for speed or feature density.thinningStrategy
— controls whether feature thinning for a given tile and zoom level should be optimized for higher density or consistency in density across tiles. Note that optimizing for higher density can cause tile boundaries to become distinct, as feature density per tile is independent.thinningRanking
— defines feature thinning priority. For example, you can optimize thinning to target the retention of a particular feature property with high values –in other words, as you zoom out, features that have a low value for the selected property will be thinned out first, leaving the most important features (according to your rules) visible.zOrderRanking
— defines the z-order (stack order) of features displayed on the map. This parameter controls how overlapping features are displayed by allowing you to set priority rules based on feature properties, geometry type, and zoom level. For example, you can prioritize features with high values of a particular property so that they overlay on top of intersecting features with low values.
See the
FeatureView
Optimization page
for more details on these parameters and their accepted arguments.
In the example below, the specified arguments for these parameters produce a
FeatureView
where the maximum features per tile at a given zoom level is
1500, the density of features per tile is independent and allowed to reach
the maximum of 1500, smaller polygons are thinned out first, and smaller
polygons lay on top of larger ones.
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'], });
Executing the above code snippet in the Code Editor will generate an export task; run the task to initiate the export.
FeatureView asset locations
FeatureView
assets can be found in the public
Data Catalog and among your
personal assets in the Code Editor's
Assets tab. All relevant FeatureCollection
assets in the Data Catalog
have a companion FeatureView
asset with generally applicable ingestion
settings. Your personal asset archive will include any
FeatureView
assets you create.
Importing FeatureView assets into scripts
FeatureView
assets can be imported into Code Editor scripts using
buttons in Code Editor asset dialogs and personal asset entries, and by
providing a FeatureView
asset ID as input to the ui.Map.FeatureViewLayer
constructor.
Data Catalog asset dialog
Data Catalog table asset dialogs, accessed from the Code Editor's search bar, have an Import button at the lower right with a drop-down menu. From the drop-down menu, select "Import FeatureView". The asset will be included in the Imports section at the top of your script.
Personal asset dialog
Personal FeatureView
asset dialogs, accessed by selecting an asset from the
Code Editor's Assets tab, have an Import button at the upper right.
Activating the button will include the asset in the Imports section
at the top of your script. You can also use the import shortcut button
(right-pointing arrow icon) that appears when you hover over an asset in the
Assets tab.
Asset ID
FeatureView
assets have an ID that can be provided as input to the
ui.Map.FeatureViewLayer
constructor, which gives you access to the asset in
your script. Pre-constructed import snippets can be found in Data Catalog asset
pages and asset dialogs in the Code Editor.
Figure 1. Data Catalog asset dialog highlighting FeatureView
import methods.
FeatureView metadata
FeatureView
information and metadata are available in the asset dialogs
mentioned in the FeatureView asset locations
section above. In addition to the description and properties that may be shared
with the source FeatureCollection
, there are five properties unique to
FeatureView
. They include the ingestion parameter settings described in
the Creating a FeatureView section and
sourceVersion
, which is the "last modified" timestamp of the table asset that
the FeatureView
was created from. Figure 1 above shows
FeatureView
-specific properties in a Data Catalog asset dialog. Like other
assets, you can also fetch properties programmatically from the dictionary
returned by ee.data.getAsset
.
Visualizing a FeatureView
A FeatureView
object can be visualized in the Code Editor, Earth Engine Apps,
and Google Maps.
Code Editor
The Code Editor includes the ui.Map.FeatureViewLayer
component to visualize
FeatureView
assets on a map. The following example defines a FeatureView
asset ID, imports the asset as a FeatureViewLayer
, and displays it on the
map.
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);
Styling
You can style the FeatureViewLayer
by passing a style dictionary to the
ui.Map.FeatureViewLayer
function or adding them to a layer using the
setVisParams
method. Below is an example that styles:
- outline colors based on the "MARINE" property (whether the protected area falls totally or partially within the marine environment),
- fill color based on the "IUCN_CAT" property (International Union for Conservation of Nature (IUCN) Category), and
- fill opacity based on the size of the protected area defined by the "REP_AREA" property.
Visit the FeatureView Styling page for more details on the styling options that are available.
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, });
Filtering
Filter rules can be applied to selectively style or hide features based on their
properties. For example, to filter out protected areas smaller than a certain
area given by a slider widget, you can use the following code. See the
Specific Rules
section of the FeatureView
Styling page to learn more about the rules
field.
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);
Figure 2. FeatureViewLayer
visualization with a slider widget to hide features
smaller than the specified area.
Google Maps API
The process for visualizing a FeatureView
asset using the Google Maps API
is a four part process: obtain a tiles key using
ee.data.getFeatureViewTilesKey
, pass it to an instance of
FeatureViewTileSource
, construct an ee.layer.ImageOverlay
, and then add
the overlay to your google.maps.Map
instance. Sample code for constructing
the ImageOverlay
in JavaScript is shown below.
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);
Once that’s done, you can add the overlay to your google.maps.Map
instance
as shown below.
// embeddedMap is your google.maps.Map instance.
embeddedMap.overlayMapTypes.setAt(0, overlay);
Inspecting a FeatureView
A FeatureViewLayer
layer added to the default Code Editor map can be
inspected using the
Inspector tool.
The functionality is the same as that of a FeatureCollection
. Note that
results returned for the clicked location only lists features that are visible
at the current zoom level. Geometries are not shown for the inspected features
since they are simplified as part of the FeatureView
export process.
Figure 3. Inspecting a FeatureViewLayer
. The inspector shows the layer,
features, asset ID, and the visualization parameters.