Skip to content

Commit d8f37dc

Browse files
committed
show congestion levels on alternative route lines
1 parent 8511a7f commit d8f37dc

File tree

3 files changed

+52
-18
lines changed

3 files changed

+52
-18
lines changed

Sources/MapboxNavigation/DayStyle.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ extension UIColor {
2929
class var trafficHeavy: UIColor { get { return #colorLiteral(red: 1, green: 0.3019607843, blue: 0.3019607843, alpha: 1) } }
3030
class var trafficSevere: UIColor { get { return #colorLiteral(red: 0.5607843137, green: 0.1411764706, blue: 0.2784313725, alpha: 1) } }
3131

32+
class var alternativeTrafficUnknown: UIColor { get { return defaultAlternateLine } }
33+
class var alternativeTrafficLow: UIColor { get { return defaultAlternateLine } }
34+
class var alternativeTrafficModerate: UIColor { get { return #colorLiteral(red: 0.75, green: 0.63, blue: 0.53, alpha: 1.0) } }
35+
class var alternativeTrafficHeavy: UIColor { get { return #colorLiteral(red: 0.71, green: 0.51, blue: 0.51, alpha: 1.0) } }
36+
class var alternativeTrafficSevere: UIColor { get { return #colorLiteral(red: 0.71, green: 0.51, blue: 0.51, alpha: 1.0) } }
3237
class var defaultBuildingColor: UIColor { get { return #colorLiteral(red: 0.9833194452, green: 0.9843137255, blue: 0.9331936657, alpha: 0.8019049658) } }
3338
class var defaultBuildingHighlightColor: UIColor { get { return #colorLiteral(red: 0.337254902, green: 0.6588235294, blue: 0.9843137255, alpha: 0.949406036) } }
3439
}
@@ -153,6 +158,11 @@ open class DayStyle: Style {
153158
NavigationMapView.appearance().trafficModerateColor = .trafficModerate
154159
NavigationMapView.appearance().trafficSevereColor = .trafficSevere
155160
NavigationMapView.appearance().trafficUnknownColor = .trafficUnknown
161+
NavigationMapView.appearance().alternativeTrafficHeavyColor = .alternativeTrafficHeavy
162+
NavigationMapView.appearance().alternativeTrafficLowColor = .alternativeTrafficLow
163+
NavigationMapView.appearance().alternativeTrafficModerateColor = .alternativeTrafficModerate
164+
NavigationMapView.appearance().alternativeTrafficSevereColor = .alternativeTrafficSevere
165+
NavigationMapView.appearance().alternativeTrafficUnknownColor = .alternativeTrafficUnknown
156166
NavigationMapView.appearance().buildingDefaultColor = .defaultBuildingColor
157167
NavigationMapView.appearance().buildingHighlightColor = .defaultBuildingHighlightColor
158168
NavigationView.appearance().backgroundColor = #colorLiteral(red: 0.764706, green: 0.752941, blue: 0.733333, alpha: 1)

Sources/MapboxNavigation/NavigationMapView+VanishingRouteLine.swift

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ extension NavigationMapView {
206206
return
207207
}
208208
let newFractionTraveled = self.preFractionTraveled + traveledDifference * timePassedInMilliseconds.truncatingRemainder(dividingBy: 1000) / 1000
209-
guard let mainRouteLayerGradient = self.routeLineGradient(routeProgress.route, fractionTraveled: newFractionTraveled) else { return }
209+
guard let mainRouteLayerGradient = self.routeLineGradient(routeProgress.route, fractionTraveled: newFractionTraveled, isMain: true) else { return }
210210
let mainRouteCasingLayerGradient = self.routeCasingGradient(newFractionTraveled)
211211

212212
guard var mainRouteLineLayer = try? self.mapView.style.getLayer(with: mainRouteLayerIdentifier, type: LineLayer.self).get(),
@@ -217,7 +217,7 @@ extension NavigationMapView {
217217
})
218218
}
219219

220-
func routeLineGradient(_ route: Route, fractionTraveled: Double) -> [Double: UIColor]? {
220+
func routeLineGradient(_ route: Route, fractionTraveled: Double, isMain: Bool) -> [Double: UIColor]? {
221221
var gradientStops = [CGFloat: UIColor]()
222222

223223
/**
@@ -250,7 +250,7 @@ extension NavigationMapView {
250250
// Get congestion color for the stop.
251251

252252
let congestionLevel = feature.properties?[CongestionAttribute] as? String
253-
let associatedCongestionColor = congestionColor(for: congestionLevel)
253+
let associatedCongestionColor = congestionColor(for: congestionLevel, isMain: isMain)
254254

255255
// Measure the line length of the traffic segment.
256256
let lineString = feature.geometry.value as? LineString
@@ -267,7 +267,7 @@ extension NavigationMapView {
267267
gradientStops[segmentEndPercentTraveled.nextDown] = associatedCongestionColor
268268

269269
if index + 1 < congestionSegments.count {
270-
gradientStops[segmentEndPercentTraveled.nextUp] = congestionColor(for: congestionSegments[index + 1].properties?["congestion"] as? String)
270+
gradientStops[segmentEndPercentTraveled.nextUp] = congestionColor(for: congestionSegments[index + 1].properties?["congestion"] as? String, isMain: isMain)
271271
}
272272

273273
continue
@@ -297,7 +297,7 @@ extension NavigationMapView {
297297
gradientStops[segmentEndPercentTraveled.nextDown] = associatedCongestionColor
298298

299299
if index + 1 < congestionSegments.count {
300-
gradientStops[segmentEndPercentTraveled.nextUp] = congestionColor(for: congestionSegments[index + 1].properties?["congestion"] as? String)
300+
gradientStops[segmentEndPercentTraveled.nextUp] = congestionColor(for: congestionSegments[index + 1].properties?["congestion"] as? String, isMain: isMain)
301301
}
302302
}
303303

@@ -343,18 +343,33 @@ extension NavigationMapView {
343343
/**
344344
Given a congestion level, return its associated color.
345345
*/
346-
func congestionColor(for congestionLevel: String?) -> UIColor {
347-
switch congestionLevel {
348-
case "low":
349-
return trafficLowColor
350-
case "moderate":
351-
return trafficModerateColor
352-
case "heavy":
353-
return trafficHeavyColor
354-
case "severe":
355-
return trafficSevereColor
356-
default:
357-
return trafficUnknownColor
346+
func congestionColor(for congestionLevel: String?, isMain: Bool) -> UIColor {
347+
if isMain {
348+
switch congestionLevel {
349+
case "low":
350+
return trafficLowColor
351+
case "moderate":
352+
return trafficModerateColor
353+
case "heavy":
354+
return trafficHeavyColor
355+
case "severe":
356+
return trafficSevereColor
357+
default:
358+
return trafficUnknownColor
359+
}
360+
} else {
361+
switch congestionLevel {
362+
case "low":
363+
return alternativeTrafficLowColor
364+
case "moderate":
365+
return alternativeTrafficModerateColor
366+
case "heavy":
367+
return alternativeTrafficHeavyColor
368+
case "severe":
369+
return alternativeTrafficSevereColor
370+
default:
371+
return alternativeTrafficUnknownColor
372+
}
358373
}
359374
}
360375

Sources/MapboxNavigation/NavigationMapView.swift

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,12 @@ open class NavigationMapView: UIView {
8888
@objc dynamic public var trafficModerateColor: UIColor = .trafficModerate
8989
@objc dynamic public var trafficHeavyColor: UIColor = .trafficHeavy
9090
@objc dynamic public var trafficSevereColor: UIColor = .trafficSevere
91+
@objc dynamic public var alternativeTrafficUnknownColor: UIColor = .alternativeTrafficUnknown
92+
@objc dynamic public var alternativeTrafficLowColor: UIColor = .alternativeTrafficLow
93+
@objc dynamic public var alternativeTrafficModerateColor: UIColor = .alternativeTrafficModerate
94+
@objc dynamic public var alternativeTrafficHeavyColor: UIColor = .alternativeTrafficHeavy
95+
@objc dynamic public var alternativeTrafficSevereColor: UIColor = .alternativeTrafficSevere
96+
9197
@objc dynamic public var routeCasingColor: UIColor = .defaultRouteCasing
9298
@objc dynamic public var routeAlternateColor: UIColor = .defaultAlternateLine
9399
@objc dynamic public var routeAlternateCasingColor: UIColor = .defaultAlternateLineCasing
@@ -552,7 +558,7 @@ open class NavigationMapView: UIView {
552558
lineLayer.layout?.lineJoin = .constant(.round)
553559
lineLayer.layout?.lineCap = .constant(.round)
554560

555-
if let gradientStops = routeLineGradient(route, fractionTraveled: fractionTraveledForStops) {
561+
if let gradientStops = routeLineGradient(route, fractionTraveled: fractionTraveledForStops, isMain: true) {
556562
lineLayer.paint?.lineGradient = .expression((Expression.routeLineGradientExpression(gradientStops)))
557563
}
558564

@@ -635,6 +641,9 @@ open class NavigationMapView: UIView {
635641
lineLayer.layout?.lineJoin = .constant(.round)
636642
lineLayer.layout?.lineCap = .constant(.round)
637643

644+
if let gradientStops = routeLineGradient(route, fractionTraveled: 0.0, isMain: false) {
645+
lineLayer.paint?.lineGradient = .expression((Expression.routeLineGradientExpression(gradientStops)))
646+
}
638647
mapView.style.addLayer(layer: lineLayer, layerPosition: LayerPosition(below: parentLayerIndentifier))
639648

640649
return layerIdentifier

0 commit comments

Comments
 (0)