Modify existing M values in a LineStringM/MultiLineStringM layer using common recalibration operations. It does not change X/Y (or Z); it only rewrites M at vertices.

INPUTS

Line layer with M (LineStringM/MultiLineStringM).

OPERATIONS

Offset: shifts all M values by a constant amount (offset correction). • Factor: scales all M values (unit conversion or recalibration). • Invert M: reverses the M direction while keeping the same range (per feature or per route depending on scope). • Set origin (TARGET_START): adjusts the origin so the first vertex has the specified M, keeping the rest consistent.    ↳ In ROUTE_ID scope, the origin is computed in a common way for all features in the route. • Clamp M to range: limits M to a minimum/maximum interval; values outside are set to the nearest bound. In other words, it cleans out-of-range values without recalibrating the axis, so the interior remains intact. It does not compress or stretch calibration (no “remapping”).    ↳ Only affects values below min or above max, snapping them to the bound.    ↳ It may create flat sections at the start or end (values stuck at min/max). • Enforce monotonicity (“bounce” cleanup): fixes local inversions of M so it always progresses in the same direction; it may “flatten” small segments. The tolerance (epsilon) allows ignoring small numerical variations before correcting.

VALIDATION

Require M (advanced): if enabled, features without M produce critical messages. If disabled, they are skipped with a warning (SKIPPED_NO_M).

SCOPE (ADVANCED)

Per feature: applies operations using each feature’s own range/origin. • By ROUTE_ID: uses a shared range/origin across multiple features (useful when a route is split).   ↳ Requires specifying the ROUTE_ID field.

OUTPUTS

• Line layer with modified M. • Adds the STATUS field (e.g. OK, SKIPPED_NO_M, NO_M_VALUES, BAD_GEOMETRY, NO_ROUTE). • The Processing log includes warnings and criticals (e.g. CLAMP_APPLIED, MONO_APPLIED).

TIP

If you use Invert or Set origin on split routes, consider the By ROUTE_ID scope to keep global consistency.

DETAILS

See the plugin README: Edit calibration (Modify M values)