4545import ch .sbb .matsim .routing .pt .raptor .RaptorUtils ;
4646import ch .sbb .matsim .routing .pt .raptor .SwissRailRaptor ;
4747import ch .sbb .matsim .routing .pt .raptor .SwissRailRaptorData ;
48+ import jakarta .annotation .Nullable ;
4849
4950public class TransitRouterService {
5051 private final static GeometryFactory geometryFactory = new GeometryFactory ();
@@ -72,7 +73,7 @@ public class TransitRouterService {
7273 this .schedule = schedule ;
7374 }
7475
75- public TransitRouterResponse processRequest (TransitRouterRequest request ) {
76+ public TransitRouterResponse processRequest (TransitRouterRequest request , @ Nullable TransitUtilities utilities ) {
7677 TransitRouterResponse response = new TransitRouterResponse ();
7778 response .requestIndex = request .requestIndex ;
7879
@@ -89,7 +90,10 @@ public TransitRouterResponse processRequest(TransitRouterRequest request) {
8990 Facility fromFacility = FacilitiesUtils .wrapLinkAndCoord (fromLink , fromCoord );
9091 Facility toFacility = FacilitiesUtils .wrapLinkAndCoord (toLink , toCoord );
9192
92- RaptorParameters parameters = createParameters (config , configuration , walkConfiguration , request , schedule );
93+ TransitUtilities appliedUtilities = mergeUtilities (utilities , request .utilities );
94+
95+ RaptorParameters parameters = createParameters (config , configuration , walkConfiguration , appliedUtilities ,
96+ schedule );
9397 SwissRailRaptor router = new SwissRailRaptor (data , person -> parameters , routeSelector , stopFinder ,
9498 inVehicleCostCalculator , transferCostCalculator );
9599
@@ -410,7 +414,7 @@ static public WalkParameters createWalkParameters(Config config, WalkConfigurati
410414 }
411415
412416 static private RaptorParameters createParameters (Config config , TransitConfiguration configuration ,
413- WalkConfiguration walkConfiguration , TransitRouterRequest request , TransitSchedule schedule ) {
417+ WalkConfiguration walkConfiguration , @ Nullable TransitUtilities utilities , TransitSchedule schedule ) {
414418 RaptorParameters parameters = RaptorUtils .createParameters (config );
415419
416420 EqasimRaptorConfigGroup raptorConfig = (EqasimRaptorConfigGroup ) config .getModules ()
@@ -424,35 +428,35 @@ static private RaptorParameters createParameters(Config config, TransitConfigura
424428 parameters .setDirectWalkFactor (configuration .directWalkFactor );
425429 }
426430
427- if (request . utilities != null ) {
431+ if (utilities != null ) {
428432 parameters .setUseTransportModeUtilities (true );
429433
430- if (request . utilities .rail_u_h != null ) {
431- parameters .setMarginalUtilityOfTravelTime_utl_s ("rail" , request . utilities .rail_u_h / 3600.0 );
434+ if (utilities .rail_u_h != null ) {
435+ parameters .setMarginalUtilityOfTravelTime_utl_s ("rail" , utilities .rail_u_h / 3600.0 );
432436 }
433437
434- if (request . utilities .subway_u_h != null ) {
435- parameters .setMarginalUtilityOfTravelTime_utl_s ("subway" , request . utilities .subway_u_h / 3600.0 );
438+ if (utilities .subway_u_h != null ) {
439+ parameters .setMarginalUtilityOfTravelTime_utl_s ("subway" , utilities .subway_u_h / 3600.0 );
436440 }
437441
438- if (request . utilities .bus_u_h != null ) {
439- parameters .setMarginalUtilityOfTravelTime_utl_s ("bus" , request . utilities .bus_u_h / 3600.0 );
442+ if (utilities .bus_u_h != null ) {
443+ parameters .setMarginalUtilityOfTravelTime_utl_s ("bus" , utilities .bus_u_h / 3600.0 );
440444 }
441445
442- if (request . utilities .tram_u_h != null ) {
443- parameters .setMarginalUtilityOfTravelTime_utl_s ("tram" , request . utilities .tram_u_h / 3600.0 );
446+ if (utilities .tram_u_h != null ) {
447+ parameters .setMarginalUtilityOfTravelTime_utl_s ("tram" , utilities .tram_u_h / 3600.0 );
444448 }
445449
446- if (request . utilities .wait_u_h != null ) {
447- parameters .setMarginalUtilityOfWaitingPt_utl_s (request . utilities .wait_u_h / 3600.0 );
450+ if (utilities .wait_u_h != null ) {
451+ parameters .setMarginalUtilityOfWaitingPt_utl_s (utilities .wait_u_h / 3600.0 );
448452 }
449453
450- if (request . utilities .walk_u_h != null ) {
451- parameters .setMarginalUtilityOfTravelTime_utl_s ("walk" , request . utilities .walk_u_h / 3600.0 );
454+ if (utilities .walk_u_h != null ) {
455+ parameters .setMarginalUtilityOfTravelTime_utl_s ("walk" , utilities .walk_u_h / 3600.0 );
452456 }
453457
454- if (request . utilities .transfer_u != null ) {
455- parameters .setTransferPenaltyFixCostPerTransfer (-request . utilities .transfer_u );
458+ if (utilities .transfer_u != null ) {
459+ parameters .setTransferPenaltyFixCostPerTransfer (-utilities .transfer_u );
456460 }
457461 }
458462
@@ -484,4 +488,60 @@ static public TransitRouterService create(Config config, Network network, Transi
484488
485489 return new TransitRouterService (data , config , network , configuration , walkConfiguration , schedule );
486490 }
491+
492+ static public TransitUtilities mergeUtilities (TransitUtilities globalUtilities , TransitUtilities requestUtilities ) {
493+ if (globalUtilities == null && requestUtilities == null ) {
494+ return null ;
495+ }
496+
497+ if (globalUtilities == null ) {
498+ return requestUtilities ;
499+ }
500+
501+ TransitUtilities copy = new TransitUtilities ();
502+ copy .rail_u_h = globalUtilities .rail_u_h ;
503+ copy .subway_u_h = globalUtilities .subway_u_h ;
504+ copy .bus_u_h = globalUtilities .bus_u_h ;
505+ copy .tram_u_h = globalUtilities .tram_u_h ;
506+ copy .other_u_h = globalUtilities .other_u_h ;
507+ copy .wait_u_h = globalUtilities .wait_u_h ;
508+ copy .walk_u_h = globalUtilities .walk_u_h ;
509+ copy .transfer_u = globalUtilities .transfer_u ;
510+
511+ if (requestUtilities != null ) {
512+ if (requestUtilities .rail_u_h != null ) {
513+ copy .rail_u_h = requestUtilities .rail_u_h ;
514+ }
515+
516+ if (requestUtilities .subway_u_h != null ) {
517+ copy .subway_u_h = requestUtilities .subway_u_h ;
518+ }
519+
520+ if (requestUtilities .bus_u_h != null ) {
521+ copy .bus_u_h = requestUtilities .bus_u_h ;
522+ }
523+
524+ if (requestUtilities .tram_u_h != null ) {
525+ copy .tram_u_h = requestUtilities .tram_u_h ;
526+ }
527+
528+ if (requestUtilities .other_u_h != null ) {
529+ copy .other_u_h = requestUtilities .other_u_h ;
530+ }
531+
532+ if (requestUtilities .wait_u_h != null ) {
533+ copy .wait_u_h = requestUtilities .wait_u_h ;
534+ }
535+
536+ if (requestUtilities .walk_u_h != null ) {
537+ copy .walk_u_h = requestUtilities .walk_u_h ;
538+ }
539+
540+ if (requestUtilities .transfer_u != null ) {
541+ copy .transfer_u = requestUtilities .transfer_u ;
542+ }
543+ }
544+
545+ return copy ;
546+ }
487547}
0 commit comments