Class VectorPortrayalResult
The Mapsui-free result of building a vector dataset's portrayal — everything the Mapsui renderer needs to construct the dataset's layers and place them in the S-98 cross-dataset stack, with no Mapsui type crossing the seam.
public sealed class VectorPortrayalResult
- Inheritance
-
VectorPortrayalResult
- Inherited Members
Remarks
Produced under the processor's render gate as an immutable snapshot: the resolver delegates close over a pre-warmed, palette-resolved asset snapshot, and the instruction slices, palette, and geometry provider do not read mutable portrayal-catalogue state. The result is therefore safe to convert to Mapsui layers in another assembly.
Properties
AreaFillProvider
Resolves an area-fill name to its resolved fill (or null).
public Func<string, AreaFill?>? AreaFillProvider { get; init; }
Property Value
CellCompilationScale
The cell's compilation (optimum) scale denominator, used to rank it against overlapping cells — a smaller denominator is the finer cell, which suppresses coarser overlaps and paints above them. S-57 populates it from the DSPM compilation scale (CSCL, S-57 Appendix B.1 §7.3.1.1; the S-101 optimum display scale per S-65 Annex B §2.1.6). When null, consumers rank by CellMinimumDisplayScale instead (the S-101 behaviour).
public int? CellCompilationScale { get; init; }
Property Value
- int?
CellMinimumDisplayScale
The cell's coarsest (largest-denominator) intended display scale, used
as the whole-cell zoom-out window when no exchange-set
CATALOG.XML supplied one (S-101 FC §3.1.1
DataCoverage.minimumDisplayScale). Unlike
OutOfBandMinDisplayScale — which is mariner-gated and
applied per-feature to line-work only — this value is left ungated so
the viewer can apply its own IgnoreScaleMinimum gate and clamp
the whole cell (area fills included). S-101 populates it from
the coarsest in-file DataCoverage.minimumDisplayScale (FC §3.1.1);
S-57 populates it from the larger of the DSPM compilation scale (CSCL,
S-57 Appendix B.1 §7.3.1.1) and the cell's largest feature
SCAMIN. Null when the dataset carries no usable cell-wide scale
(e.g. no DataCoverage band or no CSCL present).
public int? CellMinimumDisplayScale { get; init; }
Property Value
- int?
ContentScope
A content identity of everything that shapes this dataset's portrayal beyond the drawing instructions themselves: at least a hash of the dataset's bytes (with any applied updates), plus the catalogue identity where the processor knows it. Unlike SourceDatasetId, it changes when a dataset is re-issued under the same name, and differs between same-named or same-shaped datasets.
public string? ContentScope { get; init; }
Property Value
Remarks
The Mapsui renderer folds it into the warm tile disk-cache namespace. The drawing instructions carry feature references and styles but not geometry, so this is what keeps two datasets with structurally identical instructions from sharing tiles. When null, the dataset's layers bypass the disk cache.
CoverageAreas
The cell's declared data-coverage polygons in EPSG:4326 (lat/lon),
resolved from its DataCoverage surface features (S-101 FC §3.1.1;
the S-57 M_COVR meta-object translated to DataCoverage).
Drives cross-cell scale-band overlap suppression (issue #438 Phase 2):
the renderer projects these to EPSG:3857 so a coarser cell can be
clipped to its coverage minus the union of finer overlapping cells'
coverage. Empty when the cell declares no usable coverage geometry.
public IReadOnlyList<CoverageArea> CoverageAreas { get; init; }
Property Value
FallbackGeographicExtent
Optional pre-padded geographic extent (lat / lon) used only as a
fallback when the built layers' union is empty. Products that
prefer the rendered layer's own extent but still need a padded geometry
extent when the layer reports none (e.g. S-131, whose base behaviour was
layer.Extent ?? ComputeExtent()) set this instead of
GeographicExtent.
public GeographicBounds? FallbackGeographicExtent { get; init; }
Property Value
FeatureTags
S-101 feature tags keyed by feature id, copied onto built features so S-98 depth-feature suppression can run without re-portrayal. Null / empty for products that need no tagging.
public IReadOnlyDictionary<long, VectorFeatureTag>? FeatureTags { get; init; }
Property Value
GeographicExtent
Optional pre-padded geographic extent (lat / lon) that is used
verbatim as the dataset's extent — taking precedence over the
built layers' union. Products that compute their extent from raw feature
geometry rather than the rendered layer (e.g. the GML XSLT products via
ComputeGeographicExtent) set this. When null the renderer derives
the extent from the built layers' union (falling back to
FallbackGeographicExtent if that union is empty).
public GeographicBounds? GeographicExtent { get; init; }
Property Value
GeometryProvider
The geometry provider resolving feature references to geometry.
public required IFeatureGeometryProvider GeometryProvider { get; init; }
Property Value
Info
Human-readable status line describing the dataset.
public required string Info { get; init; }
Property Value
LayerNames
Optional stable per-sub-layer keys for the viewer's disclosure UI, parallel by index to SubLayers. When null the renderer derives them from each sub-layer's LayerKey.
public IReadOnlyList<string>? LayerNames { get; init; }
Property Value
LineStyleProvider
Resolves a line-style name to its resolved style (or null).
public Func<string, LineStyle?>? LineStyleProvider { get; init; }
Property Value
OutOfBandMinDisplayScale
The most-permissive (largest) DataCoverage.minimumDisplayScale
denominator across the cell, or null when no out-of-scale-band cap
applies (e.g. the mariner's IgnoreScaleMinimum is set, or no usable
value is present). The Mapsui renderer multiplies this by its
denominator-to-resolution constant and clamps the styles of any
sub-layer with ApplyOutOfBandCap set.
public int? OutOfBandMinDisplayScale { get; init; }
Property Value
- int?
Palette
The resolved colour palette (immutable snapshot).
public required ColorPalette Palette { get; init; }
Property Value
PreferLiveDrawing
Whether the product's datasets are sparse overlays, such as S-421 routes, that a renderer may draw directly every frame rather than through cached tiles. Many such datasets are often shown at once, so the per-dataset cost of tiling outweighs the drawing. A hint: a renderer still tiles a dataset too dense to draw each frame.
public bool PreferLiveDrawing { get; init; }
Property Value
Product
The product specification name (e.g. "S-101").
public required string Product { get; init; }
Property Value
SourceDatasetId
Stable identifier for the source dataset (typically the file name). Used as the S-98 stack tiebreaker and suppression join key.
public required string SourceDatasetId { get; init; }
Property Value
Spec
The product specification (name + edition) of the dataset.
public required SpecRef Spec { get; init; }
Property Value
SubLayers
The vector sub-layers to build, in producer order.
public required IReadOnlyList<VectorSubLayer> SubLayers { get; init; }
Property Value
SymbolProvider
Resolves an SVG symbol name to its SVG content (or null). Closes over the pre-warmed, palette-resolved symbol snapshot.
public Func<string, string?>? SymbolProvider { get; init; }
Property Value
SymbolScale
Symbol scale factor applied by the renderer.
public double SymbolScale { get; init; }
Property Value
TextScale
Text scale factor applied by the renderer.
public double TextScale { get; init; }