Choosing Minimum Feature Size Thresholds by Output Medium

Fix the smallest mark the output medium can reliably show, convert it to ground units at each scale, and derive every drop threshold and simplification tolerance from that one figure — so that porting a style from screen to press changes one parameter instead of forty.

Core Algorithm and Workflow

Every map has a smallest mark it can draw. Below that size a line becomes intermittent, a polygon becomes a smudge, and a symbol becomes indistinguishable from a dot. The size differs by medium, and almost every scale-related threshold in a style is downstream of it.

The derivation is three lines of arithmetic and one decision:

  1. Choose the minimum mark for the medium. A solid line on a coated offset press holds at about 0.1 mm; a tinted line needs 0.15. A screen mark needs about one device pixel. A large-format sheet read from two metres is limited by the eye rather than the device, at roughly 0.5 mm.
  2. Convert to ground units per scale. Ground distance = mark size × scale denominator.
  3. Apply it twice. As a drop threshold — features narrower than this are omitted — and as a simplification tolerance, since a vertex whose removal moves the line less than one mark cannot be seen.
One figure per medium, three thresholds per scale A table of three media against three scales. A screen at 0.16 millimetres gives 4 metres at 1 to 25 000 and 16 metres at 1 to 100 000. An offset press at 0.10 millimetres gives 2.5 and 10 metres. A large-format sheet at 0.50 millimetres gives 12.5 and 50 metres. A note records that the same style ported between media without changing the figure is wrong by a factor of five. medium min mark at 1:25 000 at 1:100 000 screen, 2× density 0.16 mm 4 m 16 m offset press, coated 0.10 mm 2.5 m 10 m large format at 2 m 0.50 mm 12.5 m 50 m A style tuned for screen and printed at large format keeps five times more detail than the viewer can resolve, which reads as clutter rather than as precision. Ported the other way, a print style on screen drops features the display could have shown.
The rightmost columns are the numbers that actually enter the style. They are entirely determined by the leftmost column and the scale, which is why only the leftmost column should be authored.

Production-Ready Python Implementation

MIN_MARK_MM = {
    "screen_1x": 0.26,        # one CSS pixel at 96 dpi
    "screen_2x": 0.16,        # one device pixel at 2× density
    "offset_coated": 0.10,    # solid line; use 0.15 for a tinted line
    "offset_uncoated": 0.15,  # dot gain eats fine detail on uncoated stock
    "large_format_2m": 0.50,  # eye-limited rather than device-limited
}


def ground_threshold(medium: str, scale_denominator: float) -> float:
    """Smallest ground distance this medium can show at this scale, in metres."""
    if medium not in MIN_MARK_MM:
        raise KeyError(f"unknown medium {medium!r}; add it to MIN_MARK_MM")
    if scale_denominator <= 0:
        raise ValueError("scale denominator must be positive")
    return (MIN_MARK_MM[medium] / 1000.0) * scale_denominator


def style_thresholds(medium: str, scale_denominator: float) -> dict:
    """Drop threshold and simplification tolerance from one figure."""
    t = ground_threshold(medium, scale_denominator)
    return {
        "min_mark_mm": MIN_MARK_MM[medium],
        "drop_below_m": round(t, 2),          # narrower than this: omit
        "simplify_tolerance_m": round(t, 2),  # vertex moves less than this: remove
        "min_symbol_m": round(t * 3, 2),      # a symbol needs a few marks to read
    }

min_symbol_m is three marks rather than one because a symbol has to be identifiable, not merely visible. A single-mark dot is present on the page and conveys nothing about what kind of feature it is — the same distinction made about icon sizes in Sizing Point Symbols Across Zoom Levels Deterministically.

Performance Tuning and Cartographic Best Practices

  • Test the narrowest dimension, not the area. A polygon a tenth of a millimetre wide and fifty long has ample area and still prints as an intermittent hairline. The diameter of the largest inscribed circle is a serviceable proxy for a polygon’s rendered width.
  • Keep the threshold in the style, not in the data. Dropping features is a rendering decision per scale and per medium. Baking it into a derived dataset means one extract cannot serve both a screen and a print product, and it makes the omission invisible to later readers of the data.
  • Confirm the figure with the actual press. The values above are starting points. Uncoated stock and high dot gain push the practical minimum well above the theoretical one, and the printer knows their own number.
  • Apply the same figure to generalisation. A simplification tolerance derived from a different constant than the drop threshold produces a style where visible features have invisible detail, or the reverse.
  • Re-derive on every medium change. Making the medium a parameter is the whole point; a style with the ground distances written in as constants has silently baked in a medium nobody recorded.
Why area is the wrong quantity to threshold on Two polygons with identical area. The first is roughly square and prints as a clearly visible patch. The second is fifty times longer than it is wide and prints as an intermittent hairline that breaks up under dot gain. A note records that an area threshold admits both and a width threshold admits only the first. same area, different rendered width compact — 2 mm across prints cleanly elongated — 0.09 mm wide, 50 mm long prints as an intermittent hairline Threshold on the narrowest dimension; an area test admits both of these. River channels, coastal spits and narrow woodland strips are all this shape, so the case is common.
Both shapes have the same area and only one is printable. Any threshold expressed in area units admits the other, and it is a shape that occurs constantly in natural-feature data.

Integration and Next Steps

This figure is the input to the zoom-threshold table described in Automated Cartographic Design Fundamentals and to the tolerance selection in Generalization and Simplification. Because it is a property of the medium, it is also what has to change when the same style serves both a web map and a printed atlas — and making it a single named parameter is what turns that from a style rewrite into a configuration value.

Everything downstream of one number A single minimum mark parameter feeding four style outputs: the feature drop threshold, the simplification tolerance, the minimum symbol size, and the zoom level at which each layer switches on. A note records that authoring the four independently is what lets them drift apart. min mark, mm one per medium feature drop threshold simplification tolerance minimum symbol size — three marks zoom at which each layer switches on Authored independently, these four drift apart and the style stops being internally consistent.
Four style values, one authored parameter. The alternative is four constants that agreed when they were written and no longer do.

Frequently Asked Questions

What is the smallest mark that reliably survives?

On a coated offset press, roughly 0.1 millimetres for a solid line and 0.15 for one carrying a tint; uncoated stock needs more because dot gain spreads fine detail. On screen the floor is about one device pixel, which at 2× density is 0.16 millimetres of physical display. For large-format print read from two metres the eye binds before the device does, at roughly 0.5 millimetres. Treat all of these as starting points and confirm with the specific press or display — printers know their own number and will give it.

Should the threshold apply to area or to width?

To the narrowest rendered dimension. A polygon a tenth of a millimetre wide and fifty long has plenty of area and prints as an intermittent hairline, and that shape — river channels, coastal spits, narrow woodland strips — is extremely common in natural-feature data. For a polygon, the diameter of the largest inscribed circle is a practical proxy for rendered width and is cheap to compute.

Does the threshold change the data or only the drawing?

Only the drawing, and keeping it that way matters. Dropping features below a threshold is a decision about a specific scale and medium, so it belongs in the style. Baking it into a derived dataset means the same extract cannot serve both a screen product and a print product, and it hides the omission from anyone who later reads the data without knowing what was removed or why.

How does this relate to generalisation tolerance?

They are one figure applied twice. A vertex whose removal displaces the line by less than one minimum mark cannot be distinguished from the original, so the simplification tolerance is the same ground distance as the drop threshold. Deriving both from a single parameter is what keeps them consistent when the medium changes — authoring them separately produces a style where visible features carry invisible detail, or where simplified features are dropped anyway.


Back to Scale Mapping for Web and Print