1414
1515import java .io .File ;
1616import java .io .IOException ;
17- import java .util .ArrayList ;
18- import java .util .List ;
19- import java .util .Optional ;
20- import java .util .Random ;
17+ import java .util .*;
2118import java .util .stream .Collectors ;
19+ import java .util .stream .Stream ;
2220
2321public class CreateDrtVehicles {
2422 private final static Logger logger = LogManager .getLogger (CreateDrtVehicles .class );
@@ -30,7 +28,7 @@ public static void main(String[] args) throws CommandLine.ConfigurationException
3028 .requireOptions ("network-path" , "output-vehicles-path" , "vehicles-number" )
3129 .allowOptions ("vehicles-capacity" , "service-begin-time" , "service-end-time" , "vehicle-id-prefix" )
3230 .allowOptions ("random-seed" )
33- .allowOptions ("service-area-path" )
31+ .allowOptions ("service-area-path" , "network-modes" )
3432 .build ();
3533 int vehiclesNumber = Integer .parseInt (cmd .getOptionStrict ("vehicles-number" ));
3634 int vehiclesCapacity = cmd .hasOption ("vehicles-capacity" ) ? Integer .parseInt (cmd .getOptionStrict ("vehicles-capacity" )) : 4 ;
@@ -39,17 +37,17 @@ public static void main(String[] args) throws CommandLine.ConfigurationException
3937 long randomSeed = cmd .hasOption ("random-seed" ) ? Long .parseLong (cmd .getOptionStrict ("random-seed" )) : DEFAULT_RANDOM_SEED ;
4038 String vehicleIdPrefx = cmd .getOption ("vehicle-id-prefix" ).orElse ("vehicle_drt_" );
4139 String serviceArea = cmd .getOption ("service-area-path" ).orElse (null );
40+ Set <String > networkModes = cmd .hasOption ("network-modes" ) ? Arrays .stream (cmd .getOptionStrict ("network-modes" ).split ("," )).map (String ::trim ).collect (Collectors .toSet ()) : Set .of ("car" );
4241 Network network = NetworkUtils .createNetwork ();
4342 new MatsimNetworkReader (network ).readFile (cmd .getOptionStrict ("network-path" ));
44- List < Id < Link >> linksIds ;
43+ Stream <? extends Link > linkStream = network . getLinks (). values (). stream () ;
4544 if (serviceArea != null ) {
4645 ScenarioExtent extent = new ShapeScenarioExtent .Builder (new File (serviceArea ), Optional .empty (), Optional .empty ()).build ();
47- linksIds = network .getLinks ().values ().stream ()
48- .filter (link -> extent .isInside (link .getFromNode ().getCoord ()) || extent .isInside (link .getToNode ().getCoord ()))
49- .map (Link ::getId )
50- .collect (Collectors .toList ());
51- } else {
52- linksIds = new ArrayList <>(network .getLinks ().keySet ());
46+ linkStream = linkStream .filter (link -> extent .isInside (link .getFromNode ().getCoord ()) || extent .isInside (link .getToNode ().getCoord ()));
47+ }
48+ List <Id <Link >> linksIds = linkStream .filter (link -> link .getAllowedModes ().stream ().anyMatch (networkModes ::contains )).map (Link ::getId ).toList ();
49+ if (linksIds .size () == 0 ) {
50+ throw new IllegalStateException ("No matching links to sample from" );
5351 }
5452 Random random = new Random (randomSeed );
5553 FleetSpecification fleetSpecification = new FleetSpecificationImpl ();
0 commit comments