View Javadoc
1   package org.opentrafficsim.road.definitions;
2   
3   import java.awt.Color;
4   import java.util.List;
5   import java.util.Locale;
6   
7   import org.djunits.value.vdouble.scalar.Length;
8   import org.djunits.value.vdouble.vector.LengthVector;
9   import org.opentrafficsim.base.StripeElement;
10  import org.opentrafficsim.core.definitions.DefaultsNl;
11  import org.opentrafficsim.road.gtu.generator.GeneratorPositions.LaneBias;
12  import org.opentrafficsim.road.gtu.generator.GeneratorPositions.LaneBiases;
13  import org.opentrafficsim.road.network.lane.LaneType;
14  import org.opentrafficsim.road.network.lane.StripeData;
15  import org.opentrafficsim.road.network.lane.StripeData.StripePhaseSync;
16  
17  /**
18   * Road defaults for locale nl_NL.
19   * <p>
20   * Copyright (c) 2022-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
21   * BSD-style license. See <a href="https://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
22   * </p>
23   * @author <a href="https://github.com/averbraeck">Alexander Verbraeck</a>
24   * @author <a href="https://github.com/peter-knoppers">Peter Knoppers</a>
25   * @author <a href="https://github.com/wjschakel">Wouter Schakel</a>
26   */
27  public class DefaultsRoadNl extends DefaultsRoad
28  {
29  
30      /**
31       * Constructor setting locale nl_NL.
32       */
33      DefaultsRoadNl()
34      {
35          super(new Locale("nl", "NL"));
36      }
37  
38      /***************************************************************************************/
39      /**************************************** LANE *****************************************/
40      /***************************************************************************************/
41  
42      /** For two-way roads. */
43      public static final LaneType TWO_WAY_LANE = new LaneType("NL.TWO_WAY_LANE");
44  
45      /** Provincial road (provinciaalse weg / N-weg, 80km/h). */
46      public static final LaneType PROVINCIAL_ROAD = new LaneType("NL.PROVINCIAL_ROAD", TWO_WAY_LANE);
47  
48      /** Rural (landelijk, 60km/h). */
49      public static final LaneType RURAL_ROAD = new LaneType("NL.RURAL_ROAD", TWO_WAY_LANE);
50  
51      /** Urban (stedelijk, 50km/h). */
52      public static final LaneType URBAN_ROAD = new LaneType("NL.URBAN_ROAD", TWO_WAY_LANE);
53  
54      /** Residential (woonerf, 30km/h). */
55      public static final LaneType RESIDENTIAL_ROAD = new LaneType("NL.RESIDENTIAL_ROAD", TWO_WAY_LANE);
56  
57      /** For one-way roads. */
58      public static final LaneType ONE_WAY_LANE = new LaneType("NL.ONE_WAY_LANE");
59  
60      /** Freeway (snelweg, 130km/h). */
61      public static final LaneType FREEWAY = new LaneType("NL.FREEWAY", ONE_WAY_LANE);
62  
63      /** Highway (autoweg, 100km/h). */
64      public static final LaneType HIGHWAY = new LaneType("NL.HIGHWAY", ONE_WAY_LANE);
65  
66      /** Bus lane. */
67      public static final LaneType BUS_LANE = new LaneType("NL.BUS_LANE");
68  
69      /** Moped path (fiets-/bromfietspad). */
70      public static final LaneType MOPED_PATH = new LaneType("NL.MOPED_PATH");
71  
72      /** Bicycle path (fietspad). */
73      public static final LaneType BICYCLE_PATH = new LaneType("NL.BICYCLE_PATH", MOPED_PATH);
74  
75      /** Footpath (voetpad). */
76      public static final LaneType FOOTPATH = new LaneType("NL.FOOTPATH");
77  
78      static
79      {
80          TWO_WAY_LANE.addCompatibleGtuType(DefaultsNl.ROAD_USER);
81          ONE_WAY_LANE.addCompatibleGtuType(DefaultsNl.ROAD_USER);
82          FREEWAY.addIncompatibleGtuType(DefaultsNl.PEDESTRIAN);
83          FREEWAY.addIncompatibleGtuType(DefaultsNl.BICYCLE);
84          HIGHWAY.addIncompatibleGtuType(DefaultsNl.PEDESTRIAN);
85          HIGHWAY.addIncompatibleGtuType(DefaultsNl.BICYCLE);
86          PROVINCIAL_ROAD.addIncompatibleGtuType(DefaultsNl.PEDESTRIAN);
87          PROVINCIAL_ROAD.addIncompatibleGtuType(DefaultsNl.BICYCLE);
88          BUS_LANE.addCompatibleGtuType(DefaultsNl.BUS);
89          MOPED_PATH.addCompatibleGtuType(DefaultsNl.BICYCLE);
90          BICYCLE_PATH.addIncompatibleGtuType(DefaultsNl.MOPED);
91          FOOTPATH.addCompatibleGtuType(DefaultsNl.PEDESTRIAN);
92      }
93  
94      /***************************************************************************************/
95      /************************************** LANE BIAS **************************************/
96      /***************************************************************************************/
97  
98      /** Lane biases for car and truck. */
99      public static final LaneBiases LANE_BIAS_CAR_TRUCK = new LaneBiases();
100 
101     static
102     {
103         LANE_BIAS_CAR_TRUCK.addBias(DefaultsNl.CAR, LaneBias.WEAK_LEFT);
104         LANE_BIAS_CAR_TRUCK.addBias(DefaultsNl.TRUCK, LaneBias.TRUCK_RIGHT);
105     }
106 
107     /***************************************************************************************/
108     /*************************************** STRIPES ***************************************/
109     /***************************************************************************************/
110 
111     /** Standard width. */
112     private static final Length CM20 = Length.ofSI(0.2);
113 
114     /** Standard dashes. */
115     private static final LengthVector DASH = new LengthVector(new double[] {9.0, 3.0});
116 
117     /** Solid stripe. */
118     public static final StripeData SOLID = new StripeData(List.of(StripeElement.continuous(CM20, Color.WHITE)), false, false);
119 
120     /** Left-permeable stripe. */
121     public static final StripeData LEFT = new StripeData(List.of(StripeElement.continuous(CM20, Color.WHITE),
122             StripeElement.gap(CM20), StripeElement.dashed(CM20, Color.WHITE, DASH)), true, false);
123 
124     /** Right-permable stripe. */
125     public static final StripeData RIGHT = new StripeData(List.of(StripeElement.dashed(CM20, Color.WHITE, DASH),
126             StripeElement.gap(CM20), StripeElement.continuous(CM20, Color.WHITE)), false, true);
127 
128     /** Dashed stripe. */
129     public static final StripeData DASHED = new StripeData(List.of(StripeElement.dashed(CM20, Color.WHITE, DASH)), true, true);
130 
131     /** Double solid stripe. */
132     public static final StripeData DOUBLE_SOLID = new StripeData(List.of(StripeElement.continuous(CM20, Color.WHITE),
133             StripeElement.gap(CM20), StripeElement.continuous(CM20, Color.WHITE)), false, false);
134 
135     /** Double dashed stripe. */
136     public static final StripeData DOUBLE_DASHED = new StripeData(List.of(StripeElement.dashed(CM20, Color.WHITE, DASH),
137             StripeElement.gap(CM20), StripeElement.dashed(CM20, Color.WHITE, DASH)), true, true);
138 
139     /** Block stripe. */
140     public static final StripeData BLOCK = new StripeData(
141             List.of(StripeElement.dashed(CM20.times(2.0), Color.WHITE, new LengthVector(new double[] {3.0, 1.0}))), true, true);
142 
143     static
144     {
145         LEFT.setPhaseSync(StripePhaseSync.UPSTREAM);
146         RIGHT.setPhaseSync(StripePhaseSync.UPSTREAM);
147         DASHED.setPhaseSync(StripePhaseSync.UPSTREAM);
148         DOUBLE_DASHED.setPhaseSync(StripePhaseSync.UPSTREAM);
149         BLOCK.setPhaseSync(StripePhaseSync.UPSTREAM);
150     }
151 
152 }