When exporting a FeatureCollection
as a FeatureView
asset, you can set parameters that prioritize which features are rendered at a
given zoom level (thinning) and how overlapping features are ordered (z-order).
These settings
affect the speed and display characteristics of FeatureView
objects. The
following sections describe the optimization parameters and demonstrate their
impact using conceptual diagrams where map tiles are delineated by
dashed lines, visible features are solid-line polygons, and discarded (thinned)
features are polygons with dashed lines and no fill.
The following code block is an example of a FeatureCollection
to FeatureView
export that highlights the optimization parameters described in this page.
Export.table.toFeatureView({
collection: fooFc,
assetId: 'foo-featureview-demo',
description: 'foo-featureview-demo',
maxFeaturesPerTile: 1500,
thinningStrategy: 'HIGHER_DENSITY',
thinningRanking: ['my-property DESC'],
zOrderRanking: ['my-property DESC']
});
Max features per tile
The max features per tile (maxFeaturesPerTile
) parameter defines the
maximum number of features to be rendered on a single map tile. This value is
an upper bound, and may be significantly lower depending on the
thinning strategy. This value can be set to anything
between 1 and 2000. Higher values show more features per tile, but tiles take
longer to load.
Notice in the following table that as the maxFeaturesPerTile
parameter
value decreases, so does the number of features intersecting each map tile. A
tile may have less than the max, but no more.
All features (for reference) |
Shows no more than 5 features per tile. |
Shows no more than 2 features per tile. |
Thinning ranking
The thinning ranking (thinningRanking
) parameter controls how data are
prioritized for thinning based on geometry type, feature size, and feature
property values. It accepts a set of rules that inform the thinning algorithm
about which features to thin out ahead of others when
maxFeaturesPerTile
is reached. Each rule
includes a feature
property followed by sorting direction
(ascending/ASC
or descending/DESC
); there can be one or more rules. In
addition to
traditional feature properties, there are two special properties that can be
used to prioritize thinning: .geometryType
and .minZoomLevel
.
.geometryType
– characterizes features as points, lines, or polygons. These geometry types are respectively quantified as small, medium, and large for the purpose of sorting..minZoomLevel
– the lowest map zoom level at which a feature may render to a tile. Zoom levels below this value will not display the feature, zoom levels greater than or equal to this value may display the feature. Recall that low zoom levels represent a larger geographic region per map tile than higher zoom levels. Point features are assigned a value of 0 (visible at all zoom levels). Line and polygon geometries are assigned values based on their bounds (lines) or area (polygons): large features have lower.minZoomLevel
values than smaller features.
Thinning ranking rules can be provided as either a string or a list of strings where a property name and the desired sorting direction are separated by a space:
// String input format for setting thinning ranking based on 3 rules.
'my-property DESC, .geometryType ASC, .minZoomLevel ASC'
// List of strings input format for setting thinning ranking based on 3 rules.
['my-property DESC', '.geometryType ASC', '.minZoomLevel ASC']
The rules above direct the thinning algorithm to prioritize features with a larger "my-property" attribute (thin features with a smaller "my-property" value first), prioritize features with a smaller geometry type (for example, thin out polygons before lines and lines before points), and prioritize features with a smaller minimum zoom level (points over large polygons over smaller polygons).
The following table illustrates how changing the thinningRanking
rule for a
size
property affects which features are drawn. The total number of
features per tile ("All features" column) is greater than 5, so thinning is
applied to limit the features that are drawn
(thinningRanking: 5
column). In the first row, the features are
sorted by size
from greatest to least, meaning that larger features take
priority over smaller features (features are drawn in descending order by size
until maxFeaturesPerTile
is reached). In the second row, the features are
sorted by ascending size, so the smallest features are drawn first, in order of
size, until maxFeaturesPerTile
is reached.
thinningRanking |
All features (for reference) | maxFeaturesPerTile: 5 |
---|---|---|
Prioritize features with larger |
||
Prioritize features with smaller |
Thinning strategy
The thinning strategy parameter (thinningStrategy
) is used alongside
thinning ranking (thinningRanking
) to thin out data at
export time to improve rendering performance. There are two strategies
supported: HIGHER_DENSITY
and GLOBALLY_CONSISTENT
. When thinning at a
particular zoom level, a higher density thinning strategy means that each
tile may get as close as possible to the
maxFeaturesPerTile
limit without regard for the rank
of features in other tiles. The globally consistent thinning strategy means that
if a feature is removed by thinning from any tile, then all features with equal
or lower thinning rank will be removed from all tiles,
regardless of whether a tile requires thinning (exceeds maxFeaturesPerTile
limit). Use the HIGHER_DENSITY
strategy to optimize for feature density and
use the GLOBALLY_CONSISTENT
strategy to optimize for consistent inter-tile
representation of feature rank.
The following table demonstrates how changing thinningStrategy
affects
thinning. In this example, the data are thinned using the shape/color of the
points. Blue circles, green squares, and red triangles have respective
thinning ranks from best to worst. For each
thinningStrategy
(HIGHER_DENSITY
and GLOBALLY_CONSISTENT
),
there are three different values for maxFeaturesPerTile
specified: a number
large enough to show all features, 10 features, and 9 features.
With HIGHER_DENSITY
and 10 maxFeaturesPerTile
, 6 red triangles (lowest
priority in thinning rank) are thinned out of the top-left tile, and 1 red
triangle is thinned out of the bottom-left tile. With HIGHER_DENSITY
and 9
maxFeaturesPerTile
, 7 red triangles are thinned out of the top-left tile,
and a red triangle and green square are thinned out of the bottom-left tile.
In these examples, each tile is thinned independently, without consideration
of the thinning rank of features in neighboring tiles. Depending on the
characteristics of the data, this thinning strategy can lead to adjacent map
tiles appearing distinctly different from one another, but maximizes the
number of features drawn.
Recall that GLOBALLY_CONSISTENT
thinning means that if a feature is removed
by thinning from any tile, then all other features with equal or worse
thinningRank
will also be removed. With
maxFeaturesPerTile
set to 10, the red triangles don't show up on any tile
because a red triangle is thinned out in the top-left and bottom-left tiles.
With maxFeaturesPerTile
set to 9, the green squares similarly don't show up
on any tile because a green square is thinned out in the bottom-left tile.
This thinning strategy is less likely to produce the distinct tile
appearance that the HIGHER_DENSITY
strategy can, but has the potential to
thin tiles to a number of features far below the maxFeaturesPerTile
limit.
thinningStrategy |
All Features (for reference) | maxFeaturesPerTile: 10 | maxFeaturesPerTile: 9 |
---|---|---|---|
Less aggressive thinning. Maintains high feature density through intra-tile thinning. |
|||
More aggressive thinning. Maintains globally consistent minimum thinning rank through inter-tile thinning. |
Z-order ranking
The z-order ranking (zOrderRanking
) parameter controls the ordering of
overlapping features. It accepts a set of rules that define what features
should appear under/over others when they overlap. The rule logic and format
for setting feature order is the same as
thinning ranking, please see that section for more
details.
Z-order ranking rules can be provided as either a string or a list of strings where a property name and the desired sorting direction are separated by a space:
// String input format for setting z-order ranking based on 3 rules.
'my-property DESC, .geometryType ASC, .minZoomLevel ASC'
// List of strings input format for setting z-order ranking based on 3 rules.
['my-property DESC', '.geometryType ASC', '.minZoomLevel ASC']
The rules above specify that features with a larger "my-property" value should appear under features with a smaller value, features with a smaller geometry type should appear under features with a larger geometry type (for example, points under lines and lines under polygons), and features with a smaller min zoom level (larger features) should appear under features with a larger min zoom level (smaller features).
The following table demonstrates how changing the zOrderRanking
rule for a
"size" property affects which features appear in front of others when they
overlap. In the first row, features are sorted by size in descending order,
meaning that larger sized features should appear under smaller features
(larger features are drawn first). Conversely, in the second row, features
are sorted by size in ascending order, meaning that smaller sized features
should appear under larger features (smaller features are drawn first).
Features with smaller |
Features with larger |