Junction Style Guide
The following article contains key information on properly creating junctions and the roadways between them. Be sure to review it in its entirety before editing the map.
- 1 Simple is better
- 2 The Basics ← START HERE
- 3 Controlling Turn Instructions
- 4 Surface Streets
- 5 Ramps
- 6 Highway/Freeway Junctions
- 7 Limited Access Interchanges
- 8 Special Cases
Simple is better
When representing junctions (a.k.a. intersections, cross roads, corners, etc.) between roads, we sometimes have to blur the lines between the physical and logical worlds. The primary goal should be to represent things as simply as possible and only introduce complexity to deal with an issue.
The Basics ← START HERE
What is a Junction?
A junction is made up of three things:
- At least two roads
- One or more places these roads meet (a junction node)
- Turns allowed or restricted at those junction nodes
If you do not know how to create and modify roads, junctions, or turns, please read the Map Editing Quick-start Guide.
Lets start with the very basic case of one road branching off from another. Most of the time they will probably meet at close to a 90 degree angle. This is the simplest situation to deal with since the physical and logical views of the roads match up very well.
But you will probably find roads that meet at odd angles as well. Even in urban areas with rigid grids, you will often find at least one road that has existed since prior to the establishment of the grid which cuts through town at strange angles. The initial urge will be to represent the junction as it is in the physical world - two lines running into each other at some angle.
But there are issues with this method. Depending on the angles, the client may give a "Keep Right" instruction to the driver when a "Turn Right" instruction is more appropriate. In some cases, it is even possible the angle may be such that no instruction is given at all. Or worse yet, the routing engine may determine that it isn't possible to make a very sharp angle and not suggest a turn (in the example image, headed south and then turning left to head east).
To eliminate ambiguity, we need to treat the junction from a logical point of view. Since we want to be given basic "Turn Left" and "Turn Right" instructions, we have to treat it like it was a basic 90 degree intersection. But how do we do that when the roads don't actually diverge at 90 degrees? What we need to do is to add some geometry nodes to make the branch road leave the main road at close to 90 degrees, then we gradually curve to match the true departure angle.
Now we have a junction that logically works like a basic 90 degree junction but it also fits the reality of the physical world. Here is a completed real world example:
A ramp to a highway is another good example where additional geometry nodes are helpful. Especially since most ramps diverge at a very small angle from the road.
The drawback in this case (which also exists for the side road example above!) is that it may be very hard to see and click on the turn restriction arrows in the editor.
But if we just add one more geometry node to make the departure angle at the junction itself closer to 20 or 30 degrees (Why those angles? See the discussion on Geometry and turn instructions later in the page for details)...
...now the arrows are visible and accessible. Note that you can also press 's' in the editor to spread or separate the arrows at a junction if you still have difficulty clicking on an arrow. (see Editor Keyboard Shortcuts for more tips.)
Now we have made sure this junction behaves as we would expect because we have used a specific angle, we can clearly see and access the turn restriction arrows, and we still remain truthful to the real life layout of the road system.
We can easily scale the above approaches to a four-way junction. Again we can expect to mostly see angles close to 90 degrees.
And if we have that odd street cutting across town at an odd angle, we again want to avoid the odd angle at the junction...
...and we want to use geometry nodes to bring the actual junction to 90 degrees. You can zoom in as close as you can and add a single geometry node on each side. This will give us the proper angle but make it virtually invisible to users so it looks just like the physical world.
The above image is what you would see zoomed in as close as possible. Zoomed back out, it looks just like the image showing the junction without any geometry nodes.
And here is a real world example at a zoom level where you can still see the geometry adjustment we added:
With that adjustment in place, the junction will produce predictable turn left/right navigation instructions while the roads still appear to meet at the correct real world angle.
Controlling Turn Instructions
Before going further, make sure you understand the mechanics of turn restrictions in the Map Editor. If turns are not properly enabled and restricted, you will never get the instructions you desire.
In the Basics section above, we touched on how to ensure a "Turn left/right" instruction would be given over a "Keep left/right" instruction. Details of the mechanics behind this can be found on the How Waze determines turn / keep / exit maneuvers page, but a summary is provided in the sections below.
If all junctions you edit follow just a few basic forms, it will be much easier to predict the behavior of an individual junction without getting into the details of the back-end algorithms.
- Approximately 90 degree departure angle = Turn
- Between 20 and 30 degree departure angle = Keep (or Exit for Ramps)
- Approximately 0 degree departure angle = no navigation instruction
These angles allow us to clearly depict the desired result (turn vs. keep) while staying away from the angles that the routing algorithms use for decision making. For example, since 45 degrees is a trigger point for the algorithms, a 44.5 degree angle will behave very differently than a 45.5 degree angle although they will look identical to the human eye.
Similarly, if we have a road split at a Y and we want to be clear about which is "straight" and which bears off to the side, having one branch at zero degrees and the other branch at 5 degrees isn't clear and obvious; but "straight" would be much more apparent if the angles were zero degrees vs. 20 degrees. Since most of us will not have a protractor handy every time we are editing, it is best to simply avoid situations where exactness would matter.
This knowledge allows us to control how a junction behaves by modifying a single geometry node in most cases. This is often useful for At-Grade Connectors where sometimes we prefer a "Keep right/left" and other times a "Turn right/left" would be more appropriate.
If we keep the departure angle in the 20 to 30 degree range, we would get a "Keep Right" to follow the curved one-way connector:
But if we move one geometry node to create a 90 degree angle, now we would receive a "Turn Right" instruction.
Similar rules apply for the end of that segment as well. If we have a 20 to 30 degree angle as pictured above, there will be no turn instruction as traffic just smoothly slides into the cross street. But if we make the end of the segment close to a 90 degree angle, then there would be a turn right instruction for the driver.
Segment Naming and Type
Besides the geometry of the road segments, the names and types of the segments come into play.
A basic rule of thumb is that if you want a turn to be announced, having a different name will improve the chances (but not guarantee!!!) that it will happen. In the case of the At-Grade Connector example above, the connector should either have a different name than the road it is leaving or no name at all (See the How to name the connector section of the At-Grade Connectors page).
Road type is a factor in determining navigation instructions as well, but names and angles are much more important. If you have multiple roads meeting at a junction and two of those road segments line up at close to zero degrees and they have the same name, that will be considered straight no matter what road types are used. An example demonstrating this is shown in the discussion on Y-intersections in a later section.
Surface streets occasionally meet in a Y formation and we must carefully consider how they must be arranged to provide useful navigation instructions. As the How Waze Determines turn/keep/exit maneuvers page explains, segment names and geometry is very important in determining what navigation instructions are (or are not) given.
In the example below, the multi-lane surface street is known as Main Street to the west and Atlantic Ave to the east. The name change occurs when Main St branches off as a regular surface street.
The description above is how a human would probably describe the situation, but as you can see in the image above, a more technical description would be that Main St travels in a perfectly straight line and Atlantic Ave branches off of it. But if we map it that way in the editor, we create a major problem.
Since the multi-lane segment of Main St and the regular street segment of Main St have the same name, the routing engine automatically considers that to be "straight". If the two sections line up in a straight line the way they appear from the sky, then we are reinforcing the idea that straight is Main St to Main St.
But as a driver on the road, straight will be the path that remains on the multi-lane roadway, regardless of what the name is. So to make sure the routing engine "understands" the proper treatment of the junction, we have to be deliberate with the segment geometry of all three involved segments. In the end, we end up with something like this:
Now the geometric definition of straight is multi-lane Main St to Atlantic Ave since we have made that transition as close to zero degrees as possible. With the regular street version of Main St now branching off at a very obvious angle, the routing engine should recognize that a turn is required. So the end result is that Main St to Atlantic has no turn announced and Main St to Main St has a turn announced. Exactly what drivers would expect in the real world.
No Outlet Roads
Roads which only have one way in and one way out can present challenges to the routing server although they seem simple to the human mind.
Dead Ends (a.k.a. No Exit, Close, No Through Road, No Outlet) are road segments that simply end with no continuation or connections at one end. In some areas, a Dead End may be synonymous with a Cul-de-sac. In the US, a "No Outlet" sign may be used to indicate a road which itself is not a dead end, but it only connects to other dead end roads. It can also be used as a "friendlier" alternative to the typical Dead End sign.
Within the Map Editor it is possible to represent a dead end road with multiple segments if there are private driveways or parking lot roads mapped and connected. In that case, only the very last segment is considered the dead end segment.
Make sure that there is a junction node (not just a geometry node) at the very end of the segment. This is necessary to ensure proper routing out of the segment.
See also: Cul-de-sac article on Wikipedia
A Cul-de-sac (a.k.a. Court in the US) is a common treatment of a dead end street in a residential neighborhood.
In almost every situation, a cul-de-sac should be treated exactly as a dead end street, with the final junction node in the bulb of the cul-de-sac.
This next cul-de-sac is perfectly fine treated as a basic dead end. The small island should be ignored as there is no significant routing question for the driver once they get to the cul-de-sac.
However, if the cul-de-sac has a very large bulb with a large island in the middle, it may better be treated as a Loop if the size is truly significant. A Loop should primarily be used if problems with "Missing Road" errors occur. Remember if you see an island, but question if it is big enough, when in doubt--leave it out.
Loops are roads that you can enter and without turing around, end up at the same place you started.
The important Map Editor rule we must follow is: a road segment must not start and end on the same junction node.
If this rule is not followed, the routing server will have difficulty in providing routes into and out of the loop.
Hopefully there will be another roadway along the loop road which you can map, which will break the loop into two pieces and avoid the problem. But if there are no interruptions to the loop and the entire loop is represented by one road segment that doubles back on itself, we have a problem
To properly handle this situation, we must insert a superfluous junction node along the loop segment. The specific location does not matter, but most people put it near the half-way point of the segment and/or opposite of the true junction node.
NOTE: It is very easy for you or another editor to find the superfluous junction node, assume it is truly superfluous, and delete it! This problem is magnified if the loop road is large or shaped in a way where it is not obvious that it is a loop. So if you can identify a road to map along the loop, even if it is a parking lot, that would provide a more "permanent" treatment of the loop since the superfluous junction node now serves an obvious purpose.
Roundabouts and Traffic Circles
Please see the Roundabout page for a full discussion of this special type of junction.
Make sure you don't confuse these segments for ramps! And watch out for turns you need to restrict. For a full discussion, see the At-Grade Connectors page.
Ramps have a very specific purpose in Waze. They are intended to connect segments of Minor Highways, Major Highways, and Freeways to roads where there are no at-grade crossings.
When to use ramps
The following conditions must be met for the use of ramps to be appropriate:
- Two roads cross over/under each other with no at-grade junction
- At least one of the roads are of these types
- Minor Highway
- Major Highway
If the above requirements are not satisfied, you may be dealing with an At-Grade Connector.
How complex should ramps be?
Rule #1 is still simpler is better. So unless there is a large deviation of distance between paths at the end of a ramp (either into or out of the ramp as appropriate), a single segment connecting to a single junction node is all that is needed. The simple existence of a painted, concrete, or grass island is NOT enough of a reason to split a ramp into multiple ramps.
Once paths at the end of the ramp deviate significantly in distance, regardless of the existence of any type of island, then it is time to consider multiple ramps.
These are junctions involving the three Highway/Freeway road types - Minor Highway, Major Highway, and Freeway -- as well as their Ramps.
Specific examples of how to handle common junction types are provided in later sections. All of those examples build upon the basic building blocks provided here.
It is considered to be a basic Exit situation when a "straight" direction is obvious to a driver and navigation instructions are only needed for the non-straight direction (the exit). If navigation instructions are required for both directions, see the Highway/Freeway Splits section below.
To be treated as a basic Exit, the following must be true:
- The entering segment and one exiting segment must be one of the three Highway/Freeway types
- The Highway/Freeway exiting segment must have close to a zero degree departure angle from the entering segment
- The second exiting segment must be of type Ramp
- The Ramp exiting segment must had a departure angle of between 20 and 30 degrees from the entering segment
With those conditions met, the junction will present an "Exit Right/Left" navigation instruction when the ramp is used and will remain silent with no navigation instructions at all when using the Highway/Freeway exiting segment.
The Highway/Freeway segments before and after the junction should be the same and the ramp segment should be named in accordance with the best practices in your location.
We will consider it to be a Highway/Freeway Split when we have a Highway/Freeway segment meeting at a junction with two other Highway/Freeway segments and there is no obvious straight through direction to a driver.
To receive a navigation instruction for both branches of a split, the following must be true:
- All segments must be one of the 3 Highway/Freeway Types
- All segments must have names which are different from each other
- The two exiting segments must have departure angles of 20 to 30 degrees from the entering segment
With those conditions met, the junction will present "Keep Left" and "Keep Right" navigation instructions using the name of the appropriate exiting segment.
The primary rule is that all 3 segments at the junction must have different names. That can be accomplished in one of two ways:
- Using road names alone - It is an easy situation if all three roads which connect have different names. If "Highway A" splits into "Highway B" and "Highway C", then that is all we need to have a properly functioning split.
- Using signs and wayfinders - It is more complex if one of the branches of the split has the same name as the entering segment. If "Highway X" splits off from "Highway Y" and "Highway X" then continues as the other branch of the split, we must create uniqueness at the junction. The preferred approach is to use Wayfinder Segments.
Here we show Highway Y splitting off from Highway X. By labeling segments with the information available on the road signs at the split we have achieved uniqueness and provided additional information (the destination cities) to the driver which may be useful.
The entire segment leaving the split junction should NOT have the wayfinder name. Instead we should split the segments into two; one is short and named with the wayfinder information and the other retains the name of the road. This is done so we are less likely to see a long wayfinder name on the client map since we really just want to see the name of the highway itself.
A rule of thumb for the wayfinder segment length is to make them around 15 to 20 meters long. This keeps the segment small so we are less likely to see it in the client, but keeps it long enough to find and manipulate in the map editor.
Ramp to Ramp Splits
A ramp may itself split and branch into two directions. If this is the case, "Exit Right" and "Exit Left" will be announced using the name of the appropriate exiting segment in all cases.
If ramps are unnamed, the name of a subsequent ramp will propagate backwards. In the example above, if the two ramps exiting the junction are named, the ramp entering the junction can be left unnamed. Then any turn into the first ramp would use the name of the appropriate exiting ramp.
Example: Assume the two ramps exiting the junction are named "DestinationLeft" and "DestinationRight". Assume the ramp that enters the junction is unnamed. Assume you need to "Exit Right" onto the unnamed ramp. If you are headed to "DestinationLeft", navigation would tell you:
- Exit Right to Destination Left
- Exit Left to Destination Left
Using unnamed ramps is very useful to provide sufficient notification of an approaching decision point as long as the names of both ramp splits are visible on signs at the start of the initial ramp.
Example of good use of unnamed ramps:
- Initial Exit Sign: to City A and City B
- Destination Left Sign: to City A
- Destination Right Sign: to City B
Result: An unnamed initial ramp will provide accurate and informative navigation instructions to the driver.
Example of poor use of unnamed ramps:
- Initial Exit Sign: to Downtown
- Destination Left Sign: to Downtown
- Destination Right Sign: to Center St
Result: An unnamed ramp may create confusion since both Destination ramp names are NOT listed on the initial exit sign. In this case the initial ramp should be named.
Example of modified use of unnamed ramps:
- Initial Exit Sign: Exit 70A-B to City A and City B
- Destination Left Sign: to City A
- Destination Right Sign: to City B
- Destination Left name in Waze: Exit 70A: City A
- Destination Right name in Waze: Exit 70B: City B
Result: By using a modified name for the destination ramps, we have combined information from two sets of signs to generate the advance notice a driver may need to prepare for a decision point.
Limited Access Interchanges
Please see the Limited Access Interchange Style Guide.
A transition is a non-junction depicted using a junction node.
Valid examples of where to use a Transition node include:
- Road name changes
- City Limits
- Road Direction changes
- Part of a Loop Road
There may be exiting Transition nodes on the map for other reasons (left over after a connecting road was deleted, due to the original base map import when things such as rivers and streams created junctions, etc.).
As long as we are certain it is not a valid Transition node, a superfluous junction node may be deleted. Doing so will simplify the map, eliminate turn restrictions to maintain, and ease computing resources needed to calculate routes in the area. Also consider removing the geometry node which will replace the junction node you delete if that geometry node is not needed.
Roads to Nowhere
Sometimes you will find two roads which cross where one does not quite line up exactly from one side to the other.
There are a few things we need to look at in this situation.
- Do the roads actually line up in reality? If so we need to modify the junction to be a basic 4-way junction.
- Do the roads ALMOST line up in reality? If you were giving instructions to a person and would tell them to go straight with no mention of any slight turn or jog, then we want to make it into a 4-way junction. You may need to "split the difference" and not follow the centerline of either road to achieve this. The angles are exaggerated in this next example to show how the junction is forced to be close to 90 degrees, then we taper to the true centerlines of the roads. In practice this can be much more gradual and/or only done while zoomed in very close.
- Finally, is there a true separation between the roads? Would you need to say for example "turn left then make an immediate right"? If so then we will want to leave the junction such that the two sides do not align.
Since we want to avoid very short segments of road (the GPS chips in consumer devices can be very inaccurate which may make it seem that a driver skipped right over a short segment which will result in automated map errors and possible route recalculations in the client), it may be wise to shift the side roads as far apart from each other as possible with them still in the proper location (along the far curb lines for a residential street for example). This will maximize the length of the short segment between the side roads.