Table of Contents

Class VectorPortrayalResult

Namespace
EncDotNet.S100.Datasets.Pipelines.Portrayal
Assembly
EncDotNet.S100.Core.dll

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

Func<string, AreaFill>

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

string

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

IReadOnlyList<CoverageArea>

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

GeographicBounds?

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

IReadOnlyDictionary<long, VectorFeatureTag>

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

GeographicBounds?

GeometryProvider

The geometry provider resolving feature references to geometry.

public required IFeatureGeometryProvider GeometryProvider { get; init; }

Property Value

IFeatureGeometryProvider

Info

Human-readable status line describing the dataset.

public required string Info { get; init; }

Property Value

string

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

IReadOnlyList<string>

LineStyleProvider

Resolves a line-style name to its resolved style (or null).

public Func<string, LineStyle?>? LineStyleProvider { get; init; }

Property Value

Func<string, LineStyle>

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

ColorPalette

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

bool

Product

The product specification name (e.g. "S-101").

public required string Product { get; init; }

Property Value

string

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

string

Spec

The product specification (name + edition) of the dataset.

public required SpecRef Spec { get; init; }

Property Value

SpecRef

SubLayers

The vector sub-layers to build, in producer order.

public required IReadOnlyList<VectorSubLayer> SubLayers { get; init; }

Property Value

IReadOnlyList<VectorSubLayer>

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

Func<string, string>

SymbolScale

Symbol scale factor applied by the renderer.

public double SymbolScale { get; init; }

Property Value

double

TextScale

Text scale factor applied by the renderer.

public double TextScale { get; init; }

Property Value

double