summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLauren Budorick <lauren@mapbox.com>2017-03-28 12:28:01 -0700
committerLauren Budorick <lauren@mapbox.com>2017-04-24 17:08:48 -0700
commit490cb3139805a6df71578fa74ae6a1588434bf99 (patch)
tree81bc6793315c91a3e90b0c5919ccd8c9de3ba15c
parent3fd5d391e628a93047177c20539b2cba64ed39fc (diff)
downloadqtlocation-mapboxgl-490cb3139805a6df71578fa74ae6a1588434bf99.tar.gz
Update darwin overrides + generated code
-rw-r--r--platform/darwin/scripts/style-spec-overrides-v8.json6
-rw-r--r--platform/darwin/src/MGLFillExtrusionStyleLayer.h161
-rw-r--r--platform/darwin/src/MGLFillExtrusionStyleLayer.mm217
-rw-r--r--platform/darwin/src/MGLStyleLayer.h.ejs4
-rw-r--r--platform/darwin/src/MGLSymbolStyleLayer.h18
-rw-r--r--platform/darwin/src/MGLSymbolStyleLayer.mm12
-rw-r--r--platform/darwin/test/MGLFillExtrusionStyleLayerTests.mm120
-rw-r--r--platform/darwin/test/MGLSymbolStyleLayerTests.mm60
-rwxr-xr-xplatform/ios/app/lbud_buildings.json8452
-rwxr-xr-xplatform/ios/app/lbud_buildings_debug.json167
-rw-r--r--platform/ios/app/lbud_debug.json8437
-rwxr-xr-xplatform/ios/app/lbud_debug_broken.json184
-rw-r--r--platform/ios/docs/guides/For Style Authors.md7
-rw-r--r--platform/macos/docs/guides/For Style Authors.md7
-rw-r--r--scripts/style-code.js4
15 files changed, 17628 insertions, 228 deletions
diff --git a/platform/darwin/scripts/style-spec-overrides-v8.json b/platform/darwin/scripts/style-spec-overrides-v8.json
index a594ef2957..1142712218 100644
--- a/platform/darwin/scripts/style-spec-overrides-v8.json
+++ b/platform/darwin/scripts/style-spec-overrides-v8.json
@@ -6,7 +6,7 @@
"doc": "An `MGLFillStyleLayer` is a style layer that renders one or more filled (and optionally stroked) polygons on the map.\n\nUse a fill style layer to configure the visual appearance of polygon or multipolygon features in vector tiles loaded by an `MGLVectorSource` object or `MGLPolygon`, `MGLPolygonFeature`, `MGLMultiPolygon`, or `MGLMultiPolygonFeature` instances in an `MGLShapeSource` object."
},
"fill-extrusion": {
- "doc": "An `MGLFillExtrusionStyleLayer` is a style layer that renders one or more 3D extruded polygons on the map.\n\nUse a fill-extrusion style layer to configure the visual appearance of polygon or multipolygon features in vector tiles loaded by an `MGLVectorSource` object or `MGLPolygon`, `MGLPolygonFeature`, `MGLMultiPolygon`, or `MGLMultiPolygonFeature` instances in an `MGLShapeSource` object."
+ "doc": "An `MGLFillExtrusionStyleLayer` is a style layer that renders one or more 3D extruded polygons on the map.\n\nUse a fill extrusion style layer to configure the visual appearance of polygon or multipolygon features in vector tiles loaded by an `MGLVectorSource` object or `MGLPolygon`, `MGLPolygonFeature`, `MGLMultiPolygon`, or `MGLMultiPolygonFeature` instances in an `MGLShapeSource` object."
},
"line": {
"doc": "An `MGLLineStyleLayer` is a style layer that renders one or more stroked polylines on the map.\n\nUse a line style layer to configure the visual appearance of polyline or multipolyline features in vector tiles loaded by an `MGLVectorSource` object or `MGLPolyline`, `MGLPolylineFeature`, `MGLMultiPolyline`, or `MGLMultiPolylineFeature` instances in an `MGLShapeSource` object."
@@ -55,13 +55,13 @@
},
"paint_fill-extrusion": {
"fill-extrusion-pattern": {
- "doc": "Name of image in style images to use for drawing image fill-extrusions. For seamless patterns, image width and height must be a factor of two (2, 4, 8, ..., 512)."
+ "doc": "Name of image in style images to use for drawing images to the surfaces of fill extrusions. For seamless patterns, image width and height must be a factor of two (2, 4, 8, ..., 512)."
},
"fill-extrusion-translate": {
"doc": "The geometry's offset."
},
"fill-extrusion-color": {
- "doc": "The base color of this layer. The extrusion's surfaces will be shaded differently based on this color in combination with the `light` settings. If this color is specified with an alpha component, the alpha component will be ignored; use `fill-extrusion-opacity` to set layer opacityco."
+ "doc": "The base color of this layer. The extrusion's surfaces will be shaded differently based on this color in combination with the `light` settings. If this color is specified with an alpha component, the alpha component will be ignored; use `fill-extrusion-opacity` to set layer opacity."
}
},
"paint_line": {
diff --git a/platform/darwin/src/MGLFillExtrusionStyleLayer.h b/platform/darwin/src/MGLFillExtrusionStyleLayer.h
index a21510ef05..599d8df676 100644
--- a/platform/darwin/src/MGLFillExtrusionStyleLayer.h
+++ b/platform/darwin/src/MGLFillExtrusionStyleLayer.h
@@ -1,5 +1,5 @@
// This file is generated.
-// Edit platform/darwin/scripts/generate-style-code.js, then run `make style-code-darwin`.
+// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`.
#import "MGLFoundation.h"
#import "MGLStyleValue.h"
@@ -10,27 +10,33 @@ NS_ASSUME_NONNULL_BEGIN
/**
Controls the translation reference point.
- Values of this type are used in the `MGLFillExtrusionStyleLayer.fillExtrusionTranslateAnchor`
+ Values of this type are used in the `MGLFillExtrusionStyleLayer.fillExtrusionTranslationAnchor`
property.
*/
-typedef NS_ENUM(NSUInteger, MGLFillExtrusionTranslateAnchor) {
+typedef NS_ENUM(NSUInteger, MGLFillExtrusionTranslationAnchor) {
/**
The fill extrusion is translated relative to the map.
*/
- MGLFillExtrusionTranslateAnchorMap,
+ MGLFillExtrusionTranslationAnchorMap,
/**
The fill extrusion is translated relative to the viewport.
*/
- MGLFillExtrusionTranslateAnchorViewport,
+ MGLFillExtrusionTranslationAnchorViewport,
};
/**
- An extruded (3D) polygon.
+ An `MGLFillExtrusionStyleLayer` is a style layer that renders one or more 3D
+ extruded polygons on the map.
+
+ Use a fill extrusion style layer to configure the visual appearance of polygon
+ or multipolygon features in vector tiles loaded by an `MGLVectorSource` object
+ or `MGLPolygon`, `MGLPolygonFeature`, `MGLMultiPolygon`, or
+ `MGLMultiPolygonFeature` instances in an `MGLShapeSource` object.
- You can access an existing fill-extrusion style layer using the
+ You can access an existing fill extrusion style layer using the
`-[MGLStyle layerWithIdentifier:]` method if you know its identifier;
otherwise, find it using the `MGLStyle.layers` property. You can also create a
- new fill-extrusion style layer and add it to the style using a method such as
+ new fill extrusion style layer and add it to the style using a method such as
`-[MGLStyle addLayer:]`.
### Example
@@ -41,6 +47,21 @@ typedef NS_ENUM(NSUInteger, MGLFillExtrusionTranslateAnchor) {
MGL_EXPORT
@interface MGLFillExtrusionStyleLayer : MGLVectorStyleLayer
+/**
+ Returns a fill-extrusion style layer initialized with an identifier and source.
+
+ After initializing and configuring the style layer, add it to a map view’s
+ style using the `-[MGLStyle addLayer:]` or
+ `-[MGLStyle insertLayer:belowLayer:]` method.
+
+ @param identifier A string that uniquely identifies the source in the style to
+ which it is added.
+ @param source The source from which to obtain the data to style. If the source
+ has not yet been added to the current style, the behavior is undefined.
+ @return An initialized foreground style layer.
+ */
+- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source;
+
#pragma mark - Accessing the Paint Attributes
/**
@@ -58,7 +79,7 @@ MGL_EXPORT
You can set this property to an instance of:
- * `MGLStyleConstantValue`
+ * `MGLConstantStyleValue`
* `MGLCameraStyleFunction` with an interpolation mode of:
* `MGLInterpolationModeExponential`
* `MGLInterpolationModeInterval`
@@ -74,12 +95,19 @@ MGL_EXPORT
*/
@property (nonatomic, null_resettable) MGLStyleValue<NSNumber *> *fillExtrusionBase;
+/**
+ The transition affecting any changes to this layer’s `fillExtrusionBase` property.
+
+ This property corresponds to the `fill-extrusion-base-transition` property in the style JSON file format.
+*/
+@property (nonatomic) MGLTransition fillExtrusionBaseTransition;
+
#if TARGET_OS_IPHONE
/**
- The base color of the extruded fill. The extrusion's surfaces will be shaded
- differently based on this color in combination with the root `light` settings.
- If this color is specified as `rgba` with an alpha component, the alpha
- component will be ignored; use `fillExtrusionOpacity` to set layer opacity.
+ The base color of this layer. The extrusion's surfaces will be shaded
+ differently based on this color in combination with the `light` settings. If
+ this color is specified with an alpha component, the alpha component will be
+ ignored; use `fillExtrusionOpacity` to set layer opacity.
The default value of this property is an `MGLStyleValue` object containing
`UIColor.blackColor`. Set this property to `nil` to reset it to the default
@@ -90,7 +118,7 @@ MGL_EXPORT
You can set this property to an instance of:
- * `MGLStyleConstantValue`
+ * `MGLConstantStyleValue`
* `MGLCameraStyleFunction` with an interpolation mode of:
* `MGLInterpolationModeExponential`
* `MGLInterpolationModeInterval`
@@ -107,10 +135,10 @@ MGL_EXPORT
@property (nonatomic, null_resettable) MGLStyleValue<UIColor *> *fillExtrusionColor;
#else
/**
- The base color of the extruded fill. The extrusion's surfaces will be shaded
- differently based on this color in combination with the root `light` settings.
- If this color is specified as `rgba` with an alpha component, the alpha
- component will be ignored; use `fillExtrusionOpacity` to set layer opacity.
+ The base color of this layer. The extrusion's surfaces will be shaded
+ differently based on this color in combination with the `light` settings. If
+ this color is specified with an alpha component, the alpha component will be
+ ignored; use `fillExtrusionOpacity` to set layer opacity.
The default value of this property is an `MGLStyleValue` object containing
`NSColor.blackColor`. Set this property to `nil` to reset it to the default
@@ -121,7 +149,7 @@ MGL_EXPORT
You can set this property to an instance of:
- * `MGLStyleConstantValue`
+ * `MGLConstantStyleValue`
* `MGLCameraStyleFunction` with an interpolation mode of:
* `MGLInterpolationModeExponential`
* `MGLInterpolationModeInterval`
@@ -139,6 +167,13 @@ MGL_EXPORT
#endif
/**
+ The transition affecting any changes to this layer’s `fillExtrusionColor` property.
+
+ This property corresponds to the `fill-extrusion-color-transition` property in the style JSON file format.
+*/
+@property (nonatomic) MGLTransition fillExtrusionColorTransition;
+
+/**
The height with which to extrude this layer.
This property is measured in meters.
@@ -149,7 +184,7 @@ MGL_EXPORT
You can set this property to an instance of:
- * `MGLStyleConstantValue`
+ * `MGLConstantStyleValue`
* `MGLCameraStyleFunction` with an interpolation mode of:
* `MGLInterpolationModeExponential`
* `MGLInterpolationModeInterval`
@@ -166,6 +201,13 @@ MGL_EXPORT
@property (nonatomic, null_resettable) MGLStyleValue<NSNumber *> *fillExtrusionHeight;
/**
+ The transition affecting any changes to this layer’s `fillExtrusionHeight` property.
+
+ This property corresponds to the `fill-extrusion-height-transition` property in the style JSON file format.
+*/
+@property (nonatomic) MGLTransition fillExtrusionHeightTransition;
+
+/**
The opacity of the entire fill extrusion layer. This is rendered on a
per-layer, not per-feature, basis, and data-driven styling is not available.
@@ -175,7 +217,7 @@ MGL_EXPORT
You can set this property to an instance of:
- * `MGLStyleConstantValue`
+ * `MGLConstantStyleValue`
* `MGLCameraStyleFunction` with an interpolation mode of:
* `MGLInterpolationModeExponential`
* `MGLInterpolationModeInterval`
@@ -183,22 +225,35 @@ MGL_EXPORT
@property (nonatomic, null_resettable) MGLStyleValue<NSNumber *> *fillExtrusionOpacity;
/**
- Name of image in sprite to use for drawing images on extruded fills. For
- seamless patterns, image width and height must be a factor of two (2, 4, 8,
- ..., 512).
+ The transition affecting any changes to this layer’s `fillExtrusionOpacity` property.
+
+ This property corresponds to the `fill-extrusion-opacity-transition` property in the style JSON file format.
+*/
+@property (nonatomic) MGLTransition fillExtrusionOpacityTransition;
+
+/**
+ Name of image in style images to use for drawing images to the surfaces of fill
+ extrusions. For seamless patterns, image width and height must be a factor of
+ two (2, 4, 8, ..., 512).
You can set this property to an instance of:
- * `MGLStyleConstantValue`
+ * `MGLConstantStyleValue`
* `MGLCameraStyleFunction` with an interpolation mode of
`MGLInterpolationModeInterval`
*/
@property (nonatomic, null_resettable) MGLStyleValue<NSString *> *fillExtrusionPattern;
+/**
+ The transition affecting any changes to this layer’s `fillExtrusionPattern` property.
+
+ This property corresponds to the `fill-extrusion-pattern-transition` property in the style JSON file format.
+*/
+@property (nonatomic) MGLTransition fillExtrusionPatternTransition;
+
#if TARGET_OS_IPHONE
/**
- The geometry's offset. Values are [x, y] where negatives indicate left and up
- (on the flat plane), respectively.
+ The geometry's offset.
This property is measured in points.
@@ -206,18 +261,21 @@ MGL_EXPORT
`NSValue` object containing a `CGVector` struct set to 0 points rightward and 0
points downward. Set this property to `nil` to reset it to the default value.
+ This attribute corresponds to the <a
+ href="https://www.mapbox.com/mapbox-gl-style-spec/#paint-fill-extrusion-translate"><code>fill-extrusion-translate</code></a>
+ layout property in the Mapbox Style Specification.
+
You can set this property to an instance of:
- * `MGLStyleConstantValue`
+ * `MGLConstantStyleValue`
* `MGLCameraStyleFunction` with an interpolation mode of:
* `MGLInterpolationModeExponential`
* `MGLInterpolationModeInterval`
*/
-@property (nonatomic, null_resettable) MGLStyleValue<NSValue *> *fillExtrusionTranslate;
+@property (nonatomic, null_resettable) MGLStyleValue<NSValue *> *fillExtrusionTranslation;
#else
/**
- The geometry's offset. Values are [x, y] where negatives indicate left and up
- (on the flat plane), respectively.
+ The geometry's offset.
This property is measured in points.
@@ -225,33 +283,52 @@ MGL_EXPORT
`NSValue` object containing a `CGVector` struct set to 0 points rightward and 0
points upward. Set this property to `nil` to reset it to the default value.
+ This attribute corresponds to the <a
+ href="https://www.mapbox.com/mapbox-gl-style-spec/#paint-fill-extrusion-translate"><code>fill-extrusion-translate</code></a>
+ layout property in the Mapbox Style Specification.
+
You can set this property to an instance of:
- * `MGLStyleConstantValue`
+ * `MGLConstantStyleValue`
* `MGLCameraStyleFunction` with an interpolation mode of:
* `MGLInterpolationModeExponential`
* `MGLInterpolationModeInterval`
*/
-@property (nonatomic, null_resettable) MGLStyleValue<NSValue *> *fillExtrusionTranslate;
+@property (nonatomic, null_resettable) MGLStyleValue<NSValue *> *fillExtrusionTranslation;
#endif
/**
+ The transition affecting any changes to this layer’s `fillExtrusionTranslation` property.
+
+ This property corresponds to the `fill-extrusion-translate-transition` property in the style JSON file format.
+*/
+@property (nonatomic) MGLTransition fillExtrusionTranslationTransition;
+
+@property (nonatomic, null_resettable) MGLStyleValue<NSValue *> *fillExtrusionTranslate __attribute__((unavailable("Use fillExtrusionTranslation instead.")));
+
+/**
Controls the translation reference point.
The default value of this property is an `MGLStyleValue` object containing an
- `NSValue` object containing `MGLFillExtrusionTranslateAnchorMap`. Set this
+ `NSValue` object containing `MGLFillExtrusionTranslationAnchorMap`. Set this
property to `nil` to reset it to the default value.
- This property is only applied to the style if `fillExtrusionTranslate` is
+ This property is only applied to the style if `fillExtrusionTranslation` is
non-`nil`. Otherwise, it is ignored.
+ This attribute corresponds to the <a
+ href="https://www.mapbox.com/mapbox-gl-style-spec/#paint-fill-extrusion-translate-anchor"><code>fill-extrusion-translate-anchor</code></a>
+ layout property in the Mapbox Style Specification.
+
You can set this property to an instance of:
- * `MGLStyleConstantValue`
+ * `MGLConstantStyleValue`
* `MGLCameraStyleFunction` with an interpolation mode of
`MGLInterpolationModeInterval`
*/
-@property (nonatomic, null_resettable) MGLStyleValue<NSValue *> *fillExtrusionTranslateAnchor;
+@property (nonatomic, null_resettable) MGLStyleValue<NSValue *> *fillExtrusionTranslationAnchor;
+
+@property (nonatomic, null_resettable) MGLStyleValue<NSValue *> *fillExtrusionTranslateAnchor __attribute__((unavailable("Use fillExtrusionTranslationAnchor instead.")));
@end
@@ -264,17 +341,17 @@ MGL_EXPORT
#pragma mark Working with FillExtrusion Style Layer Attribute Values
/**
- Creates a new value object containing the given `MGLFillExtrusionTranslateAnchor` enumeration.
+ Creates a new value object containing the given `MGLFillExtrusionTranslationAnchor` enumeration.
- @param fillExtrusionTranslateAnchor The value for the new object.
+ @param fillExtrusionTranslationAnchor The value for the new object.
@return A new value object that contains the enumeration value.
*/
-+ (instancetype)valueWithMGLFillExtrusionTranslateAnchor:(MGLFillExtrusionTranslateAnchor)fillExtrusionTranslateAnchor;
++ (instancetype)valueWithMGLFillExtrusionTranslationAnchor:(MGLFillExtrusionTranslationAnchor)fillExtrusionTranslationAnchor;
/**
- The `MGLFillExtrusionTranslateAnchor` enumeration representation of the value.
+ The `MGLFillExtrusionTranslationAnchor` enumeration representation of the value.
*/
-@property (readonly) MGLFillExtrusionTranslateAnchor MGLFillExtrusionTranslateAnchorValue;
+@property (readonly) MGLFillExtrusionTranslationAnchor MGLFillExtrusionTranslationAnchorValue;
@end
diff --git a/platform/darwin/src/MGLFillExtrusionStyleLayer.mm b/platform/darwin/src/MGLFillExtrusionStyleLayer.mm
index d2f3fd424d..b00ed8e09f 100644
--- a/platform/darwin/src/MGLFillExtrusionStyleLayer.mm
+++ b/platform/darwin/src/MGLFillExtrusionStyleLayer.mm
@@ -2,43 +2,36 @@
// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`.
#import "MGLSource.h"
-#import "MGLMapView_Private.h"
#import "NSPredicate+MGLAdditions.h"
+#import "NSDate+MGLAdditions.h"
#import "MGLStyleLayer_Private.h"
#import "MGLStyleValue_Private.h"
#import "MGLFillExtrusionStyleLayer.h"
-#include <mbgl/map/map.hpp>
+#include <mbgl/style/transition_options.hpp>
#include <mbgl/style/layers/fill_extrusion_layer.hpp>
namespace mbgl {
- MBGL_DEFINE_ENUM(MGLFillExtrusionTranslateAnchor, {
- { MGLFillExtrusionTranslateAnchorMap, "map" },
- { MGLFillExtrusionTranslateAnchorViewport, "viewport" },
+ MBGL_DEFINE_ENUM(MGLFillExtrusionTranslationAnchor, {
+ { MGLFillExtrusionTranslationAnchorMap, "map" },
+ { MGLFillExtrusionTranslationAnchorViewport, "viewport" },
});
}
@interface MGLFillExtrusionStyleLayer ()
-@property (nonatomic) mbgl::style::FillExtrusionLayer *rawLayer;
+@property (nonatomic, readonly) mbgl::style::FillExtrusionLayer *rawLayer;
@end
@implementation MGLFillExtrusionStyleLayer
-{
- std::unique_ptr<mbgl::style::FillExtrusionLayer> _pendingLayer;
-}
- (instancetype)initWithIdentifier:(NSString *)identifier source:(MGLSource *)source
{
- if (self = [super initWithIdentifier:identifier source:source]) {
- auto layer = std::make_unique<mbgl::style::FillExtrusionLayer>(identifier.UTF8String, source.identifier.UTF8String);
- _pendingLayer = std::move(layer);
- self.rawLayer = _pendingLayer.get();
- }
- return self;
+ auto layer = std::make_unique<mbgl::style::FillExtrusionLayer>(identifier.UTF8String, source.identifier.UTF8String);
+ return self = [super initWithPendingLayer:std::move(layer)];
}
- (mbgl::style::FillExtrusionLayer *)rawLayer
@@ -46,11 +39,6 @@ namespace mbgl {
return (mbgl::style::FillExtrusionLayer *)super.rawLayer;
}
-- (void)setRawLayer:(mbgl::style::FillExtrusionLayer *)rawLayer
-{
- super.rawLayer = rawLayer;
-}
-
- (NSString *)sourceIdentifier
{
MGLAssertStyleLayerIsValid();
@@ -87,46 +75,6 @@ namespace mbgl {
return [NSPredicate mgl_predicateWithFilter:self.rawLayer->getFilter()];
}
-#pragma mark - Adding to and removing from a map view
-
-- (void)addToMapView:(MGLMapView *)mapView belowLayer:(MGLStyleLayer *)otherLayer
-{
- if (_pendingLayer == nullptr) {
- [NSException raise:@"MGLRedundantLayerException"
- format:@"This instance %@ was already added to %@. Adding the same layer instance " \
- "to the style more than once is invalid.", self, mapView.style];
- }
-
- if (otherLayer) {
- const mbgl::optional<std::string> belowLayerId{otherLayer.identifier.UTF8String};
- mapView.mbglMap->addLayer(std::move(_pendingLayer), belowLayerId);
- } else {
- mapView.mbglMap->addLayer(std::move(_pendingLayer));
- }
-}
-
-- (void)removeFromMapView:(MGLMapView *)mapView
-{
- if (self.rawLayer != mapView.mbglMap->getLayer(self.identifier.UTF8String)) {
- return;
- }
-
- auto removedLayer = mapView.mbglMap->removeLayer(self.identifier.UTF8String);
- if (!removedLayer) {
- return;
- }
-
- mbgl::style::FillExtrusionLayer *layer = dynamic_cast<mbgl::style::FillExtrusionLayer *>(removedLayer.get());
- if (!layer) {
- return;
- }
-
- removedLayer.release();
-
- _pendingLayer = std::unique_ptr<mbgl::style::FillExtrusionLayer>(layer);
- self.rawLayer = _pendingLayer.get();
-}
-
#pragma mark - Accessing the Paint Attributes
- (void)setFillExtrusionBase:(MGLStyleValue<NSNumber *> *)fillExtrusionBase {
@@ -146,6 +94,24 @@ namespace mbgl {
return MGLStyleValueTransformer<float, NSNumber *>().toDataDrivenStyleValue(propertyValue);
}
+- (void)setFillExtrusionBaseTransition:(MGLTransition )transition {
+ MGLAssertStyleLayerIsValid();
+
+ mbgl::style::TransitionOptions options { { MGLDurationFromTimeInterval(transition.duration) }, { MGLDurationFromTimeInterval(transition.delay) } };
+ self.rawLayer->setFillExtrusionBaseTransition(options);
+}
+
+- (MGLTransition)fillExtrusionBaseTransition {
+ MGLAssertStyleLayerIsValid();
+
+ mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillExtrusionBaseTransition();
+ MGLTransition transition;
+ transition.duration = MGLTimeIntervalFromDuration(transitionOptions.duration.value_or(mbgl::Duration::zero()));
+ transition.delay = MGLTimeIntervalFromDuration(transitionOptions.delay.value_or(mbgl::Duration::zero()));
+
+ return transition;
+}
+
- (void)setFillExtrusionColor:(MGLStyleValue<MGLColor *> *)fillExtrusionColor {
MGLAssertStyleLayerIsValid();
@@ -163,6 +129,24 @@ namespace mbgl {
return MGLStyleValueTransformer<mbgl::Color, MGLColor *>().toDataDrivenStyleValue(propertyValue);
}
+- (void)setFillExtrusionColorTransition:(MGLTransition )transition {
+ MGLAssertStyleLayerIsValid();
+
+ mbgl::style::TransitionOptions options { { MGLDurationFromTimeInterval(transition.duration) }, { MGLDurationFromTimeInterval(transition.delay) } };
+ self.rawLayer->setFillExtrusionColorTransition(options);
+}
+
+- (MGLTransition)fillExtrusionColorTransition {
+ MGLAssertStyleLayerIsValid();
+
+ mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillExtrusionColorTransition();
+ MGLTransition transition;
+ transition.duration = MGLTimeIntervalFromDuration(transitionOptions.duration.value_or(mbgl::Duration::zero()));
+ transition.delay = MGLTimeIntervalFromDuration(transitionOptions.delay.value_or(mbgl::Duration::zero()));
+
+ return transition;
+}
+
- (void)setFillExtrusionHeight:(MGLStyleValue<NSNumber *> *)fillExtrusionHeight {
MGLAssertStyleLayerIsValid();
@@ -180,6 +164,24 @@ namespace mbgl {
return MGLStyleValueTransformer<float, NSNumber *>().toDataDrivenStyleValue(propertyValue);
}
+- (void)setFillExtrusionHeightTransition:(MGLTransition )transition {
+ MGLAssertStyleLayerIsValid();
+
+ mbgl::style::TransitionOptions options { { MGLDurationFromTimeInterval(transition.duration) }, { MGLDurationFromTimeInterval(transition.delay) } };
+ self.rawLayer->setFillExtrusionHeightTransition(options);
+}
+
+- (MGLTransition)fillExtrusionHeightTransition {
+ MGLAssertStyleLayerIsValid();
+
+ mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillExtrusionHeightTransition();
+ MGLTransition transition;
+ transition.duration = MGLTimeIntervalFromDuration(transitionOptions.duration.value_or(mbgl::Duration::zero()));
+ transition.delay = MGLTimeIntervalFromDuration(transitionOptions.delay.value_or(mbgl::Duration::zero()));
+
+ return transition;
+}
+
- (void)setFillExtrusionOpacity:(MGLStyleValue<NSNumber *> *)fillExtrusionOpacity {
MGLAssertStyleLayerIsValid();
@@ -197,6 +199,24 @@ namespace mbgl {
return MGLStyleValueTransformer<float, NSNumber *>().toStyleValue(propertyValue);
}
+- (void)setFillExtrusionOpacityTransition:(MGLTransition )transition {
+ MGLAssertStyleLayerIsValid();
+
+ mbgl::style::TransitionOptions options { { MGLDurationFromTimeInterval(transition.duration) }, { MGLDurationFromTimeInterval(transition.delay) } };
+ self.rawLayer->setFillExtrusionOpacityTransition(options);
+}
+
+- (MGLTransition)fillExtrusionOpacityTransition {
+ MGLAssertStyleLayerIsValid();
+
+ mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillExtrusionOpacityTransition();
+ MGLTransition transition;
+ transition.duration = MGLTimeIntervalFromDuration(transitionOptions.duration.value_or(mbgl::Duration::zero()));
+ transition.delay = MGLTimeIntervalFromDuration(transitionOptions.delay.value_or(mbgl::Duration::zero()));
+
+ return transition;
+}
+
- (void)setFillExtrusionPattern:(MGLStyleValue<NSString *> *)fillExtrusionPattern {
MGLAssertStyleLayerIsValid();
@@ -214,14 +234,32 @@ namespace mbgl {
return MGLStyleValueTransformer<std::string, NSString *>().toStyleValue(propertyValue);
}
-- (void)setFillExtrusionTranslate:(MGLStyleValue<NSValue *> *)fillExtrusionTranslate {
+- (void)setFillExtrusionPatternTransition:(MGLTransition )transition {
+ MGLAssertStyleLayerIsValid();
+
+ mbgl::style::TransitionOptions options { { MGLDurationFromTimeInterval(transition.duration) }, { MGLDurationFromTimeInterval(transition.delay) } };
+ self.rawLayer->setFillExtrusionPatternTransition(options);
+}
+
+- (MGLTransition)fillExtrusionPatternTransition {
+ MGLAssertStyleLayerIsValid();
+
+ mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillExtrusionPatternTransition();
+ MGLTransition transition;
+ transition.duration = MGLTimeIntervalFromDuration(transitionOptions.duration.value_or(mbgl::Duration::zero()));
+ transition.delay = MGLTimeIntervalFromDuration(transitionOptions.delay.value_or(mbgl::Duration::zero()));
+
+ return transition;
+}
+
+- (void)setFillExtrusionTranslation:(MGLStyleValue<NSValue *> *)fillExtrusionTranslation {
MGLAssertStyleLayerIsValid();
- auto mbglValue = MGLStyleValueTransformer<std::array<float, 2>, NSValue *>().toInterpolatablePropertyValue(fillExtrusionTranslate);
+ auto mbglValue = MGLStyleValueTransformer<std::array<float, 2>, NSValue *>().toInterpolatablePropertyValue(fillExtrusionTranslation);
self.rawLayer->setFillExtrusionTranslate(mbglValue);
}
-- (MGLStyleValue<NSValue *> *)fillExtrusionTranslate {
+- (MGLStyleValue<NSValue *> *)fillExtrusionTranslation {
MGLAssertStyleLayerIsValid();
auto propertyValue = self.rawLayer->getFillExtrusionTranslate();
@@ -231,36 +269,67 @@ namespace mbgl {
return MGLStyleValueTransformer<std::array<float, 2>, NSValue *>().toStyleValue(propertyValue);
}
-- (void)setFillExtrusionTranslateAnchor:(MGLStyleValue<NSValue *> *)fillExtrusionTranslateAnchor {
+- (void)setFillExtrusionTranslationTransition:(MGLTransition )transition {
+ MGLAssertStyleLayerIsValid();
+
+ mbgl::style::TransitionOptions options { { MGLDurationFromTimeInterval(transition.duration) }, { MGLDurationFromTimeInterval(transition.delay) } };
+ self.rawLayer->setFillExtrusionTranslateTransition(options);
+}
+
+- (MGLTransition)fillExtrusionTranslationTransition {
MGLAssertStyleLayerIsValid();
- auto mbglValue = MGLStyleValueTransformer<mbgl::style::TranslateAnchorType, NSValue *, mbgl::style::TranslateAnchorType, MGLFillExtrusionTranslateAnchor>().toEnumPropertyValue(fillExtrusionTranslateAnchor);
+ mbgl::style::TransitionOptions transitionOptions = self.rawLayer->getFillExtrusionTranslateTransition();
+ MGLTransition transition;
+ transition.duration = MGLTimeIntervalFromDuration(transitionOptions.duration.value_or(mbgl::Duration::zero()));
+ transition.delay = MGLTimeIntervalFromDuration(transitionOptions.delay.value_or(mbgl::Duration::zero()));
+
+ return transition;
+}
+
+- (void)setFillExtrusionTranslate:(MGLStyleValue<NSValue *> *)fillExtrusionTranslate {
+}
+
+- (MGLStyleValue<NSValue *> *)fillExtrusionTranslate {
+ return self.fillExtrusionTranslation;
+}
+
+- (void)setFillExtrusionTranslationAnchor:(MGLStyleValue<NSValue *> *)fillExtrusionTranslationAnchor {
+ MGLAssertStyleLayerIsValid();
+
+ auto mbglValue = MGLStyleValueTransformer<mbgl::style::TranslateAnchorType, NSValue *, mbgl::style::TranslateAnchorType, MGLFillExtrusionTranslationAnchor>().toEnumPropertyValue(fillExtrusionTranslationAnchor);
self.rawLayer->setFillExtrusionTranslateAnchor(mbglValue);
}
-- (MGLStyleValue<NSValue *> *)fillExtrusionTranslateAnchor {
+- (MGLStyleValue<NSValue *> *)fillExtrusionTranslationAnchor {
MGLAssertStyleLayerIsValid();
auto propertyValue = self.rawLayer->getFillExtrusionTranslateAnchor();
if (propertyValue.isUndefined()) {
- return MGLStyleValueTransformer<mbgl::style::TranslateAnchorType, NSValue *, mbgl::style::TranslateAnchorType, MGLFillExtrusionTranslateAnchor>().toEnumStyleValue(self.rawLayer->getDefaultFillExtrusionTranslateAnchor());
+ return MGLStyleValueTransformer<mbgl::style::TranslateAnchorType, NSValue *, mbgl::style::TranslateAnchorType, MGLFillExtrusionTranslationAnchor>().toEnumStyleValue(self.rawLayer->getDefaultFillExtrusionTranslateAnchor());
}
- return MGLStyleValueTransformer<mbgl::style::TranslateAnchorType, NSValue *, mbgl::style::TranslateAnchorType, MGLFillExtrusionTranslateAnchor>().toEnumStyleValue(propertyValue);
+ return MGLStyleValueTransformer<mbgl::style::TranslateAnchorType, NSValue *, mbgl::style::TranslateAnchorType, MGLFillExtrusionTranslationAnchor>().toEnumStyleValue(propertyValue);
}
+- (void)setFillExtrusionTranslateAnchor:(MGLStyleValue<NSValue *> *)fillExtrusionTranslateAnchor {
+}
+
+- (MGLStyleValue<NSValue *> *)fillExtrusionTranslateAnchor {
+ return self.fillExtrusionTranslationAnchor;
+}
@end
@implementation NSValue (MGLFillExtrusionStyleLayerAdditions)
-+ (NSValue *)valueWithMGLFillExtrusionTranslateAnchor:(MGLFillExtrusionTranslateAnchor)fillExtrusionTranslateAnchor {
- return [NSValue value:&fillExtrusionTranslateAnchor withObjCType:@encode(MGLFillExtrusionTranslateAnchor)];
++ (NSValue *)valueWithMGLFillExtrusionTranslationAnchor:(MGLFillExtrusionTranslationAnchor)fillExtrusionTranslationAnchor {
+ return [NSValue value:&fillExtrusionTranslationAnchor withObjCType:@encode(MGLFillExtrusionTranslationAnchor)];
}
-- (MGLFillExtrusionTranslateAnchor)MGLFillExtrusionTranslateAnchorValue {
- MGLFillExtrusionTranslateAnchor fillExtrusionTranslateAnchor;
- [self getValue:&fillExtrusionTranslateAnchor];
- return fillExtrusionTranslateAnchor;
+- (MGLFillExtrusionTranslationAnchor)MGLFillExtrusionTranslationAnchorValue {
+ MGLFillExtrusionTranslationAnchor fillExtrusionTranslationAnchor;
+ [self getValue:&fillExtrusionTranslationAnchor];
+ return fillExtrusionTranslationAnchor;
}
@end
diff --git a/platform/darwin/src/MGLStyleLayer.h.ejs b/platform/darwin/src/MGLStyleLayer.h.ejs
index e29ea4611d..eed4f911be 100644
--- a/platform/darwin/src/MGLStyleLayer.h.ejs
+++ b/platform/darwin/src/MGLStyleLayer.h.ejs
@@ -64,10 +64,10 @@ typedef NS_ENUM(NSUInteger, MGL<%- camelize(property.name) %>) {
/**
<%- doc.wrap(80, 1) %>
- You can access an existing <%- type %> style layer using the
+ You can access an existing <%- unhyphenate(type) %> style layer using the
`-[MGLStyle layerWithIdentifier:]` method if you know its identifier;
otherwise, find it using the `MGLStyle.layers` property. You can also create a
- new <%- type %> style layer and add it to the style using a method such as
+ new <%- unhyphenate(type) %> style layer and add it to the style using a method such as
`-[MGLStyle addLayer:]`.
### Example
diff --git a/platform/darwin/src/MGLSymbolStyleLayer.h b/platform/darwin/src/MGLSymbolStyleLayer.h
index b6c6372324..204589a49c 100644
--- a/platform/darwin/src/MGLSymbolStyleLayer.h
+++ b/platform/darwin/src/MGLSymbolStyleLayer.h
@@ -552,15 +552,6 @@ MGL_EXPORT
* `MGLCameraStyleFunction` with an interpolation mode of:
* `MGLInterpolationModeExponential`
* `MGLInterpolationModeInterval`
- * `MGLSourceStyleFunction` with an interpolation mode of:
- * `MGLInterpolationModeExponential`
- * `MGLInterpolationModeInterval`
- * `MGLInterpolationModeCategorical`
- * `MGLInterpolationModeIdentity`
- * `MGLCompositeStyleFunction` with an interpolation mode of:
- * `MGLInterpolationModeExponential`
- * `MGLInterpolationModeInterval`
- * `MGLInterpolationModeCategorical`
*/
@property (nonatomic, null_resettable) MGLStyleValue<NSNumber *> *iconScale;
@@ -943,15 +934,6 @@ MGL_EXPORT
* `MGLCameraStyleFunction` with an interpolation mode of:
* `MGLInterpolationModeExponential`
* `MGLInterpolationModeInterval`
- * `MGLSourceStyleFunction` with an interpolation mode of:
- * `MGLInterpolationModeExponential`
- * `MGLInterpolationModeInterval`
- * `MGLInterpolationModeCategorical`
- * `MGLInterpolationModeIdentity`
- * `MGLCompositeStyleFunction` with an interpolation mode of:
- * `MGLInterpolationModeExponential`
- * `MGLInterpolationModeInterval`
- * `MGLInterpolationModeCategorical`
*/
@property (nonatomic, null_resettable) MGLStyleValue<NSNumber *> *textFontSize;
diff --git a/platform/darwin/src/MGLSymbolStyleLayer.mm b/platform/darwin/src/MGLSymbolStyleLayer.mm
index 5a8f8c6084..1cdfc44532 100644
--- a/platform/darwin/src/MGLSymbolStyleLayer.mm
+++ b/platform/darwin/src/MGLSymbolStyleLayer.mm
@@ -303,7 +303,7 @@ namespace mbgl {
- (void)setIconScale:(MGLStyleValue<NSNumber *> *)iconScale {
MGLAssertStyleLayerIsValid();
- auto mbglValue = MGLStyleValueTransformer<float, NSNumber *>().toDataDrivenPropertyValue(iconScale);
+ auto mbglValue = MGLStyleValueTransformer<float, NSNumber *>().toInterpolatablePropertyValue(iconScale);
self.rawLayer->setIconSize(mbglValue);
}
@@ -312,9 +312,9 @@ namespace mbgl {
auto propertyValue = self.rawLayer->getIconSize();
if (propertyValue.isUndefined()) {
- return MGLStyleValueTransformer<float, NSNumber *>().toDataDrivenStyleValue(self.rawLayer->getDefaultIconSize());
+ return MGLStyleValueTransformer<float, NSNumber *>().toStyleValue(self.rawLayer->getDefaultIconSize());
}
- return MGLStyleValueTransformer<float, NSNumber *>().toDataDrivenStyleValue(propertyValue);
+ return MGLStyleValueTransformer<float, NSNumber *>().toStyleValue(propertyValue);
}
- (void)setIconSize:(MGLStyleValue<NSNumber *> *)iconSize {
@@ -604,7 +604,7 @@ namespace mbgl {
- (void)setTextFontSize:(MGLStyleValue<NSNumber *> *)textFontSize {
MGLAssertStyleLayerIsValid();
- auto mbglValue = MGLStyleValueTransformer<float, NSNumber *>().toDataDrivenPropertyValue(textFontSize);
+ auto mbglValue = MGLStyleValueTransformer<float, NSNumber *>().toInterpolatablePropertyValue(textFontSize);
self.rawLayer->setTextSize(mbglValue);
}
@@ -613,9 +613,9 @@ namespace mbgl {
auto propertyValue = self.rawLayer->getTextSize();
if (propertyValue.isUndefined()) {
- return MGLStyleValueTransformer<float, NSNumber *>().toDataDrivenStyleValue(self.rawLayer->getDefaultTextSize());
+ return MGLStyleValueTransformer<float, NSNumber *>().toStyleValue(self.rawLayer->getDefaultTextSize());
}
- return MGLStyleValueTransformer<float, NSNumber *>().toDataDrivenStyleValue(propertyValue);
+ return MGLStyleValueTransformer<float, NSNumber *>().toStyleValue(propertyValue);
}
- (void)setTextSize:(MGLStyleValue<NSNumber *> *)textSize {
diff --git a/platform/darwin/test/MGLFillExtrusionStyleLayerTests.mm b/platform/darwin/test/MGLFillExtrusionStyleLayerTests.mm
index 2f0fac6c6e..5ba24469e5 100644
--- a/platform/darwin/test/MGLFillExtrusionStyleLayerTests.mm
+++ b/platform/darwin/test/MGLFillExtrusionStyleLayerTests.mm
@@ -2,10 +2,12 @@
// Edit platform/darwin/scripts/generate-style-code.js, then run `make darwin-style-code`.
#import "MGLStyleLayerTests.h"
+#import "../../darwin/src/NSDate+MGLAdditions.h"
#import "MGLStyleLayer_Private.h"
#include <mbgl/style/layers/fill-extrusion_layer.hpp>
+#include <mbgl/style/transition_options.hpp>
@interface MGLFillExtrusionLayerTests : MGLStyleLayerTests
@end
@@ -43,6 +45,9 @@
XCTAssertTrue(layer.rawLayer->is<mbgl::style::FillExtrusionLayer>());
auto rawLayer = layer.rawLayer->as<mbgl::style::FillExtrusionLayer>();
+ MGLTransition transitionTest = MGLTransitionMake(5, 4);
+
+
// fill-extrusion-base
{
XCTAssertTrue(rawLayer->getFillExtrusionBase().isUndefined(),
@@ -98,6 +103,15 @@
@"Unsetting fillExtrusionBase should return fill-extrusion-base to the default value.");
XCTAssertEqualObjects(layer.fillExtrusionBase, defaultStyleValue,
@"fillExtrusionBase should return the default value after being unset.");
+ // Transition property test
+ layer.fillExtrusionBaseTransition = transitionTest;
+ auto toptions = rawLayer->getFillExtrusionBaseTransition();
+ XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay);
+ XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration);
+
+ MGLTransition fillExtrusionBaseTransition = layer.fillExtrusionBaseTransition;
+ XCTAssertEqual(fillExtrusionBaseTransition.delay, transitionTest.delay);
+ XCTAssertEqual(fillExtrusionBaseTransition.duration, transitionTest.duration);
}
// fill-extrusion-color
@@ -155,6 +169,15 @@
@"Unsetting fillExtrusionColor should return fill-extrusion-color to the default value.");
XCTAssertEqualObjects(layer.fillExtrusionColor, defaultStyleValue,
@"fillExtrusionColor should return the default value after being unset.");
+ // Transition property test
+ layer.fillExtrusionColorTransition = transitionTest;
+ auto toptions = rawLayer->getFillExtrusionColorTransition();
+ XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay);
+ XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration);
+
+ MGLTransition fillExtrusionColorTransition = layer.fillExtrusionColorTransition;
+ XCTAssertEqual(fillExtrusionColorTransition.delay, transitionTest.delay);
+ XCTAssertEqual(fillExtrusionColorTransition.duration, transitionTest.duration);
}
// fill-extrusion-height
@@ -212,6 +235,15 @@
@"Unsetting fillExtrusionHeight should return fill-extrusion-height to the default value.");
XCTAssertEqualObjects(layer.fillExtrusionHeight, defaultStyleValue,
@"fillExtrusionHeight should return the default value after being unset.");
+ // Transition property test
+ layer.fillExtrusionHeightTransition = transitionTest;
+ auto toptions = rawLayer->getFillExtrusionHeightTransition();
+ XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay);
+ XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration);
+
+ MGLTransition fillExtrusionHeightTransition = layer.fillExtrusionHeightTransition;
+ XCTAssertEqual(fillExtrusionHeightTransition.delay, transitionTest.delay);
+ XCTAssertEqual(fillExtrusionHeightTransition.duration, transitionTest.duration);
}
// fill-extrusion-opacity
@@ -251,6 +283,15 @@
XCTAssertThrowsSpecificNamed(layer.fillExtrusionOpacity = functionStyleValue, NSException, NSInvalidArgumentException, @"MGLStyleValue should raise an exception if it is applied to a property that cannot support it");
functionStyleValue = [MGLStyleValue<NSNumber *> valueWithInterpolationMode:MGLInterpolationModeInterval compositeStops:@{@18: constantStyleValue} attributeName:@"" options:nil];
XCTAssertThrowsSpecificNamed(layer.fillExtrusionOpacity = functionStyleValue, NSException, NSInvalidArgumentException, @"MGLStyleValue should raise an exception if it is applied to a property that cannot support it");
+ // Transition property test
+ layer.fillExtrusionOpacityTransition = transitionTest;
+ auto toptions = rawLayer->getFillExtrusionOpacityTransition();
+ XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay);
+ XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration);
+
+ MGLTransition fillExtrusionOpacityTransition = layer.fillExtrusionOpacityTransition;
+ XCTAssertEqual(fillExtrusionOpacityTransition.delay, transitionTest.delay);
+ XCTAssertEqual(fillExtrusionOpacityTransition.duration, transitionTest.duration);
}
// fill-extrusion-pattern
@@ -290,13 +331,22 @@
XCTAssertThrowsSpecificNamed(layer.fillExtrusionPattern = functionStyleValue, NSException, NSInvalidArgumentException, @"MGLStyleValue should raise an exception if it is applied to a property that cannot support it");
functionStyleValue = [MGLStyleValue<NSString *> valueWithInterpolationMode:MGLInterpolationModeInterval compositeStops:@{@18: constantStyleValue} attributeName:@"" options:nil];
XCTAssertThrowsSpecificNamed(layer.fillExtrusionPattern = functionStyleValue, NSException, NSInvalidArgumentException, @"MGLStyleValue should raise an exception if it is applied to a property that cannot support it");
+ // Transition property test
+ layer.fillExtrusionPatternTransition = transitionTest;
+ auto toptions = rawLayer->getFillExtrusionPatternTransition();
+ XCTAssert(toptions.delay && MGLTimeIntervalFromDuration(*toptions.delay) == transitionTest.delay);
+ XCTAssert(toptions.duration && MGLTimeIntervalFromDuration(*toptions.duration) == transitionTest.duration);
+
+ MGLTransition fillExtrusionPatternTransition = layer.fillExtrusionPatternTransition;
+ XCTAssertEqual(fillExtrusionPatternTransition.delay, transitionTest.delay);
+ XCTAssertEqual(fillExtrusionPatternTransition.duration, transitionTest.duration);
}
// fill-extrusion-translate
{
XCTAssertTrue(rawLayer->getFillExtrusionTranslate().isUndefined(),
@"fill-extrusion-translate should be unset initially.");
- MGLStyleValue<NSValue *> *defaultStyleValue = layer.fillExtrusionTranslate;
+ MGLStyleValue<NSValue *> *defaultStyleValue = layer.fillExtrusionTranslation;
MGLStyleValue<NSValue *> *constantStyleValue = [MGLStyleValue<NSValue *> valueWithRawValue:
#if TARGET_OS_IPHONE
@@ -305,75 +355,75 @@
[NSValue valueWithMGLVector:CGVectorMake(1, -1)]
#endif
];
- layer.fillExtrusionTranslate = constantStyleValue;
+ layer.fillExtrusionTranslation = constantStyleValue;
mbgl::style::PropertyValue<std::array<float, 2>> propertyValue = { { 1, 1 } };
XCTAssertEqual(rawLayer->getFillExtrusionTranslate(), propertyValue,
- @"Setting fillExtrusionTranslate to a constant value should update fill-extrusion-translate.");
- XCTAssertEqualObjects(layer.fillExtrusionTranslate, constantStyleValue,
- @"fillExtrusionTranslate should round-trip constant values.");
+ @"Setting fillExtrusionTranslation to a constant value should update fill-extrusion-translate.");
+ XCTAssertEqualObjects(layer.fillExtrusionTranslation, constantStyleValue,
+ @"fillExtrusionTranslation should round-trip constant values.");
MGLStyleValue<NSValue *> * functionStyleValue = [MGLStyleValue<NSValue *> valueWithInterpolationMode:MGLInterpolationModeInterval cameraStops:@{@18: constantStyleValue} options:nil];
- layer.fillExtrusionTranslate = functionStyleValue;
+ layer.fillExtrusionTranslation = functionStyleValue;
mbgl::style::IntervalStops<std::array<float, 2>> intervalStops = { {{18, { 1, 1 }}} };
propertyValue = mbgl::style::CameraFunction<std::array<float, 2>> { intervalStops };
XCTAssertEqual(rawLayer->getFillExtrusionTranslate(), propertyValue,
- @"Setting fillExtrusionTranslate to a camera function should update fill-extrusion-translate.");
- XCTAssertEqualObjects(layer.fillExtrusionTranslate, functionStyleValue,
- @"fillExtrusionTranslate should round-trip camera functions.");
+ @"Setting fillExtrusionTranslation to a camera function should update fill-extrusion-translate.");
+ XCTAssertEqualObjects(layer.fillExtrusionTranslation, functionStyleValue,
+ @"fillExtrusionTranslation should round-trip camera functions.");
- layer.fillExtrusionTranslate = nil;
+ layer.fillExtrusionTranslation = nil;
XCTAssertTrue(rawLayer->getFillExtrusionTranslate().isUndefined(),
- @"Unsetting fillExtrusionTranslate should return fill-extrusion-translate to the default value.");
- XCTAssertEqualObjects(layer.fillExtrusionTranslate, defaultStyleValue,
- @"fillExtrusionTranslate should return the default value after being unset.");
+ @"Unsetting fillExtrusionTranslation should return fill-extrusion-translate to the default value.");
+ XCTAssertEqualObjects(layer.fillExtrusionTranslation, defaultStyleValue,
+ @"fillExtrusionTranslation should return the default value after being unset.");
functionStyleValue = [MGLStyleValue<NSValue *> valueWithInterpolationMode:MGLInterpolationModeIdentity sourceStops:nil attributeName:@"" options:nil];
- XCTAssertThrowsSpecificNamed(layer.fillExtrusionTranslate = functionStyleValue, NSException, NSInvalidArgumentException, @"MGLStyleValue should raise an exception if it is applied to a property that cannot support it");
+ XCTAssertThrowsSpecificNamed(layer.fillExtrusionTranslation = functionStyleValue, NSException, NSInvalidArgumentException, @"MGLStyleValue should raise an exception if it is applied to a property that cannot support it");
functionStyleValue = [MGLStyleValue<NSValue *> valueWithInterpolationMode:MGLInterpolationModeInterval compositeStops:@{@18: constantStyleValue} attributeName:@"" options:nil];
- XCTAssertThrowsSpecificNamed(layer.fillExtrusionTranslate = functionStyleValue, NSException, NSInvalidArgumentException, @"MGLStyleValue should raise an exception if it is applied to a property that cannot support it");
+ XCTAssertThrowsSpecificNamed(layer.fillExtrusionTranslation = functionStyleValue, NSException, NSInvalidArgumentException, @"MGLStyleValue should raise an exception if it is applied to a property that cannot support it");
}
// fill-extrusion-translate-anchor
{
XCTAssertTrue(rawLayer->getFillExtrusionTranslateAnchor().isUndefined(),
@"fill-extrusion-translate-anchor should be unset initially.");
- MGLStyleValue<NSValue *> *defaultStyleValue = layer.fillExtrusionTranslateAnchor;
+ MGLStyleValue<NSValue *> *defaultStyleValue = layer.fillExtrusionTranslationAnchor;
- MGLStyleValue<NSValue *> *constantStyleValue = [MGLStyleValue<NSValue *> valueWithRawValue:[NSValue valueWithMGLFillExtrusionTranslateAnchor:MGLFillExtrusionTranslateAnchorViewport]];
- layer.fillExtrusionTranslateAnchor = constantStyleValue;
+ MGLStyleValue<NSValue *> *constantStyleValue = [MGLStyleValue<NSValue *> valueWithRawValue:[NSValue valueWithMGLFillExtrusionTranslationAnchor:MGLFillExtrusionTranslationAnchorViewport]];
+ layer.fillExtrusionTranslationAnchor = constantStyleValue;
mbgl::style::PropertyValue<mbgl::style::TranslateAnchorType> propertyValue = { mbgl::style::TranslateAnchorType::Viewport };
XCTAssertEqual(rawLayer->getFillExtrusionTranslateAnchor(), propertyValue,
- @"Setting fillExtrusionTranslateAnchor to a constant value should update fill-extrusion-translate-anchor.");
- XCTAssertEqualObjects(layer.fillExtrusionTranslateAnchor, constantStyleValue,
- @"fillExtrusionTranslateAnchor should round-trip constant values.");
+ @"Setting fillExtrusionTranslationAnchor to a constant value should update fill-extrusion-translate-anchor.");
+ XCTAssertEqualObjects(layer.fillExtrusionTranslationAnchor, constantStyleValue,
+ @"fillExtrusionTranslationAnchor should round-trip constant values.");
MGLStyleValue<NSValue *> * functionStyleValue = [MGLStyleValue<NSValue *> valueWithInterpolationMode:MGLInterpolationModeInterval cameraStops:@{@18: constantStyleValue} options:nil];
- layer.fillExtrusionTranslateAnchor = functionStyleValue;
+ layer.fillExtrusionTranslationAnchor = functionStyleValue;
mbgl::style::IntervalStops<mbgl::style::TranslateAnchorType> intervalStops = { {{18, mbgl::style::TranslateAnchorType::Viewport}} };
propertyValue = mbgl::style::CameraFunction<mbgl::style::TranslateAnchorType> { intervalStops };
XCTAssertEqual(rawLayer->getFillExtrusionTranslateAnchor(), propertyValue,
- @"Setting fillExtrusionTranslateAnchor to a camera function should update fill-extrusion-translate-anchor.");
- XCTAssertEqualObjects(layer.fillExtrusionTranslateAnchor, functionStyleValue,
- @"fillExtrusionTranslateAnchor should round-trip camera functions.");
+ @"Setting fillExtrusionTranslationAnchor to a camera function should update fill-extrusion-translate-anchor.");
+ XCTAssertEqualObjects(layer.fillExtrusionTranslationAnchor, functionStyleValue,
+ @"fillExtrusionTranslationAnchor should round-trip camera functions.");
- layer.fillExtrusionTranslateAnchor = nil;
+ layer.fillExtrusionTranslationAnchor = nil;
XCTAssertTrue(rawLayer->getFillExtrusionTranslateAnchor().isUndefined(),
- @"Unsetting fillExtrusionTranslateAnchor should return fill-extrusion-translate-anchor to the default value.");
- XCTAssertEqualObjects(layer.fillExtrusionTranslateAnchor, defaultStyleValue,
- @"fillExtrusionTranslateAnchor should return the default value after being unset.");
+ @"Unsetting fillExtrusionTranslationAnchor should return fill-extrusion-translate-anchor to the default value.");
+ XCTAssertEqualObjects(layer.fillExtrusionTranslationAnchor, defaultStyleValue,
+ @"fillExtrusionTranslationAnchor should return the default value after being unset.");
functionStyleValue = [MGLStyleValue<NSValue *> valueWithInterpolationMode:MGLInterpolationModeIdentity sourceStops:nil attributeName:@"" options:nil];
- XCTAssertThrowsSpecificNamed(layer.fillExtrusionTranslateAnchor = functionStyleValue, NSException, NSInvalidArgumentException, @"MGLStyleValue should raise an exception if it is applied to a property that cannot support it");
+ XCTAssertThrowsSpecificNamed(layer.fillExtrusionTranslationAnchor = functionStyleValue, NSException, NSInvalidArgumentException, @"MGLStyleValue should raise an exception if it is applied to a property that cannot support it");
functionStyleValue = [MGLStyleValue<NSValue *> valueWithInterpolationMode:MGLInterpolationModeInterval compositeStops:@{@18: constantStyleValue} attributeName:@"" options:nil];
- XCTAssertThrowsSpecificNamed(layer.fillExtrusionTranslateAnchor = functionStyleValue, NSException, NSInvalidArgumentException, @"MGLStyleValue should raise an exception if it is applied to a property that cannot support it");
+ XCTAssertThrowsSpecificNamed(layer.fillExtrusionTranslationAnchor = functionStyleValue, NSException, NSInvalidArgumentException, @"MGLStyleValue should raise an exception if it is applied to a property that cannot support it");
}
}
@@ -383,13 +433,13 @@
[self testPropertyName:@"fill-extrusion-height" isBoolean:NO];
[self testPropertyName:@"fill-extrusion-opacity" isBoolean:NO];
[self testPropertyName:@"fill-extrusion-pattern" isBoolean:NO];
- [self testPropertyName:@"fill-extrusion-translate" isBoolean:NO];
- [self testPropertyName:@"fill-extrusion-translate-anchor" isBoolean:NO];
+ [self testPropertyName:@"fill-extrusion-translation" isBoolean:NO];
+ [self testPropertyName:@"fill-extrusion-translation-anchor" isBoolean:NO];
}
- (void)testValueAdditions {
- XCTAssertEqual([NSValue valueWithMGLFillExtrusionTranslateAnchor:MGLFillExtrusionTranslateAnchorMap].MGLFillExtrusionTranslateAnchorValue, MGLFillExtrusionTranslateAnchorMap);
- XCTAssertEqual([NSValue valueWithMGLFillExtrusionTranslateAnchor:MGLFillExtrusionTranslateAnchorViewport].MGLFillExtrusionTranslateAnchorValue, MGLFillExtrusionTranslateAnchorViewport);
+ XCTAssertEqual([NSValue valueWithMGLFillExtrusionTranslationAnchor:MGLFillExtrusionTranslationAnchorMap].MGLFillExtrusionTranslationAnchorValue, MGLFillExtrusionTranslationAnchorMap);
+ XCTAssertEqual([NSValue valueWithMGLFillExtrusionTranslationAnchor:MGLFillExtrusionTranslationAnchorViewport].MGLFillExtrusionTranslationAnchorValue, MGLFillExtrusionTranslationAnchorViewport);
}
@end
diff --git a/platform/darwin/test/MGLSymbolStyleLayerTests.mm b/platform/darwin/test/MGLSymbolStyleLayerTests.mm
index 367ebf363c..eee61dd5d7 100644
--- a/platform/darwin/test/MGLSymbolStyleLayerTests.mm
+++ b/platform/darwin/test/MGLSymbolStyleLayerTests.mm
@@ -405,7 +405,7 @@
MGLStyleValue<NSNumber *> *constantStyleValue = [MGLStyleValue<NSNumber *> valueWithRawValue:@0xff];
layer.iconScale = constantStyleValue;
- mbgl::style::DataDrivenPropertyValue<float> propertyValue = { 0xff };
+ mbgl::style::PropertyValue<float> propertyValue = { 0xff };
XCTAssertEqual(rawLayer->getIconSize(), propertyValue,
@"Setting iconScale to a constant value should update icon-size.");
XCTAssertEqualObjects(layer.iconScale, constantStyleValue,
@@ -422,29 +422,6 @@
XCTAssertEqualObjects(layer.iconScale, functionStyleValue,
@"iconScale should round-trip camera functions.");
- functionStyleValue = [MGLStyleValue<NSNumber *> valueWithInterpolationMode:MGLInterpolationModeExponential sourceStops:@{@18: constantStyleValue} attributeName:@"keyName" options:nil];
- layer.iconScale = functionStyleValue;
-
- mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
- propertyValue = mbgl::style::SourceFunction<float> { "keyName", exponentialStops };
-
- XCTAssertEqual(rawLayer->getIconSize(), propertyValue,
- @"Setting iconScale to a source function should update icon-size.");
- XCTAssertEqualObjects(layer.iconScale, functionStyleValue,
- @"iconScale should round-trip source functions.");
-
- functionStyleValue = [MGLStyleValue<NSNumber *> valueWithInterpolationMode:MGLInterpolationModeExponential compositeStops:@{@10: @{@18: constantStyleValue}} attributeName:@"keyName" options:nil];
- layer.iconScale = functionStyleValue;
-
- std::map<float, float> innerStops { {18, 0xff} };
- mbgl::style::CompositeExponentialStops<float> compositeStops { { {10.0, innerStops} }, 1.0 };
-
- propertyValue = mbgl::style::CompositeFunction<float> { "keyName", compositeStops };
-
- XCTAssertEqual(rawLayer->getIconSize(), propertyValue,
- @"Setting iconScale to a composite function should update icon-size.");
- XCTAssertEqualObjects(layer.iconScale, functionStyleValue,
- @"iconScale should round-trip composite functions.");
layer.iconScale = nil;
@@ -452,6 +429,11 @@
@"Unsetting iconScale should return icon-size to the default value.");
XCTAssertEqualObjects(layer.iconScale, defaultStyleValue,
@"iconScale should return the default value after being unset.");
+
+ functionStyleValue = [MGLStyleValue<NSNumber *> valueWithInterpolationMode:MGLInterpolationModeIdentity sourceStops:nil attributeName:@"" options:nil];
+ XCTAssertThrowsSpecificNamed(layer.iconScale = functionStyleValue, NSException, NSInvalidArgumentException, @"MGLStyleValue should raise an exception if it is applied to a property that cannot support it");
+ functionStyleValue = [MGLStyleValue<NSNumber *> valueWithInterpolationMode:MGLInterpolationModeInterval compositeStops:@{@18: constantStyleValue} attributeName:@"" options:nil];
+ XCTAssertThrowsSpecificNamed(layer.iconScale = functionStyleValue, NSException, NSInvalidArgumentException, @"MGLStyleValue should raise an exception if it is applied to a property that cannot support it");
}
// icon-text-fit
@@ -970,7 +952,7 @@
MGLStyleValue<NSNumber *> *constantStyleValue = [MGLStyleValue<NSNumber *> valueWithRawValue:@0xff];
layer.textFontSize = constantStyleValue;
- mbgl::style::DataDrivenPropertyValue<float> propertyValue = { 0xff };
+ mbgl::style::PropertyValue<float> propertyValue = { 0xff };
XCTAssertEqual(rawLayer->getTextSize(), propertyValue,
@"Setting textFontSize to a constant value should update text-size.");
XCTAssertEqualObjects(layer.textFontSize, constantStyleValue,
@@ -987,29 +969,6 @@
XCTAssertEqualObjects(layer.textFontSize, functionStyleValue,
@"textFontSize should round-trip camera functions.");
- functionStyleValue = [MGLStyleValue<NSNumber *> valueWithInterpolationMode:MGLInterpolationModeExponential sourceStops:@{@18: constantStyleValue} attributeName:@"keyName" options:nil];
- layer.textFontSize = functionStyleValue;
-
- mbgl::style::ExponentialStops<float> exponentialStops = { {{18, 0xff}}, 1.0 };
- propertyValue = mbgl::style::SourceFunction<float> { "keyName", exponentialStops };
-
- XCTAssertEqual(rawLayer->getTextSize(), propertyValue,
- @"Setting textFontSize to a source function should update text-size.");
- XCTAssertEqualObjects(layer.textFontSize, functionStyleValue,
- @"textFontSize should round-trip source functions.");
-
- functionStyleValue = [MGLStyleValue<NSNumber *> valueWithInterpolationMode:MGLInterpolationModeExponential compositeStops:@{@10: @{@18: constantStyleValue}} attributeName:@"keyName" options:nil];
- layer.textFontSize = functionStyleValue;
-
- std::map<float, float> innerStops { {18, 0xff} };
- mbgl::style::CompositeExponentialStops<float> compositeStops { { {10.0, innerStops} }, 1.0 };
-
- propertyValue = mbgl::style::CompositeFunction<float> { "keyName", compositeStops };
-
- XCTAssertEqual(rawLayer->getTextSize(), propertyValue,
- @"Setting textFontSize to a composite function should update text-size.");
- XCTAssertEqualObjects(layer.textFontSize, functionStyleValue,
- @"textFontSize should round-trip composite functions.");
layer.textFontSize = nil;
@@ -1017,6 +976,11 @@
@"Unsetting textFontSize should return text-size to the default value.");
XCTAssertEqualObjects(layer.textFontSize, defaultStyleValue,
@"textFontSize should return the default value after being unset.");
+
+ functionStyleValue = [MGLStyleValue<NSNumber *> valueWithInterpolationMode:MGLInterpolationModeIdentity sourceStops:nil attributeName:@"" options:nil];
+ XCTAssertThrowsSpecificNamed(layer.textFontSize = functionStyleValue, NSException, NSInvalidArgumentException, @"MGLStyleValue should raise an exception if it is applied to a property that cannot support it");
+ functionStyleValue = [MGLStyleValue<NSNumber *> valueWithInterpolationMode:MGLInterpolationModeInterval compositeStops:@{@18: constantStyleValue} attributeName:@"" options:nil];
+ XCTAssertThrowsSpecificNamed(layer.textFontSize = functionStyleValue, NSException, NSInvalidArgumentException, @"MGLStyleValue should raise an exception if it is applied to a property that cannot support it");
}
// text-ignore-placement
diff --git a/platform/ios/app/lbud_buildings.json b/platform/ios/app/lbud_buildings.json
new file mode 100755
index 0000000000..ff73b00af5
--- /dev/null
+++ b/platform/ios/app/lbud_buildings.json
@@ -0,0 +1,8452 @@
+{
+ "version": 8,
+ "name": "Streets-buildings",
+ "metadata": {
+ "mapbox:autocomposite": true,
+ "mapbox:type": "default",
+ "mapbox:groups": {
+ "1444934828655.3389": {
+ "name": "Aeroways",
+ "collapsed": true
+ },
+ "1444855786460.0557": {
+ "name": "Roads",
+ "collapsed": true
+ },
+ "1444934295202.7542": {
+ "name": "Admin boundaries",
+ "collapsed": true
+ },
+ "1444933721429.3076": {
+ "name": "Road labels",
+ "collapsed": true
+ },
+ "1444855799204.86": {
+ "name": "Bridges",
+ "collapsed": true
+ },
+ "1456969573402.7817": {
+ "name": "Hillshading",
+ "collapsed": true
+ },
+ "1444855769305.6016": {
+ "name": "Tunnels",
+ "collapsed": true
+ },
+ "1456970288113.8113": {
+ "name": "Landcover",
+ "collapsed": true
+ }
+ }
+ },
+ "center": [
+ -73.98397807501742,
+ 40.766104101767695
+ ],
+ "zoom": 15.421792049978444,
+ "bearing": -88.18120343555876,
+ "pitch": 0,
+ "sources": {
+ "composite": {
+ "url": "mapbox://mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v7",
+ "type": "vector"
+ }
+ },
+ "light": {
+ "color": {
+ "stops": [[15.5, "red"], [16, "white"], [16.5, "blue"]]
+ },
+ "position": {
+ "stops": [
+ [15.5, [0.3, 90, 90]],
+ [16.5, [3.3, 90, 90]]
+ ]
+ },
+ "intensity": {
+ "stops": [
+ [15.5, 0],
+ [16.5, 1]
+ ]
+ },
+ "anchor": "map"
+ },
+ "sprite": "mapbox://sprites/lbud/cj007psrp008k2ssjxqhi1rl1",
+ "glyphs": "mapbox://fonts/lbud/{fontstack}/{range}.pbf",
+ "layers": [
+ {
+ "id": "background",
+ "type": "background",
+ "layout": {},
+ "paint": {
+ "background-color": {
+ "base": 1,
+ "stops": [
+ [
+ 11,
+ "hsl(35, 32%, 91%)"
+ ],
+ [
+ 13,
+ "hsl(35, 12%, 89%)"
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "landcover_snow",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456970288113.8113"
+ },
+ "source": "composite",
+ "source-layer": "landcover",
+ "filter": [
+ "==",
+ "class",
+ "snow"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(0, 0%, 100%)",
+ "fill-opacity": 0.2,
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "landcover_wood",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456970288113.8113"
+ },
+ "source": "composite",
+ "source-layer": "landcover",
+ "maxzoom": 14,
+ "filter": [
+ "==",
+ "class",
+ "wood"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(75, 62%, 81%)",
+ "fill-opacity": {
+ "base": 1.5,
+ "stops": [
+ [
+ 2,
+ 0.3
+ ],
+ [
+ 7,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "landcover_scrub",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456970288113.8113"
+ },
+ "source": "composite",
+ "source-layer": "landcover",
+ "maxzoom": 14,
+ "filter": [
+ "==",
+ "class",
+ "scrub"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(75, 62%, 81%)",
+ "fill-opacity": {
+ "base": 1.5,
+ "stops": [
+ [
+ 2,
+ 0.3
+ ],
+ [
+ 7,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "landcover_grass",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456970288113.8113"
+ },
+ "source": "composite",
+ "source-layer": "landcover",
+ "maxzoom": 14,
+ "filter": [
+ "==",
+ "class",
+ "grass"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(75, 62%, 81%)",
+ "fill-opacity": {
+ "base": 1.5,
+ "stops": [
+ [
+ 2,
+ 0.3
+ ],
+ [
+ 7,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "landcover_crop",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456970288113.8113"
+ },
+ "source": "composite",
+ "source-layer": "landcover",
+ "maxzoom": 14,
+ "filter": [
+ "==",
+ "class",
+ "crop"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(75, 62%, 81%)",
+ "fill-opacity": {
+ "base": 1.5,
+ "stops": [
+ [
+ 2,
+ 0.3
+ ],
+ [
+ 7,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "national_park",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "landuse_overlay",
+ "filter": [
+ "==",
+ "class",
+ "national_park"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(100, 58%, 76%)",
+ "fill-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 5,
+ 0
+ ],
+ [
+ 6,
+ 0.5
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "hospital",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "landuse",
+ "filter": [
+ "==",
+ "class",
+ "hospital"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": {
+ "base": 1,
+ "stops": [
+ [
+ 15.5,
+ "hsl(340, 37%, 87%)"
+ ],
+ [
+ 16,
+ "hsl(340, 63%, 89%)"
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "school",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "landuse",
+ "filter": [
+ "==",
+ "class",
+ "school"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": {
+ "base": 1,
+ "stops": [
+ [
+ 15.5,
+ "hsl(50, 47%, 81%)"
+ ],
+ [
+ 16,
+ "hsl(50, 63%, 84%)"
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "park",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "landuse",
+ "filter": [
+ "==",
+ "class",
+ "park"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(100, 58%, 76%)",
+ "fill-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 5,
+ 0
+ ],
+ [
+ 6,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "pitch",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "landuse",
+ "filter": [
+ "==",
+ "class",
+ "pitch"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(100, 57%, 72%)"
+ }
+ },
+ {
+ "id": "pitch-line",
+ "type": "line",
+ "source": "composite",
+ "source-layer": "landuse",
+ "minzoom": 15,
+ "filter": [
+ "==",
+ "class",
+ "pitch"
+ ],
+ "layout": {
+ "line-join": "miter"
+ },
+ "paint": {
+ "line-color": "hsl(75, 57%, 84%)"
+ }
+ },
+ {
+ "id": "cemetery",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "landuse",
+ "filter": [
+ "==",
+ "class",
+ "cemetery"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(75, 37%, 81%)"
+ }
+ },
+ {
+ "id": "industrial",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "landuse",
+ "filter": [
+ "==",
+ "class",
+ "industrial"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": {
+ "base": 1,
+ "stops": [
+ [
+ 15.5,
+ "hsl(230, 15%, 86%)"
+ ],
+ [
+ 16,
+ "hsl(230, 29%, 89%)"
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "sand",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "landuse",
+ "filter": [
+ "==",
+ "class",
+ "sand"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(60, 46%, 87%)"
+ }
+ },
+ {
+ "id": "hillshade_highlight_bright",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456969573402.7817"
+ },
+ "source": "composite",
+ "source-layer": "hillshade",
+ "maxzoom": 16,
+ "filter": [
+ "==",
+ "level",
+ 94
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(0, 0%, 100%)",
+ "fill-opacity": {
+ "stops": [
+ [
+ 14,
+ 0.12
+ ],
+ [
+ 16,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "hillshade_highlight_med",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456969573402.7817"
+ },
+ "source": "composite",
+ "source-layer": "hillshade",
+ "maxzoom": 16,
+ "filter": [
+ "==",
+ "level",
+ 90
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(0, 0%, 100%)",
+ "fill-opacity": {
+ "stops": [
+ [
+ 14,
+ 0.12
+ ],
+ [
+ 16,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "hillshade_shadow_faint",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456969573402.7817"
+ },
+ "source": "composite",
+ "source-layer": "hillshade",
+ "maxzoom": 16,
+ "filter": [
+ "==",
+ "level",
+ 89
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(56, 59%, 22%)",
+ "fill-opacity": {
+ "stops": [
+ [
+ 14,
+ 0.05
+ ],
+ [
+ 16,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "hillshade_shadow_med",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456969573402.7817"
+ },
+ "source": "composite",
+ "source-layer": "hillshade",
+ "maxzoom": 16,
+ "filter": [
+ "==",
+ "level",
+ 78
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(56, 59%, 22%)",
+ "fill-opacity": {
+ "stops": [
+ [
+ 14,
+ 0.05
+ ],
+ [
+ 16,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "hillshade_shadow_dark",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456969573402.7817"
+ },
+ "source": "composite",
+ "source-layer": "hillshade",
+ "maxzoom": 16,
+ "filter": [
+ "==",
+ "level",
+ 67
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(56, 59%, 22%)",
+ "fill-opacity": {
+ "stops": [
+ [
+ 14,
+ 0.06
+ ],
+ [
+ 16,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "hillshade_shadow_extreme",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456969573402.7817"
+ },
+ "source": "composite",
+ "source-layer": "hillshade",
+ "maxzoom": 16,
+ "filter": [
+ "==",
+ "level",
+ 56
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(56, 59%, 22%)",
+ "fill-opacity": {
+ "stops": [
+ [
+ 14,
+ 0.06
+ ],
+ [
+ 16,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "waterway-river-canal",
+ "type": "line",
+ "source": "composite",
+ "source-layer": "waterway",
+ "minzoom": 8,
+ "filter": [
+ "in",
+ "class",
+ "canal",
+ "river"
+ ],
+ "layout": {
+ "line-cap": {
+ "base": 1,
+ "stops": [
+ [
+ 0,
+ "butt"
+ ],
+ [
+ 11,
+ "round"
+ ]
+ ]
+ },
+ "line-join": "round"
+ },
+ "paint": {
+ "line-color": "hsl(205, 87%, 76%)",
+ "line-width": {
+ "base": 1.3,
+ "stops": [
+ [
+ 8.5,
+ 0.1
+ ],
+ [
+ 20,
+ 8
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 8,
+ 0
+ ],
+ [
+ 8.5,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "waterway-small",
+ "type": "line",
+ "source": "composite",
+ "source-layer": "waterway",
+ "minzoom": 13,
+ "filter": [
+ "!in",
+ "class",
+ "canal",
+ "river"
+ ],
+ "layout": {
+ "line-join": "round",
+ "line-cap": "round"
+ },
+ "paint": {
+ "line-color": "hsl(205, 87%, 76%)",
+ "line-width": {
+ "base": 1.35,
+ "stops": [
+ [
+ 13.5,
+ 0.1
+ ],
+ [
+ 20,
+ 3
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13,
+ 0
+ ],
+ [
+ 13.5,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "water-shadow",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "water",
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(215, 84%, 69%)",
+ "fill-translate": {
+ "base": 1.2,
+ "stops": [
+ [
+ 7,
+ [
+ 0,
+ 0
+ ]
+ ],
+ [
+ 16,
+ [
+ -1,
+ -1
+ ]
+ ]
+ ]
+ },
+ "fill-translate-anchor": "viewport",
+ "fill-opacity": 1
+ }
+ },
+ {
+ "id": "water",
+ "ref": "water-shadow",
+ "paint": {
+ "fill-color": "hsl(196, 80%, 70%)"
+ }
+ },
+ {
+ "id": "barrier_line-land-polygon",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "barrier_line",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "Polygon"
+ ],
+ [
+ "==",
+ "class",
+ "land"
+ ]
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(35, 12%, 89%)"
+ }
+ },
+ {
+ "id": "barrier_line-land-line",
+ "type": "line",
+ "source": "composite",
+ "source-layer": "barrier_line",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "==",
+ "class",
+ "land"
+ ]
+ ],
+ "layout": {
+ "line-cap": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.99,
+ "stops": [
+ [
+ 14,
+ 0.75
+ ],
+ [
+ 20,
+ 40
+ ]
+ ]
+ },
+ "line-color": "hsl(35, 12%, 89%)"
+ }
+ },
+ {
+ "id": "aeroway-polygon",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1444934828655.3389"
+ },
+ "source": "composite",
+ "source-layer": "aeroway",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "!=",
+ "type",
+ "apron"
+ ],
+ [
+ "==",
+ "$type",
+ "Polygon"
+ ]
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ "hsl(230, 23%, 82%)"
+ ],
+ [
+ 16,
+ "hsl(230, 37%, 84%)"
+ ]
+ ]
+ },
+ "fill-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 11,
+ 0
+ ],
+ [
+ 11.5,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "aeroway-runway",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444934828655.3389"
+ },
+ "source": "composite",
+ "source-layer": "aeroway",
+ "minzoom": 9,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "==",
+ "type",
+ "runway"
+ ]
+ ],
+ "layout": {},
+ "paint": {
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ "hsl(230, 23%, 82%)"
+ ],
+ [
+ 16,
+ "hsl(230, 37%, 84%)"
+ ]
+ ]
+ },
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 9,
+ 1
+ ],
+ [
+ 18,
+ 80
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "aeroway-taxiway",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444934828655.3389"
+ },
+ "source": "composite",
+ "source-layer": "aeroway",
+ "minzoom": 9,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "==",
+ "type",
+ "taxiway"
+ ]
+ ],
+ "layout": {},
+ "paint": {
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ "hsl(230, 23%, 82%)"
+ ],
+ [
+ 16,
+ "hsl(230, 37%, 84%)"
+ ]
+ ]
+ },
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 0.5
+ ],
+ [
+ 18,
+ 20
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "building-line",
+ "type": "line",
+ "source": "composite",
+ "source-layer": "building",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ [
+ "!=",
+ "type",
+ "building:part"
+ ],
+ [
+ "==",
+ "underground",
+ "false"
+ ]
+ ],
+ "layout": {},
+ "paint": {
+ "line-color": "hsl(35, 6%, 79%)",
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 0.75
+ ],
+ [
+ 20,
+ 3
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 15.5,
+ 0
+ ],
+ [
+ 16,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "building",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "building",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ [
+ "!=",
+ "type",
+ "building:part"
+ ],
+ [
+ "==",
+ "underground",
+ "false"
+ ]
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ "hsl(35, 11%, 88%)"
+ ],
+ [
+ 16,
+ "hsl(35, 8%, 85%)"
+ ]
+ ]
+ },
+ "fill-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 15.5,
+ 0
+ ],
+ [
+ 16,
+ 1
+ ]
+ ]
+ },
+ "fill-outline-color": "hsl(35, 6%, 79%)"
+ }
+ },
+ {
+ "id": "tunnel-street-low",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "street"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "stops": [
+ [
+ 11.5,
+ 0
+ ],
+ [
+ 12,
+ 1
+ ],
+ [
+ 14,
+ 1
+ ],
+ [
+ 14.01,
+ 0
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-street_limited-low",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "street_limited"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "stops": [
+ [
+ 11.5,
+ 0
+ ],
+ [
+ 12,
+ 1
+ ],
+ [
+ 14,
+ 1
+ ],
+ [
+ 14.01,
+ 0
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-service-link-track-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "trunk_link"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "service",
+ "track"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 19%, 75%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 18,
+ 12
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 3,
+ 3
+ ]
+ }
+ },
+ {
+ "id": "tunnel-street_limited-case",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-street_limited-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 19%, 75%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 13,
+ 0
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 3,
+ 3
+ ],
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-street-case",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-street-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 19%, 75%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 13,
+ 0
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 3,
+ 3
+ ],
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-secondary-tertiary-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ],
+ [
+ "in",
+ "class",
+ "secondary",
+ "tertiary"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.2,
+ "stops": [
+ [
+ 10,
+ 0.75
+ ],
+ [
+ 18,
+ 2
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 3,
+ 3
+ ],
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 8.5,
+ 0.5
+ ],
+ [
+ 10,
+ 0.75
+ ],
+ [
+ 18,
+ 26
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 19%, 75%)"
+ }
+ },
+ {
+ "id": "tunnel-primary-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "primary"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 3,
+ 3
+ ],
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 19%, 75%)"
+ }
+ },
+ {
+ "id": "tunnel-trunk_link-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ],
+ [
+ "==",
+ "type",
+ "trunk_link"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 3,
+ 3
+ ]
+ }
+ },
+ {
+ "id": "tunnel-motorway_link-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "motorway_link"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 3,
+ 3
+ ]
+ }
+ },
+ {
+ "id": "tunnel-trunk-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ],
+ [
+ "==",
+ "type",
+ "trunk"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-opacity": 1,
+ "line-dasharray": [
+ 3,
+ 3
+ ]
+ }
+ },
+ {
+ "id": "tunnel-motorway-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "motorway"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-opacity": 1,
+ "line-dasharray": [
+ 3,
+ 3
+ ]
+ }
+ },
+ {
+ "id": "tunnel-construction",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "construction"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "miter"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ },
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 0.4,
+ 0.8
+ ]
+ ],
+ [
+ 15,
+ [
+ 0.3,
+ 0.6
+ ]
+ ],
+ [
+ 16,
+ [
+ 0.2,
+ 0.3
+ ]
+ ],
+ [
+ 17,
+ [
+ 0.2,
+ 0.25
+ ]
+ ],
+ [
+ 18,
+ [
+ 0.15,
+ 0.15
+ ]
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-path",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "steps"
+ ],
+ [
+ "==",
+ "class",
+ "path"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 1
+ ],
+ [
+ 18,
+ 4
+ ]
+ ]
+ },
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.75,
+ 1
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.75
+ ]
+ ],
+ [
+ 17,
+ [
+ 1,
+ 0.5
+ ]
+ ]
+ ]
+ },
+ "line-color": "hsl(35, 26%, 95%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ 0
+ ],
+ [
+ 14.25,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-steps",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ],
+ [
+ "==",
+ "type",
+ "steps"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 1
+ ],
+ [
+ 16,
+ 1.6
+ ],
+ [
+ 18,
+ 6
+ ]
+ ]
+ },
+ "line-color": "hsl(35, 26%, 95%)",
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.75,
+ 1
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.75
+ ]
+ ],
+ [
+ 17,
+ [
+ 0.3,
+ 0.3
+ ]
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ 0
+ ],
+ [
+ 14.25,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-trunk_link",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-trunk_link-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(46, 77%, 78%)",
+ "line-opacity": 1,
+ "line-dasharray": [
+ 1,
+ 0
+ ]
+ }
+ },
+ {
+ "id": "tunnel-motorway_link",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-motorway_link-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(26, 100%, 78%)",
+ "line-opacity": 1,
+ "line-dasharray": [
+ 1,
+ 0
+ ]
+ }
+ },
+ {
+ "id": "tunnel-pedestrian",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "pedestrian"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 18,
+ 12
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": 1,
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.5,
+ 0.4
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.2
+ ]
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-service-link-track",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-service-link-track-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 18,
+ 12
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-dasharray": [
+ 1,
+ 0
+ ]
+ }
+ },
+ {
+ "id": "tunnel-street_limited",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-street_limited-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(35, 14%, 93%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-street",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-street-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-secondary-tertiary",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-secondary-tertiary-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 8.5,
+ 0.5
+ ],
+ [
+ 10,
+ 0.75
+ ],
+ [
+ 18,
+ 26
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": 1,
+ "line-dasharray": [
+ 1,
+ 0
+ ],
+ "line-blur": 0
+ }
+ },
+ {
+ "id": "tunnel-primary",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-primary-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": 1,
+ "line-dasharray": [
+ 1,
+ 0
+ ],
+ "line-blur": 0
+ }
+ },
+ {
+ "id": "tunnel-oneway-arrows-blue-minor",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "trunk_link"
+ ],
+ [
+ "==",
+ "oneway",
+ "true"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "path",
+ "pedestrian",
+ "service",
+ "track"
+ ]
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "icon-image": {
+ "base": 1,
+ "stops": [
+ [
+ 17,
+ "oneway-small"
+ ],
+ [
+ 18,
+ "oneway-large"
+ ]
+ ]
+ },
+ "symbol-spacing": 200,
+ "icon-padding": 2
+ },
+ "paint": {}
+ },
+ {
+ "id": "tunnel-oneway-arrows-blue-major",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "trunk_link"
+ ],
+ [
+ "==",
+ "oneway",
+ "true"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ],
+ [
+ "in",
+ "class",
+ "primary",
+ "secondary",
+ "street",
+ "street_limited",
+ "tertiary"
+ ]
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "icon-image": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ "oneway-small"
+ ],
+ [
+ 17,
+ "oneway-large"
+ ]
+ ]
+ },
+ "symbol-spacing": 200,
+ "icon-padding": 2
+ },
+ "paint": {}
+ },
+ {
+ "id": "tunnel-trunk",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "trunk"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": "hsl(46, 77%, 78%)"
+ }
+ },
+ {
+ "id": "tunnel-motorway",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-motorway-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 1,
+ 0
+ ],
+ "line-opacity": 1,
+ "line-color": "hsl(26, 100%, 78%)",
+ "line-blur": 0
+ }
+ },
+ {
+ "id": "tunnel-oneway-arrows-white",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "type",
+ "primary_link",
+ "secondary_link",
+ "tertiary_link"
+ ],
+ [
+ "==",
+ "oneway",
+ "true"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "motorway",
+ "motorway_link",
+ "trunk"
+ ]
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "icon-image": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ "oneway-white-small"
+ ],
+ [
+ 17,
+ "oneway-white-large"
+ ]
+ ]
+ },
+ "symbol-spacing": 200,
+ "icon-padding": 2
+ },
+ "paint": {}
+ },
+ {
+ "id": "ferry",
+ "type": "line",
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "==",
+ "type",
+ "ferry"
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ "hsl(205, 73%, 63%)"
+ ],
+ [
+ 17,
+ "hsl(230, 73%, 63%)"
+ ]
+ ]
+ },
+ "line-opacity": 1,
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 20,
+ 1
+ ]
+ ]
+ },
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 12,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 13,
+ [
+ 12,
+ 4
+ ]
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "ferry_auto",
+ "type": "line",
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "==",
+ "type",
+ "ferry_auto"
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ "hsl(205, 73%, 63%)"
+ ],
+ [
+ 17,
+ "hsl(230, 73%, 63%)"
+ ]
+ ]
+ },
+ "line-opacity": 1,
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 20,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-path-bg",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "!in",
+ "type",
+ "crossing",
+ "sidewalk",
+ "steps"
+ ],
+ [
+ "==",
+ "class",
+ "path"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 2
+ ],
+ [
+ 18,
+ 7
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 1,
+ 0
+ ],
+ "line-color": "hsl(230, 17%, 82%)",
+ "line-blur": 0,
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ 0
+ ],
+ [
+ 14.25,
+ 0.75
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-steps-bg",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "==",
+ "type",
+ "steps"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 2
+ ],
+ [
+ 17,
+ 4.6
+ ],
+ [
+ 18,
+ 7
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 17%, 82%)",
+ "line-dasharray": [
+ 1,
+ 0
+ ],
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ 0
+ ],
+ [
+ 14.25,
+ 0.75
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-sidewalk-bg",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "in",
+ "type",
+ "crossing",
+ "sidewalk"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 2
+ ],
+ [
+ 18,
+ 7
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 1,
+ 0
+ ],
+ "line-color": "hsl(230, 17%, 82%)",
+ "line-blur": 0,
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ 0
+ ],
+ [
+ 16.25,
+ 0.75
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "turning-features-outline",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "Point"
+ ],
+ [
+ "in",
+ "class",
+ "turning_circle",
+ "turning_loop"
+ ]
+ ],
+ "layout": {
+ "icon-image": "turning-circle-outline",
+ "icon-size": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.122
+ ],
+ [
+ 18,
+ 0.969
+ ],
+ [
+ 20,
+ 1
+ ]
+ ]
+ },
+ "icon-allow-overlap": true,
+ "icon-ignore-placement": true,
+ "icon-padding": 0,
+ "icon-rotation-alignment": "map"
+ },
+ "paint": {}
+ },
+ {
+ "id": "road-pedestrian-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "pedestrian"
+ ],
+ [
+ "==",
+ "structure",
+ "none"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 14.5
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": 0,
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-street-low",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "street"
+ ],
+ [
+ "==",
+ "structure",
+ "none"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "stops": [
+ [
+ 11,
+ 0
+ ],
+ [
+ 11.25,
+ 1
+ ],
+ [
+ 14,
+ 1
+ ],
+ [
+ 14.01,
+ 0
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-street_limited-low",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "street_limited"
+ ],
+ [
+ "==",
+ "structure",
+ "none"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "stops": [
+ [
+ 11,
+ 0
+ ],
+ [
+ 11.25,
+ 1
+ ],
+ [
+ 14,
+ 1
+ ],
+ [
+ 14.01,
+ 0
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-service-link-track-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "trunk_link"
+ ],
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "service",
+ "track"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 18,
+ 12
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-street_limited-case",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-street_limited-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 13,
+ 0
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-street-case",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-street-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 13,
+ 0
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-secondary-tertiary-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "in",
+ "class",
+ "secondary",
+ "tertiary"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.2,
+ "stops": [
+ [
+ 10,
+ 0.75
+ ],
+ [
+ 18,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 8.5,
+ 0.5
+ ],
+ [
+ 10,
+ 0.75
+ ],
+ [
+ 18,
+ 26
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 9.99,
+ 0
+ ],
+ [
+ 10,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-primary-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "==",
+ "class",
+ "primary"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 9.99,
+ 0
+ ],
+ [
+ 10,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-motorway_link-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 10,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "==",
+ "class",
+ "motorway_link"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 10.99,
+ 0
+ ],
+ [
+ 11,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-trunk_link-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "==",
+ "type",
+ "trunk_link"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 10.99,
+ 0
+ ],
+ [
+ 11,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-trunk-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "==",
+ "class",
+ "trunk"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 6,
+ 0
+ ],
+ [
+ 6.1,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-motorway-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "==",
+ "class",
+ "motorway"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-construction",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "construction"
+ ],
+ [
+ "==",
+ "structure",
+ "none"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "miter"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ },
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 0.4,
+ 0.8
+ ]
+ ],
+ [
+ 15,
+ [
+ 0.3,
+ 0.6
+ ]
+ ],
+ [
+ 16,
+ [
+ 0.2,
+ 0.3
+ ]
+ ],
+ [
+ 17,
+ [
+ 0.2,
+ 0.25
+ ]
+ ],
+ [
+ 18,
+ [
+ 0.15,
+ 0.15
+ ]
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-sidewalks",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-sidewalk-bg",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 1
+ ],
+ [
+ 18,
+ 4
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.75,
+ 1
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.75
+ ]
+ ],
+ [
+ 17,
+ [
+ 1,
+ 0.5
+ ]
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ 0
+ ],
+ [
+ 16.25,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-path",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-path-bg",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 1
+ ],
+ [
+ 18,
+ 4
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.75,
+ 1
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.75
+ ]
+ ],
+ [
+ 17,
+ [
+ 1,
+ 0.5
+ ]
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ 0
+ ],
+ [
+ 14.25,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-steps",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-steps-bg",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 1
+ ],
+ [
+ 16,
+ 1.6
+ ],
+ [
+ 18,
+ 6
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.75,
+ 1
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.75
+ ]
+ ],
+ [
+ 17,
+ [
+ 0.3,
+ 0.3
+ ]
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ 0
+ ],
+ [
+ 14.25,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-trunk_link",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-trunk_link-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(46, 85%, 67%)",
+ "line-opacity": 1
+ }
+ },
+ {
+ "id": "road-motorway_link",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-motorway_link-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(26, 100%, 68%)",
+ "line-opacity": 1
+ }
+ },
+ {
+ "id": "road-pedestrian",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-pedestrian-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 18,
+ 12
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": 1,
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.5,
+ 0.4
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.2
+ ]
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-pedestrian-polygon-fill",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "Polygon"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "none"
+ ],
+ [
+ "in",
+ "class",
+ "path",
+ "pedestrian"
+ ]
+ ]
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ "hsl(230, 16%, 94%)"
+ ],
+ [
+ 16.25,
+ "hsl(230, 50%, 98%)"
+ ]
+ ]
+ },
+ "fill-outline-color": "hsl(230, 26%, 88%)",
+ "fill-opacity": 1
+ }
+ },
+ {
+ "id": "road-pedestrian-polygon-pattern",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-pedestrian-polygon-fill",
+ "paint": {
+ "fill-color": "hsl(0, 0%, 100%)",
+ "fill-outline-color": "hsl(35, 10%, 83%)",
+ "fill-pattern": "pedestrian-polygon",
+ "fill-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ 0
+ ],
+ [
+ 16.25,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-polygon",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "Polygon"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "class",
+ "motorway",
+ "path",
+ "pedestrian",
+ "trunk"
+ ],
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(0, 0%, 100%)",
+ "fill-outline-color": "#d6d9e6"
+ }
+ },
+ {
+ "id": "road-service-link-track",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-service-link-track-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 18,
+ 12
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)"
+ }
+ },
+ {
+ "id": "road-street_limited",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-street_limited-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(35, 14%, 93%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-street",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-street-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-secondary-tertiary",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-secondary-tertiary-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 8.5,
+ 0.5
+ ],
+ [
+ 10,
+ 0.75
+ ],
+ [
+ 18,
+ 26
+ ]
+ ]
+ },
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 5,
+ "hsl(35, 32%, 91%)"
+ ],
+ [
+ 8,
+ "hsl(0, 0%, 100%)"
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1.2,
+ "stops": [
+ [
+ 5,
+ 0
+ ],
+ [
+ 5.5,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-primary",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-primary-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 5,
+ "hsl(35, 32%, 91%)"
+ ],
+ [
+ 7,
+ "hsl(0, 0%, 100%)"
+ ]
+ ]
+ },
+ "line-opacity": 1
+ }
+ },
+ {
+ "id": "road-oneway-arrows-blue-minor",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "trunk_link"
+ ],
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "==",
+ "oneway",
+ "true"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "path",
+ "pedestrian",
+ "service",
+ "track"
+ ]
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "icon-image": {
+ "base": 1,
+ "stops": [
+ [
+ 17,
+ "oneway-small"
+ ],
+ [
+ 18,
+ "oneway-large"
+ ]
+ ]
+ },
+ "icon-rotation-alignment": "map",
+ "icon-padding": 2,
+ "symbol-spacing": 200
+ },
+ "paint": {}
+ },
+ {
+ "id": "road-oneway-arrows-blue-major",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "trunk_link"
+ ],
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "==",
+ "oneway",
+ "true"
+ ],
+ [
+ "in",
+ "class",
+ "primary",
+ "secondary",
+ "street",
+ "street_limited",
+ "tertiary"
+ ]
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "icon-image": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ "oneway-small"
+ ],
+ [
+ 17,
+ "oneway-large"
+ ]
+ ]
+ },
+ "icon-rotation-alignment": "map",
+ "icon-padding": 2,
+ "symbol-spacing": 200
+ },
+ "paint": {}
+ },
+ {
+ "id": "road-trunk",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-trunk-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 6,
+ "hsl(0, 0%, 100%)"
+ ],
+ [
+ 6.1,
+ "hsl(46, 80%, 60%)"
+ ],
+ [
+ 9,
+ "hsl(46, 85%, 67%)"
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-motorway",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-motorway-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 8,
+ "hsl(26, 87%, 62%)"
+ ],
+ [
+ 9,
+ "hsl(26, 100%, 68%)"
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-rail",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "in",
+ "class",
+ "major_rail",
+ "minor_rail"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-color": {
+ "stops": [
+ [
+ 13,
+ "hsl(50, 17%, 82%)"
+ ],
+ [
+ 16,
+ "hsl(230, 10%, 74%)"
+ ]
+ ]
+ },
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 20,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-rail-tracks",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-rail",
+ "paint": {
+ "line-color": {
+ "stops": [
+ [
+ 13,
+ "hsl(50, 17%, 82%)"
+ ],
+ [
+ 16,
+ "hsl(230, 10%, 74%)"
+ ]
+ ]
+ },
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 4
+ ],
+ [
+ 20,
+ 8
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 0.1,
+ 15
+ ],
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.75,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "level-crossings",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "Point"
+ ],
+ [
+ "==",
+ "class",
+ "level_crossing"
+ ]
+ ],
+ "layout": {
+ "icon-size": 1,
+ "icon-image": "level-crossing",
+ "icon-allow-overlap": true
+ },
+ "paint": {}
+ },
+ {
+ "id": "road-oneway-arrows-white",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "!in",
+ "type",
+ "primary_link",
+ "secondary_link",
+ "tertiary_link"
+ ],
+ [
+ "==",
+ "oneway",
+ "true"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "motorway",
+ "motorway_link",
+ "trunk"
+ ]
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "icon-image": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ "oneway-white-small"
+ ],
+ [
+ 17,
+ "oneway-white-large"
+ ]
+ ]
+ },
+ "icon-padding": 2,
+ "symbol-spacing": 200
+ },
+ "paint": {}
+ },
+ {
+ "id": "turning-features",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "Point"
+ ],
+ [
+ "in",
+ "class",
+ "turning_circle",
+ "turning_loop"
+ ]
+ ],
+ "layout": {
+ "icon-image": "turning-circle",
+ "icon-size": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.095
+ ],
+ [
+ 18,
+ 1
+ ]
+ ]
+ },
+ "icon-allow-overlap": true,
+ "icon-ignore-placement": true,
+ "icon-padding": 0,
+ "icon-rotation-alignment": "map"
+ },
+ "paint": {}
+ },
+ {
+ "id": "bridge-path-bg",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "steps"
+ ],
+ [
+ "==",
+ "class",
+ "path"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 2
+ ],
+ [
+ 18,
+ 7
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 1,
+ 0
+ ],
+ "line-color": "hsl(230, 17%, 82%)",
+ "line-blur": 0,
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ 0
+ ],
+ [
+ 15.25,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-steps-bg",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "==",
+ "type",
+ "steps"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 2
+ ],
+ [
+ 17,
+ 4.6
+ ],
+ [
+ 18,
+ 7
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 17%, 82%)",
+ "line-dasharray": [
+ 1,
+ 0
+ ],
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ 0
+ ],
+ [
+ 14.25,
+ 0.75
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-pedestrian-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "pedestrian"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 14.5
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": 0,
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-low",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "street"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "stops": [
+ [
+ 11.5,
+ 0
+ ],
+ [
+ 12,
+ 1
+ ],
+ [
+ 14,
+ 1
+ ],
+ [
+ 14.01,
+ 0
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-street_limited-low",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "street_limited"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "stops": [
+ [
+ 11.5,
+ 0
+ ],
+ [
+ 12,
+ 1
+ ],
+ [
+ 14,
+ 1
+ ],
+ [
+ 14.01,
+ 0
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-service-link-track-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "trunk_link"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "service",
+ "track"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 18,
+ 12
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-street_limited-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "street_limited"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 13,
+ 0
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "street"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ },
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 13,
+ 0
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-secondary-tertiary-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "in",
+ "class",
+ "secondary",
+ "tertiary"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.2,
+ "stops": [
+ [
+ 10,
+ 0.75
+ ],
+ [
+ 18,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 8.5,
+ 0.5
+ ],
+ [
+ 10,
+ 0.75
+ ],
+ [
+ 18,
+ 26
+ ]
+ ]
+ },
+ "line-translate": [
+ 0,
+ 0
+ ]
+ }
+ },
+ {
+ "id": "bridge-primary-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "primary"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-translate": [
+ 0,
+ 0
+ ]
+ }
+ },
+ {
+ "id": "bridge-trunk_link-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "layer",
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "==",
+ "type",
+ "trunk_link"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 10.99,
+ 0
+ ],
+ [
+ 11,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-motorway_link-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "layer",
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ [
+ "==",
+ "class",
+ "motorway_link"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-opacity": 1
+ }
+ },
+ {
+ "id": "bridge-trunk-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "layer",
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ [
+ "==",
+ "class",
+ "trunk"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-motorway-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "layer",
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ [
+ "==",
+ "class",
+ "motorway"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-construction",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "construction"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "miter"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ },
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 0.4,
+ 0.8
+ ]
+ ],
+ [
+ 15,
+ [
+ 0.3,
+ 0.6
+ ]
+ ],
+ [
+ 16,
+ [
+ 0.2,
+ 0.3
+ ]
+ ],
+ [
+ 17,
+ [
+ 0.2,
+ 0.25
+ ]
+ ],
+ [
+ 18,
+ [
+ 0.15,
+ 0.15
+ ]
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-path",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "steps"
+ ],
+ [
+ "==",
+ "class",
+ "path"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 1
+ ],
+ [
+ 18,
+ 4
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.75,
+ 1
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.75
+ ]
+ ],
+ [
+ 17,
+ [
+ 1,
+ 0.5
+ ]
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ 0
+ ],
+ [
+ 14.25,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-steps",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "ref": "bridge-steps-bg",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 1
+ ],
+ [
+ 16,
+ 1.6
+ ],
+ [
+ 18,
+ 6
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.75,
+ 1
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.75
+ ]
+ ],
+ [
+ 17,
+ [
+ 0.3,
+ 0.3
+ ]
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ 0
+ ],
+ [
+ 14.25,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-trunk_link",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "layer",
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "==",
+ "type",
+ "trunk_link"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(46, 85%, 67%)"
+ }
+ },
+ {
+ "id": "bridge-motorway_link",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "layer",
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ [
+ "==",
+ "class",
+ "motorway_link"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(26, 100%, 68%)"
+ }
+ },
+ {
+ "id": "bridge-pedestrian",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "ref": "bridge-pedestrian-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 18,
+ 12
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": 1,
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.5,
+ 0.4
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.2
+ ]
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-service-link-track",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "trunk_link"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "service",
+ "track"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 18,
+ 12
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)"
+ }
+ },
+ {
+ "id": "bridge-street_limited",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "ref": "bridge-street_limited-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(35, 14%, 93%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-street",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "ref": "bridge-street-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-secondary-tertiary",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "in",
+ "type",
+ "secondary",
+ "tertiary"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 8.5,
+ 0.5
+ ],
+ [
+ 10,
+ 0.75
+ ],
+ [
+ 18,
+ 26
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "base": 1.2,
+ "stops": [
+ [
+ 5,
+ 0
+ ],
+ [
+ 5.5,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-primary",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "==",
+ "type",
+ "primary"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": 1
+ }
+ },
+ {
+ "id": "bridge-oneway-arrows-blue-minor",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "oneway",
+ "true"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "path",
+ "pedestrian",
+ "service",
+ "track"
+ ]
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "icon-image": {
+ "base": 1,
+ "stops": [
+ [
+ 17,
+ "oneway-small"
+ ],
+ [
+ 18,
+ "oneway-large"
+ ]
+ ]
+ },
+ "symbol-spacing": 200,
+ "icon-rotation-alignment": "map",
+ "icon-padding": 2
+ },
+ "paint": {}
+ },
+ {
+ "id": "bridge-oneway-arrows-blue-major",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "oneway",
+ "true"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "in",
+ "class",
+ "primary",
+ "secondary",
+ "street",
+ "street_limited",
+ "tertiary"
+ ]
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "icon-image": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ "oneway-small"
+ ],
+ [
+ 17,
+ "oneway-large"
+ ]
+ ]
+ },
+ "symbol-spacing": 200,
+ "icon-rotation-alignment": "map",
+ "icon-padding": 2
+ },
+ "paint": {}
+ },
+ {
+ "id": "bridge-trunk",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "layer",
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ [
+ "==",
+ "class",
+ "trunk"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": "hsl(46, 85%, 67%)"
+ }
+ },
+ {
+ "id": "bridge-motorway",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "layer",
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ [
+ "==",
+ "class",
+ "motorway"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": "hsl(26, 100%, 68%)"
+ }
+ },
+ {
+ "id": "bridge-rail",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "in",
+ "class",
+ "major_rail",
+ "minor_rail"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-color": {
+ "stops": [
+ [
+ 13,
+ "hsl(50, 17%, 82%)"
+ ],
+ [
+ 16,
+ "hsl(230, 10%, 74%)"
+ ]
+ ]
+ },
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 20,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-rail-tracks",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "ref": "bridge-rail",
+ "paint": {
+ "line-color": {
+ "stops": [
+ [
+ 13,
+ "hsl(50, 17%, 82%)"
+ ],
+ [
+ 16,
+ "hsl(230, 10%, 74%)"
+ ]
+ ]
+ },
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 4
+ ],
+ [
+ 20,
+ 8
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 0.1,
+ 15
+ ],
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.75,
+ 0
+ ],
+ [
+ 20,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-trunk_link-2-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "==",
+ "type",
+ "trunk_link"
+ ],
+ [
+ ">=",
+ "layer",
+ 2
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 10.99,
+ 0
+ ],
+ [
+ 11,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-motorway_link-2-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "motorway_link"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ ">=",
+ "layer",
+ 2
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-opacity": 1
+ }
+ },
+ {
+ "id": "bridge-trunk-2-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "trunk"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ ">=",
+ "layer",
+ 2
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-motorway-2-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "motorway"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ ">=",
+ "layer",
+ 2
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-trunk_link-2",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "==",
+ "type",
+ "trunk_link"
+ ],
+ [
+ ">=",
+ "layer",
+ 2
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(46, 85%, 67%)"
+ }
+ },
+ {
+ "id": "bridge-motorway_link-2",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "motorway_link"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ ">=",
+ "layer",
+ 2
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(26, 100%, 68%)"
+ }
+ },
+ {
+ "id": "bridge-trunk-2",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "trunk"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ ">=",
+ "layer",
+ 2
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": "hsl(46, 85%, 67%)"
+ }
+ },
+ {
+ "id": "bridge-motorway-2",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "motorway"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ ">=",
+ "layer",
+ 2
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": "hsl(26, 100%, 68%)"
+ }
+ },
+ {
+ "id": "bridge-oneway-arrows-white",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "type",
+ "primary_link",
+ "secondary_link",
+ "tertiary_link"
+ ],
+ [
+ "==",
+ "oneway",
+ "true"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "motorway",
+ "motorway_link",
+ "trunk"
+ ]
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "icon-image": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ "oneway-white-small"
+ ],
+ [
+ 17,
+ "oneway-white-large"
+ ]
+ ]
+ },
+ "symbol-spacing": 200,
+ "icon-padding": 2
+ },
+ "paint": {}
+ },
+ {
+ "id": "aerialway",
+ "type": "line",
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "==",
+ "class",
+ "aerialway"
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-color": "hsl(230, 10%, 74%)",
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 20,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "admin-3-4-boundaries-bg",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444934295202.7542"
+ },
+ "source": "composite",
+ "source-layer": "admin",
+ "filter": [
+ "all",
+ [
+ "==",
+ "maritime",
+ 0
+ ],
+ [
+ ">=",
+ "admin_level",
+ 3
+ ]
+ ],
+ "layout": {
+ "line-join": "bevel"
+ },
+ "paint": {
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 8,
+ "hsl(35, 12%, 89%)"
+ ],
+ [
+ 16,
+ "hsl(230, 49%, 90%)"
+ ]
+ ]
+ },
+ "line-width": {
+ "base": 1,
+ "stops": [
+ [
+ 7,
+ 3.75
+ ],
+ [
+ 12,
+ 5.5
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 7,
+ 0
+ ],
+ [
+ 8,
+ 0.75
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 1,
+ 0
+ ],
+ "line-translate": [
+ 0,
+ 0
+ ],
+ "line-blur": {
+ "base": 1,
+ "stops": [
+ [
+ 3,
+ 0
+ ],
+ [
+ 8,
+ 3
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "admin-2-boundaries-bg",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444934295202.7542"
+ },
+ "source": "composite",
+ "source-layer": "admin",
+ "minzoom": 1,
+ "filter": [
+ "all",
+ [
+ "==",
+ "admin_level",
+ 2
+ ],
+ [
+ "==",
+ "maritime",
+ 0
+ ]
+ ],
+ "layout": {
+ "line-join": "miter"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1,
+ "stops": [
+ [
+ 3,
+ 3.5
+ ],
+ [
+ 10,
+ 8
+ ]
+ ]
+ },
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 6,
+ "hsl(35, 12%, 89%)"
+ ],
+ [
+ 8,
+ "hsl(230, 49%, 90%)"
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 3,
+ 0
+ ],
+ [
+ 4,
+ 0.5
+ ]
+ ]
+ },
+ "line-translate": [
+ 0,
+ 0
+ ],
+ "line-blur": {
+ "base": 1,
+ "stops": [
+ [
+ 3,
+ 0
+ ],
+ [
+ 10,
+ 2
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "admin-3-4-boundaries",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444934295202.7542"
+ },
+ "source": "composite",
+ "source-layer": "admin",
+ "filter": [
+ "all",
+ [
+ "==",
+ "maritime",
+ 0
+ ],
+ [
+ ">=",
+ "admin_level",
+ 3
+ ]
+ ],
+ "layout": {
+ "line-join": "round",
+ "line-cap": "round"
+ },
+ "paint": {
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 6,
+ [
+ 2,
+ 0
+ ]
+ ],
+ [
+ 7,
+ [
+ 2,
+ 2,
+ 6,
+ 2
+ ]
+ ]
+ ]
+ },
+ "line-width": {
+ "base": 1,
+ "stops": [
+ [
+ 7,
+ 0.75
+ ],
+ [
+ 12,
+ 1.5
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 2,
+ 0
+ ],
+ [
+ 3,
+ 1
+ ]
+ ]
+ },
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 3,
+ "hsl(230, 14%, 77%)"
+ ],
+ [
+ 7,
+ "hsl(230, 8%, 62%)"
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "admin-2-boundaries",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444934295202.7542"
+ },
+ "source": "composite",
+ "source-layer": "admin",
+ "minzoom": 1,
+ "filter": [
+ "all",
+ [
+ "==",
+ "admin_level",
+ 2
+ ],
+ [
+ "==",
+ "disputed",
+ 0
+ ],
+ [
+ "==",
+ "maritime",
+ 0
+ ]
+ ],
+ "layout": {
+ "line-join": "round",
+ "line-cap": "round"
+ },
+ "paint": {
+ "line-color": "hsl(230, 8%, 51%)",
+ "line-width": {
+ "base": 1,
+ "stops": [
+ [
+ 3,
+ 0.5
+ ],
+ [
+ 10,
+ 2
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "admin-2-boundaries-dispute",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444934295202.7542"
+ },
+ "source": "composite",
+ "source-layer": "admin",
+ "minzoom": 1,
+ "filter": [
+ "all",
+ [
+ "==",
+ "admin_level",
+ 2
+ ],
+ [
+ "==",
+ "disputed",
+ 1
+ ],
+ [
+ "==",
+ "maritime",
+ 0
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-dasharray": [
+ 1.5,
+ 1.5
+ ],
+ "line-color": "hsl(230, 8%, 51%)",
+ "line-width": {
+ "base": 1,
+ "stops": [
+ [
+ 3,
+ 0.5
+ ],
+ [
+ 10,
+ 2
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-label-small",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444933721429.3076"
+ },
+ "source": "composite",
+ "source-layer": "road_label",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ [
+ "!in",
+ "class",
+ "link",
+ "motorway",
+ "pedestrian",
+ "primary",
+ "secondary",
+ "street",
+ "street_limited",
+ "tertiary",
+ "trunk"
+ ],
+ [
+ "==",
+ "$type",
+ "LineString"
+ ]
+ ],
+ "layout": {
+ "text-size": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ 10
+ ],
+ [
+ 20,
+ 13
+ ]
+ ]
+ },
+ "text-max-angle": 30,
+ "symbol-spacing": 250,
+ "text-font": [
+ "DIN Offc Pro Regular",
+ "Arial Unicode MS Regular"
+ ],
+ "symbol-placement": "line",
+ "text-padding": 1,
+ "visibility": "visible",
+ "text-rotation-alignment": "map",
+ "text-field": "{name_en}",
+ "text-letter-spacing": 0.01
+ },
+ "paint": {
+ "text-color": "hsl(0, 0%, 0%)",
+ "text-halo-color": "hsl(0, 0%, 100%)",
+ "text-halo-width": 1.25,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "road-label-medium",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444933721429.3076"
+ },
+ "source": "composite",
+ "source-layer": "road_label",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "pedestrian",
+ "street",
+ "street_limited"
+ ]
+ ],
+ "layout": {
+ "text-size": {
+ "base": 1,
+ "stops": [
+ [
+ 11,
+ 10
+ ],
+ [
+ 20,
+ 14
+ ]
+ ]
+ },
+ "text-max-angle": 30,
+ "symbol-spacing": 250,
+ "text-font": [
+ "DIN Offc Pro Regular",
+ "Arial Unicode MS Regular"
+ ],
+ "symbol-placement": "line",
+ "text-padding": 1,
+ "visibility": "visible",
+ "text-rotation-alignment": "map",
+ "text-field": "{name_en}",
+ "text-letter-spacing": 0.01
+ },
+ "paint": {
+ "text-color": "hsl(0, 0%, 0%)",
+ "text-halo-color": "hsl(0, 0%, 100%)",
+ "text-halo-width": 1
+ }
+ },
+ {
+ "id": "road-label-large",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444933721429.3076"
+ },
+ "source": "composite",
+ "source-layer": "road_label",
+ "filter": [
+ "in",
+ "class",
+ "motorway",
+ "primary",
+ "secondary",
+ "tertiary",
+ "trunk"
+ ],
+ "layout": {
+ "text-size": {
+ "base": 1,
+ "stops": [
+ [
+ 9,
+ 10
+ ],
+ [
+ 20,
+ 16
+ ]
+ ]
+ },
+ "text-max-angle": 30,
+ "symbol-spacing": 250,
+ "text-font": [
+ "DIN Offc Pro Regular",
+ "Arial Unicode MS Regular"
+ ],
+ "symbol-placement": "line",
+ "text-padding": 1,
+ "visibility": "visible",
+ "text-rotation-alignment": "map",
+ "text-field": "{name_en}",
+ "text-letter-spacing": 0.01
+ },
+ "paint": {
+ "text-color": "hsl(0, 0%, 0%)",
+ "text-halo-color": "hsla(0, 0%, 100%, 0.75)",
+ "text-halo-width": 1,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "extrusions",
+ "type": "fill-extrusion",
+ "source": "composite",
+ "source-layer": "building",
+ "filter": [
+ "==",
+ "extrude",
+ "true"
+ ],
+ "layout": {
+ "visibility": "visible"
+ },
+ "paint": {
+ "fill-extrusion-height": {
+ "type": "identity",
+ "property": "height",
+ "default": 10
+ },
+ "fill-extrusion-color": "hsl(45, 14%, 79%)",
+ "fill-extrusion-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ 0
+ ],
+ [
+ 15.1,
+ 0.7
+ ]
+ ]
+ },
+ "fill-extrusion-base": -10
+ }
+ }
+ ],
+ "id": "cj007psrp008k2ssjxqhi1rl1",
+ "owner": "lbud",
+ "visibility": "private",
+ "draft": false
+}
diff --git a/platform/ios/app/lbud_buildings_debug.json b/platform/ios/app/lbud_buildings_debug.json
new file mode 100755
index 0000000000..a094495ace
--- /dev/null
+++ b/platform/ios/app/lbud_buildings_debug.json
@@ -0,0 +1,167 @@
+{
+ "version": 8,
+ "name": "buildings",
+ "metadata": {
+ "mapbox:autocomposite": true,
+ "mapbox:type": "default",
+ "mapbox:groups": {},
+ "mapbox:trackposition": false
+ },
+ "center": [
+ -74.00335198896914,
+ 40.71014952920291
+ ],
+ "zoom": 15.032371136814405,
+ "bearing": -74.59290123456799,
+ "pitch": 0,
+ "light": {
+ "intensity": 1,
+ "position": [
+ 0.5,
+ 235,
+ 90
+ ],
+ "color": "#00ff00",
+ "anchor": "map"
+ },
+ "sources": {
+ "composite": {
+ "url": "mapbox://mapbox.mapbox-streets-v7",
+ "type": "vector"
+ }
+ },
+ "sprite": "mapbox://sprites/lbud/ciyoshhyf004r2rmqr8bd4g3h",
+ "glyphs": "mapbox://fonts/lbud/{fontstack}/{range}.pbf",
+ "layers": [
+ {
+ "id": "background",
+ "type": "background",
+ "layout": {},
+ "paint": {
+ "background-color": "hsl(55, 11%, 96%)"
+ }
+ },
+ {
+ "id": "water",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "water",
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(185, 9%, 81%)"
+ }
+ },
+ {
+ "id": "road-primary",
+ "type": "line",
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 15
+ ]
+ ]
+ },
+ "line-color": "#fff",
+ "line-opacity": {
+ "base": 1.2,
+ "stops": [
+ [
+ 5,
+ 0
+ ],
+ [
+ 5.5,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "extrusions",
+ "type": "fill-extrusion",
+ "source": "composite",
+ "source-layer": "building",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ [
+ "==",
+ "extrude",
+ "true"
+ ],
+ [
+ "==",
+ "underground",
+ "false"
+ ]
+ ],
+ "layout": {},
+ "paint": {
+ "fill-extrusion-height": {
+ "base": 1,
+ "type": "exponential",
+ "property": "height",
+ "stops": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 1000,
+ 1501
+ ],
+ [
+ 1001,
+ 10
+ ]
+ ]
+ },
+ "fill-extrusion-color": "hsl(194, 100%, 66%)",
+ "fill-extrusion-base": {
+ "base": 1,
+ "type": "exponential",
+ "property": "min_height",
+ "stops": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 1000,
+ 1501
+ ],
+ [
+ 1001,
+ 10
+ ]
+ ]
+ }
+ }
+ }
+ ],
+ "created": "2017-02-02T19:43:09.896Z",
+ "id": "ciyoshhyf004r2rmqr8bd4g3h",
+ "modified": "2017-03-08T03:09:48.377Z",
+ "owner": "lbud",
+ "visibility": "private",
+ "draft": false
+}
diff --git a/platform/ios/app/lbud_debug.json b/platform/ios/app/lbud_debug.json
new file mode 100644
index 0000000000..346a8a2689
--- /dev/null
+++ b/platform/ios/app/lbud_debug.json
@@ -0,0 +1,8437 @@
+{
+ "version": 8,
+ "name": "Streets-buildings",
+ "metadata": {
+ "mapbox:autocomposite": true,
+ "mapbox:type": "default",
+ "mapbox:groups": {
+ "1444934828655.3389": {
+ "name": "Aeroways",
+ "collapsed": true
+ },
+ "1444855786460.0557": {
+ "name": "Roads",
+ "collapsed": true
+ },
+ "1444934295202.7542": {
+ "name": "Admin boundaries",
+ "collapsed": true
+ },
+ "1444933721429.3076": {
+ "name": "Road labels",
+ "collapsed": true
+ },
+ "1444855799204.86": {
+ "name": "Bridges",
+ "collapsed": true
+ },
+ "1456969573402.7817": {
+ "name": "Hillshading",
+ "collapsed": true
+ },
+ "1444855769305.6016": {
+ "name": "Tunnels",
+ "collapsed": true
+ },
+ "1456970288113.8113": {
+ "name": "Landcover",
+ "collapsed": true
+ }
+ }
+ },
+ "center": [
+ -73.98397807501742,
+ 40.766104101767695
+ ],
+ "zoom": 15.421792049978444,
+ "bearing": -88.18120343555876,
+ "pitch": 0,
+ "sources": {
+ "composite": {
+ "url": "mapbox://mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v7",
+ "type": "vector"
+ }
+ },
+ "light": {
+ "anchor": "map"
+ },
+ "sprite": "mapbox://sprites/lbud/cj007psrp008k2ssjxqhi1rl1",
+ "glyphs": "mapbox://fonts/lbud/{fontstack}/{range}.pbf",
+ "layers": [
+ {
+ "id": "background",
+ "type": "background",
+ "layout": {},
+ "paint": {
+ "background-color": {
+ "base": 1,
+ "stops": [
+ [
+ 11,
+ "hsl(35, 32%, 91%)"
+ ],
+ [
+ 13,
+ "hsl(35, 12%, 89%)"
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "landcover_snow",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456970288113.8113"
+ },
+ "source": "composite",
+ "source-layer": "landcover",
+ "filter": [
+ "==",
+ "class",
+ "snow"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(0, 0%, 100%)",
+ "fill-opacity": 0.2,
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "landcover_wood",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456970288113.8113"
+ },
+ "source": "composite",
+ "source-layer": "landcover",
+ "maxzoom": 14,
+ "filter": [
+ "==",
+ "class",
+ "wood"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(75, 62%, 81%)",
+ "fill-opacity": {
+ "base": 1.5,
+ "stops": [
+ [
+ 2,
+ 0.3
+ ],
+ [
+ 7,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "landcover_scrub",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456970288113.8113"
+ },
+ "source": "composite",
+ "source-layer": "landcover",
+ "maxzoom": 14,
+ "filter": [
+ "==",
+ "class",
+ "scrub"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(75, 62%, 81%)",
+ "fill-opacity": {
+ "base": 1.5,
+ "stops": [
+ [
+ 2,
+ 0.3
+ ],
+ [
+ 7,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "landcover_grass",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456970288113.8113"
+ },
+ "source": "composite",
+ "source-layer": "landcover",
+ "maxzoom": 14,
+ "filter": [
+ "==",
+ "class",
+ "grass"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(75, 62%, 81%)",
+ "fill-opacity": {
+ "base": 1.5,
+ "stops": [
+ [
+ 2,
+ 0.3
+ ],
+ [
+ 7,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "landcover_crop",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456970288113.8113"
+ },
+ "source": "composite",
+ "source-layer": "landcover",
+ "maxzoom": 14,
+ "filter": [
+ "==",
+ "class",
+ "crop"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(75, 62%, 81%)",
+ "fill-opacity": {
+ "base": 1.5,
+ "stops": [
+ [
+ 2,
+ 0.3
+ ],
+ [
+ 7,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "national_park",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "landuse_overlay",
+ "filter": [
+ "==",
+ "class",
+ "national_park"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(100, 58%, 76%)",
+ "fill-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 5,
+ 0
+ ],
+ [
+ 6,
+ 0.5
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "hospital",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "landuse",
+ "filter": [
+ "==",
+ "class",
+ "hospital"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": {
+ "base": 1,
+ "stops": [
+ [
+ 15.5,
+ "hsl(340, 37%, 87%)"
+ ],
+ [
+ 16,
+ "hsl(340, 63%, 89%)"
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "school",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "landuse",
+ "filter": [
+ "==",
+ "class",
+ "school"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": {
+ "base": 1,
+ "stops": [
+ [
+ 15.5,
+ "hsl(50, 47%, 81%)"
+ ],
+ [
+ 16,
+ "hsl(50, 63%, 84%)"
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "park",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "landuse",
+ "filter": [
+ "==",
+ "class",
+ "park"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(100, 58%, 76%)",
+ "fill-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 5,
+ 0
+ ],
+ [
+ 6,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "pitch",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "landuse",
+ "filter": [
+ "==",
+ "class",
+ "pitch"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(100, 57%, 72%)"
+ }
+ },
+ {
+ "id": "pitch-line",
+ "type": "line",
+ "source": "composite",
+ "source-layer": "landuse",
+ "minzoom": 15,
+ "filter": [
+ "==",
+ "class",
+ "pitch"
+ ],
+ "layout": {
+ "line-join": "miter"
+ },
+ "paint": {
+ "line-color": "hsl(75, 57%, 84%)"
+ }
+ },
+ {
+ "id": "cemetery",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "landuse",
+ "filter": [
+ "==",
+ "class",
+ "cemetery"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(75, 37%, 81%)"
+ }
+ },
+ {
+ "id": "industrial",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "landuse",
+ "filter": [
+ "==",
+ "class",
+ "industrial"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": {
+ "base": 1,
+ "stops": [
+ [
+ 15.5,
+ "hsl(230, 15%, 86%)"
+ ],
+ [
+ 16,
+ "hsl(230, 29%, 89%)"
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "sand",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "landuse",
+ "filter": [
+ "==",
+ "class",
+ "sand"
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(60, 46%, 87%)"
+ }
+ },
+ {
+ "id": "hillshade_highlight_bright",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456969573402.7817"
+ },
+ "source": "composite",
+ "source-layer": "hillshade",
+ "maxzoom": 16,
+ "filter": [
+ "==",
+ "level",
+ 94
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(0, 0%, 100%)",
+ "fill-opacity": {
+ "stops": [
+ [
+ 14,
+ 0.12
+ ],
+ [
+ 16,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "hillshade_highlight_med",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456969573402.7817"
+ },
+ "source": "composite",
+ "source-layer": "hillshade",
+ "maxzoom": 16,
+ "filter": [
+ "==",
+ "level",
+ 90
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(0, 0%, 100%)",
+ "fill-opacity": {
+ "stops": [
+ [
+ 14,
+ 0.12
+ ],
+ [
+ 16,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "hillshade_shadow_faint",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456969573402.7817"
+ },
+ "source": "composite",
+ "source-layer": "hillshade",
+ "maxzoom": 16,
+ "filter": [
+ "==",
+ "level",
+ 89
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(56, 59%, 22%)",
+ "fill-opacity": {
+ "stops": [
+ [
+ 14,
+ 0.05
+ ],
+ [
+ 16,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "hillshade_shadow_med",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456969573402.7817"
+ },
+ "source": "composite",
+ "source-layer": "hillshade",
+ "maxzoom": 16,
+ "filter": [
+ "==",
+ "level",
+ 78
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(56, 59%, 22%)",
+ "fill-opacity": {
+ "stops": [
+ [
+ 14,
+ 0.05
+ ],
+ [
+ 16,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "hillshade_shadow_dark",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456969573402.7817"
+ },
+ "source": "composite",
+ "source-layer": "hillshade",
+ "maxzoom": 16,
+ "filter": [
+ "==",
+ "level",
+ 67
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(56, 59%, 22%)",
+ "fill-opacity": {
+ "stops": [
+ [
+ 14,
+ 0.06
+ ],
+ [
+ 16,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "hillshade_shadow_extreme",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1456969573402.7817"
+ },
+ "source": "composite",
+ "source-layer": "hillshade",
+ "maxzoom": 16,
+ "filter": [
+ "==",
+ "level",
+ 56
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(56, 59%, 22%)",
+ "fill-opacity": {
+ "stops": [
+ [
+ 14,
+ 0.06
+ ],
+ [
+ 16,
+ 0
+ ]
+ ]
+ },
+ "fill-antialias": false
+ }
+ },
+ {
+ "id": "waterway-river-canal",
+ "type": "line",
+ "source": "composite",
+ "source-layer": "waterway",
+ "minzoom": 8,
+ "filter": [
+ "in",
+ "class",
+ "canal",
+ "river"
+ ],
+ "layout": {
+ "line-cap": {
+ "base": 1,
+ "stops": [
+ [
+ 0,
+ "butt"
+ ],
+ [
+ 11,
+ "round"
+ ]
+ ]
+ },
+ "line-join": "round"
+ },
+ "paint": {
+ "line-color": "hsl(205, 87%, 76%)",
+ "line-width": {
+ "base": 1.3,
+ "stops": [
+ [
+ 8.5,
+ 0.1
+ ],
+ [
+ 20,
+ 8
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 8,
+ 0
+ ],
+ [
+ 8.5,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "waterway-small",
+ "type": "line",
+ "source": "composite",
+ "source-layer": "waterway",
+ "minzoom": 13,
+ "filter": [
+ "!in",
+ "class",
+ "canal",
+ "river"
+ ],
+ "layout": {
+ "line-join": "round",
+ "line-cap": "round"
+ },
+ "paint": {
+ "line-color": "hsl(205, 87%, 76%)",
+ "line-width": {
+ "base": 1.35,
+ "stops": [
+ [
+ 13.5,
+ 0.1
+ ],
+ [
+ 20,
+ 3
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13,
+ 0
+ ],
+ [
+ 13.5,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "water-shadow",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "water",
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(215, 84%, 69%)",
+ "fill-translate": {
+ "base": 1.2,
+ "stops": [
+ [
+ 7,
+ [
+ 0,
+ 0
+ ]
+ ],
+ [
+ 16,
+ [
+ -1,
+ -1
+ ]
+ ]
+ ]
+ },
+ "fill-translate-anchor": "viewport",
+ "fill-opacity": 1
+ }
+ },
+ {
+ "id": "water",
+ "ref": "water-shadow",
+ "paint": {
+ "fill-color": "hsl(196, 80%, 70%)"
+ }
+ },
+ {
+ "id": "barrier_line-land-polygon",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "barrier_line",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "Polygon"
+ ],
+ [
+ "==",
+ "class",
+ "land"
+ ]
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(35, 12%, 89%)"
+ }
+ },
+ {
+ "id": "barrier_line-land-line",
+ "type": "line",
+ "source": "composite",
+ "source-layer": "barrier_line",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "==",
+ "class",
+ "land"
+ ]
+ ],
+ "layout": {
+ "line-cap": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.99,
+ "stops": [
+ [
+ 14,
+ 0.75
+ ],
+ [
+ 20,
+ 40
+ ]
+ ]
+ },
+ "line-color": "hsl(35, 12%, 89%)"
+ }
+ },
+ {
+ "id": "aeroway-polygon",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1444934828655.3389"
+ },
+ "source": "composite",
+ "source-layer": "aeroway",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "!=",
+ "type",
+ "apron"
+ ],
+ [
+ "==",
+ "$type",
+ "Polygon"
+ ]
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ "hsl(230, 23%, 82%)"
+ ],
+ [
+ 16,
+ "hsl(230, 37%, 84%)"
+ ]
+ ]
+ },
+ "fill-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 11,
+ 0
+ ],
+ [
+ 11.5,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "aeroway-runway",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444934828655.3389"
+ },
+ "source": "composite",
+ "source-layer": "aeroway",
+ "minzoom": 9,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "==",
+ "type",
+ "runway"
+ ]
+ ],
+ "layout": {},
+ "paint": {
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ "hsl(230, 23%, 82%)"
+ ],
+ [
+ 16,
+ "hsl(230, 37%, 84%)"
+ ]
+ ]
+ },
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 9,
+ 1
+ ],
+ [
+ 18,
+ 80
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "aeroway-taxiway",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444934828655.3389"
+ },
+ "source": "composite",
+ "source-layer": "aeroway",
+ "minzoom": 9,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "==",
+ "type",
+ "taxiway"
+ ]
+ ],
+ "layout": {},
+ "paint": {
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ "hsl(230, 23%, 82%)"
+ ],
+ [
+ 16,
+ "hsl(230, 37%, 84%)"
+ ]
+ ]
+ },
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 0.5
+ ],
+ [
+ 18,
+ 20
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "building-line",
+ "type": "line",
+ "source": "composite",
+ "source-layer": "building",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ [
+ "!=",
+ "type",
+ "building:part"
+ ],
+ [
+ "==",
+ "underground",
+ "false"
+ ]
+ ],
+ "layout": {},
+ "paint": {
+ "line-color": "hsl(35, 6%, 79%)",
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 0.75
+ ],
+ [
+ 20,
+ 3
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 15.5,
+ 0
+ ],
+ [
+ 16,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "building",
+ "type": "fill",
+ "source": "composite",
+ "source-layer": "building",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ [
+ "!=",
+ "type",
+ "building:part"
+ ],
+ [
+ "==",
+ "underground",
+ "false"
+ ]
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ "hsl(35, 11%, 88%)"
+ ],
+ [
+ 16,
+ "hsl(35, 8%, 85%)"
+ ]
+ ]
+ },
+ "fill-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 15.5,
+ 0
+ ],
+ [
+ 16,
+ 1
+ ]
+ ]
+ },
+ "fill-outline-color": "hsl(35, 6%, 79%)"
+ }
+ },
+ {
+ "id": "tunnel-street-low",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "street"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "stops": [
+ [
+ 11.5,
+ 0
+ ],
+ [
+ 12,
+ 1
+ ],
+ [
+ 14,
+ 1
+ ],
+ [
+ 14.01,
+ 0
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-street_limited-low",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "street_limited"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "stops": [
+ [
+ 11.5,
+ 0
+ ],
+ [
+ 12,
+ 1
+ ],
+ [
+ 14,
+ 1
+ ],
+ [
+ 14.01,
+ 0
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-service-link-track-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "trunk_link"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "service",
+ "track"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 19%, 75%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 18,
+ 12
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 3,
+ 3
+ ]
+ }
+ },
+ {
+ "id": "tunnel-street_limited-case",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-street_limited-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 19%, 75%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 13,
+ 0
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 3,
+ 3
+ ],
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-street-case",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-street-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 19%, 75%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 13,
+ 0
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 3,
+ 3
+ ],
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-secondary-tertiary-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ],
+ [
+ "in",
+ "class",
+ "secondary",
+ "tertiary"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.2,
+ "stops": [
+ [
+ 10,
+ 0.75
+ ],
+ [
+ 18,
+ 2
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 3,
+ 3
+ ],
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 8.5,
+ 0.5
+ ],
+ [
+ 10,
+ 0.75
+ ],
+ [
+ 18,
+ 26
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 19%, 75%)"
+ }
+ },
+ {
+ "id": "tunnel-primary-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "primary"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 3,
+ 3
+ ],
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 19%, 75%)"
+ }
+ },
+ {
+ "id": "tunnel-trunk_link-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ],
+ [
+ "==",
+ "type",
+ "trunk_link"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 3,
+ 3
+ ]
+ }
+ },
+ {
+ "id": "tunnel-motorway_link-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "motorway_link"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 3,
+ 3
+ ]
+ }
+ },
+ {
+ "id": "tunnel-trunk-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ],
+ [
+ "==",
+ "type",
+ "trunk"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-opacity": 1,
+ "line-dasharray": [
+ 3,
+ 3
+ ]
+ }
+ },
+ {
+ "id": "tunnel-motorway-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "motorway"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-opacity": 1,
+ "line-dasharray": [
+ 3,
+ 3
+ ]
+ }
+ },
+ {
+ "id": "tunnel-construction",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "construction"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "miter"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ },
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 0.4,
+ 0.8
+ ]
+ ],
+ [
+ 15,
+ [
+ 0.3,
+ 0.6
+ ]
+ ],
+ [
+ 16,
+ [
+ 0.2,
+ 0.3
+ ]
+ ],
+ [
+ 17,
+ [
+ 0.2,
+ 0.25
+ ]
+ ],
+ [
+ 18,
+ [
+ 0.15,
+ 0.15
+ ]
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-path",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "steps"
+ ],
+ [
+ "==",
+ "class",
+ "path"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 1
+ ],
+ [
+ 18,
+ 4
+ ]
+ ]
+ },
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.75,
+ 1
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.75
+ ]
+ ],
+ [
+ 17,
+ [
+ 1,
+ 0.5
+ ]
+ ]
+ ]
+ },
+ "line-color": "hsl(35, 26%, 95%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ 0
+ ],
+ [
+ 14.25,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-steps",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ],
+ [
+ "==",
+ "type",
+ "steps"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 1
+ ],
+ [
+ 16,
+ 1.6
+ ],
+ [
+ 18,
+ 6
+ ]
+ ]
+ },
+ "line-color": "hsl(35, 26%, 95%)",
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.75,
+ 1
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.75
+ ]
+ ],
+ [
+ 17,
+ [
+ 0.3,
+ 0.3
+ ]
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ 0
+ ],
+ [
+ 14.25,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-trunk_link",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-trunk_link-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(46, 77%, 78%)",
+ "line-opacity": 1,
+ "line-dasharray": [
+ 1,
+ 0
+ ]
+ }
+ },
+ {
+ "id": "tunnel-motorway_link",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-motorway_link-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(26, 100%, 78%)",
+ "line-opacity": 1,
+ "line-dasharray": [
+ 1,
+ 0
+ ]
+ }
+ },
+ {
+ "id": "tunnel-pedestrian",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "pedestrian"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 18,
+ 12
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": 1,
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.5,
+ 0.4
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.2
+ ]
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-service-link-track",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-service-link-track-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 18,
+ 12
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-dasharray": [
+ 1,
+ 0
+ ]
+ }
+ },
+ {
+ "id": "tunnel-street_limited",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-street_limited-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(35, 14%, 93%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-street",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-street-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "tunnel-secondary-tertiary",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-secondary-tertiary-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 8.5,
+ 0.5
+ ],
+ [
+ 10,
+ 0.75
+ ],
+ [
+ 18,
+ 26
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": 1,
+ "line-dasharray": [
+ 1,
+ 0
+ ],
+ "line-blur": 0
+ }
+ },
+ {
+ "id": "tunnel-primary",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-primary-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": 1,
+ "line-dasharray": [
+ 1,
+ 0
+ ],
+ "line-blur": 0
+ }
+ },
+ {
+ "id": "tunnel-oneway-arrows-blue-minor",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "trunk_link"
+ ],
+ [
+ "==",
+ "oneway",
+ "true"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "path",
+ "pedestrian",
+ "service",
+ "track"
+ ]
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "icon-image": {
+ "base": 1,
+ "stops": [
+ [
+ 17,
+ "oneway-small"
+ ],
+ [
+ 18,
+ "oneway-large"
+ ]
+ ]
+ },
+ "symbol-spacing": 200,
+ "icon-padding": 2
+ },
+ "paint": {}
+ },
+ {
+ "id": "tunnel-oneway-arrows-blue-major",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "trunk_link"
+ ],
+ [
+ "==",
+ "oneway",
+ "true"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ],
+ [
+ "in",
+ "class",
+ "primary",
+ "secondary",
+ "street",
+ "street_limited",
+ "tertiary"
+ ]
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "icon-image": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ "oneway-small"
+ ],
+ [
+ 17,
+ "oneway-large"
+ ]
+ ]
+ },
+ "symbol-spacing": 200,
+ "icon-padding": 2
+ },
+ "paint": {}
+ },
+ {
+ "id": "tunnel-trunk",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "trunk"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": "hsl(46, 77%, 78%)"
+ }
+ },
+ {
+ "id": "tunnel-motorway",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "ref": "tunnel-motorway-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 1,
+ 0
+ ],
+ "line-opacity": 1,
+ "line-color": "hsl(26, 100%, 78%)",
+ "line-blur": 0
+ }
+ },
+ {
+ "id": "tunnel-oneway-arrows-white",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855769305.6016"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "type",
+ "primary_link",
+ "secondary_link",
+ "tertiary_link"
+ ],
+ [
+ "==",
+ "oneway",
+ "true"
+ ],
+ [
+ "==",
+ "structure",
+ "tunnel"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "motorway",
+ "motorway_link",
+ "trunk"
+ ]
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "icon-image": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ "oneway-white-small"
+ ],
+ [
+ 17,
+ "oneway-white-large"
+ ]
+ ]
+ },
+ "symbol-spacing": 200,
+ "icon-padding": 2
+ },
+ "paint": {}
+ },
+ {
+ "id": "ferry",
+ "type": "line",
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "==",
+ "type",
+ "ferry"
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ "hsl(205, 73%, 63%)"
+ ],
+ [
+ 17,
+ "hsl(230, 73%, 63%)"
+ ]
+ ]
+ },
+ "line-opacity": 1,
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 20,
+ 1
+ ]
+ ]
+ },
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 12,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 13,
+ [
+ 12,
+ 4
+ ]
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "ferry_auto",
+ "type": "line",
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "==",
+ "type",
+ "ferry_auto"
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ "hsl(205, 73%, 63%)"
+ ],
+ [
+ 17,
+ "hsl(230, 73%, 63%)"
+ ]
+ ]
+ },
+ "line-opacity": 1,
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 20,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-path-bg",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "!in",
+ "type",
+ "crossing",
+ "sidewalk",
+ "steps"
+ ],
+ [
+ "==",
+ "class",
+ "path"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 2
+ ],
+ [
+ 18,
+ 7
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 1,
+ 0
+ ],
+ "line-color": "hsl(230, 17%, 82%)",
+ "line-blur": 0,
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ 0
+ ],
+ [
+ 14.25,
+ 0.75
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-steps-bg",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "==",
+ "type",
+ "steps"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 2
+ ],
+ [
+ 17,
+ 4.6
+ ],
+ [
+ 18,
+ 7
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 17%, 82%)",
+ "line-dasharray": [
+ 1,
+ 0
+ ],
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ 0
+ ],
+ [
+ 14.25,
+ 0.75
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-sidewalk-bg",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "in",
+ "type",
+ "crossing",
+ "sidewalk"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 2
+ ],
+ [
+ 18,
+ 7
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 1,
+ 0
+ ],
+ "line-color": "hsl(230, 17%, 82%)",
+ "line-blur": 0,
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ 0
+ ],
+ [
+ 16.25,
+ 0.75
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "turning-features-outline",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "Point"
+ ],
+ [
+ "in",
+ "class",
+ "turning_circle",
+ "turning_loop"
+ ]
+ ],
+ "layout": {
+ "icon-image": "turning-circle-outline",
+ "icon-size": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.122
+ ],
+ [
+ 18,
+ 0.969
+ ],
+ [
+ 20,
+ 1
+ ]
+ ]
+ },
+ "icon-allow-overlap": true,
+ "icon-ignore-placement": true,
+ "icon-padding": 0,
+ "icon-rotation-alignment": "map"
+ },
+ "paint": {}
+ },
+ {
+ "id": "road-pedestrian-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "pedestrian"
+ ],
+ [
+ "==",
+ "structure",
+ "none"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 14.5
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": 0,
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-street-low",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "street"
+ ],
+ [
+ "==",
+ "structure",
+ "none"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "stops": [
+ [
+ 11,
+ 0
+ ],
+ [
+ 11.25,
+ 1
+ ],
+ [
+ 14,
+ 1
+ ],
+ [
+ 14.01,
+ 0
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-street_limited-low",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "street_limited"
+ ],
+ [
+ "==",
+ "structure",
+ "none"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "stops": [
+ [
+ 11,
+ 0
+ ],
+ [
+ 11.25,
+ 1
+ ],
+ [
+ 14,
+ 1
+ ],
+ [
+ 14.01,
+ 0
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-service-link-track-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "trunk_link"
+ ],
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "service",
+ "track"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 18,
+ 12
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-street_limited-case",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-street_limited-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 13,
+ 0
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-street-case",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-street-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 13,
+ 0
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-secondary-tertiary-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "in",
+ "class",
+ "secondary",
+ "tertiary"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.2,
+ "stops": [
+ [
+ 10,
+ 0.75
+ ],
+ [
+ 18,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 8.5,
+ 0.5
+ ],
+ [
+ 10,
+ 0.75
+ ],
+ [
+ 18,
+ 26
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 9.99,
+ 0
+ ],
+ [
+ 10,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-primary-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "==",
+ "class",
+ "primary"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 9.99,
+ 0
+ ],
+ [
+ 10,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-motorway_link-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 10,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "==",
+ "class",
+ "motorway_link"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 10.99,
+ 0
+ ],
+ [
+ 11,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-trunk_link-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "==",
+ "type",
+ "trunk_link"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 10.99,
+ 0
+ ],
+ [
+ 11,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-trunk-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "==",
+ "class",
+ "trunk"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 6,
+ 0
+ ],
+ [
+ 6.1,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-motorway-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "==",
+ "class",
+ "motorway"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-construction",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "construction"
+ ],
+ [
+ "==",
+ "structure",
+ "none"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "miter"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ },
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 0.4,
+ 0.8
+ ]
+ ],
+ [
+ 15,
+ [
+ 0.3,
+ 0.6
+ ]
+ ],
+ [
+ 16,
+ [
+ 0.2,
+ 0.3
+ ]
+ ],
+ [
+ 17,
+ [
+ 0.2,
+ 0.25
+ ]
+ ],
+ [
+ 18,
+ [
+ 0.15,
+ 0.15
+ ]
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-sidewalks",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-sidewalk-bg",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 1
+ ],
+ [
+ 18,
+ 4
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.75,
+ 1
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.75
+ ]
+ ],
+ [
+ 17,
+ [
+ 1,
+ 0.5
+ ]
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ 0
+ ],
+ [
+ 16.25,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-path",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-path-bg",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 1
+ ],
+ [
+ 18,
+ 4
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.75,
+ 1
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.75
+ ]
+ ],
+ [
+ 17,
+ [
+ 1,
+ 0.5
+ ]
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ 0
+ ],
+ [
+ 14.25,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-steps",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-steps-bg",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 1
+ ],
+ [
+ 16,
+ 1.6
+ ],
+ [
+ 18,
+ 6
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.75,
+ 1
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.75
+ ]
+ ],
+ [
+ 17,
+ [
+ 0.3,
+ 0.3
+ ]
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ 0
+ ],
+ [
+ 14.25,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-trunk_link",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-trunk_link-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(46, 85%, 67%)",
+ "line-opacity": 1
+ }
+ },
+ {
+ "id": "road-motorway_link",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-motorway_link-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(26, 100%, 68%)",
+ "line-opacity": 1
+ }
+ },
+ {
+ "id": "road-pedestrian",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-pedestrian-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 18,
+ 12
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": 1,
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.5,
+ 0.4
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.2
+ ]
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-pedestrian-polygon-fill",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "Polygon"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "none"
+ ],
+ [
+ "in",
+ "class",
+ "path",
+ "pedestrian"
+ ]
+ ]
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ "hsl(230, 16%, 94%)"
+ ],
+ [
+ 16.25,
+ "hsl(230, 50%, 98%)"
+ ]
+ ]
+ },
+ "fill-outline-color": "hsl(230, 26%, 88%)",
+ "fill-opacity": 1
+ }
+ },
+ {
+ "id": "road-pedestrian-polygon-pattern",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-pedestrian-polygon-fill",
+ "paint": {
+ "fill-color": "hsl(0, 0%, 100%)",
+ "fill-outline-color": "hsl(35, 10%, 83%)",
+ "fill-pattern": "pedestrian-polygon",
+ "fill-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ 0
+ ],
+ [
+ 16.25,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-polygon",
+ "type": "fill",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "Polygon"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "class",
+ "motorway",
+ "path",
+ "pedestrian",
+ "trunk"
+ ],
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ]
+ ]
+ ],
+ "layout": {},
+ "paint": {
+ "fill-color": "hsl(0, 0%, 100%)",
+ "fill-outline-color": "#d6d9e6"
+ }
+ },
+ {
+ "id": "road-service-link-track",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-service-link-track-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 18,
+ 12
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)"
+ }
+ },
+ {
+ "id": "road-street_limited",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-street_limited-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(35, 14%, 93%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-street",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-street-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-secondary-tertiary",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-secondary-tertiary-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 8.5,
+ 0.5
+ ],
+ [
+ 10,
+ 0.75
+ ],
+ [
+ 18,
+ 26
+ ]
+ ]
+ },
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 5,
+ "hsl(35, 32%, 91%)"
+ ],
+ [
+ 8,
+ "hsl(0, 0%, 100%)"
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1.2,
+ "stops": [
+ [
+ 5,
+ 0
+ ],
+ [
+ 5.5,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-primary",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-primary-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 5,
+ "hsl(35, 32%, 91%)"
+ ],
+ [
+ 7,
+ "hsl(0, 0%, 100%)"
+ ]
+ ]
+ },
+ "line-opacity": 1
+ }
+ },
+ {
+ "id": "road-oneway-arrows-blue-minor",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "trunk_link"
+ ],
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "==",
+ "oneway",
+ "true"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "path",
+ "pedestrian",
+ "service",
+ "track"
+ ]
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "icon-image": {
+ "base": 1,
+ "stops": [
+ [
+ 17,
+ "oneway-small"
+ ],
+ [
+ 18,
+ "oneway-large"
+ ]
+ ]
+ },
+ "icon-rotation-alignment": "map",
+ "icon-padding": 2,
+ "symbol-spacing": 200
+ },
+ "paint": {}
+ },
+ {
+ "id": "road-oneway-arrows-blue-major",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "trunk_link"
+ ],
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "==",
+ "oneway",
+ "true"
+ ],
+ [
+ "in",
+ "class",
+ "primary",
+ "secondary",
+ "street",
+ "street_limited",
+ "tertiary"
+ ]
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "icon-image": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ "oneway-small"
+ ],
+ [
+ 17,
+ "oneway-large"
+ ]
+ ]
+ },
+ "icon-rotation-alignment": "map",
+ "icon-padding": 2,
+ "symbol-spacing": 200
+ },
+ "paint": {}
+ },
+ {
+ "id": "road-trunk",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-trunk-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 6,
+ "hsl(0, 0%, 100%)"
+ ],
+ [
+ 6.1,
+ "hsl(46, 80%, 60%)"
+ ],
+ [
+ 9,
+ "hsl(46, 85%, 67%)"
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-motorway",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-motorway-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 8,
+ "hsl(26, 87%, 62%)"
+ ],
+ [
+ 9,
+ "hsl(26, 100%, 68%)"
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-rail",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "in",
+ "class",
+ "major_rail",
+ "minor_rail"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-color": {
+ "stops": [
+ [
+ 13,
+ "hsl(50, 17%, 82%)"
+ ],
+ [
+ 16,
+ "hsl(230, 10%, 74%)"
+ ]
+ ]
+ },
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 20,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-rail-tracks",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "ref": "road-rail",
+ "paint": {
+ "line-color": {
+ "stops": [
+ [
+ 13,
+ "hsl(50, 17%, 82%)"
+ ],
+ [
+ 16,
+ "hsl(230, 10%, 74%)"
+ ]
+ ]
+ },
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 4
+ ],
+ [
+ 20,
+ 8
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 0.1,
+ 15
+ ],
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.75,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "level-crossings",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "Point"
+ ],
+ [
+ "==",
+ "class",
+ "level_crossing"
+ ]
+ ],
+ "layout": {
+ "icon-size": 1,
+ "icon-image": "level-crossing",
+ "icon-allow-overlap": true
+ },
+ "paint": {}
+ },
+ {
+ "id": "road-oneway-arrows-white",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "structure",
+ "bridge",
+ "tunnel"
+ ],
+ [
+ "!in",
+ "type",
+ "primary_link",
+ "secondary_link",
+ "tertiary_link"
+ ],
+ [
+ "==",
+ "oneway",
+ "true"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "motorway",
+ "motorway_link",
+ "trunk"
+ ]
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "icon-image": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ "oneway-white-small"
+ ],
+ [
+ 17,
+ "oneway-white-large"
+ ]
+ ]
+ },
+ "icon-padding": 2,
+ "symbol-spacing": 200
+ },
+ "paint": {}
+ },
+ {
+ "id": "turning-features",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855786460.0557"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "Point"
+ ],
+ [
+ "in",
+ "class",
+ "turning_circle",
+ "turning_loop"
+ ]
+ ],
+ "layout": {
+ "icon-image": "turning-circle",
+ "icon-size": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.095
+ ],
+ [
+ 18,
+ 1
+ ]
+ ]
+ },
+ "icon-allow-overlap": true,
+ "icon-ignore-placement": true,
+ "icon-padding": 0,
+ "icon-rotation-alignment": "map"
+ },
+ "paint": {}
+ },
+ {
+ "id": "bridge-path-bg",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "steps"
+ ],
+ [
+ "==",
+ "class",
+ "path"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 2
+ ],
+ [
+ 18,
+ 7
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 1,
+ 0
+ ],
+ "line-color": "hsl(230, 17%, 82%)",
+ "line-blur": 0,
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ 0
+ ],
+ [
+ 15.25,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-steps-bg",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "==",
+ "type",
+ "steps"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 2
+ ],
+ [
+ 17,
+ 4.6
+ ],
+ [
+ 18,
+ 7
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 17%, 82%)",
+ "line-dasharray": [
+ 1,
+ 0
+ ],
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ 0
+ ],
+ [
+ 14.25,
+ 0.75
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-pedestrian-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "pedestrian"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 14.5
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": 0,
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-low",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "street"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "stops": [
+ [
+ 11.5,
+ 0
+ ],
+ [
+ 12,
+ 1
+ ],
+ [
+ 14,
+ 1
+ ],
+ [
+ 14.01,
+ 0
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-street_limited-low",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "street_limited"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "stops": [
+ [
+ 11.5,
+ 0
+ ],
+ [
+ 12,
+ 1
+ ],
+ [
+ 14,
+ 1
+ ],
+ [
+ 14.01,
+ 0
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-service-link-track-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "trunk_link"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "service",
+ "track"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 18,
+ 12
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-street_limited-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "street_limited"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 13,
+ 0
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-street-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "street"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ },
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 13,
+ 0
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-secondary-tertiary-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "in",
+ "class",
+ "secondary",
+ "tertiary"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.2,
+ "stops": [
+ [
+ 10,
+ 0.75
+ ],
+ [
+ 18,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 8.5,
+ 0.5
+ ],
+ [
+ 10,
+ 0.75
+ ],
+ [
+ 18,
+ 26
+ ]
+ ]
+ },
+ "line-translate": [
+ 0,
+ 0
+ ]
+ }
+ },
+ {
+ "id": "bridge-primary-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "primary"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-translate": [
+ 0,
+ 0
+ ]
+ }
+ },
+ {
+ "id": "bridge-trunk_link-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "layer",
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "==",
+ "type",
+ "trunk_link"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 10.99,
+ 0
+ ],
+ [
+ 11,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-motorway_link-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "layer",
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ [
+ "==",
+ "class",
+ "motorway_link"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-opacity": 1
+ }
+ },
+ {
+ "id": "bridge-trunk-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "layer",
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ [
+ "==",
+ "class",
+ "trunk"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-motorway-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "layer",
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ [
+ "==",
+ "class",
+ "motorway"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-construction",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "construction"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "miter"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(230, 24%, 87%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ },
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 0.4,
+ 0.8
+ ]
+ ],
+ [
+ 15,
+ [
+ 0.3,
+ 0.6
+ ]
+ ],
+ [
+ 16,
+ [
+ 0.2,
+ 0.3
+ ]
+ ],
+ [
+ 17,
+ [
+ 0.2,
+ 0.25
+ ]
+ ],
+ [
+ 18,
+ [
+ 0.15,
+ 0.15
+ ]
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-path",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "steps"
+ ],
+ [
+ "==",
+ "class",
+ "path"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 1
+ ],
+ [
+ 18,
+ 4
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.75,
+ 1
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.75
+ ]
+ ],
+ [
+ 17,
+ [
+ 1,
+ 0.5
+ ]
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ 0
+ ],
+ [
+ 14.25,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-steps",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "ref": "bridge-steps-bg",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 15,
+ 1
+ ],
+ [
+ 16,
+ 1.6
+ ],
+ [
+ 18,
+ 6
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.75,
+ 1
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.75
+ ]
+ ],
+ [
+ 17,
+ [
+ 0.3,
+ 0.3
+ ]
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ 0
+ ],
+ [
+ 14.25,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-trunk_link",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "layer",
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "==",
+ "type",
+ "trunk_link"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(46, 85%, 67%)"
+ }
+ },
+ {
+ "id": "bridge-motorway_link",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "layer",
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ [
+ "==",
+ "class",
+ "motorway_link"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(26, 100%, 68%)"
+ }
+ },
+ {
+ "id": "bridge-pedestrian",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "ref": "bridge-pedestrian-case",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 18,
+ 12
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": 1,
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 14,
+ [
+ 1,
+ 0
+ ]
+ ],
+ [
+ 15,
+ [
+ 1.5,
+ 0.4
+ ]
+ ],
+ [
+ 16,
+ [
+ 1,
+ 0.2
+ ]
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-service-link-track",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!=",
+ "type",
+ "trunk_link"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "service",
+ "track"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 18,
+ 12
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)"
+ }
+ },
+ {
+ "id": "bridge-street_limited",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "ref": "bridge-street_limited-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(35, 14%, 93%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-street",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "ref": "bridge-street-low",
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12.5,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.99,
+ 0
+ ],
+ [
+ 14,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-secondary-tertiary",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "in",
+ "type",
+ "secondary",
+ "tertiary"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 8.5,
+ 0.5
+ ],
+ [
+ 10,
+ 0.75
+ ],
+ [
+ 18,
+ 26
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": {
+ "base": 1.2,
+ "stops": [
+ [
+ 5,
+ 0
+ ],
+ [
+ 5.5,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-primary",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "==",
+ "type",
+ "primary"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-opacity": 1
+ }
+ },
+ {
+ "id": "bridge-oneway-arrows-blue-minor",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "oneway",
+ "true"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "path",
+ "pedestrian",
+ "service",
+ "track"
+ ]
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "icon-image": {
+ "base": 1,
+ "stops": [
+ [
+ 17,
+ "oneway-small"
+ ],
+ [
+ 18,
+ "oneway-large"
+ ]
+ ]
+ },
+ "symbol-spacing": 200,
+ "icon-rotation-alignment": "map",
+ "icon-padding": 2
+ },
+ "paint": {}
+ },
+ {
+ "id": "bridge-oneway-arrows-blue-major",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "oneway",
+ "true"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "in",
+ "class",
+ "primary",
+ "secondary",
+ "street",
+ "street_limited",
+ "tertiary"
+ ]
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "icon-image": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ "oneway-small"
+ ],
+ [
+ 17,
+ "oneway-large"
+ ]
+ ]
+ },
+ "symbol-spacing": 200,
+ "icon-rotation-alignment": "map",
+ "icon-padding": 2
+ },
+ "paint": {}
+ },
+ {
+ "id": "bridge-trunk",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "layer",
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ [
+ "==",
+ "class",
+ "trunk"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": "hsl(46, 85%, 67%)"
+ }
+ },
+ {
+ "id": "bridge-motorway",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "layer",
+ 2,
+ 3,
+ 4,
+ 5
+ ],
+ [
+ "==",
+ "class",
+ "motorway"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": "hsl(26, 100%, 68%)"
+ }
+ },
+ {
+ "id": "bridge-rail",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "in",
+ "class",
+ "major_rail",
+ "minor_rail"
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-color": {
+ "stops": [
+ [
+ 13,
+ "hsl(50, 17%, 82%)"
+ ],
+ [
+ 16,
+ "hsl(230, 10%, 74%)"
+ ]
+ ]
+ },
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 20,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-rail-tracks",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "ref": "bridge-rail",
+ "paint": {
+ "line-color": {
+ "stops": [
+ [
+ 13,
+ "hsl(50, 17%, 82%)"
+ ],
+ [
+ 16,
+ "hsl(230, 10%, 74%)"
+ ]
+ ]
+ },
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 4
+ ],
+ [
+ 20,
+ 8
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 0.1,
+ 15
+ ],
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 13.75,
+ 0
+ ],
+ [
+ 20,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-trunk_link-2-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "==",
+ "type",
+ "trunk_link"
+ ],
+ [
+ ">=",
+ "layer",
+ 2
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 10.99,
+ 0
+ ],
+ [
+ 11,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-motorway_link-2-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "motorway_link"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ ">=",
+ "layer",
+ 2
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.75
+ ],
+ [
+ 20,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-opacity": 1
+ }
+ },
+ {
+ "id": "bridge-trunk-2-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "trunk"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ ">=",
+ "layer",
+ 2
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-motorway-2-case",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "motorway"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ ">=",
+ "layer",
+ 2
+ ]
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 10,
+ 1
+ ],
+ [
+ 16,
+ 2
+ ]
+ ]
+ },
+ "line-color": "hsl(0, 0%, 100%)",
+ "line-gap-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "bridge-trunk_link-2",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "==",
+ "type",
+ "trunk_link"
+ ],
+ [
+ ">=",
+ "layer",
+ 2
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(46, 85%, 67%)"
+ }
+ },
+ {
+ "id": "bridge-motorway_link-2",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "motorway_link"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ ">=",
+ "layer",
+ 2
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 12,
+ 0.5
+ ],
+ [
+ 14,
+ 2
+ ],
+ [
+ 18,
+ 18
+ ]
+ ]
+ },
+ "line-color": "hsl(26, 100%, 68%)"
+ }
+ },
+ {
+ "id": "bridge-trunk-2",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "trunk"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ ">=",
+ "layer",
+ 2
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": "hsl(46, 85%, 67%)"
+ }
+ },
+ {
+ "id": "bridge-motorway-2",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "==",
+ "class",
+ "motorway"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ ">=",
+ "layer",
+ 2
+ ]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 5,
+ 0.75
+ ],
+ [
+ 18,
+ 32
+ ]
+ ]
+ },
+ "line-color": "hsl(26, 100%, 68%)"
+ }
+ },
+ {
+ "id": "bridge-oneway-arrows-white",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444855799204.86"
+ },
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "all",
+ [
+ "!in",
+ "type",
+ "primary_link",
+ "secondary_link",
+ "tertiary_link"
+ ],
+ [
+ "==",
+ "oneway",
+ "true"
+ ],
+ [
+ "==",
+ "structure",
+ "bridge"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "motorway",
+ "motorway_link",
+ "trunk"
+ ]
+ ]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "icon-image": {
+ "base": 1,
+ "stops": [
+ [
+ 16,
+ "oneway-white-small"
+ ],
+ [
+ 17,
+ "oneway-white-large"
+ ]
+ ]
+ },
+ "symbol-spacing": 200,
+ "icon-padding": 2
+ },
+ "paint": {}
+ },
+ {
+ "id": "aerialway",
+ "type": "line",
+ "source": "composite",
+ "source-layer": "road",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "==",
+ "class",
+ "aerialway"
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-color": "hsl(230, 10%, 74%)",
+ "line-width": {
+ "base": 1.5,
+ "stops": [
+ [
+ 14,
+ 0.5
+ ],
+ [
+ 20,
+ 1
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "admin-3-4-boundaries-bg",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444934295202.7542"
+ },
+ "source": "composite",
+ "source-layer": "admin",
+ "filter": [
+ "all",
+ [
+ "==",
+ "maritime",
+ 0
+ ],
+ [
+ ">=",
+ "admin_level",
+ 3
+ ]
+ ],
+ "layout": {
+ "line-join": "bevel"
+ },
+ "paint": {
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 8,
+ "hsl(35, 12%, 89%)"
+ ],
+ [
+ 16,
+ "hsl(230, 49%, 90%)"
+ ]
+ ]
+ },
+ "line-width": {
+ "base": 1,
+ "stops": [
+ [
+ 7,
+ 3.75
+ ],
+ [
+ 12,
+ 5.5
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 7,
+ 0
+ ],
+ [
+ 8,
+ 0.75
+ ]
+ ]
+ },
+ "line-dasharray": [
+ 1,
+ 0
+ ],
+ "line-translate": [
+ 0,
+ 0
+ ],
+ "line-blur": {
+ "base": 1,
+ "stops": [
+ [
+ 3,
+ 0
+ ],
+ [
+ 8,
+ 3
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "admin-2-boundaries-bg",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444934295202.7542"
+ },
+ "source": "composite",
+ "source-layer": "admin",
+ "minzoom": 1,
+ "filter": [
+ "all",
+ [
+ "==",
+ "admin_level",
+ 2
+ ],
+ [
+ "==",
+ "maritime",
+ 0
+ ]
+ ],
+ "layout": {
+ "line-join": "miter"
+ },
+ "paint": {
+ "line-width": {
+ "base": 1,
+ "stops": [
+ [
+ 3,
+ 3.5
+ ],
+ [
+ 10,
+ 8
+ ]
+ ]
+ },
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 6,
+ "hsl(35, 12%, 89%)"
+ ],
+ [
+ 8,
+ "hsl(230, 49%, 90%)"
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 3,
+ 0
+ ],
+ [
+ 4,
+ 0.5
+ ]
+ ]
+ },
+ "line-translate": [
+ 0,
+ 0
+ ],
+ "line-blur": {
+ "base": 1,
+ "stops": [
+ [
+ 3,
+ 0
+ ],
+ [
+ 10,
+ 2
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "admin-3-4-boundaries",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444934295202.7542"
+ },
+ "source": "composite",
+ "source-layer": "admin",
+ "filter": [
+ "all",
+ [
+ "==",
+ "maritime",
+ 0
+ ],
+ [
+ ">=",
+ "admin_level",
+ 3
+ ]
+ ],
+ "layout": {
+ "line-join": "round",
+ "line-cap": "round"
+ },
+ "paint": {
+ "line-dasharray": {
+ "base": 1,
+ "stops": [
+ [
+ 6,
+ [
+ 2,
+ 0
+ ]
+ ],
+ [
+ 7,
+ [
+ 2,
+ 2,
+ 6,
+ 2
+ ]
+ ]
+ ]
+ },
+ "line-width": {
+ "base": 1,
+ "stops": [
+ [
+ 7,
+ 0.75
+ ],
+ [
+ 12,
+ 1.5
+ ]
+ ]
+ },
+ "line-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 2,
+ 0
+ ],
+ [
+ 3,
+ 1
+ ]
+ ]
+ },
+ "line-color": {
+ "base": 1,
+ "stops": [
+ [
+ 3,
+ "hsl(230, 14%, 77%)"
+ ],
+ [
+ 7,
+ "hsl(230, 8%, 62%)"
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "admin-2-boundaries",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444934295202.7542"
+ },
+ "source": "composite",
+ "source-layer": "admin",
+ "minzoom": 1,
+ "filter": [
+ "all",
+ [
+ "==",
+ "admin_level",
+ 2
+ ],
+ [
+ "==",
+ "disputed",
+ 0
+ ],
+ [
+ "==",
+ "maritime",
+ 0
+ ]
+ ],
+ "layout": {
+ "line-join": "round",
+ "line-cap": "round"
+ },
+ "paint": {
+ "line-color": "hsl(230, 8%, 51%)",
+ "line-width": {
+ "base": 1,
+ "stops": [
+ [
+ 3,
+ 0.5
+ ],
+ [
+ 10,
+ 2
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "admin-2-boundaries-dispute",
+ "type": "line",
+ "metadata": {
+ "mapbox:group": "1444934295202.7542"
+ },
+ "source": "composite",
+ "source-layer": "admin",
+ "minzoom": 1,
+ "filter": [
+ "all",
+ [
+ "==",
+ "admin_level",
+ 2
+ ],
+ [
+ "==",
+ "disputed",
+ 1
+ ],
+ [
+ "==",
+ "maritime",
+ 0
+ ]
+ ],
+ "layout": {
+ "line-join": "round"
+ },
+ "paint": {
+ "line-dasharray": [
+ 1.5,
+ 1.5
+ ],
+ "line-color": "hsl(230, 8%, 51%)",
+ "line-width": {
+ "base": 1,
+ "stops": [
+ [
+ 3,
+ 0.5
+ ],
+ [
+ 10,
+ 2
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "road-label-small",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444933721429.3076"
+ },
+ "source": "composite",
+ "source-layer": "road_label",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ [
+ "!in",
+ "class",
+ "link",
+ "motorway",
+ "pedestrian",
+ "primary",
+ "secondary",
+ "street",
+ "street_limited",
+ "tertiary",
+ "trunk"
+ ],
+ [
+ "==",
+ "$type",
+ "LineString"
+ ]
+ ],
+ "layout": {
+ "text-size": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ 10
+ ],
+ [
+ 20,
+ 13
+ ]
+ ]
+ },
+ "text-max-angle": 30,
+ "symbol-spacing": 250,
+ "text-font": [
+ "DIN Offc Pro Regular",
+ "Arial Unicode MS Regular"
+ ],
+ "symbol-placement": "line",
+ "text-padding": 1,
+ "visibility": "visible",
+ "text-rotation-alignment": "map",
+ "text-field": "{name_en}",
+ "text-letter-spacing": 0.01
+ },
+ "paint": {
+ "text-color": "hsl(0, 0%, 0%)",
+ "text-halo-color": "hsl(0, 0%, 100%)",
+ "text-halo-width": 1.25,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "road-label-medium",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444933721429.3076"
+ },
+ "source": "composite",
+ "source-layer": "road_label",
+ "minzoom": 11,
+ "filter": [
+ "all",
+ [
+ "==",
+ "$type",
+ "LineString"
+ ],
+ [
+ "in",
+ "class",
+ "link",
+ "pedestrian",
+ "street",
+ "street_limited"
+ ]
+ ],
+ "layout": {
+ "text-size": {
+ "base": 1,
+ "stops": [
+ [
+ 11,
+ 10
+ ],
+ [
+ 20,
+ 14
+ ]
+ ]
+ },
+ "text-max-angle": 30,
+ "symbol-spacing": 250,
+ "text-font": [
+ "DIN Offc Pro Regular",
+ "Arial Unicode MS Regular"
+ ],
+ "symbol-placement": "line",
+ "text-padding": 1,
+ "visibility": "visible",
+ "text-rotation-alignment": "map",
+ "text-field": "{name_en}",
+ "text-letter-spacing": 0.01
+ },
+ "paint": {
+ "text-color": "hsl(0, 0%, 0%)",
+ "text-halo-color": "hsl(0, 0%, 100%)",
+ "text-halo-width": 1
+ }
+ },
+ {
+ "id": "road-label-large",
+ "type": "symbol",
+ "metadata": {
+ "mapbox:group": "1444933721429.3076"
+ },
+ "source": "composite",
+ "source-layer": "road_label",
+ "filter": [
+ "in",
+ "class",
+ "motorway",
+ "primary",
+ "secondary",
+ "tertiary",
+ "trunk"
+ ],
+ "layout": {
+ "text-size": {
+ "base": 1,
+ "stops": [
+ [
+ 9,
+ 10
+ ],
+ [
+ 20,
+ 16
+ ]
+ ]
+ },
+ "text-max-angle": 30,
+ "symbol-spacing": 250,
+ "text-font": [
+ "DIN Offc Pro Regular",
+ "Arial Unicode MS Regular"
+ ],
+ "symbol-placement": "line",
+ "text-padding": 1,
+ "visibility": "visible",
+ "text-rotation-alignment": "map",
+ "text-field": "{name_en}",
+ "text-letter-spacing": 0.01
+ },
+ "paint": {
+ "text-color": "hsl(0, 0%, 0%)",
+ "text-halo-color": "hsla(0, 0%, 100%, 0.75)",
+ "text-halo-width": 1,
+ "text-halo-blur": 1
+ }
+ },
+ {
+ "id": "extrusions",
+ "type": "fill-extrusion",
+ "source": "composite",
+ "source-layer": "building",
+ "filter": [
+ "==",
+ "extrude",
+ "true"
+ ],
+ "layout": {
+ "visibility": "visible"
+ },
+ "paint": {
+ "fill-extrusion-height": {
+ "type": "identity",
+ "property": "height",
+ "default": 10
+ },
+ "fill-extrusion-color": "hsl(45, 14%, 79%)",
+ "fill-extrusion-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ 0
+ ],
+ [
+ 15.1,
+ 0.7
+ ]
+ ]
+ },
+ "fill-extrusion-base": -10
+ }
+ }
+ ],
+ "id": "cj007psrp008k2ssjxqhi1rl1",
+ "owner": "lbud",
+ "visibility": "private",
+ "draft": false
+}
diff --git a/platform/ios/app/lbud_debug_broken.json b/platform/ios/app/lbud_debug_broken.json
new file mode 100755
index 0000000000..55b649811d
--- /dev/null
+++ b/platform/ios/app/lbud_debug_broken.json
@@ -0,0 +1,184 @@
+{
+ "version": 8,
+ "name": "Streets-buildings-EXPERIMENT-copy",
+ "metadata": {
+ "mapbox:autocomposite": true,
+ "mapbox:type": "default",
+ "mapbox:groups": {}
+ },
+ "center": [
+ -73.98397807501742,
+ 40.766104101767695
+ ],
+ "zoom": 15.421792049978444,
+ "bearing": -88.18120343555876,
+ "pitch": 0,
+
+
+ "sources": {
+ "composite": {
+ "url": "mapbox://mapbox.mapbox-streets-v7",
+ "type": "vector"
+ }
+ },
+ "sprite": "mapbox://sprites/lbud/cj08n65a000152sqv3r0gfkdc",
+ "glyphs": "mapbox://fonts/lbud/{fontstack}/{range}.pbf",
+ "layers": [
+ {
+ "id": "background",
+ "type": "background",
+ "layout": {},
+ "paint": {
+ "background-color": {
+ "base": 1,
+ "stops": [
+ [
+ 11,
+ "hsl(35, 32%, 91%)"
+ ],
+ [
+ 13,
+ "hsl(35, 12%, 89%)"
+ ]
+ ]
+ }
+ }
+ },
+ {
+ "id": "extrusions",
+ "type": "fill-extrusion",
+ "source": "composite",
+ "source-layer": "building",
+ "minzoom": 15,
+ "filter": [
+ "==",
+ "extrude",
+ "true"
+ ],
+ "layout": {
+ "visibility": "visible"
+ },
+ "paint": {
+ "fill-extrusion-height": {
+ "base": 1,
+ "type": "exponential",
+ "property": "height",
+ "stops": [
+ [
+ {
+ "zoom": 0,
+ "value": 0
+ },
+ 0
+ ],
+ [
+ {
+ "zoom": 0,
+ "value": 1000
+ },
+ 0
+ ],
+
+ [
+ {
+ "zoom": 15,
+ "value": 0
+ },
+ 0
+ ],
+ [
+ {
+ "zoom": 15,
+ "value": 1000
+ },
+ 0
+ ],
+ [
+ {
+ "zoom": 15.2,
+ "value": 0
+ },
+ 0
+ ],
+ [
+ {
+ "value": 600,
+ "zoom": 15.2
+ },
+ 600
+ ],
+ [
+ {
+ "value": 601,
+ "zoom": 15.2
+ },
+ 10
+ ]
+ ]
+ },
+ "fill-extrusion-base": {
+ "base": 1,
+ "type": "exponential",
+ "property": "min_height",
+ "stops": [
+ [
+ {
+ "zoom": 15,
+ "value": 0
+ },
+ 0
+ ],
+ [
+ {
+ "zoom": 15,
+ "value": 1000
+ },
+ 0
+ ],
+ [
+ {
+ "zoom": 15.2,
+ "value": 0
+ },
+ 0
+ ],
+ [
+ {
+ "value": 1000,
+ "zoom": 15.2
+ },
+ 1000
+ ],
+ [
+ {
+ "zoom": 15.2,
+ "value": 1001
+ },
+ 10
+ ]
+ ]
+ },
+ "fill-extrusion-color": "hsl(45, 61%, 27%)",
+ "fill-extrusion-opacity": {
+ "base": 1,
+ "stops": [
+ [
+ 15,
+ 0
+ ],
+ [
+ 15.1,
+ 0.3
+ ]
+ ]
+ }
+ }
+ }
+ ],
+ "created": "2017-03-13T21:49:25.316Z",
+ "id": "cj08n65a000152sqv3r0gfkdc",
+ "modified": "2017-03-13T21:49:25.316Z",
+ "owner": "lbud",
+ "visibility": "private",
+ "draft": false
+}
diff --git a/platform/ios/docs/guides/For Style Authors.md b/platform/ios/docs/guides/For Style Authors.md
index beada224b0..8eacc7aebd 100644
--- a/platform/ios/docs/guides/For Style Authors.md
+++ b/platform/ios/docs/guides/For Style Authors.md
@@ -207,6 +207,13 @@ In style JSON | In Objective-C | In Swift
`fill-translate` | `MGLFillStyleLayer.fillTranslation` | `MGLFillStyleLayer.fillTranslation`
`fill-translate-anchor` | `MGLFillStyleLayer.fillTranslationAnchor` | `MGLFillStyleLayer.fillTranslationAnchor`
+### FillExtrusion style layers
+
+In style JSON | In Objective-C | In Swift
+--------------|----------------|---------
+`fill-extrusion-translate` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslation` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslation`
+`fill-extrusion-translate-anchor` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslationAnchor` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslationAnchor`
+
### Line style layers
In style JSON | In Objective-C | In Swift
diff --git a/platform/macos/docs/guides/For Style Authors.md b/platform/macos/docs/guides/For Style Authors.md
index 03139750d3..4430d5c3f0 100644
--- a/platform/macos/docs/guides/For Style Authors.md
+++ b/platform/macos/docs/guides/For Style Authors.md
@@ -196,6 +196,13 @@ In style JSON | In Objective-C | In Swift
`fill-translate` | `MGLFillStyleLayer.fillTranslation` | `MGLFillStyleLayer.fillTranslation`
`fill-translate-anchor` | `MGLFillStyleLayer.fillTranslationAnchor` | `MGLFillStyleLayer.fillTranslationAnchor`
+### FillExtrusion style layers
+
+In style JSON | In Objective-C | In Swift
+--------------|----------------|---------
+`fill-extrusion-translate` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslation` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslation`
+`fill-extrusion-translate-anchor` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslationAnchor` | `MGLFillExtrusionStyleLayer.fillExtrusionTranslationAnchor`
+
### Line style layers
In style JSON | In Objective-C | In Swift
diff --git a/scripts/style-code.js b/scripts/style-code.js
index 156934a240..70914c5fb6 100644
--- a/scripts/style-code.js
+++ b/scripts/style-code.js
@@ -22,6 +22,10 @@ global.snakeCaseUpper = function snakeCaseUpper(str) {
return str.replace(/-/g, "_").toUpperCase();
};
+global.unhyphenate = function (str) {
+ return str.replace(/-/g, " ");
+};
+
global.writeIfModified = function(filename, newContent) {
try {
const oldContent = fs.readFileSync(filename, 'utf8');