1 package org.opentrafficsim.road.network.lane; 2 3 import java.util.HashMap; 4 import java.util.List; 5 import java.util.Map; 6 7 import org.djunits.value.vdouble.scalar.Length; 8 import org.djunits.value.vdouble.scalar.Speed; 9 import org.opentrafficsim.core.geometry.OTSGeometryException; 10 import org.opentrafficsim.core.gtu.GTUType; 11 import org.opentrafficsim.core.network.LongitudinalDirectionality; 12 import org.opentrafficsim.core.network.NetworkException; 13 import org.opentrafficsim.road.network.RoadNetwork; 14 15 /** 16 * Lane without traffic, e.g. emergency lane next to highway. 17 * <p> 18 * Copyright (c) 2013-2019 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br> 19 * BSD-style license. See <a href="http://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>. 20 * <p> 21 * $LastChangedDate: 2015-09-16 19:20:07 +0200 (Wed, 16 Sep 2015) $, @version $Revision: 1405 $, by $Author: averbraeck $, 22 * initial version Feb 28, 2015 <br> 23 * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a> 24 */ 25 public class NoTrafficLane extends Lane 26 { 27 /** */ 28 private static final long serialVersionUID = 20150228L; 29 30 /** 31 * Return a Map that tells that directionality is NONE for all vehicles. 32 * @param network RoadNetwork; the network for which to define the directionality 33 * @return Map<GTUType, LongitudinalDirectionality>; a Map that tells that directionality is NONE for all vehicles 34 */ 35 private static Map<GTUType, LongitudinalDirectionality> directionalityNone(final RoadNetwork network) 36 { 37 Map<GTUType, LongitudinalDirectionality> dirNone = new HashMap<>(); 38 dirNone.put(network.getGtuType(GTUType.DEFAULTS.VEHICLE), LongitudinalDirectionality.DIR_NONE); 39 return dirNone; 40 } 41 42 /** 43 * Map that tells that speed is 0.0 for all vehicles. 44 * @param network RoadNetwork; the network for which to define the speeds 45 * @return Map<GTUType, Speed>; Map that tells that speed is 0.0 for all vehicles 46 */ 47 private static Map<GTUType, Speed> speedNull(final RoadNetwork network) 48 { 49 Map<GTUType, Speed> speedMap = new HashMap<>(); 50 speedMap.put(network.getGtuType(GTUType.DEFAULTS.VEHICLE), Speed.ZERO); 51 return speedMap; 52 } 53 54 /** 55 * @param parentLink CrossSectionLink; Cross Section Link to which the element belongs. 56 * @param id String; the id of the lane. Should be unique within the parentLink. 57 * @param lateralOffsetAtStart Length; the lateral offset of the design line of the new CrossSectionLink with respect to the 58 * design line of the parent Link at the start of the parent Link 59 * @param lateralOffsetAtEnd Length; the lateral offset of the design line of the new CrossSectionLink with respect to the 60 * design line of the parent Link at the end of the parent Link 61 * @param beginWidth Length; start width, positioned <i>symmetrically around</i> the design line 62 * @param endWidth Length; end width, positioned <i>symmetrically around</i> the design line 63 * @throws OTSGeometryException when creation of the geometry fails 64 * @throws NetworkException when id equal to null or not unique 65 */ 66 @SuppressWarnings("checkstyle:parameternumber") 67 public NoTrafficLane(final CrossSectionLink parentLink, final String id, final Length lateralOffsetAtStart, 68 final Length lateralOffsetAtEnd, final Length beginWidth, final Length endWidth) 69 throws OTSGeometryException, NetworkException 70 { 71 super(parentLink, id, lateralOffsetAtStart, lateralOffsetAtEnd, beginWidth, endWidth, 72 parentLink.getNetwork().getLaneType(LaneType.DEFAULTS.NONE), speedNull(parentLink.getNetwork())); 73 } 74 75 /** 76 * @param parentLink CrossSectionLink; Cross Section Link to which the element belongs. 77 * @param id String; the id of the lane. Should be unique within the parentLink. 78 * @param lateralOffset Length; the lateral offset of the design line of the new CrossSectionLink with respect to the design 79 * line of the parent Link 80 * @param width Length; width, positioned <i>symmetrically around</i> the design line 81 * @throws OTSGeometryException when creation of the geometry fails 82 * @throws NetworkException when id equal to null or not unique 83 */ 84 @SuppressWarnings("checkstyle:parameternumber") 85 public NoTrafficLane(final CrossSectionLink parentLink, final String id, final Length lateralOffset, final Length width) 86 throws OTSGeometryException, NetworkException 87 { 88 super(parentLink, id, lateralOffset, width, parentLink.getNetwork().getLaneType(LaneType.DEFAULTS.NONE), 89 speedNull(parentLink.getNetwork())); 90 } 91 92 /** 93 * @param parentLink CrossSectionLink; Cross Section Link to which the element belongs. 94 * @param id String; the id of the lane. Should be unique within the parentLink. 95 * @param crossSectionSlices List<CrossSectionSlice>; The offsets and widths at positions along the line, relative to 96 * the design line of the parent link. If there is just one with and offset, there should just be one element in 97 * the list with Length = 0. If there are more slices, the last one should be at the length of the design line. 98 * If not, a NetworkException is thrown. 99 * @throws OTSGeometryException when creation of the geometry fails 100 * @throws NetworkException when id equal to null or not unique 101 */ 102 @SuppressWarnings("checkstyle:parameternumber") 103 public NoTrafficLane(final CrossSectionLink parentLink, final String id, final List<CrossSectionSlice> crossSectionSlices) 104 throws OTSGeometryException, NetworkException 105 { 106 super(parentLink, id, crossSectionSlices, parentLink.getNetwork().getLaneType(LaneType.DEFAULTS.NONE), 107 speedNull(parentLink.getNetwork())); 108 } 109 110 /** {@inheritDoc} */ 111 @Override 112 protected final double getZ() 113 { 114 return -0.00005; 115 } 116 }