1 package org.opentrafficsim.road.network.sampling.data;
2
3 import org.djunits.unit.SpeedUnit;
4 import org.djunits.value.vfloat.scalar.FloatSpeed;
5 import org.opentrafficsim.core.gtu.GTUException;
6 import org.opentrafficsim.core.network.NetworkException;
7 import org.opentrafficsim.kpi.sampling.data.ExtendedDataTypeSpeed;
8 import org.opentrafficsim.road.gtu.lane.LaneBasedGTU;
9 import org.opentrafficsim.road.network.sampling.GtuData;
10
11
12
13
14
15
16
17
18
19
20
21
22 public class ReferenceSpeed extends ExtendedDataTypeSpeed<GtuData>
23 {
24
25
26 public static final ReferenceSpeedsampling/data/ReferenceSpeed.html#ReferenceSpeed">ReferenceSpeed INSTANCE = new ReferenceSpeed();
27
28
29
30
31 public ReferenceSpeed()
32 {
33 super("referenceSpeed");
34 }
35
36
37 @Override
38 public final FloatSpeed getValue(final GtuData gtu)
39 {
40 LaneBasedGTU gtuObj = gtu.getGtu();
41 try
42 {
43 double v1 = gtuObj.getReferencePosition().getLane().getSpeedLimit(gtuObj.getGTUType()).si;
44 double v2 = gtuObj.getMaximumSpeed().si;
45 return new FloatSpeed(v1 < v2 ? v1 : v2, SpeedUnit.SI);
46 }
47 catch (GTUException exception)
48 {
49
50 return new FloatSpeed(Double.NaN, SpeedUnit.SI);
51 }
52 catch (NetworkException exception)
53 {
54 throw new RuntimeException("Could not obtain reference speed from GTU " + gtuObj, exception);
55 }
56 }
57
58
59 @Override
60 public final String toString()
61 {
62 return "Reference Speed";
63 }
64
65 }