Tiled Feature Layer
Tiled vector-feature layer over a TiledFeatureSource. Each viewport fetches only the tiles it needs (per-tile BBOX GetFeature), caches them, and renders the features via FeatureRenderer (Point → Label/Placemark, LineString → Path, Polygon → Polygon, Multi/GeometryCollection fan out). The cache-through counterpart to BulkFeatureLayer: wrap the source in earth.worldwind.layer.cache.CachedTiledFeatureSource so memory AND network stay bounded.
All the tiling — screen-space-error quadtree selection, the no-overlap cut with ancestor/descendant fallback, the async fetch/cache/backoff/revalidation lifecycle — lives in TiledVectorLayer; this class supplies the geographic tile scheme and the WFS-specific load/render. With useBatchedRendering (default), a tile's polygons are tessellated per-feature into ONE shared VBO/EBO (MvtBatchedPolygonTile fill + MvtBatchedLineTile outline) — O(tiles) per frame, correct per-feature colours, and no cross-feature odd-winding cancellation. Always close it.
Constructors
Properties
Tile keys currently in fetch-failure backoff.
Screen-space-error knob: lower = finer (more, smaller on-screen tiles); higher = coarser.
Quadtree levels coarser than this aren't fetched/rendered — a single coarse tile's BBOX would pull too many features. The layer's effective "zoom band" floor. Level n spans 180°/2^n.
Tiles currently resident in the content cache (visible + fallback).
GPU-byte budget for the resident-tile cache. Because full-resolution WFS geometry makes tile VBO/EBOs wildly uneven, a flat tile count (maxLoadedTiles) lets a few dense tiles balloon GPU memory until the driver OOMs (KGSL mmap ENOMEM) while the Java heap still looks empty. A byte budget evicts on real footprint instead. Non-zero here overrides maxLoadedTiles; set 0 to fall back to the count bound.
Cap on launched-but-unfinished fetch Jobs (vs semaphore, which gates concurrent round-trips); bounds the queue so a huge changing cut can't pile up unbounded coroutines + HTTP/SSL → OOM. Over-cap tiles re-request a later frame.
Max GPU bytes of freshly-fetched tiles admitted to the cache per frame. A pan brings in a burst of tiles whose VBO/EBO uploads otherwise all land in one uploadBuffers call (a multi-hundred-ms frame hitch); this spreads them across frames. 0 disables the throttle.
Tiles with a fetch coroutine in flight.
Vector content bounding sector — real data availability can be smaller than the tile grid. Full sphere by default; tiled layers skip tiles outside it. Cache reopen narrows it from the persisted content bbox; bulk download widens and persists it. Mirrors earth.worldwind.globe.elevation.coverage.ElevationCoverage.sector.
RDP+radial simplify tolerance, in tile texels (≈ screen px at the tile's level), applied to each tile's geometry before tessellation; 0.0 disables. WFS GetFeature returns full-resolution geometry at every zoom (unlike pre-simplified MVT), so the default ~1px drops the sub-pixel detail that would otherwise bloat tile memory and earcut cost without any visible change. Raise for smaller/faster tiles, lower toward 0 to keep every server vertex.
Tessellate each tile's polygons into one shared VBO/EBO (fill + outline) instead of one surface shape per feature. O(tiles) per frame; preserves per-feature colours. Set false for the legacy per-feature path.
Functions
Makes a fresh copy carrying only this layer's configuration; caches and fetch scope are not shared.
See setOfflineOnly on TiledImageLayer. Dispatches by VectorLayer subtype to reach the right source field. No-op for unknown subtypes.