pub struct PathConfig {
pub distance_scale: f64,
pub heading_scale: f64,
pub cutoff_distance: f64,
pub heading_cutoff: f64,
pub probability_threshold: f64,
pub resampling_distance: Option<f64>,
pub max_candidates: usize,
pub path_only: bool,
pub debug_mode: bool,
pub beta: f64,
pub edge_zone_distance: f64,
pub turn_scale: f64,
}Expand description
Configuration for train path calculation algorithm
Controls probability thresholds, distance cutoffs, and other parameters that affect path selection and candidate filtering.
§Examples
use tp_lib_core::PathConfig;
// Use default configuration
let config = PathConfig::default();
assert_eq!(config.distance_scale, 10.0);
// Create custom configuration
let config = PathConfig::builder()
.distance_scale(15.0)
.heading_scale(3.0)
.cutoff_distance(75.0)
.build()
.unwrap();Fields§
§distance_scale: f64Distance scale parameter for exponential decay (meters) Controls how quickly probability decreases with distance
heading_scale: f64Heading scale parameter for exponential decay (degrees) Controls how quickly probability decreases with heading difference
cutoff_distance: f64Maximum distance from GNSS position to consider netelement as candidate (meters)
heading_cutoff: f64Maximum heading difference to consider netelement as candidate (degrees) Positions with larger heading differences are filtered out
probability_threshold: f64Minimum probability threshold for including segment in path (0.0 to 1.0)
resampling_distance: Option<f64>Distance between resampled positions (meters), None to disable resampling
max_candidates: usizeMaximum number of candidate netelements per GNSS position
path_only: boolIf true, only calculate path without projecting positions (US2: T098) When true, PathResult.projected_positions will be empty
debug_mode: boolIf true, collect and return debug information about path calculation (US7: T152) Includes candidate paths, position candidates, and decision tree
beta: f64Transition probability scale parameter (meters, Newson & Krumm β) Controls tolerance for mismatch between route distance and great-circle distance. Higher values are more forgiving of detours.
edge_zone_distance: f64Edge-zone distance threshold (meters) Candidates whose projected point is farther than this from the nearest netelement endpoint are considered interior and cannot transition to a different netelement (transition probability = 0).
turn_scale: f64Turn-angle scale parameter (degrees) Penalises transitions that require a direction change at a netelement connection. The penalty factor is exp(-turn_angle / turn_scale). Lower values penalise turns more aggressively.
Implementations§
Source§impl PathConfig
impl PathConfig
Sourcepub fn new(
distance_scale: f64,
heading_scale: f64,
cutoff_distance: f64,
heading_cutoff: f64,
probability_threshold: f64,
resampling_distance: Option<f64>,
max_candidates: usize,
path_only: bool,
debug_mode: bool,
beta: f64,
edge_zone_distance: f64,
turn_scale: f64,
) -> Result<Self, ProjectionError>
pub fn new( distance_scale: f64, heading_scale: f64, cutoff_distance: f64, heading_cutoff: f64, probability_threshold: f64, resampling_distance: Option<f64>, max_candidates: usize, path_only: bool, debug_mode: bool, beta: f64, edge_zone_distance: f64, turn_scale: f64, ) -> Result<Self, ProjectionError>
Create a new PathConfig with validation
Sourcepub fn builder() -> PathConfigBuilder
pub fn builder() -> PathConfigBuilder
Create a builder for PathConfig
Trait Implementations§
Source§impl Clone for PathConfig
impl Clone for PathConfig
Source§fn clone(&self) -> PathConfig
fn clone(&self) -> PathConfig
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for PathConfig
impl Debug for PathConfig
Source§impl Default for PathConfig
impl Default for PathConfig
Source§fn default() -> Self
fn default() -> Self
Create default configuration with documented parameter values
Default values:
distance_scale: 10.0 meters (exponential decay)heading_scale: 2.0 degrees (exponential decay)cutoff_distance: 500.0 metersheading_cutoff: 10.0 degreesprobability_threshold: 0.02 (2%)resampling_distance: None (disabled)max_candidates: 3 netelements per positionpath_only: false (calculate path and project positions)debug_mode: false (no debug output)beta: 50.0 meters (transition probability scale)edge_zone_distance: 50.0 meters (edge-zone optimization threshold)turn_scale: 30.0 degrees (turn-angle penalty scale)
Source§impl<'de> Deserialize<'de> for PathConfig
impl<'de> Deserialize<'de> for PathConfig
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for PathConfig
impl RefUnwindSafe for PathConfig
impl Send for PathConfig
impl Sync for PathConfig
impl Unpin for PathConfig
impl UnsafeUnpin for PathConfig
impl UnwindSafe for PathConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more