package Ġcom . mapbox . navigation . ui . maps . internal . route . line Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroid . util . Sparse Array Ċ import Ġandroidx . annotation . Color Int Ċ import Ġcom . mapbox . api . directions . v 5 . Directions Criteria Ċ import Ġcom . mapbox . api . directions . v 5 . models . Directions Route Ċ import Ġcom . mapbox . api . directions . v 5 . models . Route Leg Ċ import Ġcom . mapbox . core . constants . Constants Ċ import Ġcom . mapbox . geojson . Feature Ċ import Ġcom . mapbox . geojson . Feature Collection Ċ import Ġcom . mapbox . geojson . Line String Ċ import Ġcom . mapbox . geojson . Point Ċ import Ġcom . mapbox . geojson . utils . Polyline Utils Ċ import Ġcom . mapbox . maps . Layer Position Ċ import Ġcom . mapbox . maps . Style Ċ import Ġcom . mapbox . maps . extension . style . expressions . dsl . generated . color Ċ import Ġcom . mapbox . maps . extension . style . expressions . dsl . generated . eq Ċ import Ġcom . mapbox . maps . extension . style . expressions . generated . Expression Ċ import Ġcom . mapbox . maps . extension . style . layers . get Layer Ċ import Ġcom . mapbox . maps . extension . style . layers . properties . generated . Visibility Ċ import Ġcom . mapbox . maps . extension . style . sources . generated . geo Json Source Ċ import Ġcom . mapbox . navigation . ui . base . internal . model . route . Route Constants Ċ import Ġcom . mapbox . navigation . ui . base . model . route . Route Layer Constants Ċ import Ġcom . mapbox . navigation . ui . maps . route . line . model . Map box Route Line Options Ċ import Ġcom . mapbox . navigation . ui . maps . route . line . model . Route Feature Data Ċ import Ġcom . mapbox . navigation . ui . maps . route . line . model . Route Line Ċ import Ġcom . mapbox . navigation . ui . maps . route . line . model . Route Line Color Resources Ċ import Ġcom . mapbox . navigation . ui . maps . route . line . model . Route Line Dist ances Index Ċ import Ġcom . mapbox . navigation . ui . maps . route . line . model . Route Line Expression Data Ċ import Ġcom . mapbox . navigation . ui . maps . route . line . model . Route Line Gran ular Dist ances Ċ import Ġcom . mapbox . navigation . ui . maps . route . line . model . Route Line Scale Value Ċ import Ġcom . mapbox . navigation . ui . maps . route . line . model . Route Line Traffic Expression Data Ċ import Ġcom . mapbox . navigation . ui . maps . route . line . model . Route Points Ċ import Ġcom . mapbox . navigation . ui . maps . route . line . model . Route Style Descriptor Ċ import Ġcom . mapbox . navigation . ui . utils . internal . if NonNull Ċ import Ġcom . mapbox . tur f . Tur f Constants Ċ import Ġcom . mapbox . tur f . Tur f Misc Ċ import Ġjava . util . UUID Ċ import Ġkotlin . math . ln Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . sin Ċ import Ġkotlin . math . sqrt Ċ import Ġkotlin . reflect . K Property 1 Ċ Ċ object ĠMap box Route Line Utils Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" M bx Map box Route Line Utils " ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġan Ġ[ Expression ] Ġthat Ġcan Ġbe Ġapplied Ġto Ġthe Ġlayer Ġstyle Ġchanging Ġthe Ġappearance Ġof ĊĠĠĠĠ Ġ* Ġa Ġroute Ġline , Ġmaking Ġthe Ġportion Ġof Ġthe Ġroute Ġline Ġbehind Ġthe Ġp uck Ġinvisible . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdistance Offset Ġthe Ġpercentage Ġof Ġthe Ġdistance Ġtr ave led Ġwhich Ġwill Ġrepresent ĊĠĠĠĠ Ġ* Ġthe Ġpart Ġof Ġthe Ġroute Ġline Ġthat Ġisn 't Ġvisible ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe ĠExpression Ġthat Ġcan Ġbe Ġused Ġin Ġa ĠLayer 's Ġproperties . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġget Traffic Line Expression ( ĊĠĠĠĠĠĠĠ Ġdistance Offset : ĠDouble , ĊĠĠĠĠĠĠĠ Ġroute Line Expression Data : ĠList < Route Line Expression Data >, ĊĠĠĠĠĠĠĠ Ġfallback Route Color : ĠInt ĊĠĠĠ Ġ): ĠExpression Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpression Builder Ġ= ĠExpression . Expression Builder (" step ") ĊĠĠĠĠĠĠĠ Ġexpression Builder . line Progress () ĊĠĠĠĠĠĠĠ Ġexpression Builder . stop Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrgba Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġliteral ( 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġliteral ( 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġliteral ( 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġliteral ( 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfiltered Items Ġ= Ġroute Line Expression Data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . offset Ġ> Ġdistance Offset Ġ}. distinct By Ġ{ Ġit . offset Ġ} ĊĠĠĠĠĠĠĠ Ġwhen Ġ( filtered Items . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġwhen Ġ( route Line Expression Data . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> ĠlistOf ( Route Line Expression Data ( distance Offset , Ġfallback Route Color )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> ĠlistOf ( route Line Expression Data . last (). copy ( offset Ġ= Ġdistance Offset )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Item Index Ġ= Ġroute Line Expression Data . indexOf ( filtered Items . first ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfill er Item Ġ= Ġif Ġ( first Item Index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Expression Data [ first Item Index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Expression Data [ first Item Index Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( fill er Item . copy ( offset Ġ= Ġdistance Offset )). plus ( filtered Items ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Builder . stop Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġliteral ( it . offset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor ( it . segment Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġexpression Builder . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġline Ġgradient Ġapplying Ġa Ġcolor Ġfrom Ġthe Ġbeginning Ġof Ġthe Ġline Ġto Ġthe ĊĠĠĠĠ Ġ* Ġoffset Ġwhich Ġindicates Ġa Ġpercentage Ġof Ġthe Ġline . ĠFrom Ġthe Ġoffset Ġto Ġthe Ġend Ġof Ġthe Ġline ĊĠĠĠĠ Ġ* Ġthe Ġbase Ġcolor Ġwill Ġbe Ġapplied . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġoffset Ġa Ġvalue Ġgreater Ġthan Ġ 0 Ġthat Ġrepresents Ġa Ġpercentage Ġof Ġthe Ġline Ġstarting ĊĠĠĠĠ Ġ* Ġfrom Ġthe Ġbeginning . ĊĠĠĠĠ Ġ* Ġ@ param Ġtr ave led Color Ġthe Ġcolor Ġto Ġapply Ġto Ġthe Ġsection Ġof Ġthe Ġline Ġfrom Ġthe Ġbeginning ĊĠĠĠĠ Ġ* Ġto Ġthe Ġoffset ĊĠĠĠĠ Ġ* Ġ@ param Ġline Base Color Ġthe Ġcolor Ġto Ġapply Ġto Ġthe Ġsection Ġfrom Ġthe Ġoffset Ġto Ġthe Ġend ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġan ĠExpression Ġfor Ġa Ġgradient Ġline ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġget Van ishing Route Line Expression ( ĊĠĠĠĠĠĠĠ Ġoffset : ĠDouble , ĊĠĠĠĠĠĠĠ Ġtr ave led Color : ĠInt , ĊĠĠĠĠĠĠĠ Ġline Base Color : ĠInt ĊĠĠĠ Ġ): ĠExpression Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpression Builder Ġ= ĠExpression . Expression Builder (" step ") ĊĠĠĠĠĠĠĠ Ġexpression Builder . line Progress () ĊĠĠĠĠĠĠĠ Ġexpression Builder . color ( tr ave led Color ) ĊĠĠĠĠĠĠĠ Ġexpression Builder . stop Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġliteral ( offset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor ( line Base Color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġexpression Builder . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Route Feature DataProvider ( ĊĠĠĠĠĠĠĠ Ġdirections Routes : ĠList < Directions Route > ĊĠĠĠ Ġ): Ġ() Ġ-> ĠList < Route Feature Data > Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġdirections Routes . map (:: generate Feature Collection ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Route Line Feature DataProvider ( ĊĠĠĠĠĠĠĠ Ġdirections Routes : ĠList < Route Line > ĊĠĠĠ Ġ): Ġ() Ġ-> ĠList < Route Feature Data > Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġdirections Routes . map (:: generate Feature Collection ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġcolor Ġthat Ġis Ġused Ġto Ġrepresent Ġtraffic Ġcon gestion . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcon gestion Value Ġas Ġstring Ġvalue Ġcoming Ġfrom Ġthe ĠDirection s Route ĊĠĠĠĠ Ġ* Ġ@ param Ġis Primary Route Ġindicates Ġif Ġthe Ġcon gestion Ġvalue Ġfor Ġthe Ġprimary Ġroute Ġshould ĊĠĠĠĠ Ġ* Ġbe Ġreturned Ġor Ġthe Ġcolor Ġfor Ġan Ġalternative Ġroute . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Color Int ĊĠĠĠ Ġfun Ġget Route Color For Con gestion ( ĊĠĠĠĠĠĠĠ Ġcon gestion Value : ĠString , ĊĠĠĠĠĠĠĠ Ġis Primary Route : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġroute Line Color Resources : ĠRoute Line Color Resources ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( is Primary Route ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġwhen Ġ( con gestion Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Constants . LOW _ CON GEST ION _ VALUE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Color Resources . route Low Con gestion Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Constants . MO DER ATE _ CON GEST ION _ VALUE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Color Resources . route Mod erate Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Constants . HE AV Y _ CON GEST ION _ VALUE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Color Resources . route He avy Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Constants . SEVERE _ CON GEST ION _ VALUE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Color Resources . route Se vere Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Constants . UNKNOWN _ CON GEST ION _ VALUE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Color Resources . route Unknown Traffic Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Constants . Cl OS URE _ CON GEST ION _ VALUE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Color Resources . route Closure Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġroute Line Color Resources . route Default Color ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġwhen Ġ( con gestion Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Constants . LOW _ CON GEST ION _ VALUE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Color Resources . alternative Route Low Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Constants . MO DER ATE _ CON GEST ION _ VALUE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Color Resources . alternative Route Mod erate Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Constants . HE AV Y _ CON GEST ION _ VALUE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Color Resources . alternative Route He avy Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Constants . SEVERE _ CON GEST ION _ VALUE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Color Resources . alternative Route Se vere Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Constants . UNKNOWN _ CON GEST ION _ VALUE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Color Resources . alternative Route Unknown Traffic Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Constants . Cl OS URE _ CON GEST ION _ VALUE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Color Resources . alternative Route Closure Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Color Resources . alternative Route Default Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculates Ġline Ġsegments Ġbased Ġon Ġthe Ġle gs Ġin Ġthe Ġroute Ġline Ġand Ġcolor Ġrepresentation ĊĠĠĠĠ Ġ* Ġof Ġthe Ġtraffic Ġcon gestion . ĠThe Ġitems Ġreturned Ġcan Ġbe Ġused Ġto Ġcreate Ġa Ġstyle Ġexpression ĊĠĠĠĠ Ġ* Ġwhich Ġcan Ġbe Ġused Ġto Ġstyle Ġthe Ġroute Ġline . ĠThe Ġstyled Ġroute Ġline Ġwill Ġbe Ġcolored ĊĠĠĠĠ Ġ* Ġaccording Ġto Ġthe Ġtraffic Ġconditions Ġindicated Ġin Ġthe Ġ@ param Ġroute . ĠFor Ġany Ġroad Ġclass ĊĠĠĠĠ Ġ* Ġincluded Ġin Ġthe Ġ@ param Ġtraffic Back fill Road Classes , Ġall Ġroute Ġsegments Ġwith Ġan Ġ' unknown ' ĊĠĠĠĠ Ġ* Ġtraffic Ġcon gestion Ġannotation Ġand Ġa Ġmatching Ġroad Ġclass Ġwill Ġbe Ġcolored Ġwith Ġthe Ġlow ĊĠĠĠĠ Ġ* Ġtraffic Ġcolor Ġinstead Ġof Ġthe Ġcolor Ġconfigured Ġfor Ġunknown Ġtraffic Ġcon gestion . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġroute Ġthe Ġ[ Directions Route ] Ġused Ġfor Ġthe Ġ[ Expression ] Ġcalculations ĊĠĠĠĠ Ġ* Ġ@ param Ġtraffic Back fill Road Classes Ġa Ġcollection Ġof Ġroad Ġclasses Ġfor Ġoverriding Ġthe Ġtraffic ĊĠĠĠĠ Ġ* Ġcon gestion Ġcolor Ġfor Ġunknown Ġtraffic Ġconditions ĊĠĠĠĠ Ġ* Ġ@ param Ġis Primary Route Ġindicates Ġif Ġthe Ġroute Ġused Ġis Ġthe Ġprimary Ġroute ĊĠĠĠĠ Ġ* Ġ@ param Ġroute Line Color Resources Ġprovides Ġcolor Ġvalues Ġfor Ġthe Ġroute Ġline ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġlist Ġof Ġitems Ġrepresenting Ġthe Ġdistance Ġoffset Ġof Ġeach Ġroute Ġleg Ġand Ġthe Ġcolor ĊĠĠĠĠ Ġ* Ġused Ġto Ġrepresent Ġthe Ġtraffic Ġcon gestion . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcalculate Route Line Segments ( ĊĠĠĠĠĠĠĠ Ġroute : ĠDirection s Route , ĊĠĠĠĠĠĠĠ Ġtraffic Back fill Road Classes : ĠList < String >, ĊĠĠĠĠĠĠĠ Ġis Primary Route : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġroute Line Color Resources : ĠRoute Line Color Resources ĊĠĠĠ Ġ): ĠList < Route Line Expression Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtraffic Expression Data Ġ= Ġget Route Line Traffic Expression Data ( route ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( traffic Expression Data . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġget Route Line Expression Data With Street Class Override ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtraffic Expression Data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . distance (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Color Resources , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Primary Route , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtraffic Back fill Road Classes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Line Expression Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Route Color For Con gestion ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Primary Route , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Color Resources ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġwill Ġextract Ġall Ġof Ġthe Ġroad Ġclasses Ġfor Ġthe Ġvarious Ġsections Ġof Ġthe Ġroute ĊĠĠĠĠ Ġ* Ġand Ġdetermine Ġthe Ġdistance Ġfrom Ġthe Ġorigin Ġpoint Ġto Ġthe Ġstarting Ġpoint Ġfor Ġeach ĊĠĠĠĠ Ġ* Ġroad Ġclass Ġsection Ġand Ġassociate Ġthat Ġdata Ġwith Ġa Ġtraffic Ġcon gestion Ġvalue . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠEach Ġitem Ġreturned Ġrepresents Ġa Ġdistance Ġfrom Ġthe Ġorigin Ġpoint , Ġthe Ġroad Ġclass ĊĠĠĠĠ Ġ* Ġbeginning Ġat Ġthat Ġdistance Ġand Ġthe Ġtraffic Ġcon gestion Ġvalue Ġfor Ġthat Ġsection . ĠThe ĊĠĠĠĠ Ġ* Ġroad Ġclass Ġand Ġcon gestion Ġremain Ġuntil Ġthe Ġnext Ġitem Ġin Ġthe Ġcollections . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġitems Ġreturned Ġare Ġordered Ġfrom Ġthe Ġpoint Ġclosest Ġto Ġthe Ġorigin Ġto Ġthe Ġpoint ĊĠĠĠĠ Ġ* Ġf art hest Ġfrom Ġthe Ġorigin . ĠIn Ġother Ġwords Ġfrom Ġthe Ġbeginning Ġof Ġthe Ġroute Ġuntil Ġthe Ġend . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġroute Ġthe Ġthe Ġcalculations Ġshould Ġbe Ġperformed Ġon . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġget Route Line Traffic Expression Data ( ĊĠĠĠĠĠĠĠ Ġroute : ĠDirection s Route ĊĠĠĠ Ġ): ĠList < Route Line Traffic Expression Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġrunning Distance Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġroute Line Traffic Data Ġ= Ġmutable ListOf < Route Line Traffic Expression Data >() ĊĊĠĠĠĠĠĠĠ Ġroute . leg s ()?. forEach Ġ{ Ġleg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif NonNull ( leg . annotation ()?. distance ()) Ġ{ Ġdistance List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclosure Ranges Ġ= Ġget Closure Ranges ( leg ). as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintersection sWith Geometry Index Ġ= Ġleg . steps () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map NotNull Ġ{ Ġit . intersection s () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . flatten () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . geometry Index () Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. toList () Ġ?: ĠlistOf () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroad Class Array Ġ= Ġif Ġ( intersection sWith Geometry Index . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf Null s < String >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintersection sWith Geometry Index . last (). geometry Index () !! Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintersection sWith Geometry Index . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis [ it . geometry Index () !! ] Ġ= Ġit . mapbox St re ets V 8 ()?. road Class () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ" intersection _ without _ class _ fallback " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf Null s ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleg . annotation ()?. con gestion ()?. forEach Indexed Ġ{ Ġindex , Ġcon gestion Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠisIn AC lo sure Ġ= Ġclosure Ranges . any Ġ{ Ġit . contains ( index ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcon gestion Value : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isIn AC lo sure ) ĠRoute Constants . Cl OS URE _ CON GEST ION _ VALUE Ġelse Ġcon gestion ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroad Class Ġ= Ġget Road Class For Index ( road Class Array , Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Traffic Data . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Line Traffic Expression Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcon gestion Value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroad Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunning Distance Ġ+= Ġdistance List [ index Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġroute Line Traffic Data . last OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last ?. traffic Con gestion Identifier Ġ== Ġcon gestion Value Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast . road Class Ġ== Ġroad Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( last ?. traffic Con gestion Identifier Ġ== Ġcon gestion Value Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroad Class Ġ== Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Traffic Data . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Line Traffic Expression Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunning Distance , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcon gestion Value , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroad Class ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrunning Distance Ġ+= Ġdistance List . last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġroute Line Traffic Data ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Closure Ranges ( leg : ĠRoute Leg ): ĠList < Int Range > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġleg . clo s ures () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Ġ{ Ġit . geometry Index Start () Ġ!= Ġnull Ġ&& Ġit . geometry Index End () Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt Range ( it . geometry Index Start () !! , Ġit . geometry Index End () !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠlistOf () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Restricted Route Sections ( route : ĠDirection s Route ): ĠList < List < Point >> Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcoordinates Ġ= ĠLine String . from Polyline ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . geometry () Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . PREC ISION _ 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). coordinates () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrestricted Sections Ġ= Ġmutable ListOf < List < Point >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġgeo Index : ĠInt ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute . leg s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map NotNull Ġ{ Ġit . steps () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . flatten () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map NotNull Ġ{ Ġit . intersection s () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . flatten () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . forEach Ġ{ Ġstep Intersection Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( step Intersection . classes ()?. contains (" restricted ") Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( geo Index Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgeo Index Ġ= Ġstep Intersection . geometry Index () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( geo Index Ġ!= Ġnull Ġ&& Ġstep Intersection . geometry Index () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsection Ġ= Ġcoordinates . sub List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgeo Index !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep Intersection . geometry Index () !! Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrestricted Sections . add ( section ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgeo Index Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrestricted Sections ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Failed Ġto Ġextract Ġroute Ġrestrictions . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" This Ġcould Ġbe Ġcaused Ġby Ġmissing Ġdata Ġin Ġthe ĠDirection s Route ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Road Class For Index ( road Class Array : ĠArray < String ? >, Ġindex : ĠInt ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( road Class Array . size Ġ> Ġindex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroad Class Array . slice ( 0 .. index ). last Ġ{ Ġit Ġ!= Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFor Ġeach Ġitem Ġin Ġthe Ġtraffic Expression Data Ġcollection Ġa Ġcolor Ġsubstitution Ġwill Ġtake ĊĠĠĠĠ Ġ* Ġplace Ġthat Ġhas Ġa Ġroad Ġclass Ġcontained Ġin Ġthe Ġtraffic Override Road Classes ĊĠĠĠĠ Ġ* Ġcollection . ĠFor Ġeach Ġof Ġthese Ġitems Ġthe Ġcolor Ġfor Ġ' unknown ' Ġtraffic Ġcon gestion ĊĠĠĠĠ Ġ* Ġwill Ġbe Ġreplaced Ġwith Ġthe Ġcolor Ġfor Ġ' low ' Ġtraffic Ġcon gestion . ĠIn Ġaddition Ġthe ĊĠĠĠĠ Ġ* Ġpercentage Ġof Ġthe Ġroute Ġdistance Ġtr ave led Ġwill Ġbe Ġcalculated Ġfor Ġeach Ġitem Ġin Ġthe ĊĠĠĠĠ Ġ* Ġtraffic Expression Data Ġcollection Ġand Ġincluded Ġin Ġthe Ġreturned Ġdata . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġtraffic Expression Data Ġthe Ġtraffic Ġdata Ġto Ġperform Ġthe Ġsubstitution Ġon ĊĠĠĠĠ Ġ* Ġ@ param Ġroute Distance Ġthe Ġtotal Ġdistance Ġof Ġthe Ġroute ĊĠĠĠĠ Ġ* Ġ@ param Ġroute Line Color Resources Ġprovides Ġcolor Ġvalues Ġfor Ġthe Ġroute Ġline ĊĠĠĠĠ Ġ* Ġ@ param Ġis Primary Route Ġindicates Ġif Ġthe Ġroute Ġused Ġis Ġthe Ġprimary Ġroute ĊĠĠĠĠ Ġ* Ġ@ param Ġtraffic Override Road Classes Ġa Ġcollection Ġof Ġroad Ġclasses Ġfor Ġwhich Ġa Ġcolor ĊĠĠĠĠ Ġ* Ġsubstitution Ġshould Ġoccur . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġget Route Line Expression Data With Street Class Override ( ĊĠĠĠĠĠĠĠ Ġtraffic Expression Data : ĠList < Route Line Traffic Expression Data >, ĊĠĠĠĠĠĠĠ Ġroute Distance : ĠDouble , ĊĠĠĠĠĠĠĠ Ġroute Line Color Resources : ĠRoute Line Color Resources , ĊĠĠĠĠĠĠĠ Ġis Primary Route : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġtraffic Override Road Classes : ĠList < String > ĊĠĠĠ Ġ): ĠList < Route Line Expression Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpression DataTo Return Ġ= Ġmutable ListOf < Route Line Expression Data >() ĊĠĠĠĠĠĠĠ Ġtraffic Expression Data . forEach Indexed Ġ{ Ġindex , Ġtraffic Exp Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Distance Tr ave led Ġ= Ġtraffic Exp Data . distance From Origin Ġ/ Ġroute Distance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtraffic Identifier Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtraffic Exp Data . traffic Con gestion Identifier Ġ== ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Constants . UNKNOWN _ CON GEST ION _ VALUE Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtraffic Override Road Classes . contains ( traffic Exp Data . road Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Constants . LOW _ CON GEST ION _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtraffic Exp Data . traffic Con gestion Identifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtraffic Color Ġ= Ġget Route Color For Con gestion ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtraffic Identifier , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Primary Route , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Line Color Resources ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression DataTo Return . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Line Expression Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpercent Distance Tr ave led , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtraffic Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( traffic Color Ġ!= Ġexpression DataTo Return . last (). segment Color ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression DataTo Return . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Line Expression Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpercent Distance Tr ave led , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtraffic Color ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġexpression DataTo Return ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGenerates Ġa ĠFeature Collection Ġand ĠLine String Ġbased Ġon Ġthe Ġ@ param Ġroute . ĊĠĠĠĠ Ġ* Ġ@ param Ġroute Ġthe ĠDirection s Route Ġto Ġused Ġto Ġderive Ġthe Ġresult ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġa ĠRoute Feature Data Ġcontaining Ġthe Ġoriginal Ġroute Ġand Ġa ĠFeature Collection Ġand ĊĠĠĠĠ Ġ* ĠLine String ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġgenerate Feature Collection ( route : ĠDirection s Route ): ĠRoute Feature Data Ġ= ĊĠĠĠĠĠĠĠ Ġgenerate Feature Collection ( route , Ġnull ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGenerates Ġa ĠFeature Collection Ġand ĠLine String Ġbased Ġon Ġthe Ġ@ param Ġroute . ĊĠĠĠĠ Ġ* Ġ@ param Ġroute Ġthe ĠDirection s Route Ġto Ġused Ġto Ġderive Ġthe Ġresult ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġa ĠRoute Feature Data Ġcontaining Ġthe Ġoriginal Ġroute Ġand Ġa ĠFeature Collection Ġand ĊĠĠĠĠ Ġ* ĠLine String ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġgenerate Feature Collection ( route : ĠRoute Line ): ĠRoute Feature Data Ġ= ĊĠĠĠĠĠĠĠ Ġgenerate Feature Collection ( route . route , Ġroute . identifier ) ĊĊĠĠĠ Ġinternal Ġfun Ġcalculate Route Gran ular Dist ances ( ĊĠĠĠĠĠĠĠ Ġcoordinates : ĠList < Point > ĊĠĠĠ Ġ): ĠRoute Line Gran ular Dist ances ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( coordinates . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Gran ular Dist ances ( coordinates ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate Gran ular Dist ances ( points : ĠList < Point >): ĠRoute Line Gran ular Dist ances Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdistance Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġindex Array Ġ= ĠSparse Array < Route Line Dist ances Index >( points . size ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ( points . size Ġ- Ġ 1 ) Ġdown To Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurr Ġ= Ġpoints [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Ġ= Ġpoints [ i Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Ġ+= Ġcalculate Distance ( curr , Ġprev ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Array . append ( i Ġ- Ġ 1 , ĠRoute Line Dist ances Index ( prev , Ġdistance )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġindex Array . append ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . size Ġ- Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRoute Line Dist ances Index ( points [ points . size Ġ- Ġ 1 ], Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠRoute Line Gran ular Dist ances ( distance , Ġindex Array ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Feature Collection ( ĊĠĠĠĠĠĠĠ Ġroute : ĠDirection s Route , ĊĠĠĠĠĠĠĠ Ġidentifier : ĠString ? ĊĠĠĠ Ġ): ĠRoute Feature Data Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroute Geometry Ġ= ĠLine String . from Polyline ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute . geometry () Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . PREC ISION _ 6 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġrandom Id Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠ Ġval Ġroute Feature Ġ= Ġwhen Ġ( identifier ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> ĠFeature . from Geometry ( route Geometry , Ġnull , Ġrandom Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠFeature . from Geometry ( route Geometry , Ġnull , Ġrandom Id ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Boolean Property ( identifier , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠRoute Feature Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFeature Collection . from Features ( listOf ( route Feature )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute Geometry ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuilds Ġa Ġ[ Feature Collection ] Ġrepresenting Ġway points Ġfrom Ġa Ġ[ Directions Route ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġroute Ġthe Ġroute Ġto Ġuse Ġfor Ġgenerating Ġthe Ġway points Ġ[ Feature Collection ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġ[ Feature Collection ] Ġrepresenting Ġthe Ġway points Ġderived Ġfrom Ġthe Ġ[ Directions Route ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġbuild Way Point Feature Collection ( route : ĠDirection s Route ): ĠFeature Collection Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġway Point Features Ġ= Ġmutable ListOf < Feature >() ĊĠĠĠĠĠĠĠ Ġroute . leg s ()?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Way Point Feature From Leg ( it , Ġ 0 )?. let Ġ{ Ġfeature Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġway Point Features . add ( feature ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . steps ()?. let Ġ{ Ġsteps Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Way Point Feature From Leg ( it , Ġsteps . last Index )?. let Ġ{ Ġfeature Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġway Point Features . add ( feature ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠFeature Collection . from Features ( way Point Features ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBuilds Ġa Ġ[ Feature ] Ġrepresenting Ġa Ġway point Ġfor Ġuse Ġon Ġa ĠMap box Ġ[ Map ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġleg Ġthe Ġ[ Route Leg ] Ġcontaining Ġthe Ġway point Ġinfo . ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Ġa Ġvalue Ġof Ġ 0 Ġindicates Ġa Ġproperty Ġvalue Ġof Ġorigin ĊĠĠĠĠ Ġ* Ġwill Ġbe Ġadded Ġto Ġthe Ġ[ Feature ] Ġelse Ġa Ġvalue Ġof Ġdestination Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġ[ Feature ] Ġrepresenting Ġthe Ġway point Ġfrom Ġthe Ġ[ Route Leg ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġbuild Way Point Feature From Leg ( leg : ĠRoute Leg , Ġindex : ĠInt ): ĠFeature ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġleg . steps ()?. get ( index )?. man eu ver ()?. location ()?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFeature . from Geometry ( Point . from Lng Lat ( this . longitude (), Ġthis . latitude ())) ĊĠĠĠĠĠĠĠ Ġ} ?. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprop Value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ 0 ) ĠRoute Constants . WAY POINT _ ORIGIN _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠRoute Constants . WAY POINT _ DEST INATION _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add String Property ( Route Constants . WAY POINT _ PROPERTY _ KEY , Ġprop Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġget Layer Visibility ( style : ĠStyle , Ġlayer Id : ĠString ): ĠVisibility ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( style . is Fully Loaded ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . get Layer ( layer Id )?. visibility ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġif Ġa Ġlayer Ġwith Ġthe Ġgiven ĠID Ġexists Ġelse Ġreturns Ġa Ġdefault Ġlayer ĠID ĊĠĠĠĠ Ġ* Ġ@ param Ġbelow Layer Id Ġthe Ġlayer ĠID Ġto Ġlook Ġfor ĊĠĠĠĠ Ġ* Ġ@ param Ġstyle Ġthe Ġ[ Style ] Ġcontaining Ġthe Ġlayers ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġeither Ġthe Ġlayer ĠID Ġif Ġfound Ġelse Ġa Ġdefault Ġlayer ĠID ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Below Layer Id ToUse ( below Layer Id : ĠString ?, Ġstyle : ĠStyle ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( below Layer Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġbelow Layer Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġwhen Ġ( style . style Layer Exists ( below Layer Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġbelow Layer Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Layer Ġ$ below Layer Id Ġnot Ġfound . ĠRoute Ġline Ġrelated Ġlayers Ġwill Ġbe Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" placed Ġat Ġtop Ġof Ġthe Ġmap Ġstack ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculates Ġthe Ġdistance Ġbetween Ġ 2 Ġpoints Ġusing ĊĠĠĠĠ Ġ* Ġ[ EPSG : 3 8 5 7 Ġprojection ]( https :// ep sg . io / 3 8 5 7 ). ĊĠĠĠĠ Ġ* ĠInfo Ġin Ġ[ mapbox - gl - js / issues / 9 9 9 8 ]( https :// github . com / mapbox / mapbox - gl - js / issues / 9 9 9 8 ). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġcalculate Distance ( point 1 : ĠPoint , Ġpoint 2 : ĠPoint ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġdouble ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( project X ( point 1 . longitude ()) Ġ- Ġproject X ( point 2 . longitude ())), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( project Y ( point 1 . latitude ()) Ġ- Ġproject Y ( point 2 . latitude ())) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsqrt ( d [ 0 ] Ġ* Ġd [ 0 ] Ġ+ Ġd [ 1 ] Ġ* Ġd [ 1 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġline Ġfrom Ġthe Ġupcoming Ġgeometry Ġpoint Ġand Ġthe Ġprevious Ġ 1 0 Ġpoints ĊĠĠĠĠ Ġ* Ġand Ġtries Ġto Ġfind Ġthe Ġthe Ġdistance Ġfrom Ġcurrent Ġpoint Ġto Ġthat Ġline . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠWe Ġneed Ġto Ġtake Ġmore Ġpoints Ġthan Ġ< previous Ġ- Ġupcoming > Ġbecause Ġthe Ġroute Ġprogress Ġupdate ĊĠĠĠĠ Ġ* Ġcan Ġjump Ġby Ġmore Ġthan Ġ 1 Ġgeometry Ġpoint . ĊĠĠĠĠ Ġ* ĠIf Ġthis Ġhappens , Ġthe Ġp uck Ġwill Ġanimate Ġthrough Ġmultiple Ġgeometry Ġpoints , ĊĠĠĠĠ Ġ* Ġso Ġwe Ġneed Ġto Ġmake Ġa Ġline Ġwith Ġa Ġbuffer . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġfind Distance To Nearest Point On Current Line ( ĊĠĠĠĠĠĠĠ Ġpoint : ĠPoint , ĊĠĠĠĠĠĠĠ Ġgran ular Dist ances : ĠRoute Line Gran ular Dist ances , ĊĠĠĠĠĠĠĠ Ġupcoming Index : ĠInt ĊĠĠĠ Ġ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTur f Misc . nearest Point On Line ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoint , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgran ular Dist ances . distances Array . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoints Ġ= Ġmutable ListOf < Point >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġmax ( up coming Index Ġ- Ġ 1 0 , Ġ 0 ) .. up coming Index ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . add ( this . get ( i ). point ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTur f Constants . UNIT _ METER S ĊĠĠĠĠĠĠĠ Ġ). getNumber Property (" dist ") ?. toDouble () Ġ?: Ġ 0 . 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġbuild Scaling Expression ( scaling Values : ĠList < Route Line Scale Value >): ĠExpression Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpression Builder Ġ= ĠExpression . Expression Builder (" interpolate ") ĊĠĠĠĠĠĠĠ Ġexpression Builder . add Argument ( Expression . exponent ial Ġ{ Ġliteral ( 1 . 5 ) Ġ}) ĊĠĠĠĠĠĠĠ Ġexpression Builder . zoom () ĊĠĠĠĠĠĠĠ Ġscaling Values . forEach Ġ{ Ġroute Line Scale Value Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Builder . stop Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . literal ( route Line Scale Value . scale Stop . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġliteral ( route Line Scale Value . scale Multiplier . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġliteral ( route Line Scale Value . scale . toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġexpression Builder . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġget Route Line Color Expressions ( ĊĠĠĠĠĠĠĠ Ġdefault Color : ĠInt , ĊĠĠĠĠĠĠĠ Ġroute Style Descriptors : ĠList < Route Style Descriptor >, ĊĠĠĠĠĠĠĠ Ġroute Color Provider : ĠK Property 1 < Route Style Descriptor , ĠInt > ĊĠĠĠ Ġ): ĠList < Expression > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpressions Ġ= Ġmutable ListOf < Expression >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeq Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Ġ{ Ġliteral ( Route Constants . DEFAULT _ ROUTE _ DESCRIPTOR _ PLACE HOLDER ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġliteral ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor ( default Color ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġroute Style Descriptors . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpressions . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeq Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Ġ{ Ġliteral ( it . route Identifier ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġliteral ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpressions . add ( color ( route Color Provider . get ( it ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġexpressions . plus ( color ( default Color )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġinitialize Layers ( style : ĠStyle , Ġoptions : ĠMap box Route Line Options ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! style . fully Loaded Ġ|| Ġlayers Are Initialized ( style )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbelow Layer Id ToUse : ĠString ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Below Layer Id ToUse ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . route Line Below Layer Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! style . style Source Exists ( Route Constants . WAY POINT _ SOURCE _ ID )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeo Json Source ( Route Constants . WAY POINT _ SOURCE _ ID ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax zoom ( 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeature Collection ( Feature Collection . from Features ( listOf ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtolerance ( options . tolerance ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. bind To ( style ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! style . style Source Exists ( Route Constants . PRIMARY _ ROUTE _ SOURCE _ ID )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeo Json Source ( Route Constants . PRIMARY _ ROUTE _ SOURCE _ ID ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax zoom ( 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Metrics ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeature Collection ( Feature Collection . from Features ( listOf < Feature > ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtolerance ( options . tolerance ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. bind To ( style ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! style . style Source Exists ( Route Constants . ALTER NATIVE _ ROUTE 1 _ SOURCE _ ID )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeo Json Source ( Route Constants . ALTER NATIVE _ ROUTE 1 _ SOURCE _ ID ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax zoom ( 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Metrics ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtolerance ( options . tolerance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeature Collection ( Feature Collection . from Features ( listOf < Feature > ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. bind To ( style ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! style . style Source Exists ( Route Constants . ALTER NATIVE _ ROUTE 2 _ SOURCE _ ID )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeo Json Source ( Route Constants . ALTER NATIVE _ ROUTE 2 _ SOURCE _ ID ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax zoom ( 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Metrics ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeature Collection ( Feature Collection . from Features ( listOf < Feature > ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtolerance ( options . tolerance ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. bind To ( style ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( options . enable Restricted Road Layer Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! style . style Source Exists ( Route Constants . RE STRICT ED _ RO AD _ SOURCE _ ID ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeo Json Source ( Route Constants . RE STRICT ED _ RO AD _ SOURCE _ ID ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax zoom ( 1 6 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Metrics ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeature Collection ( Feature Collection . from Features ( listOf < Feature > ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtolerance ( options . tolerance ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. bind To ( style ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoptions . route Layer Provider . build Alternative Route C asing Layers ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . resource Provider . route Line Color Resources . alternative Route C asing Color ĊĠĠĠĠĠĠĠ Ġ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . bind To ( style , ĠLayer Position ( null , Ġbelow Layer Id ToUse , Ġnull )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoptions . route Layer Provider . build Alternative Route Layers ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . resource Provider . rounded Line Cap , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . resource Provider . route Line Color Resources . alternative Route Default Color ĊĠĠĠĠĠĠĠ Ġ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . bind To ( style , ĠLayer Position ( null , Ġbelow Layer Id ToUse , Ġnull )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoptions . route Layer Provider . build Alternative Route Traffic Layers ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . resource Provider . rounded Line Cap , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . resource Provider . route Line Color Resources . alternative Route Default Color ĊĠĠĠĠĠĠĠ Ġ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . bind To ( style , ĠLayer Position ( null , Ġbelow Layer Id ToUse , Ġnull )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoptions . route Layer Provider . build Primary Route C asing Layer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . resource Provider . route Line Color Resources . route C asing Color ĊĠĠĠĠĠĠĠ Ġ). bind To ( style , ĠLayer Position ( null , Ġbelow Layer Id ToUse , Ġnull )) ĊĊĠĠĠĠĠĠĠ Ġoptions . route Layer Provider . build Primary Route Layer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . resource Provider . rounded Line Cap , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . resource Provider . route Line Color Resources . route Default Color ĊĠĠĠĠĠĠĠ Ġ). bind To ( style , ĠLayer Position ( null , Ġbelow Layer Id ToUse , Ġnull )) ĊĊĠĠĠĠĠĠĠ Ġoptions . route Layer Provider . build Primary Route Traffic Layer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . resource Provider . rounded Line Cap , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . resource Provider . route Line Color Resources . route Default Color ĊĠĠĠĠĠĠĠ Ġ). bind To ( style , ĠLayer Position ( null , Ġbelow Layer Id ToUse , Ġnull )) ĊĊĠĠĠĠĠĠĠ Ġoptions . route Layer Provider . build Way Point Layer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . origin Icon , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . destination Icon ĊĠĠĠĠĠĠĠ Ġ). bind To ( style , ĠLayer Position ( null , Ġbelow Layer Id ToUse , Ġnull )) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( options . enable Restricted Road Layer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . route Layer Provider . build Access Restrictions Layer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . resource Provider . restricted Road Dash Array , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . resource Provider . restricted Road Opacity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . resource Provider . route Line Color Resources . restricted Road Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . resource Provider . restricted Road LineWidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). bind To ( style , ĠLayer Position ( null , Ġbelow Layer Id ToUse , Ġnull )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġlayers Are Initialized ( style : ĠStyle ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġstyle . fully Loaded Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . style Source Exists ( Route Constants . PRIMARY _ ROUTE _ SOURCE _ ID ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . style Source Exists ( Route Constants . ALTER NATIVE _ ROUTE 1 _ SOURCE _ ID ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . style Source Exists ( Route Constants . ALTER NATIVE _ ROUTE 2 _ SOURCE _ ID ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . style Layer Exists ( Route Layer Constants . PRIMARY _ ROUTE _ LAYER _ ID ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . style Layer Exists ( Route Layer Constants . PRIMARY _ ROUTE _ TRA FF IC _ LAYER _ ID ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . style Layer Exists ( Route Layer Constants . PRIMARY _ ROUTE _ CAS ING _ LAYER _ ID ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . style Layer Exists ( Route Layer Constants . ALTER NATIVE _ ROUTE 1 _ LAYER _ ID ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . style Layer Exists ( Route Layer Constants . ALTER NATIVE _ ROUTE 2 _ LAYER _ ID ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . style Layer Exists ( Route Layer Constants . ALTER NATIVE _ ROUTE 1 _ CAS ING _ LAYER _ ID ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . style Layer Exists ( Route Layer Constants . ALTER NATIVE _ ROUTE 2 _ CAS ING _ LAYER _ ID ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . style Layer Exists ( Route Layer Constants . ALTER NATIVE _ ROUTE 1 _ TRA FF IC _ LAYER _ ID ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle . style Layer Exists ( Route Layer Constants . ALTER NATIVE _ ROUTE 2 _ TRA FF IC _ LAYER _ ID ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDe codes Ġthe Ġroute Ġgeometry Ġinto Ġnested Ġarrays Ġof Ġle gs Ġ-> Ġsteps Ġ-> Ġpoints . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġfirst Ġand Ġlast Ġpoint Ġof Ġadjacent Ġsteps Ġoverlap Ġand Ġare Ġduplicated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġparse Route Points ( ĊĠĠĠĠĠĠĠ Ġroute : ĠDirection s Route , ĊĠĠĠ Ġ): ĠRoute Points ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprecision Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( route . route Options ()?. ge ometries () Ġ== ĠDirection s Criteria . GEOMETRY _ POLY LINE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . PREC ISION _ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . PREC ISION _ 6 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnested List Ġ= Ġroute . leg s ()?. map Ġ{ Ġroute Leg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute Leg . steps ()?. map Ġ{ Ġleg Step Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġleg Step . geometry ()?. let Ġ{ Ġgeometry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPoly line Utils . decode ( geometry , Ġprecision ). toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġflat List Ġ= Ġnested List . flatten (). flatten () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠRoute Points ( nested List , Ġflat List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġproject X ( x : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġx Ġ/ Ġ 3 6 0 . 0 Ġ+ Ġ 0 . 5 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġproject Y ( y : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsin Ġ= Ġsin ( y Ġ* ĠMath . PI Ġ/ Ġ 1 8 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġy 2 Ġ= Ġ 0 . 5 Ġ- Ġ 0 . 2 5 Ġ* Ġln (( 1 Ġ+ Ġsin ) Ġ/ Ġ( 1 Ġ- Ġsin )) Ġ/ ĠMath . PI ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy 2 Ġ< Ġ 0 Ġ-> Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy 2 Ġ> Ġ 1 Ġ-> Ġ 1 . 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġy 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ