diff --git a/.travis.yml b/.travis.yml index 793f0130d66..6c749acfdfd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,6 +45,7 @@ before_script: - cmake --version script: - make linux + - make benchmark - make test - make run-test after_script: diff --git a/CMakeLists.txt b/CMakeLists.txt index 79c85829e14..d021c856fb9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,6 +59,11 @@ if(COMMAND mbgl_platform_test) include(cmake/test.cmake) endif() +if(COMMAND mbgl_platform_benchmark) + include(cmake/benchmark-files.cmake) + include(cmake/benchmark.cmake) +endif() + if(COMMAND mbgl_platform_glfw) include(cmake/glfw.cmake) endif() diff --git a/Makefile b/Makefile index 0f4cefa4b9f..6d191d80f91 100644 --- a/Makefile +++ b/Makefile @@ -285,6 +285,10 @@ linux: glfw-app render offline test: $(LINUX_BUILD) $(NINJA) $(NINJA_ARGS) -j$(JOBS) -C $(LINUX_OUTPUT_PATH) mbgl-test +.PHONY: benchmark +benchmark: $(LINUX_BUILD) + $(NINJA) $(NINJA_ARGS) -j$(JOBS) -C $(LINUX_OUTPUT_PATH) mbgl-benchmark + ifneq (,$(shell which gdb)) GDB = gdb -batch -return-child-result -ex 'set print thread-events off' -ex 'run' -ex 'thread apply all bt' --args endif @@ -295,6 +299,12 @@ run-test: run-test-* run-test-%: test $(GDB) $(LINUX_OUTPUT_PATH)/mbgl-test --gtest_catch_exceptions=0 --gtest_filter=$* +.PHONY: run-benchmark +run-benchmark: run-benchmark-. + +run-benchmark-%: benchmark + $(GDB) $(LINUX_OUTPUT_PATH)/mbgl-benchmark --benchmark_filter=$* + .PHONY: render render: $(LINUX_BUILD) $(NINJA) $(NINJA_ARGS) -j$(JOBS) -C $(LINUX_OUTPUT_PATH) mbgl-render diff --git a/benchmark/api/query.benchmark.cpp b/benchmark/api/query.benchmark.cpp new file mode 100644 index 00000000000..7fa0781450a --- /dev/null +++ b/benchmark/api/query.benchmark.cpp @@ -0,0 +1,72 @@ +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace mbgl; + +namespace { + +class QueryBenchmark { +public: + QueryBenchmark() { + NetworkStatus::Set(NetworkStatus::Status::Offline); + fileSource.setAccessToken("foobar"); + + map.setStyleJSON(util::read_file("benchmark/fixtures/api/query_style.json")); + map.setLatLngZoom({ 40.726989, -73.992857 }, 15); // Manhattan + + auto decoded = decodeImage(util::read_file("benchmark/fixtures/api/default_marker.png")); + auto image = std::make_unique(std::move(decoded), 1.0); + map.addImage("test-icon", std::move(image)); + + view.resize(1000, 1000); + + mbgl::benchmark::render(map); + } + + util::RunLoop loop; + std::shared_ptr display{ std::make_shared() }; + HeadlessView view{ display, 1 }; + DefaultFileSource fileSource{ "benchmark/fixtures/api/cache.db", "." }; + Map map{ view, fileSource, MapMode::Still }; + ScreenBox box{{ 0, 0 }, { 1000, 1000 }}; +}; + +} // end namespace + +static void API_queryRenderedFeaturesAll(::benchmark::State& state) { + QueryBenchmark bench; + + while (state.KeepRunning()) { + bench.map.queryRenderedFeatures(bench.box); + } +} + +static void API_queryRenderedFeaturesLayerFromLowDensity(::benchmark::State& state) { + QueryBenchmark bench; + + while (state.KeepRunning()) { + bench.map.queryRenderedFeatures(bench.box, {{ "testlayer" }}); + } +} + +static void API_queryRenderedFeaturesLayerFromHighDensity(::benchmark::State& state) { + QueryBenchmark bench; + + while (state.KeepRunning()) { + bench.map.queryRenderedFeatures(bench.box, {{ "road-street" }}); + } +} + +BENCHMARK(API_queryRenderedFeaturesAll); +BENCHMARK(API_queryRenderedFeaturesLayerFromLowDensity); +BENCHMARK(API_queryRenderedFeaturesLayerFromHighDensity); diff --git a/benchmark/fixtures/api/cache.db b/benchmark/fixtures/api/cache.db new file mode 100644 index 00000000000..033a38de88a Binary files /dev/null and b/benchmark/fixtures/api/cache.db differ diff --git a/benchmark/fixtures/api/default_marker.png b/benchmark/fixtures/api/default_marker.png new file mode 100644 index 00000000000..b112096c180 Binary files /dev/null and b/benchmark/fixtures/api/default_marker.png differ diff --git a/benchmark/fixtures/api/query_style.json b/benchmark/fixtures/api/query_style.json new file mode 100644 index 00000000000..54899c39511 --- /dev/null +++ b/benchmark/fixtures/api/query_style.json @@ -0,0 +1,11313 @@ +{ + "created": 0, + "draft": false, + "glyphs": "mapbox://fonts/mapbox/{fontstack}/{range}.pbf", + "id": "streets-v9", + "layers": [ + { + "id": "background", + "layout": {}, + "paint": { + "background-color": { + "base": 1, + "stops": [ + [ + 11, + "hsl(35, 32%, 91%)" + ], + [ + 13, + "hsl(35, 12%, 89%)" + ] + ] + } + }, + "type": "background" + }, + { + "filter": [ + "==", + "class", + "snow" + ], + "id": "landcover_snow", + "layout": {}, + "metadata": { + "mapbox:group": "1456970288113.8113" + }, + "paint": { + "fill-antialias": false, + "fill-color": "hsl(0, 0%, 100%)", + "fill-opacity": 0.2 + }, + "source": "composite", + "source-layer": "landcover", + "type": "fill" + }, + { + "filter": [ + "==", + "class", + "wood" + ], + "id": "landcover_wood", + "layout": {}, + "maxzoom": 14, + "metadata": { + "mapbox:group": "1456970288113.8113" + }, + "paint": { + "fill-antialias": false, + "fill-color": "hsl(75, 62%, 81%)", + "fill-opacity": { + "base": 1.5, + "stops": [ + [ + 2, + 0.3 + ], + [ + 7, + 0 + ] + ] + } + }, + "source": "composite", + "source-layer": "landcover", + "type": "fill" + }, + { + "filter": [ + "==", + "class", + "scrub" + ], + "id": "landcover_scrub", + "layout": {}, + "maxzoom": 14, + "metadata": { + "mapbox:group": "1456970288113.8113" + }, + "paint": { + "fill-antialias": false, + "fill-color": "hsl(75, 62%, 81%)", + "fill-opacity": { + "base": 1.5, + "stops": [ + [ + 2, + 0.3 + ], + [ + 7, + 0 + ] + ] + } + }, + "source": "composite", + "source-layer": "landcover", + "type": "fill" + }, + { + "filter": [ + "==", + "class", + "grass" + ], + "id": "landcover_grass", + "layout": {}, + "maxzoom": 14, + "metadata": { + "mapbox:group": "1456970288113.8113" + }, + "paint": { + "fill-antialias": false, + "fill-color": "hsl(75, 62%, 81%)", + "fill-opacity": { + "base": 1.5, + "stops": [ + [ + 2, + 0.3 + ], + [ + 7, + 0 + ] + ] + } + }, + "source": "composite", + "source-layer": "landcover", + "type": "fill" + }, + { + "filter": [ + "==", + "class", + "crop" + ], + "id": "landcover_crop", + "layout": {}, + "maxzoom": 14, + "metadata": { + "mapbox:group": "1456970288113.8113" + }, + "paint": { + "fill-antialias": false, + "fill-color": "hsl(75, 62%, 81%)", + "fill-opacity": { + "base": 1.5, + "stops": [ + [ + 2, + 0.3 + ], + [ + 7, + 0 + ] + ] + } + }, + "source": "composite", + "source-layer": "landcover", + "type": "fill" + }, + { + "filter": [ + "==", + "class", + "national_park" + ], + "id": "national_park", + "layout": {}, + "paint": { + "fill-color": "hsl(100, 58%, 76%)", + "fill-opacity": { + "base": 1, + "stops": [ + [ + 5, + 0 + ], + [ + 6, + 0.5 + ] + ] + } + }, + "source": "composite", + "source-layer": "landuse_overlay", + "type": "fill" + }, + { + "filter": [ + "==", + "class", + "hospital" + ], + "id": "hospital", + "layout": {}, + "paint": { + "fill-color": { + "base": 1, + "stops": [ + [ + 15.5, + "hsl(340, 37%, 87%)" + ], + [ + 16, + "hsl(340, 63%, 89%)" + ] + ] + } + }, + "source": "composite", + "source-layer": "landuse", + "type": "fill" + }, + { + "filter": [ + "==", + "class", + "school" + ], + "id": "school", + "layout": {}, + "paint": { + "fill-color": { + "base": 1, + "stops": [ + [ + 15.5, + "hsl(50, 47%, 81%)" + ], + [ + 16, + "hsl(50, 63%, 84%)" + ] + ] + } + }, + "source": "composite", + "source-layer": "landuse", + "type": "fill" + }, + { + "filter": [ + "==", + "class", + "park" + ], + "id": "park", + "layout": {}, + "paint": { + "fill-color": "hsl(100, 58%, 76%)", + "fill-opacity": { + "base": 1, + "stops": [ + [ + 5, + 0 + ], + [ + 6, + 1 + ] + ] + } + }, + "source": "composite", + "source-layer": "landuse", + "type": "fill" + }, + { + "filter": [ + "==", + "class", + "pitch" + ], + "id": "pitch", + "layout": {}, + "paint": { + "fill-color": "hsl(100, 57%, 72%)" + }, + "source": "composite", + "source-layer": "landuse", + "type": "fill" + }, + { + "filter": [ + "==", + "class", + "pitch" + ], + "id": "pitch-line", + "layout": { + "line-join": "miter" + }, + "minzoom": 15, + "paint": { + "line-color": "hsl(75, 57%, 84%)" + }, + "source": "composite", + "source-layer": "landuse", + "type": "line" + }, + { + "filter": [ + "==", + "class", + "cemetery" + ], + "id": "cemetery", + "layout": {}, + "paint": { + "fill-color": "hsl(75, 37%, 81%)" + }, + "source": "composite", + "source-layer": "landuse", + "type": "fill" + }, + { + "filter": [ + "==", + "class", + "industrial" + ], + "id": "industrial", + "layout": {}, + "paint": { + "fill-color": { + "base": 1, + "stops": [ + [ + 15.5, + "hsl(230, 15%, 86%)" + ], + [ + 16, + "hsl(230, 29%, 89%)" + ] + ] + } + }, + "source": "composite", + "source-layer": "landuse", + "type": "fill" + }, + { + "filter": [ + "==", + "class", + "sand" + ], + "id": "sand", + "layout": {}, + "paint": { + "fill-color": "hsl(60, 46%, 87%)" + }, + "source": "composite", + "source-layer": "landuse", + "type": "fill" + }, + { + "filter": [ + "==", + "level", + 94 + ], + "id": "hillshade_highlight_bright", + "layout": {}, + "maxzoom": 16, + "metadata": { + "mapbox:group": "1456969573402.7817" + }, + "paint": { + "fill-antialias": false, + "fill-color": "hsl(0, 0%, 100%)", + "fill-opacity": { + "stops": [ + [ + 14, + 0.12 + ], + [ + 16, + 0 + ] + ] + } + }, + "source": "composite", + "source-layer": "hillshade", + "type": "fill" + }, + { + "filter": [ + "==", + "level", + 90 + ], + "id": "hillshade_highlight_med", + "layout": {}, + "maxzoom": 16, + "metadata": { + "mapbox:group": "1456969573402.7817" + }, + "paint": { + "fill-antialias": false, + "fill-color": "hsl(0, 0%, 100%)", + "fill-opacity": { + "stops": [ + [ + 14, + 0.12 + ], + [ + 16, + 0 + ] + ] + } + }, + "source": "composite", + "source-layer": "hillshade", + "type": "fill" + }, + { + "filter": [ + "==", + "level", + 89 + ], + "id": "hillshade_shadow_faint", + "layout": {}, + "maxzoom": 16, + "metadata": { + "mapbox:group": "1456969573402.7817" + }, + "paint": { + "fill-antialias": false, + "fill-color": "hsl(56, 59%, 22%)", + "fill-opacity": { + "stops": [ + [ + 14, + 0.05 + ], + [ + 16, + 0 + ] + ] + } + }, + "source": "composite", + "source-layer": "hillshade", + "type": "fill" + }, + { + "filter": [ + "==", + "level", + 78 + ], + "id": "hillshade_shadow_med", + "layout": {}, + "maxzoom": 16, + "metadata": { + "mapbox:group": "1456969573402.7817" + }, + "paint": { + "fill-antialias": false, + "fill-color": "hsl(56, 59%, 22%)", + "fill-opacity": { + "stops": [ + [ + 14, + 0.05 + ], + [ + 16, + 0 + ] + ] + } + }, + "source": "composite", + "source-layer": "hillshade", + "type": "fill" + }, + { + "filter": [ + "==", + "level", + 67 + ], + "id": "hillshade_shadow_dark", + "layout": {}, + "maxzoom": 16, + "metadata": { + "mapbox:group": "1456969573402.7817" + }, + "paint": { + "fill-antialias": false, + "fill-color": "hsl(56, 59%, 22%)", + "fill-opacity": { + "stops": [ + [ + 14, + 0.06 + ], + [ + 16, + 0 + ] + ] + } + }, + "source": "composite", + "source-layer": "hillshade", + "type": "fill" + }, + { + "filter": [ + "==", + "level", + 56 + ], + "id": "hillshade_shadow_extreme", + "layout": {}, + "maxzoom": 16, + "metadata": { + "mapbox:group": "1456969573402.7817" + }, + "paint": { + "fill-antialias": false, + "fill-color": "hsl(56, 59%, 22%)", + "fill-opacity": { + "stops": [ + [ + 14, + 0.06 + ], + [ + 16, + 0 + ] + ] + } + }, + "source": "composite", + "source-layer": "hillshade", + "type": "fill" + }, + { + "filter": [ + "in", + "class", + "canal", + "river" + ], + "id": "waterway-river-canal", + "layout": { + "line-cap": { + "base": 1, + "stops": [ + [ + 0, + "butt" + ], + [ + 11, + "round" + ] + ] + }, + "line-join": "round" + }, + "minzoom": 8, + "paint": { + "line-color": "hsl(205, 87%, 76%)", + "line-opacity": { + "base": 1, + "stops": [ + [ + 8, + 0 + ], + [ + 8.5, + 1 + ] + ] + }, + "line-width": { + "base": 1.3, + "stops": [ + [ + 8.5, + 0.1 + ], + [ + 20, + 8 + ] + ] + } + }, + "source": "composite", + "source-layer": "waterway", + "type": "line" + }, + { + "filter": [ + "!in", + "class", + "canal", + "river" + ], + "id": "waterway-small", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "minzoom": 13, + "paint": { + "line-color": "hsl(205, 87%, 76%)", + "line-opacity": { + "base": 1, + "stops": [ + [ + 13, + 0 + ], + [ + 13.5, + 1 + ] + ] + }, + "line-width": { + "base": 1.35, + "stops": [ + [ + 13.5, + 0.1 + ], + [ + 20, + 3 + ] + ] + } + }, + "source": "composite", + "source-layer": "waterway", + "type": "line" + }, + { + "id": "water-shadow", + "layout": {}, + "paint": { + "fill-color": "hsl(215, 84%, 69%)", + "fill-opacity": 1, + "fill-translate": { + "base": 1.2, + "stops": [ + [ + 7, + [ + 0, + 0 + ] + ], + [ + 16, + [ + -1, + -1 + ] + ] + ] + }, + "fill-translate-anchor": "viewport" + }, + "source": "composite", + "source-layer": "water", + "type": "fill" + }, + { + "id": "water", + "paint": { + "fill-color": "hsl(196, 80%, 70%)" + }, + "ref": "water-shadow" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "Polygon" + ], + [ + "==", + "class", + "land" + ] + ], + "id": "barrier_line-land-polygon", + "layout": {}, + "paint": { + "fill-color": "hsl(35, 12%, 89%)" + }, + "source": "composite", + "source-layer": "barrier_line", + "type": "fill" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "==", + "class", + "land" + ] + ], + "id": "barrier_line-land-line", + "layout": { + "line-cap": "round" + }, + "paint": { + "line-color": "hsl(35, 12%, 89%)", + "line-width": { + "base": 1.99, + "stops": [ + [ + 14, + 0.75 + ], + [ + 20, + 40 + ] + ] + } + }, + "source": "composite", + "source-layer": "barrier_line", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "Polygon" + ], + [ + "!=", + "type", + "apron" + ] + ], + "id": "aeroway-polygon", + "layout": {}, + "metadata": { + "mapbox:group": "1444934828655.3389" + }, + "minzoom": 11, + "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 + ] + ] + } + }, + "source": "composite", + "source-layer": "aeroway", + "type": "fill" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "==", + "type", + "runway" + ] + ], + "id": "aeroway-runway", + "layout": {}, + "metadata": { + "mapbox:group": "1444934828655.3389" + }, + "minzoom": 9, + "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 + ] + ] + } + }, + "source": "composite", + "source-layer": "aeroway", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "==", + "type", + "taxiway" + ] + ], + "id": "aeroway-taxiway", + "layout": {}, + "metadata": { + "mapbox:group": "1444934828655.3389" + }, + "minzoom": 9, + "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 + ] + ] + } + }, + "source": "composite", + "source-layer": "aeroway", + "type": "line" + }, + { + "filter": [ + "all", + [ + "!=", + "type", + "building:part" + ], + [ + "==", + "underground", + "false" + ] + ], + "id": "building-line", + "layout": {}, + "minzoom": 15, + "paint": { + "line-color": "hsl(35, 6%, 79%)", + "line-opacity": { + "base": 1, + "stops": [ + [ + 15.5, + 0 + ], + [ + 16, + 1 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 15, + 0.75 + ], + [ + 20, + 3 + ] + ] + } + }, + "source": "composite", + "source-layer": "building", + "type": "line" + }, + { + "filter": [ + "all", + [ + "!=", + "type", + "building:part" + ], + [ + "==", + "underground", + "false" + ] + ], + "id": "building", + "layout": {}, + "minzoom": 15, + "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%)" + }, + "source": "composite", + "source-layer": "building", + "type": "fill" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "street" + ], + [ + "==", + "structure", + "tunnel" + ] + ] + ], + "id": "tunnel-street-low", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "minzoom": 11, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-opacity": { + "stops": [ + [ + 11.5, + 0 + ], + [ + 12, + 1 + ], + [ + 14, + 1 + ], + [ + 14.01, + 0 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12.5, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "street_limited" + ], + [ + "==", + "structure", + "tunnel" + ] + ] + ], + "id": "tunnel-street_limited-low", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "minzoom": 11, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-opacity": { + "stops": [ + [ + 11.5, + 0 + ], + [ + 12, + 1 + ], + [ + 14, + 1 + ], + [ + 14.01, + 0 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12.5, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "in", + "class", + "link", + "service", + "track" + ], + [ + "==", + "structure", + "tunnel" + ], + [ + "!=", + "type", + "trunk_link" + ] + ] + ], + "id": "tunnel-service-link-track-case", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "minzoom": 14, + "paint": { + "line-color": "hsl(230, 19%, 75%)", + "line-dasharray": [ + 3, + 3 + ], + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 14, + 0.5 + ], + [ + 18, + 12 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.75 + ], + [ + 20, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "id": "tunnel-street_limited-case", + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "paint": { + "line-color": "hsl(230, 19%, 75%)", + "line-dasharray": [ + 3, + 3 + ], + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 13, + 0 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + }, + "line-opacity": { + "base": 1, + "stops": [ + [ + 13.99, + 0 + ], + [ + 14, + 1 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.75 + ], + [ + 20, + 2 + ] + ] + } + }, + "ref": "tunnel-street_limited-low" + }, + { + "id": "tunnel-street-case", + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "paint": { + "line-color": "hsl(230, 19%, 75%)", + "line-dasharray": [ + 3, + 3 + ], + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 13, + 0 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + }, + "line-opacity": { + "base": 1, + "stops": [ + [ + 13.99, + 0 + ], + [ + 14, + 1 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.75 + ], + [ + 20, + 2 + ] + ] + } + }, + "ref": "tunnel-street-low" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "in", + "class", + "secondary", + "tertiary" + ], + [ + "==", + "structure", + "tunnel" + ] + ] + ], + "id": "tunnel-secondary-tertiary-case", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "paint": { + "line-color": "hsl(230, 19%, 75%)", + "line-dasharray": [ + 3, + 3 + ], + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 8.5, + 0.5 + ], + [ + 10, + 0.75 + ], + [ + 18, + 26 + ] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [ + 10, + 0.75 + ], + [ + 18, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "primary" + ], + [ + "==", + "structure", + "tunnel" + ] + ] + ], + "id": "tunnel-primary-case", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "paint": { + "line-color": "hsl(230, 19%, 75%)", + "line-dasharray": [ + 3, + 3 + ], + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 10, + 1 + ], + [ + 16, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "structure", + "tunnel" + ], + [ + "==", + "type", + "trunk_link" + ] + ] + ], + "id": "tunnel-trunk_link-case", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "minzoom": 13, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-dasharray": [ + 3, + 3 + ], + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.75 + ], + [ + 20, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "motorway_link" + ], + [ + "==", + "structure", + "tunnel" + ] + ] + ], + "id": "tunnel-motorway_link-case", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "minzoom": 13, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-dasharray": [ + 3, + 3 + ], + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.75 + ], + [ + 20, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "structure", + "tunnel" + ], + [ + "==", + "type", + "trunk" + ] + ] + ], + "id": "tunnel-trunk-case", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-dasharray": [ + 3, + 3 + ], + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + }, + "line-opacity": 1, + "line-width": { + "base": 1.5, + "stops": [ + [ + 10, + 1 + ], + [ + 16, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "motorway" + ], + [ + "==", + "structure", + "tunnel" + ] + ] + ], + "id": "tunnel-motorway-case", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-dasharray": [ + 3, + 3 + ], + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + }, + "line-opacity": 1, + "line-width": { + "base": 1.5, + "stops": [ + [ + 10, + 1 + ], + [ + 16, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "construction" + ], + [ + "==", + "structure", + "tunnel" + ] + ] + ], + "id": "tunnel-construction", + "layout": { + "line-join": "miter" + }, + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "minzoom": 14, + "paint": { + "line-color": "hsl(230, 24%, 87%)", + "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 + ] + ] + ] + }, + "line-opacity": { + "base": 1, + "stops": [ + [ + 13.99, + 0 + ], + [ + 14, + 1 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12.5, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "path" + ], + [ + "==", + "structure", + "tunnel" + ], + [ + "!=", + "type", + "steps" + ] + ] + ], + "id": "tunnel-path", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "paint": { + "line-color": "hsl(35, 26%, 95%)", + "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 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 15, + 1 + ], + [ + 18, + 4 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "structure", + "tunnel" + ], + [ + "==", + "type", + "steps" + ] + ] + ], + "id": "tunnel-steps", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "paint": { + "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 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 15, + 1 + ], + [ + 16, + 1.6 + ], + [ + 18, + 6 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "id": "tunnel-trunk_link", + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "paint": { + "line-color": "hsl(46, 77%, 78%)", + "line-dasharray": [ + 1, + 0 + ], + "line-opacity": 1, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "ref": "tunnel-trunk_link-case" + }, + { + "id": "tunnel-motorway_link", + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "paint": { + "line-color": "hsl(26, 100%, 78%)", + "line-dasharray": [ + 1, + 0 + ], + "line-opacity": 1, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "ref": "tunnel-motorway_link-case" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "pedestrian" + ], + [ + "==", + "structure", + "tunnel" + ] + ] + ], + "id": "tunnel-pedestrian", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "minzoom": 13, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-dasharray": { + "base": 1, + "stops": [ + [ + 14, + [ + 1, + 0 + ] + ], + [ + 15, + [ + 1.5, + 0.4 + ] + ], + [ + 16, + [ + 1, + 0.2 + ] + ] + ] + }, + "line-opacity": 1, + "line-width": { + "base": 1.5, + "stops": [ + [ + 14, + 0.5 + ], + [ + 18, + 12 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "id": "tunnel-service-link-track", + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-dasharray": [ + 1, + 0 + ], + "line-width": { + "base": 1.5, + "stops": [ + [ + 14, + 0.5 + ], + [ + 18, + 12 + ] + ] + } + }, + "ref": "tunnel-service-link-track-case" + }, + { + "id": "tunnel-street_limited", + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "paint": { + "line-color": "hsl(35, 14%, 93%)", + "line-opacity": { + "base": 1, + "stops": [ + [ + 13.99, + 0 + ], + [ + 14, + 1 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12.5, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "ref": "tunnel-street_limited-low" + }, + { + "id": "tunnel-street", + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-opacity": { + "base": 1, + "stops": [ + [ + 13.99, + 0 + ], + [ + 14, + 1 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12.5, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "ref": "tunnel-street-low" + }, + { + "id": "tunnel-secondary-tertiary", + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "paint": { + "line-blur": 0, + "line-color": "hsl(0, 0%, 100%)", + "line-dasharray": [ + 1, + 0 + ], + "line-opacity": 1, + "line-width": { + "base": 1.5, + "stops": [ + [ + 8.5, + 0.5 + ], + [ + 10, + 0.75 + ], + [ + 18, + 26 + ] + ] + } + }, + "ref": "tunnel-secondary-tertiary-case" + }, + { + "id": "tunnel-primary", + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "paint": { + "line-blur": 0, + "line-color": "hsl(0, 0%, 100%)", + "line-dasharray": [ + 1, + 0 + ], + "line-opacity": 1, + "line-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + } + }, + "ref": "tunnel-primary-case" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "in", + "class", + "link", + "path", + "pedestrian", + "service", + "track" + ], + [ + "==", + "oneway", + "true" + ], + [ + "==", + "structure", + "tunnel" + ], + [ + "!=", + "type", + "trunk_link" + ] + ] + ], + "id": "tunnel-oneway-arrows-blue-minor", + "layout": { + "icon-image": { + "base": 1, + "stops": [ + [ + 17, + "oneway-small" + ], + [ + 18, + "oneway-large" + ] + ] + }, + "icon-padding": 2, + "symbol-placement": "line", + "symbol-spacing": 200 + }, + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "minzoom": 16, + "paint": {}, + "source": "composite", + "source-layer": "road", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "in", + "class", + "primary", + "secondary", + "street", + "street_limited", + "tertiary" + ], + [ + "==", + "oneway", + "true" + ], + [ + "==", + "structure", + "tunnel" + ], + [ + "!=", + "type", + "trunk_link" + ] + ] + ], + "id": "tunnel-oneway-arrows-blue-major", + "layout": { + "icon-image": { + "base": 1, + "stops": [ + [ + 16, + "oneway-small" + ], + [ + 17, + "oneway-large" + ] + ] + }, + "icon-padding": 2, + "symbol-placement": "line", + "symbol-spacing": 200 + }, + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "minzoom": 15, + "paint": {}, + "source": "composite", + "source-layer": "road", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "trunk" + ], + [ + "==", + "structure", + "tunnel" + ] + ] + ], + "id": "tunnel-trunk", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "paint": { + "line-color": "hsl(46, 77%, 78%)", + "line-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "id": "tunnel-motorway", + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "paint": { + "line-blur": 0, + "line-color": "hsl(26, 100%, 78%)", + "line-dasharray": [ + 1, + 0 + ], + "line-opacity": 1, + "line-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + } + }, + "ref": "tunnel-motorway-case" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "in", + "class", + "link", + "motorway", + "motorway_link", + "trunk" + ], + [ + "==", + "oneway", + "true" + ], + [ + "==", + "structure", + "tunnel" + ], + [ + "!in", + "type", + "primary_link", + "secondary_link", + "tertiary_link" + ] + ] + ], + "id": "tunnel-oneway-arrows-white", + "layout": { + "icon-image": { + "base": 1, + "stops": [ + [ + 16, + "oneway-white-small" + ], + [ + 17, + "oneway-white-large" + ] + ] + }, + "icon-padding": 2, + "symbol-placement": "line", + "symbol-spacing": 200 + }, + "metadata": { + "mapbox:group": "1444855769305.6016" + }, + "minzoom": 16, + "paint": {}, + "source": "composite", + "source-layer": "road", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "==", + "type", + "ferry" + ] + ], + "id": "ferry", + "layout": { + "line-join": "round" + }, + "paint": { + "line-color": { + "base": 1, + "stops": [ + [ + 15, + "hsl(205, 73%, 63%)" + ], + [ + 17, + "hsl(230, 73%, 63%)" + ] + ] + }, + "line-dasharray": { + "base": 1, + "stops": [ + [ + 12, + [ + 1, + 0 + ] + ], + [ + 13, + [ + 12, + 4 + ] + ] + ] + }, + "line-opacity": 1, + "line-width": { + "base": 1.5, + "stops": [ + [ + 14, + 0.5 + ], + [ + 20, + 1 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "==", + "type", + "ferry_auto" + ] + ], + "id": "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 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "path" + ], + [ + "!in", + "structure", + "bridge", + "tunnel" + ], + [ + "!in", + "type", + "crossing", + "sidewalk", + "steps" + ] + ] + ], + "id": "road-path-bg", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "line-blur": 0, + "line-color": "hsl(230, 17%, 82%)", + "line-dasharray": [ + 1, + 0 + ], + "line-opacity": { + "base": 1, + "stops": [ + [ + 14, + 0 + ], + [ + 14.25, + 0.75 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 15, + 2 + ], + [ + 18, + 7 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "!in", + "structure", + "bridge", + "tunnel" + ], + [ + "==", + "type", + "steps" + ] + ] + ], + "id": "road-steps-bg", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "line-color": "hsl(230, 17%, 82%)", + "line-dasharray": [ + 1, + 0 + ], + "line-opacity": { + "base": 1, + "stops": [ + [ + 14, + 0 + ], + [ + 14.25, + 0.75 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 15, + 2 + ], + [ + 17, + 4.6 + ], + [ + 18, + 7 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "!in", + "structure", + "bridge", + "tunnel" + ], + [ + "in", + "type", + "crossing", + "sidewalk" + ] + ] + ], + "id": "road-sidewalk-bg", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "minzoom": 16, + "paint": { + "line-blur": 0, + "line-color": "hsl(230, 17%, 82%)", + "line-dasharray": [ + 1, + 0 + ], + "line-opacity": { + "base": 1, + "stops": [ + [ + 16, + 0 + ], + [ + 16.25, + 0.75 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 15, + 2 + ], + [ + 18, + 7 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "Point" + ], + [ + "in", + "class", + "turning_circle", + "turning_loop" + ] + ], + "id": "turning-features-outline", + "layout": { + "icon-allow-overlap": true, + "icon-ignore-placement": true, + "icon-image": "turning-circle-outline", + "icon-padding": 0, + "icon-rotation-alignment": "map", + "icon-size": { + "base": 1.5, + "stops": [ + [ + 14, + 0.122 + ], + [ + 18, + 0.969 + ], + [ + 20, + 1 + ] + ] + } + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "minzoom": 15, + "paint": {}, + "source": "composite", + "source-layer": "road", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "pedestrian" + ], + [ + "==", + "structure", + "none" + ] + ] + ], + "id": "road-pedestrian-case", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "minzoom": 12, + "paint": { + "line-color": "hsl(230, 24%, 87%)", + "line-gap-width": 0, + "line-opacity": { + "base": 1, + "stops": [ + [ + 13.99, + 0 + ], + [ + 14, + 1 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 14, + 2 + ], + [ + 18, + 14.5 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "street" + ], + [ + "==", + "structure", + "none" + ] + ] + ], + "id": "road-street-low", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "minzoom": 11, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-opacity": { + "stops": [ + [ + 11, + 0 + ], + [ + 11.25, + 1 + ], + [ + 14, + 1 + ], + [ + 14.01, + 0 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12.5, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "street_limited" + ], + [ + "==", + "structure", + "none" + ] + ] + ], + "id": "road-street_limited-low", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "minzoom": 11, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-opacity": { + "stops": [ + [ + 11, + 0 + ], + [ + 11.25, + 1 + ], + [ + 14, + 1 + ], + [ + 14.01, + 0 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12.5, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "in", + "class", + "link", + "service", + "track" + ], + [ + "!in", + "structure", + "bridge", + "tunnel" + ], + [ + "!=", + "type", + "trunk_link" + ] + ] + ], + "id": "road-service-link-track-case", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "minzoom": 14, + "paint": { + "line-color": "hsl(230, 24%, 87%)", + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 14, + 0.5 + ], + [ + 18, + 12 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.75 + ], + [ + 20, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "id": "road-street_limited-case", + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "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 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.75 + ], + [ + 20, + 2 + ] + ] + } + }, + "ref": "road-street_limited-low" + }, + { + "id": "road-street-case", + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "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 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.75 + ], + [ + 20, + 2 + ] + ] + } + }, + "ref": "road-street-low" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "in", + "class", + "secondary", + "tertiary" + ], + [ + "!in", + "structure", + "bridge", + "tunnel" + ] + ] + ], + "id": "road-secondary-tertiary-case", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "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 + ] + ] + }, + "line-width": { + "base": 1.2, + "stops": [ + [ + 10, + 0.75 + ], + [ + 18, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "primary" + ], + [ + "!in", + "structure", + "bridge", + "tunnel" + ] + ] + ], + "id": "road-primary-case", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "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 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 10, + 1 + ], + [ + 16, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "motorway_link" + ], + [ + "!in", + "structure", + "bridge", + "tunnel" + ] + ] + ], + "id": "road-motorway_link-case", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "minzoom": 10, + "paint": { + "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 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.75 + ], + [ + 20, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "!in", + "structure", + "bridge", + "tunnel" + ], + [ + "==", + "type", + "trunk_link" + ] + ] + ], + "id": "road-trunk_link-case", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "minzoom": 11, + "paint": { + "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 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.75 + ], + [ + 20, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "trunk" + ], + [ + "!in", + "structure", + "bridge", + "tunnel" + ] + ] + ], + "id": "road-trunk-case", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "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 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 10, + 1 + ], + [ + 16, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "motorway" + ], + [ + "!in", + "structure", + "bridge", + "tunnel" + ] + ] + ], + "id": "road-motorway-case", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 10, + 1 + ], + [ + 16, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "construction" + ], + [ + "==", + "structure", + "none" + ] + ] + ], + "id": "road-construction", + "layout": { + "line-join": "miter" + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "minzoom": 14, + "paint": { + "line-color": "hsl(230, 24%, 87%)", + "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 + ] + ] + ] + }, + "line-opacity": { + "base": 1, + "stops": [ + [ + 13.99, + 0 + ], + [ + 14, + 1 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12.5, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "id": "road-sidewalks", + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "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 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 15, + 1 + ], + [ + 18, + 4 + ] + ] + } + }, + "ref": "road-sidewalk-bg" + }, + { + "id": "road-path", + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "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 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 15, + 1 + ], + [ + 18, + 4 + ] + ] + } + }, + "ref": "road-path-bg" + }, + { + "id": "road-steps", + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "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 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 15, + 1 + ], + [ + 16, + 1.6 + ], + [ + 18, + 6 + ] + ] + } + }, + "ref": "road-steps-bg" + }, + { + "id": "road-trunk_link", + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "line-color": "hsl(46, 85%, 67%)", + "line-opacity": 1, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "ref": "road-trunk_link-case" + }, + { + "id": "road-motorway_link", + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "line-color": "hsl(26, 100%, 68%)", + "line-opacity": 1, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "ref": "road-motorway_link-case" + }, + { + "id": "road-pedestrian", + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-dasharray": { + "base": 1, + "stops": [ + [ + 14, + [ + 1, + 0 + ] + ], + [ + 15, + [ + 1.5, + 0.4 + ] + ], + [ + 16, + [ + 1, + 0.2 + ] + ] + ] + }, + "line-opacity": 1, + "line-width": { + "base": 1.5, + "stops": [ + [ + 14, + 0.5 + ], + [ + 18, + 12 + ] + ] + } + }, + "ref": "road-pedestrian-case" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "Polygon" + ], + [ + "all", + [ + "in", + "class", + "path", + "pedestrian" + ], + [ + "==", + "structure", + "none" + ] + ] + ], + "id": "road-pedestrian-polygon-fill", + "layout": {}, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "minzoom": 12, + "paint": { + "fill-color": { + "base": 1, + "stops": [ + [ + 16, + "hsl(230, 16%, 94%)" + ], + [ + 16.25, + "hsl(230, 50%, 98%)" + ] + ] + }, + "fill-opacity": 1, + "fill-outline-color": "hsl(230, 26%, 88%)" + }, + "source": "composite", + "source-layer": "road", + "type": "fill" + }, + { + "id": "road-pedestrian-polygon-pattern", + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "fill-color": "hsl(0, 0%, 100%)", + "fill-opacity": { + "base": 1, + "stops": [ + [ + 16, + 0 + ], + [ + 16.25, + 1 + ] + ] + }, + "fill-outline-color": "hsl(35, 10%, 83%)", + "fill-pattern": "pedestrian-polygon" + }, + "ref": "road-pedestrian-polygon-fill" + }, + { + "id": "road-service-link-track", + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-width": { + "base": 1.5, + "stops": [ + [ + 14, + 0.5 + ], + [ + 18, + 12 + ] + ] + } + }, + "ref": "road-service-link-track-case" + }, + { + "id": "road-street_limited", + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "line-color": "hsl(35, 14%, 93%)", + "line-opacity": { + "base": 1, + "stops": [ + [ + 13.99, + 0 + ], + [ + 14, + 1 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12.5, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "ref": "road-street_limited-low" + }, + { + "id": "road-street", + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-opacity": { + "base": 1, + "stops": [ + [ + 13.99, + 0 + ], + [ + 14, + 1 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12.5, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "ref": "road-street-low" + }, + { + "id": "road-secondary-tertiary", + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "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 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 8.5, + 0.5 + ], + [ + 10, + 0.75 + ], + [ + 18, + 26 + ] + ] + } + }, + "ref": "road-secondary-tertiary-case" + }, + { + "id": "road-primary", + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "line-color": { + "base": 1, + "stops": [ + [ + 5, + "hsl(35, 32%, 91%)" + ], + [ + 7, + "hsl(0, 0%, 100%)" + ] + ] + }, + "line-opacity": 1, + "line-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + } + }, + "ref": "road-primary-case" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "in", + "class", + "link", + "path", + "pedestrian", + "service", + "track" + ], + [ + "==", + "oneway", + "true" + ], + [ + "!in", + "structure", + "bridge", + "tunnel" + ], + [ + "!=", + "type", + "trunk_link" + ] + ] + ], + "id": "road-oneway-arrows-blue-minor", + "layout": { + "icon-image": { + "base": 1, + "stops": [ + [ + 17, + "oneway-small" + ], + [ + 18, + "oneway-large" + ] + ] + }, + "icon-padding": 2, + "icon-rotation-alignment": "map", + "symbol-placement": "line", + "symbol-spacing": 200 + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "minzoom": 16, + "paint": {}, + "source": "composite", + "source-layer": "road", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "in", + "class", + "primary", + "secondary", + "street", + "street_limited", + "tertiary" + ], + [ + "==", + "oneway", + "true" + ], + [ + "!in", + "structure", + "bridge", + "tunnel" + ], + [ + "!=", + "type", + "trunk_link" + ] + ] + ], + "id": "road-oneway-arrows-blue-major", + "layout": { + "icon-image": { + "base": 1, + "stops": [ + [ + 16, + "oneway-small" + ], + [ + 17, + "oneway-large" + ] + ] + }, + "icon-padding": 2, + "icon-rotation-alignment": "map", + "symbol-placement": "line", + "symbol-spacing": 200 + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "minzoom": 15, + "paint": {}, + "source": "composite", + "source-layer": "road", + "type": "symbol" + }, + { + "id": "road-trunk", + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "line-color": { + "base": 1, + "stops": [ + [ + 6, + "hsl(0, 0%, 100%)" + ], + [ + 6.1, + "hsl(46, 80%, 60%)" + ], + [ + 9, + "hsl(46, 85%, 67%)" + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + } + }, + "ref": "road-trunk-case" + }, + { + "id": "road-motorway", + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "line-color": { + "base": 1, + "stops": [ + [ + 8, + "hsl(26, 87%, 62%)" + ], + [ + 9, + "hsl(26, 100%, 68%)" + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + } + }, + "ref": "road-motorway-case" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "in", + "class", + "major_rail", + "minor_rail" + ], + [ + "!in", + "structure", + "bridge", + "tunnel" + ] + ] + ], + "id": "road-rail", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "minzoom": 13, + "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 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "id": "road-rail-tracks", + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "paint": { + "line-color": { + "stops": [ + [ + 13, + "hsl(50, 17%, 82%)" + ], + [ + 16, + "hsl(230, 10%, 74%)" + ] + ] + }, + "line-dasharray": [ + 0.1, + 15 + ], + "line-opacity": { + "base": 1, + "stops": [ + [ + 13.75, + 0 + ], + [ + 14, + 1 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 14, + 4 + ], + [ + 20, + 8 + ] + ] + } + }, + "ref": "road-rail" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "in", + "class", + "link", + "motorway", + "motorway_link", + "trunk" + ], + [ + "==", + "oneway", + "true" + ], + [ + "!in", + "structure", + "bridge", + "tunnel" + ], + [ + "!in", + "type", + "primary_link", + "secondary_link", + "tertiary_link" + ] + ] + ], + "id": "road-oneway-arrows-white", + "layout": { + "icon-image": { + "base": 1, + "stops": [ + [ + 16, + "oneway-white-small" + ], + [ + 17, + "oneway-white-large" + ] + ] + }, + "icon-padding": 2, + "symbol-placement": "line", + "symbol-spacing": 200 + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "minzoom": 16, + "paint": {}, + "source": "composite", + "source-layer": "road", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "Point" + ], + [ + "in", + "class", + "turning_circle", + "turning_loop" + ] + ], + "id": "turning-features", + "layout": { + "icon-allow-overlap": true, + "icon-ignore-placement": true, + "icon-image": "turning-circle", + "icon-padding": 0, + "icon-rotation-alignment": "map", + "icon-size": { + "base": 1.5, + "stops": [ + [ + 14, + 0.095 + ], + [ + 18, + 1 + ] + ] + } + }, + "metadata": { + "mapbox:group": "1444855786460.0557" + }, + "minzoom": 15, + "paint": {}, + "source": "composite", + "source-layer": "road", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "path" + ], + [ + "==", + "structure", + "bridge" + ], + [ + "!=", + "type", + "steps" + ] + ] + ], + "id": "bridge-path-bg", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "line-blur": 0, + "line-color": "hsl(230, 17%, 82%)", + "line-dasharray": [ + 1, + 0 + ], + "line-opacity": { + "base": 1, + "stops": [ + [ + 15, + 0 + ], + [ + 15.25, + 1 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 15, + 2 + ], + [ + 18, + 7 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "structure", + "bridge" + ], + [ + "==", + "type", + "steps" + ] + ] + ], + "id": "bridge-steps-bg", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "line-color": "hsl(230, 17%, 82%)", + "line-dasharray": [ + 1, + 0 + ], + "line-opacity": { + "base": 1, + "stops": [ + [ + 14, + 0 + ], + [ + 14.25, + 0.75 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 15, + 2 + ], + [ + 17, + 4.6 + ], + [ + 18, + 7 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "pedestrian" + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-pedestrian-case", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 13, + "paint": { + "line-color": "hsl(230, 24%, 87%)", + "line-gap-width": 0, + "line-opacity": { + "base": 1, + "stops": [ + [ + 13.99, + 0 + ], + [ + 14, + 1 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 14, + 2 + ], + [ + 18, + 14.5 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "street" + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-street-low", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 11, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-opacity": { + "stops": [ + [ + 11.5, + 0 + ], + [ + 12, + 1 + ], + [ + 14, + 1 + ], + [ + 14.01, + 0 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12.5, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "street_limited" + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-street_limited-low", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 11, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-opacity": { + "stops": [ + [ + 11.5, + 0 + ], + [ + 12, + 1 + ], + [ + 14, + 1 + ], + [ + 14.01, + 0 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12.5, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "in", + "class", + "link", + "service", + "track" + ], + [ + "==", + "structure", + "bridge" + ], + [ + "!=", + "type", + "trunk_link" + ] + ] + ], + "id": "bridge-service-link-track-case", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 14, + "paint": { + "line-color": "hsl(230, 24%, 87%)", + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 14, + 0.5 + ], + [ + 18, + 12 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.75 + ], + [ + 20, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "street_limited" + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-street_limited-case", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 11, + "paint": { + "line-color": "hsl(230, 24%, 87%)", + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 13, + 0 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.75 + ], + [ + 20, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "street" + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-street-case", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 11, + "paint": { + "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 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.75 + ], + [ + 20, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "in", + "class", + "secondary", + "tertiary" + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-secondary-tertiary-case", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "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 + ], + "line-width": { + "base": 1.2, + "stops": [ + [ + 10, + 0.75 + ], + [ + 18, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "primary" + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-primary-case", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "line-color": "hsl(230, 24%, 87%)", + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + }, + "line-translate": [ + 0, + 0 + ], + "line-width": { + "base": 1.5, + "stops": [ + [ + 10, + 1 + ], + [ + 16, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "!in", + "layer", + 2, + 3, + 4, + 5 + ], + [ + "==", + "structure", + "bridge" + ], + [ + "==", + "type", + "trunk_link" + ] + ] + ], + "id": "bridge-trunk_link-case", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 13, + "paint": { + "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 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.75 + ], + [ + 20, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "motorway_link" + ], + [ + "!in", + "layer", + 2, + 3, + 4, + 5 + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-motorway_link-case", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 13, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + }, + "line-opacity": 1, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.75 + ], + [ + 20, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "trunk" + ], + [ + "!in", + "layer", + 2, + 3, + 4, + 5 + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-trunk-case", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 10, + 1 + ], + [ + 16, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "motorway" + ], + [ + "!in", + "layer", + 2, + 3, + 4, + 5 + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-motorway-case", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 10, + 1 + ], + [ + 16, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "construction" + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-construction", + "layout": { + "line-join": "miter" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 14, + "paint": { + "line-color": "hsl(230, 24%, 87%)", + "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 + ] + ] + ] + }, + "line-opacity": { + "base": 1, + "stops": [ + [ + 13.99, + 0 + ], + [ + 14, + 1 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12.5, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "path" + ], + [ + "==", + "structure", + "bridge" + ], + [ + "!=", + "type", + "steps" + ] + ] + ], + "id": "bridge-path", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "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 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 15, + 1 + ], + [ + 18, + 4 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "id": "bridge-steps", + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "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 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 15, + 1 + ], + [ + 16, + 1.6 + ], + [ + 18, + 6 + ] + ] + } + }, + "ref": "bridge-steps-bg" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "!in", + "layer", + 2, + 3, + 4, + 5 + ], + [ + "==", + "structure", + "bridge" + ], + [ + "==", + "type", + "trunk_link" + ] + ] + ], + "id": "bridge-trunk_link", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 13, + "paint": { + "line-color": "hsl(46, 85%, 67%)", + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "motorway_link" + ], + [ + "!in", + "layer", + 2, + 3, + 4, + 5 + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-motorway_link", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 13, + "paint": { + "line-color": "hsl(26, 100%, 68%)", + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "id": "bridge-pedestrian", + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-dasharray": { + "base": 1, + "stops": [ + [ + 14, + [ + 1, + 0 + ] + ], + [ + 15, + [ + 1.5, + 0.4 + ] + ], + [ + 16, + [ + 1, + 0.2 + ] + ] + ] + }, + "line-opacity": 1, + "line-width": { + "base": 1.5, + "stops": [ + [ + 14, + 0.5 + ], + [ + 18, + 12 + ] + ] + } + }, + "ref": "bridge-pedestrian-case" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "in", + "class", + "link", + "service", + "track" + ], + [ + "==", + "structure", + "bridge" + ], + [ + "!=", + "type", + "trunk_link" + ] + ] + ], + "id": "bridge-service-link-track", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 14, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-width": { + "base": 1.5, + "stops": [ + [ + 14, + 0.5 + ], + [ + 18, + 12 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "id": "bridge-street_limited", + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "line-color": "hsl(35, 14%, 93%)", + "line-opacity": { + "base": 1, + "stops": [ + [ + 13.99, + 0 + ], + [ + 14, + 1 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12.5, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "ref": "bridge-street_limited-low" + }, + { + "id": "bridge-street", + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-opacity": { + "base": 1, + "stops": [ + [ + 13.99, + 0 + ], + [ + 14, + 1 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12.5, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "ref": "bridge-street-low" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "structure", + "bridge" + ], + [ + "in", + "type", + "secondary", + "tertiary" + ] + ] + ], + "id": "bridge-secondary-tertiary", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-opacity": { + "base": 1.2, + "stops": [ + [ + 5, + 0 + ], + [ + 5.5, + 1 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 8.5, + 0.5 + ], + [ + 10, + 0.75 + ], + [ + 18, + 26 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "structure", + "bridge" + ], + [ + "==", + "type", + "primary" + ] + ] + ], + "id": "bridge-primary", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-opacity": 1, + "line-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "in", + "class", + "link", + "path", + "pedestrian", + "service", + "track" + ], + [ + "==", + "oneway", + "true" + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-oneway-arrows-blue-minor", + "layout": { + "icon-image": { + "base": 1, + "stops": [ + [ + 17, + "oneway-small" + ], + [ + 18, + "oneway-large" + ] + ] + }, + "icon-padding": 2, + "icon-rotation-alignment": "map", + "symbol-placement": "line", + "symbol-spacing": 200 + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 16, + "paint": {}, + "source": "composite", + "source-layer": "road", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "in", + "class", + "primary", + "secondary", + "street", + "street_limited", + "tertiary" + ], + [ + "==", + "oneway", + "true" + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-oneway-arrows-blue-major", + "layout": { + "icon-image": { + "base": 1, + "stops": [ + [ + 16, + "oneway-small" + ], + [ + 17, + "oneway-large" + ] + ] + }, + "icon-padding": 2, + "icon-rotation-alignment": "map", + "symbol-placement": "line", + "symbol-spacing": 200 + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 15, + "paint": {}, + "source": "composite", + "source-layer": "road", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "trunk" + ], + [ + "!in", + "layer", + 2, + 3, + 4, + 5 + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-trunk", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "line-color": "hsl(46, 85%, 67%)", + "line-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "motorway" + ], + [ + "!in", + "layer", + 2, + 3, + 4, + 5 + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-motorway", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "line-color": "hsl(26, 100%, 68%)", + "line-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "in", + "class", + "major_rail", + "minor_rail" + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-rail", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 13, + "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 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "id": "bridge-rail-tracks", + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "line-color": { + "stops": [ + [ + 13, + "hsl(50, 17%, 82%)" + ], + [ + 16, + "hsl(230, 10%, 74%)" + ] + ] + }, + "line-dasharray": [ + 0.1, + 15 + ], + "line-opacity": { + "base": 1, + "stops": [ + [ + 13.75, + 0 + ], + [ + 20, + 1 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 14, + 4 + ], + [ + 20, + 8 + ] + ] + } + }, + "ref": "bridge-rail" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + ">=", + "layer", + 2 + ], + [ + "==", + "structure", + "bridge" + ], + [ + "==", + "type", + "trunk_link" + ] + ] + ], + "id": "bridge-trunk_link-2-case", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 13, + "paint": { + "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 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.75 + ], + [ + 20, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "motorway_link" + ], + [ + ">=", + "layer", + 2 + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-motorway_link-2-case", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 13, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + }, + "line-opacity": 1, + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.75 + ], + [ + 20, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "trunk" + ], + [ + ">=", + "layer", + 2 + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-trunk-2-case", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 10, + 1 + ], + [ + 16, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "motorway" + ], + [ + ">=", + "layer", + 2 + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-motorway-2-case", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "line-color": "hsl(0, 0%, 100%)", + "line-gap-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + }, + "line-width": { + "base": 1.5, + "stops": [ + [ + 10, + 1 + ], + [ + 16, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + ">=", + "layer", + 2 + ], + [ + "==", + "structure", + "bridge" + ], + [ + "==", + "type", + "trunk_link" + ] + ] + ], + "id": "bridge-trunk_link-2", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 13, + "paint": { + "line-color": "hsl(46, 85%, 67%)", + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "motorway_link" + ], + [ + ">=", + "layer", + 2 + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-motorway_link-2", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 13, + "paint": { + "line-color": "hsl(26, 100%, 68%)", + "line-width": { + "base": 1.5, + "stops": [ + [ + 12, + 0.5 + ], + [ + 14, + 2 + ], + [ + 18, + 18 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "trunk" + ], + [ + ">=", + "layer", + 2 + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-trunk-2", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "line-color": "hsl(46, 85%, 67%)", + "line-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "==", + "class", + "motorway" + ], + [ + ">=", + "layer", + 2 + ], + [ + "==", + "structure", + "bridge" + ] + ] + ], + "id": "bridge-motorway-2", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "paint": { + "line-color": "hsl(26, 100%, 68%)", + "line-width": { + "base": 1.5, + "stops": [ + [ + 5, + 0.75 + ], + [ + 18, + 32 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "all", + [ + "in", + "class", + "link", + "motorway", + "motorway_link", + "trunk" + ], + [ + "==", + "oneway", + "true" + ], + [ + "==", + "structure", + "bridge" + ], + [ + "!in", + "type", + "primary_link", + "secondary_link", + "tertiary_link" + ] + ] + ], + "id": "bridge-oneway-arrows-white", + "layout": { + "icon-image": { + "base": 1, + "stops": [ + [ + 16, + "oneway-white-small" + ], + [ + 17, + "oneway-white-large" + ] + ] + }, + "icon-padding": 2, + "symbol-placement": "line", + "symbol-spacing": 200 + }, + "metadata": { + "mapbox:group": "1444855799204.86" + }, + "minzoom": 16, + "paint": {}, + "source": "composite", + "source-layer": "road", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "==", + "class", + "aerialway" + ] + ], + "id": "aerialway", + "layout": { + "line-join": "round" + }, + "minzoom": 13, + "paint": { + "line-color": "hsl(230, 10%, 74%)", + "line-width": { + "base": 1.5, + "stops": [ + [ + 14, + 0.5 + ], + [ + 20, + 1 + ] + ] + } + }, + "source": "composite", + "source-layer": "road", + "type": "line" + }, + { + "filter": [ + "all", + [ + ">=", + "admin_level", + 3 + ], + [ + "==", + "maritime", + 0 + ] + ], + "id": "admin-3-4-boundaries-bg", + "layout": { + "line-join": "bevel" + }, + "metadata": { + "mapbox:group": "1444934295202.7542" + }, + "paint": { + "line-blur": { + "base": 1, + "stops": [ + [ + 3, + 0 + ], + [ + 8, + 3 + ] + ] + }, + "line-color": { + "base": 1, + "stops": [ + [ + 8, + "hsl(35, 12%, 89%)" + ], + [ + 16, + "hsl(230, 49%, 90%)" + ] + ] + }, + "line-dasharray": [ + 1, + 0 + ], + "line-opacity": { + "base": 1, + "stops": [ + [ + 7, + 0 + ], + [ + 8, + 0.75 + ] + ] + }, + "line-translate": [ + 0, + 0 + ], + "line-width": { + "base": 1, + "stops": [ + [ + 7, + 3.75 + ], + [ + 12, + 5.5 + ] + ] + } + }, + "source": "composite", + "source-layer": "admin", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "admin_level", + 2 + ], + [ + "==", + "maritime", + 0 + ] + ], + "id": "admin-2-boundaries-bg", + "layout": { + "line-join": "miter" + }, + "metadata": { + "mapbox:group": "1444934295202.7542" + }, + "minzoom": 1, + "paint": { + "line-blur": { + "base": 1, + "stops": [ + [ + 3, + 0 + ], + [ + 10, + 2 + ] + ] + }, + "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-width": { + "base": 1, + "stops": [ + [ + 3, + 3.5 + ], + [ + 10, + 8 + ] + ] + } + }, + "source": "composite", + "source-layer": "admin", + "type": "line" + }, + { + "filter": [ + "all", + [ + ">=", + "admin_level", + 3 + ], + [ + "==", + "maritime", + 0 + ] + ], + "id": "admin-3-4-boundaries", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444934295202.7542" + }, + "paint": { + "line-color": { + "base": 1, + "stops": [ + [ + 3, + "hsl(230, 14%, 77%)" + ], + [ + 7, + "hsl(230, 8%, 62%)" + ] + ] + }, + "line-dasharray": { + "base": 1, + "stops": [ + [ + 6, + [ + 2, + 0 + ] + ], + [ + 7, + [ + 2, + 2, + 6, + 2 + ] + ] + ] + }, + "line-opacity": { + "base": 1, + "stops": [ + [ + 2, + 0 + ], + [ + 3, + 1 + ] + ] + }, + "line-width": { + "base": 1, + "stops": [ + [ + 7, + 0.75 + ], + [ + 12, + 1.5 + ] + ] + } + }, + "source": "composite", + "source-layer": "admin", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "admin_level", + 2 + ], + [ + "==", + "disputed", + 0 + ], + [ + "==", + "maritime", + 0 + ] + ], + "id": "admin-2-boundaries", + "layout": { + "line-cap": "round", + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444934295202.7542" + }, + "minzoom": 1, + "paint": { + "line-color": "hsl(230, 8%, 51%)", + "line-width": { + "base": 1, + "stops": [ + [ + 3, + 0.5 + ], + [ + 10, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "admin", + "type": "line" + }, + { + "filter": [ + "all", + [ + "==", + "admin_level", + 2 + ], + [ + "==", + "disputed", + 1 + ], + [ + "==", + "maritime", + 0 + ] + ], + "id": "admin-2-boundaries-dispute", + "layout": { + "line-join": "round" + }, + "metadata": { + "mapbox:group": "1444934295202.7542" + }, + "minzoom": 1, + "paint": { + "line-color": "hsl(230, 8%, 51%)", + "line-dasharray": [ + 1.5, + 1.5 + ], + "line-width": { + "base": 1, + "stops": [ + [ + 3, + 0.5 + ], + [ + 10, + 2 + ] + ] + } + }, + "source": "composite", + "source-layer": "admin", + "type": "line" + }, + { + "id": "housenum-label", + "layout": { + "text-field": "{house_num}", + "text-font": [ + "DIN Offc Pro Italic", + "Arial Unicode MS Regular" + ], + "text-max-width": 7, + "text-padding": 4, + "text-size": 9.5 + }, + "minzoom": 17, + "paint": { + "text-color": "hsl(35, 2%, 69%)", + "text-halo-blur": 0, + "text-halo-color": "hsl(35, 8%, 85%)", + "text-halo-width": 0.5 + }, + "source": "composite", + "source-layer": "housenum_label", + "type": "symbol" + }, + { + "filter": [ + "in", + "class", + "canal", + "river" + ], + "id": "waterway-label", + "layout": { + "symbol-placement": "line", + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Italic", + "Arial Unicode MS Regular" + ], + "text-max-angle": 30, + "text-size": { + "base": 1, + "stops": [ + [ + 13, + 12 + ], + [ + 18, + 16 + ] + ] + } + }, + "minzoom": 12, + "paint": { + "text-color": "hsl(230, 48%, 44%)", + "text-halo-blur": 0.5, + "text-halo-color": "hsl(196, 80%, 70%)", + "text-halo-width": 0.5 + }, + "source": "composite", + "source-layer": "waterway_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + ">=", + "localrank", + 15 + ], + [ + "!in", + "maki", + "campsite", + "cemetery", + "dog-park", + "garden", + "golf", + "park", + "picnic-site", + "playground", + "zoo" + ], + [ + "==", + "scalerank", + 4 + ] + ], + "id": "poi-scalerank4-l15", + "layout": { + "icon-image": "{maki}-11", + "symbol-spacing": 250, + "text-anchor": "top", + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.01, + "text-line-height": 1.1, + "text-max-angle": 38, + "text-max-width": 8, + "text-offset": [ + 0, + 0.65 + ], + "text-padding": 2, + "text-rotation-alignment": "viewport", + "text-size": { + "base": 1, + "stops": [ + [ + 16, + 11 + ], + [ + 20, + 13 + ] + ] + } + }, + "metadata": { + "mapbox:group": "1444933456003.5437" + }, + "minzoom": 17, + "paint": { + "text-color": "hsl(26, 25%, 32%)", + "text-halo-blur": 0.5, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 0.5 + }, + "source": "composite", + "source-layer": "poi_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "<=", + "localrank", + 14 + ], + [ + "!in", + "maki", + "campsite", + "cemetery", + "dog-park", + "garden", + "golf", + "park", + "picnic-site", + "playground", + "zoo" + ], + [ + "==", + "scalerank", + 4 + ] + ], + "id": "poi-scalerank4-l1", + "layout": { + "icon-image": "{maki}-11", + "symbol-spacing": 250, + "text-anchor": "top", + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.01, + "text-line-height": 1.1, + "text-max-angle": 38, + "text-max-width": 8, + "text-offset": [ + 0, + 0.65 + ], + "text-padding": 1, + "text-rotation-alignment": "viewport", + "text-size": { + "base": 1, + "stops": [ + [ + 16, + 11 + ], + [ + 20, + 13 + ] + ] + } + }, + "metadata": { + "mapbox:group": "1444933456003.5437" + }, + "minzoom": 15, + "paint": { + "text-color": "hsl(26, 25%, 32%)", + "text-halo-blur": 0.5, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 0.5 + }, + "source": "composite", + "source-layer": "poi_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "in", + "maki", + "campsite", + "cemetery", + "dog-park", + "garden", + "golf", + "park", + "picnic-site", + "playground", + "zoo" + ], + [ + "==", + "scalerank", + 4 + ] + ], + "id": "poi-parks_scalerank4", + "layout": { + "icon-image": "{maki}-11", + "symbol-spacing": 250, + "text-anchor": "top", + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.01, + "text-line-height": 1.1, + "text-max-angle": 38, + "text-max-width": 8, + "text-offset": [ + 0, + 0.65 + ], + "text-padding": 1, + "text-rotation-alignment": "viewport", + "text-size": { + "base": 1, + "stops": [ + [ + 16, + 11 + ], + [ + 20, + 13 + ] + ] + } + }, + "metadata": { + "mapbox:group": "1444933456003.5437" + }, + "minzoom": 15, + "paint": { + "text-color": "hsl(100, 100%, 20%)", + "text-halo-blur": 0.5, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 0.5 + }, + "source": "composite", + "source-layer": "poi_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "!in", + "maki", + "campsite", + "cemetery", + "dog-park", + "garden", + "golf", + "park", + "picnic-site", + "playground", + "zoo" + ], + [ + "==", + "scalerank", + 3 + ] + ], + "id": "poi-scalerank3", + "layout": { + "icon-image": "{maki}-11", + "symbol-spacing": 250, + "text-anchor": "top", + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.01, + "text-line-height": 1.1, + "text-max-angle": 38, + "text-max-width": 8, + "text-offset": [ + 0, + 0.65 + ], + "text-padding": 1, + "text-rotation-alignment": "viewport", + "text-size": { + "base": 1, + "stops": [ + [ + 16, + 11 + ], + [ + 20, + 13 + ] + ] + } + }, + "metadata": { + "mapbox:group": "1444933372896.5967" + }, + "paint": { + "text-color": "hsl(26, 25%, 32%)", + "text-halo-blur": 0.5, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 0.5 + }, + "source": "composite", + "source-layer": "poi_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "in", + "maki", + "campsite", + "cemetery", + "dog-park", + "garden", + "golf", + "park", + "picnic-site", + "playground", + "zoo" + ], + [ + "==", + "scalerank", + 3 + ] + ], + "id": "poi-parks-scalerank3", + "layout": { + "icon-image": "{maki}-11", + "symbol-spacing": 250, + "text-anchor": "top", + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.01, + "text-line-height": 1.1, + "text-max-angle": 38, + "text-max-width": 8, + "text-offset": [ + 0, + 0.65 + ], + "text-padding": 2, + "text-rotation-alignment": "viewport", + "text-size": { + "base": 1, + "stops": [ + [ + 16, + 11 + ], + [ + 20, + 13 + ] + ] + } + }, + "metadata": { + "mapbox:group": "1444933372896.5967" + }, + "paint": { + "text-color": "hsl(100, 100%, 20%)", + "text-halo-blur": 0.5, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 0.5 + }, + "source": "composite", + "source-layer": "poi_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "!in", + "class", + "link", + "motorway", + "pedestrian", + "primary", + "secondary", + "street", + "street_limited", + "tertiary", + "trunk" + ] + ], + "id": "road-label-small", + "layout": { + "symbol-placement": "line", + "symbol-spacing": 250, + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Regular", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.01, + "text-max-angle": 30, + "text-padding": 1, + "text-rotation-alignment": "map", + "text-size": { + "base": 1, + "stops": [ + [ + 15, + 10 + ], + [ + 20, + 13 + ] + ] + } + }, + "metadata": { + "mapbox:group": "1444933721429.3076" + }, + "minzoom": 15, + "paint": { + "text-color": "hsl(0, 0%, 0%)", + "text-halo-blur": 1, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 1.25 + }, + "source": "composite", + "source-layer": "road_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "in", + "class", + "link", + "pedestrian", + "street", + "street_limited" + ] + ], + "id": "road-label-medium", + "layout": { + "symbol-placement": "line", + "symbol-spacing": 250, + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Regular", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.01, + "text-max-angle": 30, + "text-padding": 1, + "text-rotation-alignment": "map", + "text-size": { + "base": 1, + "stops": [ + [ + 11, + 10 + ], + [ + 20, + 14 + ] + ] + } + }, + "metadata": { + "mapbox:group": "1444933721429.3076" + }, + "minzoom": 11, + "paint": { + "text-color": "hsl(0, 0%, 0%)", + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 1 + }, + "source": "composite", + "source-layer": "road_label", + "type": "symbol" + }, + { + "filter": [ + "in", + "class", + "motorway", + "primary", + "secondary", + "tertiary", + "trunk" + ], + "id": "road-label-large", + "layout": { + "symbol-placement": "line", + "symbol-spacing": 250, + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Regular", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.01, + "text-max-angle": 30, + "text-padding": 1, + "text-rotation-alignment": "map", + "text-size": { + "base": 1, + "stops": [ + [ + 9, + 10 + ], + [ + 20, + 16 + ] + ] + } + }, + "metadata": { + "mapbox:group": "1444933721429.3076" + }, + "paint": { + "text-color": "hsl(0, 0%, 0%)", + "text-halo-blur": 1, + "text-halo-color": "hsla(0, 0%, 100%, 0.75)", + "text-halo-width": 1 + }, + "source": "composite", + "source-layer": "road_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "<=", + "reflen", + 6 + ], + [ + "!in", + "shield", + "at-expressway", + "at-motorway", + "at-state-b", + "bg-motorway", + "bg-national", + "ch-main", + "ch-motorway", + "cz-motorway", + "cz-road", + "de-motorway", + "e-road", + "fi-main", + "gr-motorway", + "gr-national", + "hr-motorway", + "hr-state", + "hu-main", + "hu-motorway", + "nz-state", + "pl-expressway", + "pl-motorway", + "pl-national", + "ro-county", + "ro-motorway", + "ro-national", + "rs-motorway", + "rs-state-1b", + "se-main", + "si-expressway", + "si-motorway", + "sk-highway", + "sk-road", + "us-interstate", + "us-interstate-business", + "us-interstate-duplex", + "us-interstate-truck", + "za-metropolitan", + "za-national", + "za-provincial", + "za-regional" + ] + ], + "id": "road-shields-black", + "layout": { + "icon-image": "{shield}-{reflen}", + "icon-padding": 2, + "icon-rotation-alignment": "viewport", + "symbol-placement": { + "base": 1, + "stops": [ + [ + 10, + "point" + ], + [ + 11, + "line" + ] + ] + }, + "symbol-spacing": { + "base": 1, + "stops": [ + [ + 11, + 150 + ], + [ + 14, + 200 + ] + ] + }, + "text-field": "{ref}", + "text-font": [ + "DIN Offc Pro Bold", + "Arial Unicode MS Bold" + ], + "text-letter-spacing": 0.05, + "text-max-angle": 38, + "text-padding": 2, + "text-rotation-alignment": "viewport", + "text-size": 9 + }, + "metadata": { + "mapbox:group": "1444933575858.6992" + }, + "paint": { + "icon-color": "white", + "icon-halo-color": "rgba(0, 0, 0, 1)", + "icon-halo-width": 1, + "text-color": "hsl(0, 0%, 7%)", + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 0, + "text-opacity": 1 + }, + "source": "composite", + "source-layer": "road_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "<=", + "reflen", + 6 + ], + [ + "in", + "shield", + "at-expressway", + "at-motorway", + "at-state-b", + "bg-motorway", + "bg-national", + "ch-main", + "ch-motorway", + "cz-motorway", + "cz-road", + "de-motorway", + "e-road", + "fi-main", + "gr-motorway", + "gr-national", + "hr-motorway", + "hr-state", + "hu-main", + "hu-motorway", + "nz-state", + "pl-expressway", + "pl-motorway", + "pl-national", + "ro-county", + "ro-motorway", + "ro-national", + "rs-motorway", + "rs-state-1b", + "se-main", + "si-expressway", + "si-motorway", + "sk-highway", + "sk-road", + "us-interstate", + "us-interstate-business", + "us-interstate-duplex", + "us-interstate-truck", + "za-metropolitan", + "za-national", + "za-provincial", + "za-regional" + ] + ], + "id": "road-shields-white", + "layout": { + "icon-image": "{shield}-{reflen}", + "icon-padding": 2, + "icon-rotation-alignment": "viewport", + "symbol-placement": { + "base": 1, + "stops": [ + [ + 10, + "point" + ], + [ + 11, + "line" + ] + ] + }, + "symbol-spacing": { + "base": 1, + "stops": [ + [ + 11, + 150 + ], + [ + 14, + 200 + ] + ] + }, + "text-field": "{ref}", + "text-font": [ + "DIN Offc Pro Bold", + "Arial Unicode MS Bold" + ], + "text-letter-spacing": 0.05, + "text-max-angle": 38, + "text-padding": 2, + "text-rotation-alignment": "viewport", + "text-size": 9 + }, + "metadata": { + "mapbox:group": "1444933575858.6992" + }, + "paint": { + "icon-color": "white", + "icon-halo-color": "rgba(0, 0, 0, 1)", + "icon-halo-width": 1, + "text-color": "hsl(0, 0%, 100%)", + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 0, + "text-opacity": 1 + }, + "source": "composite", + "source-layer": "road_label", + "type": "symbol" + }, + { + "filter": [ + ">", + "reflen", + 0 + ], + "id": "motorway-junction", + "layout": { + "icon-image": "motorway-exit-{reflen}", + "text-field": "{ref}", + "text-font": [ + "DIN Offc Pro Bold", + "Arial Unicode MS Bold" + ], + "text-size": 9 + }, + "metadata": { + "mapbox:group": "1444933575858.6992" + }, + "minzoom": 14, + "paint": { + "text-color": "hsl(0, 0%, 100%)", + "text-translate": [ + 0, + 0 + ] + }, + "source": "composite", + "source-layer": "motorway_junction", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "!in", + "maki", + "campsite", + "cemetery", + "dog-park", + "garden", + "golf", + "park", + "picnic-site", + "playground", + "zoo" + ], + [ + "==", + "scalerank", + 2 + ] + ], + "id": "poi-scalerank2", + "layout": { + "icon-image": { + "stops": [ + [ + 14, + "{maki}-11" + ], + [ + 15, + "{maki}-15" + ] + ] + }, + "symbol-spacing": 250, + "text-anchor": "top", + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.01, + "text-line-height": 1.1, + "text-max-angle": 38, + "text-max-width": 8, + "text-offset": [ + 0, + 0.65 + ], + "text-padding": 2, + "text-rotation-alignment": "viewport", + "text-size": { + "base": 1, + "stops": [ + [ + 14, + 11 + ], + [ + 20, + 14 + ] + ] + } + }, + "metadata": { + "mapbox:group": "1444933358918.2366" + }, + "paint": { + "text-color": "hsl(26, 25%, 32%)", + "text-halo-blur": 0.5, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 0.5 + }, + "source": "composite", + "source-layer": "poi_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "in", + "maki", + "campsite", + "cemetery", + "dog-park", + "garden", + "golf", + "park", + "picnic-site", + "playground", + "zoo" + ], + [ + "==", + "scalerank", + 2 + ] + ], + "id": "poi-parks-scalerank2", + "layout": { + "icon-image": { + "stops": [ + [ + 14, + "{maki}-11" + ], + [ + 15, + "{maki}-15" + ] + ] + }, + "symbol-spacing": 250, + "text-anchor": "top", + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.01, + "text-line-height": 1.1, + "text-max-angle": 38, + "text-max-width": 8, + "text-offset": [ + 0, + 0.65 + ], + "text-padding": 2, + "text-rotation-alignment": "viewport", + "text-size": { + "base": 1, + "stops": [ + [ + 14, + 11 + ], + [ + 20, + 14 + ] + ] + } + }, + "metadata": { + "mapbox:group": "1444933358918.2366" + }, + "paint": { + "text-color": "hsl(100, 100%, 20%)", + "text-halo-blur": 0.5, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 0.5 + }, + "source": "composite", + "source-layer": "poi_label", + "type": "symbol" + }, + { + "filter": [ + "!=", + "maki", + "entrance" + ], + "id": "rail-label", + "layout": { + "icon-image": "{network}", + "icon-padding": 0, + "symbol-spacing": 250, + "text-anchor": "top", + "text-field": { + "base": 1, + "stops": [ + [ + 0, + "" + ], + [ + 13, + "{name_en}" + ] + ] + }, + "text-font": [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.01, + "text-line-height": 1.1, + "text-max-width": 7, + "text-offset": [ + 0, + 0.85 + ], + "text-rotation-alignment": "viewport", + "text-size": { + "base": 1, + "stops": [ + [ + 16, + 11 + ], + [ + 20, + 13 + ] + ] + } + }, + "minzoom": 12, + "paint": { + "icon-halo-color": "#fff", + "icon-halo-width": 4, + "text-color": "hsl(230, 48%, 44%)", + "text-halo-blur": 0.5, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 0.5, + "text-opacity": { + "base": 1, + "stops": [ + [ + 13.99, + 0 + ], + [ + 14, + 1 + ] + ] + } + }, + "source": "composite", + "source-layer": "rail_station_label", + "type": "symbol" + }, + { + "filter": [ + "<=", + "area", + 10000 + ], + "id": "water-label-sm", + "layout": { + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Italic", + "Arial Unicode MS Regular" + ], + "text-max-width": 7, + "text-size": { + "base": 1, + "stops": [ + [ + 16, + 13 + ], + [ + 20, + 16 + ] + ] + } + }, + "metadata": { + "mapbox:group": "1444933808272.805" + }, + "minzoom": 15, + "paint": { + "text-color": "hsl(230, 48%, 44%)" + }, + "source": "composite", + "source-layer": "water_label", + "type": "symbol" + }, + { + "filter": [ + ">", + "area", + 10000 + ], + "id": "water-label", + "layout": { + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Italic", + "Arial Unicode MS Regular" + ], + "text-max-width": 7, + "text-size": { + "base": 1, + "stops": [ + [ + 13, + 13 + ], + [ + 18, + 18 + ] + ] + } + }, + "metadata": { + "mapbox:group": "1444933808272.805" + }, + "minzoom": 5, + "paint": { + "text-color": "hsl(230, 48%, 44%)" + }, + "source": "composite", + "source-layer": "water_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "in", + "$type", + "LineString", + "Point", + "Polygon" + ], + [ + "all", + [ + "<=", + "localrank", + 10 + ], + [ + "==", + "type", + "residential" + ] + ] + ], + "id": "place-residential", + "layout": { + "symbol-spacing": 250, + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Regular", + "Arial Unicode MS Regular" + ], + "text-line-height": 1.2, + "text-max-angle": 38, + "text-max-width": 7, + "text-offset": [ + 0, + 0 + ], + "text-padding": 2, + "text-rotation-alignment": "viewport", + "text-size": { + "base": 1, + "stops": [ + [ + 10, + 11 + ], + [ + 18, + 14 + ] + ] + }, + "visibility": "none" + }, + "maxzoom": 18, + "minzoom": 16, + "paint": { + "text-color": "hsl(26, 25%, 32%)", + "text-halo-blur": 0.5, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 1 + }, + "source": "composite", + "source-layer": "place_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "in", + "maki", + "campsite", + "cemetery", + "dog-park", + "garden", + "golf", + "park", + "picnic-site", + "playground", + "zoo" + ], + [ + "<=", + "scalerank", + 1 + ] + ], + "id": "poi-parks-scalerank1", + "layout": { + "icon-image": { + "stops": [ + [ + 13, + "{maki}-11" + ], + [ + 14, + "{maki}-15" + ] + ] + }, + "symbol-spacing": 250, + "text-anchor": "top", + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.01, + "text-line-height": 1.1, + "text-max-angle": 38, + "text-max-width": 8, + "text-offset": [ + 0, + 0.65 + ], + "text-padding": 2, + "text-rotation-alignment": "viewport", + "text-size": { + "base": 1, + "stops": [ + [ + 10, + 11 + ], + [ + 18, + 14 + ] + ] + } + }, + "metadata": { + "mapbox:group": "1444933322393.2852" + }, + "paint": { + "text-color": "hsl(100, 100%, 20%)", + "text-halo-blur": 0.5, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 0.5 + }, + "source": "composite", + "source-layer": "poi_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "!in", + "maki", + "campsite", + "cemetery", + "dog-park", + "garden", + "golf", + "park", + "picnic-site", + "playground", + "zoo" + ], + [ + "<=", + "scalerank", + 1 + ] + ], + "id": "poi-scalerank1", + "layout": { + "icon-image": { + "stops": [ + [ + 13, + "{maki}-11" + ], + [ + 14, + "{maki}-15" + ] + ] + }, + "symbol-spacing": 250, + "text-anchor": "top", + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.01, + "text-line-height": 1.1, + "text-max-angle": 38, + "text-max-width": 8, + "text-offset": [ + 0, + 0.65 + ], + "text-padding": 2, + "text-rotation-alignment": "viewport", + "text-size": { + "base": 1, + "stops": [ + [ + 10, + 11 + ], + [ + 18, + 14 + ] + ] + } + }, + "metadata": { + "mapbox:group": "1444933322393.2852" + }, + "paint": { + "text-color": "hsl(26, 25%, 32%)", + "text-halo-blur": 0.5, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 0.5 + }, + "source": "composite", + "source-layer": "poi_label", + "type": "symbol" + }, + { + "filter": [ + "<=", + "scalerank", + 2 + ], + "id": "airport-label", + "layout": { + "icon-image": { + "stops": [ + [ + 12, + "{maki}-11" + ], + [ + 13, + "{maki}-15" + ] + ] + }, + "symbol-spacing": 250, + "text-anchor": "top", + "text-field": { + "stops": [ + [ + 11, + "{ref}" + ], + [ + 12, + "{name_en}" + ] + ] + }, + "text-font": [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.01, + "text-line-height": 1.1, + "text-max-width": 9, + "text-offset": [ + 0, + 0.75 + ], + "text-padding": 2, + "text-rotation-alignment": "viewport", + "text-size": { + "base": 1, + "stops": [ + [ + 10, + 12 + ], + [ + 18, + 18 + ] + ] + } + }, + "minzoom": 9, + "paint": { + "text-color": "hsl(230, 48%, 44%)", + "text-halo-blur": 0.5, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 0.5 + }, + "source": "composite", + "source-layer": "airport_label", + "type": "symbol" + }, + { + "filter": [ + "in", + "type", + "aboriginal_lands", + "archipelago", + "islet" + ], + "id": "place-islet-archipelago-aboriginal", + "layout": { + "symbol-spacing": 250, + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Regular", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.01, + "text-line-height": 1.2, + "text-max-angle": 38, + "text-max-width": 8, + "text-offset": [ + 0, + 0 + ], + "text-padding": 2, + "text-rotation-alignment": "viewport", + "text-size": { + "base": 1, + "stops": [ + [ + 10, + 11 + ], + [ + 18, + 16 + ] + ] + } + }, + "maxzoom": 16, + "paint": { + "text-color": "hsl(230, 29%, 35%)", + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 1 + }, + "source": "composite", + "source-layer": "place_label", + "type": "symbol" + }, + { + "filter": [ + "==", + "type", + "neighbourhood" + ], + "id": "place-neighbourhood", + "layout": { + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Regular", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.1, + "text-max-width": 7, + "text-padding": 3, + "text-size": { + "base": 1, + "stops": [ + [ + 12, + 11 + ], + [ + 16, + 16 + ] + ] + }, + "text-transform": "uppercase" + }, + "maxzoom": 16, + "minzoom": 10, + "paint": { + "text-color": "hsl(230, 29%, 35%)", + "text-halo-blur": 0.5, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 1 + }, + "source": "composite", + "source-layer": "place_label", + "type": "symbol" + }, + { + "filter": [ + "==", + "type", + "suburb" + ], + "id": "place-suburb", + "layout": { + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Regular", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.15, + "text-max-width": 7, + "text-padding": 3, + "text-size": { + "base": 1, + "stops": [ + [ + 11, + 11 + ], + [ + 15, + 18 + ] + ] + }, + "text-transform": "uppercase" + }, + "maxzoom": 16, + "minzoom": 10, + "paint": { + "text-color": "hsl(230, 29%, 35%)", + "text-halo-blur": 0.5, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 1 + }, + "source": "composite", + "source-layer": "place_label", + "type": "symbol" + }, + { + "filter": [ + "==", + "type", + "hamlet" + ], + "id": "place-hamlet", + "layout": { + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Regular", + "Arial Unicode MS Regular" + ], + "text-size": { + "base": 1, + "stops": [ + [ + 12, + 11.5 + ], + [ + 15, + 16 + ] + ] + } + }, + "maxzoom": 16, + "minzoom": 10, + "paint": { + "text-color": "hsl(0, 0%, 0%)", + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 1.25 + }, + "source": "composite", + "source-layer": "place_label", + "type": "symbol" + }, + { + "filter": [ + "==", + "type", + "village" + ], + "id": "place-village", + "layout": { + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Regular", + "Arial Unicode MS Regular" + ], + "text-max-width": 7, + "text-size": { + "base": 1, + "stops": [ + [ + 10, + 11.5 + ], + [ + 16, + 18 + ] + ] + } + }, + "maxzoom": 15, + "minzoom": 8, + "paint": { + "text-color": "hsl(0, 0%, 0%)", + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 1.25 + }, + "source": "composite", + "source-layer": "place_label", + "type": "symbol" + }, + { + "filter": [ + "==", + "type", + "town" + ], + "id": "place-town", + "layout": { + "icon-image": "dot-9", + "text-anchor": { + "base": 1, + "stops": [ + [ + 7, + "bottom" + ], + [ + 8, + "center" + ] + ] + }, + "text-field": "{name_en}", + "text-font": { + "base": 1, + "stops": [ + [ + 11, + [ + "DIN Offc Pro Regular", + "Arial Unicode MS Regular" + ] + ], + [ + 12, + [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ] + ] + ] + }, + "text-max-width": 7, + "text-offset": { + "base": 1, + "stops": [ + [ + 7, + [ + 0, + -0.15 + ] + ], + [ + 8, + [ + 0, + 0 + ] + ] + ] + }, + "text-size": { + "base": 1, + "stops": [ + [ + 7, + 11.5 + ], + [ + 15, + 20 + ] + ] + } + }, + "maxzoom": 15, + "minzoom": 6, + "paint": { + "icon-opacity": { + "base": 1, + "stops": [ + [ + 7.99, + 1 + ], + [ + 8, + 0 + ] + ] + }, + "text-color": "hsl(0, 0%, 0%)", + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 1.25 + }, + "source": "composite", + "source-layer": "place_label", + "type": "symbol" + }, + { + "filter": [ + "==", + "type", + "island" + ], + "id": "place-island", + "layout": { + "symbol-spacing": 250, + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Regular", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.01, + "text-line-height": 1.2, + "text-max-angle": 38, + "text-max-width": 7, + "text-offset": [ + 0, + 0 + ], + "text-padding": 2, + "text-rotation-alignment": "viewport", + "text-size": { + "base": 1, + "stops": [ + [ + 10, + 11 + ], + [ + 18, + 16 + ] + ] + } + }, + "maxzoom": 16, + "paint": { + "text-color": "hsl(230, 29%, 35%)", + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 1 + }, + "source": "composite", + "source-layer": "place_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "!in", + "scalerank", + 0, + 1, + 2, + 3, + 4, + 5 + ], + [ + "==", + "type", + "city" + ] + ], + "id": "place-city-sm", + "layout": { + "icon-image": "dot-9", + "text-anchor": { + "base": 1, + "stops": [ + [ + 7, + "bottom" + ], + [ + 8, + "center" + ] + ] + }, + "text-field": "{name_en}", + "text-font": { + "base": 1, + "stops": [ + [ + 7, + [ + "DIN Offc Pro Regular", + "Arial Unicode MS Regular" + ] + ], + [ + 8, + [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ] + ] + ] + }, + "text-max-width": 7, + "text-offset": { + "base": 1, + "stops": [ + [ + 7.99, + [ + 0, + -0.2 + ] + ], + [ + 8, + [ + 0, + 0 + ] + ] + ] + }, + "text-size": { + "base": 1, + "stops": [ + [ + 6, + 12 + ], + [ + 14, + 22 + ] + ] + } + }, + "maxzoom": 14, + "metadata": { + "mapbox:group": "1444862510685.128" + }, + "paint": { + "icon-opacity": { + "base": 1, + "stops": [ + [ + 7.99, + 1 + ], + [ + 8, + 0 + ] + ] + }, + "text-color": "hsl(0, 0%, 0%)", + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 1.25 + }, + "source": "composite", + "source-layer": "place_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "in", + "ldir", + "E", + "S", + "SE", + "SW" + ], + [ + "in", + "scalerank", + 3, + 4, + 5 + ], + [ + "==", + "type", + "city" + ] + ], + "id": "place-city-md-s", + "layout": { + "icon-image": "dot-10", + "text-anchor": { + "base": 1, + "stops": [ + [ + 7, + "top" + ], + [ + 8, + "center" + ] + ] + }, + "text-field": "{name_en}", + "text-font": { + "base": 1, + "stops": [ + [ + 7, + [ + "DIN Offc Pro Regular", + "Arial Unicode MS Regular" + ] + ], + [ + 8, + [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ] + ] + ] + }, + "text-offset": { + "base": 1, + "stops": [ + [ + 7.99, + [ + 0, + 0.1 + ] + ], + [ + 8, + [ + 0, + 0 + ] + ] + ] + }, + "text-size": { + "base": 0.9, + "stops": [ + [ + 5, + 12 + ], + [ + 12, + 22 + ] + ] + } + }, + "maxzoom": 14, + "metadata": { + "mapbox:group": "1444862510685.128" + }, + "paint": { + "icon-opacity": { + "base": 1, + "stops": [ + [ + 7.99, + 1 + ], + [ + 8, + 0 + ] + ] + }, + "text-color": "hsl(0, 0%, 0%)", + "text-halo-blur": 1, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 1 + }, + "source": "composite", + "source-layer": "place_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "in", + "ldir", + "N", + "NE", + "NW", + "W" + ], + [ + "in", + "scalerank", + 3, + 4, + 5 + ], + [ + "==", + "type", + "city" + ] + ], + "id": "place-city-md-n", + "layout": { + "icon-image": "dot-10", + "text-anchor": { + "base": 1, + "stops": [ + [ + 7, + "bottom" + ], + [ + 8, + "center" + ] + ] + }, + "text-field": "{name_en}", + "text-font": { + "base": 1, + "stops": [ + [ + 7, + [ + "DIN Offc Pro Regular", + "Arial Unicode MS Regular" + ] + ], + [ + 8, + [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ] + ] + ] + }, + "text-max-width": 7, + "text-offset": { + "base": 1, + "stops": [ + [ + 7.99, + [ + 0, + -0.25 + ] + ], + [ + 8, + [ + 0, + 0 + ] + ] + ] + }, + "text-size": { + "base": 0.9, + "stops": [ + [ + 5, + 12 + ], + [ + 12, + 22 + ] + ] + } + }, + "maxzoom": 14, + "metadata": { + "mapbox:group": "1444862510685.128" + }, + "paint": { + "icon-opacity": { + "base": 1, + "stops": [ + [ + 7.99, + 1 + ], + [ + 8, + 0 + ] + ] + }, + "text-color": "hsl(0, 0%, 0%)", + "text-halo-blur": 1, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 1 + }, + "source": "composite", + "source-layer": "place_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "in", + "ldir", + "E", + "S", + "SE", + "SW" + ], + [ + "<=", + "scalerank", + 2 + ], + [ + "==", + "type", + "city" + ] + ], + "id": "place-city-lg-s", + "layout": { + "icon-image": "dot-11", + "text-anchor": { + "base": 1, + "stops": [ + [ + 7, + "top" + ], + [ + 8, + "center" + ] + ] + }, + "text-field": "{name_en}", + "text-font": { + "base": 1, + "stops": [ + [ + 7, + [ + "DIN Offc Pro Regular", + "Arial Unicode MS Regular" + ] + ], + [ + 8, + [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ] + ] + ] + }, + "text-max-width": 7, + "text-offset": { + "base": 1, + "stops": [ + [ + 7.99, + [ + 0, + 0.15 + ] + ], + [ + 8, + [ + 0, + 0 + ] + ] + ] + }, + "text-size": { + "base": 0.9, + "stops": [ + [ + 4, + 12 + ], + [ + 10, + 22 + ] + ] + } + }, + "maxzoom": 14, + "metadata": { + "mapbox:group": "1444862510685.128" + }, + "minzoom": 1, + "paint": { + "icon-opacity": { + "base": 1, + "stops": [ + [ + 7.99, + 1 + ], + [ + 8, + 0 + ] + ] + }, + "text-color": "hsl(0, 0%, 0%)", + "text-halo-blur": 1, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 1 + }, + "source": "composite", + "source-layer": "place_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "in", + "ldir", + "N", + "NE", + "NW", + "W" + ], + [ + "<=", + "scalerank", + 2 + ], + [ + "==", + "type", + "city" + ] + ], + "id": "place-city-lg-n", + "layout": { + "icon-image": "dot-11", + "text-anchor": { + "base": 1, + "stops": [ + [ + 7, + "bottom" + ], + [ + 8, + "center" + ] + ] + }, + "text-field": "{name_en}", + "text-font": { + "base": 1, + "stops": [ + [ + 7, + [ + "DIN Offc Pro Regular", + "Arial Unicode MS Regular" + ] + ], + [ + 8, + [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ] + ] + ] + }, + "text-max-width": 7, + "text-offset": { + "base": 1, + "stops": [ + [ + 7.99, + [ + 0, + -0.25 + ] + ], + [ + 8, + [ + 0, + 0 + ] + ] + ] + }, + "text-size": { + "base": 0.9, + "stops": [ + [ + 4, + 12 + ], + [ + 10, + 22 + ] + ] + } + }, + "maxzoom": 14, + "metadata": { + "mapbox:group": "1444862510685.128" + }, + "minzoom": 1, + "paint": { + "icon-opacity": { + "base": 1, + "stops": [ + [ + 7.99, + 1 + ], + [ + 8, + 0 + ] + ] + }, + "text-color": "hsl(0, 0%, 0%)", + "text-halo-blur": 1, + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 1, + "text-opacity": 1 + }, + "source": "composite", + "source-layer": "place_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + ">=", + "labelrank", + 4 + ] + ], + "id": "marine-label-sm-ln", + "layout": { + "symbol-placement": "line", + "symbol-spacing": { + "base": 1, + "stops": [ + [ + 4, + 100 + ], + [ + 6, + 400 + ] + ] + }, + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Italic", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.1, + "text-line-height": 1.1, + "text-max-width": 5, + "text-size": { + "base": 1, + "stops": [ + [ + 3, + 12 + ], + [ + 6, + 16 + ] + ] + } + }, + "maxzoom": 10, + "metadata": { + "mapbox:group": "1444856087950.3635" + }, + "minzoom": 3, + "paint": { + "text-color": "hsl(205, 83%, 88%)" + }, + "source": "composite", + "source-layer": "marine_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "Point" + ], + [ + ">=", + "labelrank", + 4 + ] + ], + "id": "marine-label-sm-pt", + "layout": { + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Italic", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.1, + "text-line-height": 1.5, + "text-max-width": 5, + "text-size": { + "base": 1, + "stops": [ + [ + 3, + 12 + ], + [ + 6, + 16 + ] + ] + } + }, + "maxzoom": 10, + "metadata": { + "mapbox:group": "1444856087950.3635" + }, + "minzoom": 3, + "paint": { + "text-color": "hsl(205, 83%, 88%)" + }, + "source": "composite", + "source-layer": "marine_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "in", + "labelrank", + 2, + 3 + ] + ], + "id": "marine-label-md-ln", + "layout": { + "symbol-placement": "line", + "symbol-spacing": 250, + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Italic", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.15, + "text-line-height": 1.1, + "text-max-width": 5, + "text-size": { + "base": 1.1, + "stops": [ + [ + 2, + 12 + ], + [ + 5, + 20 + ] + ] + } + }, + "maxzoom": 8, + "metadata": { + "mapbox:group": "1444856087950.3635" + }, + "minzoom": 2, + "paint": { + "text-color": "hsl(205, 83%, 88%)" + }, + "source": "composite", + "source-layer": "marine_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "Point" + ], + [ + "in", + "labelrank", + 2, + 3 + ] + ], + "id": "marine-label-md-pt", + "layout": { + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Italic", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.15, + "text-line-height": 1.5, + "text-max-width": 5, + "text-size": { + "base": 1.1, + "stops": [ + [ + 2, + 14 + ], + [ + 5, + 20 + ] + ] + } + }, + "maxzoom": 8, + "metadata": { + "mapbox:group": "1444856087950.3635" + }, + "minzoom": 2, + "paint": { + "text-color": "hsl(205, 83%, 88%)" + }, + "source": "composite", + "source-layer": "marine_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "LineString" + ], + [ + "==", + "labelrank", + 1 + ] + ], + "id": "marine-label-lg-ln", + "layout": { + "symbol-placement": "line", + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Italic", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.25, + "text-line-height": 1.1, + "text-max-width": 4, + "text-size": { + "base": 1, + "stops": [ + [ + 1, + 14 + ], + [ + 4, + 30 + ] + ] + } + }, + "maxzoom": 4, + "metadata": { + "mapbox:group": "1444856087950.3635" + }, + "minzoom": 1, + "paint": { + "text-color": "hsl(205, 83%, 88%)" + }, + "source": "composite", + "source-layer": "marine_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "==", + "$type", + "Point" + ], + [ + "==", + "labelrank", + 1 + ] + ], + "id": "marine-label-lg-pt", + "layout": { + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Italic", + "Arial Unicode MS Regular" + ], + "text-letter-spacing": 0.25, + "text-line-height": 1.5, + "text-max-width": 4, + "text-size": { + "base": 1, + "stops": [ + [ + 1, + 14 + ], + [ + 4, + 30 + ] + ] + } + }, + "maxzoom": 4, + "metadata": { + "mapbox:group": "1444856087950.3635" + }, + "minzoom": 1, + "paint": { + "text-color": "hsl(205, 83%, 88%)" + }, + "source": "composite", + "source-layer": "marine_label", + "type": "symbol" + }, + { + "filter": [ + "<", + "area", + 20000 + ], + "id": "state-label-sm", + "layout": { + "text-field": { + "base": 1, + "stops": [ + [ + 0, + "{abbr}" + ], + [ + 6, + "{name_en}" + ] + ] + }, + "text-font": [ + "DIN Offc Pro Bold", + "Arial Unicode MS Bold" + ], + "text-letter-spacing": 0.15, + "text-max-width": 5, + "text-size": { + "base": 1, + "stops": [ + [ + 6, + 10 + ], + [ + 9, + 14 + ] + ] + }, + "text-transform": "uppercase" + }, + "maxzoom": 9, + "metadata": { + "mapbox:group": "1444856151690.9143" + }, + "minzoom": 3, + "paint": { + "text-color": "hsl(0, 0%, 0%)", + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 1, + "text-opacity": 1 + }, + "source": "composite", + "source-layer": "state_label", + "type": "symbol" + }, + { + "filter": [ + "all", + [ + "<", + "area", + 80000 + ], + [ + ">=", + "area", + 20000 + ] + ], + "id": "state-label-md", + "layout": { + "text-field": { + "base": 1, + "stops": [ + [ + 0, + "{abbr}" + ], + [ + 5, + "{name_en}" + ] + ] + }, + "text-font": [ + "DIN Offc Pro Bold", + "Arial Unicode MS Bold" + ], + "text-letter-spacing": 0.15, + "text-max-width": 6, + "text-size": { + "base": 1, + "stops": [ + [ + 5, + 10 + ], + [ + 8, + 16 + ] + ] + }, + "text-transform": "uppercase" + }, + "maxzoom": 8, + "metadata": { + "mapbox:group": "1444856151690.9143" + }, + "minzoom": 3, + "paint": { + "text-color": "hsl(0, 0%, 0%)", + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 1, + "text-opacity": 1 + }, + "source": "composite", + "source-layer": "state_label", + "type": "symbol" + }, + { + "filter": [ + ">=", + "area", + 80000 + ], + "id": "state-label-lg", + "layout": { + "text-field": { + "base": 1, + "stops": [ + [ + 0, + "{abbr}" + ], + [ + 4, + "{name_en}" + ] + ] + }, + "text-font": [ + "DIN Offc Pro Bold", + "Arial Unicode MS Bold" + ], + "text-letter-spacing": 0.15, + "text-max-width": 6, + "text-padding": 1, + "text-size": { + "base": 1, + "stops": [ + [ + 4, + 10 + ], + [ + 7, + 18 + ] + ] + }, + "text-transform": "uppercase" + }, + "maxzoom": 7, + "metadata": { + "mapbox:group": "1444856151690.9143" + }, + "minzoom": 3, + "paint": { + "text-color": "hsl(0, 0%, 0%)", + "text-halo-color": "hsl(0, 0%, 100%)", + "text-halo-width": 1, + "text-opacity": 1 + }, + "source": "composite", + "source-layer": "state_label", + "type": "symbol" + }, + { + "filter": [ + ">=", + "scalerank", + 5 + ], + "id": "country-label-sm", + "layout": { + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ], + "text-max-width": 6, + "text-size": { + "base": 0.9, + "stops": [ + [ + 5, + 14 + ], + [ + 9, + 22 + ] + ] + } + }, + "maxzoom": 10, + "metadata": { + "mapbox:group": "1444856144497.7825" + }, + "minzoom": 1, + "paint": { + "text-color": "hsl(0, 0%, 0%)", + "text-halo-color": { + "base": 1, + "stops": [ + [ + 2, + "rgba(255,255,255,0.75)" + ], + [ + 3, + "hsl(0, 0%, 100%)" + ] + ] + }, + "text-halo-width": 1.25 + }, + "source": "composite", + "source-layer": "country_label", + "type": "symbol" + }, + { + "filter": [ + "in", + "scalerank", + 3, + 4 + ], + "id": "country-label-md", + "layout": { + "text-field": { + "base": 1, + "stops": [ + [ + 0, + "{code}" + ], + [ + 2, + "{name_en}" + ] + ] + }, + "text-font": [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ], + "text-max-width": 6, + "text-size": { + "base": 1, + "stops": [ + [ + 3, + 10 + ], + [ + 8, + 24 + ] + ] + } + }, + "maxzoom": 8, + "metadata": { + "mapbox:group": "1444856144497.7825" + }, + "minzoom": 1, + "paint": { + "text-color": "hsl(0, 0%, 0%)", + "text-halo-color": { + "base": 1, + "stops": [ + [ + 2, + "rgba(255,255,255,0.75)" + ], + [ + 3, + "hsl(0, 0%, 100%)" + ] + ] + }, + "text-halo-width": 1.25 + }, + "source": "composite", + "source-layer": "country_label", + "type": "symbol" + }, + { + "filter": [ + "in", + "scalerank", + 1, + 2 + ], + "id": "country-label-lg", + "layout": { + "text-field": "{name_en}", + "text-font": [ + "DIN Offc Pro Medium", + "Arial Unicode MS Regular" + ], + "text-max-width": { + "base": 1, + "stops": [ + [ + 0, + 5 + ], + [ + 3, + 6 + ] + ] + }, + "text-size": { + "base": 1, + "stops": [ + [ + 1, + 10 + ], + [ + 6, + 24 + ] + ] + } + }, + "maxzoom": 7, + "metadata": { + "mapbox:group": "1444856144497.7825" + }, + "minzoom": 1, + "paint": { + "text-color": "hsl(0, 0%, 0%)", + "text-halo-color": { + "base": 1, + "stops": [ + [ + 2, + "rgba(255,255,255,0.75)" + ], + [ + 3, + "hsl(0, 0%, 100%)" + ] + ] + }, + "text-halo-width": 1.25 + }, + "source": "composite", + "source-layer": "country_label", + "type": "symbol" + }, + { + "id": "testlayer", + "type": "symbol", + "source": "testsource", + "layout": { + "icon-image": "test-icon" + } + } + ], + "metadata": { + "mapbox:autocomposite": true, + "mapbox:groups": { + "1444855769305.6016": { + "collapsed": true, + "name": "Tunnels" + }, + "1444855786460.0557": { + "collapsed": true, + "name": "Roads" + }, + "1444855799204.86": { + "collapsed": true, + "name": "Bridges" + }, + "1444856087950.3635": { + "collapsed": true, + "name": "Marine labels" + }, + "1444856144497.7825": { + "collapsed": true, + "name": "Country labels" + }, + "1444856151690.9143": { + "collapsed": true, + "name": "State labels" + }, + "1444862510685.128": { + "collapsed": true, + "name": "City labels" + }, + "1444933322393.2852": { + "collapsed": true, + "name": "POI labels (scalerank 1)" + }, + "1444933358918.2366": { + "collapsed": true, + "name": "POI labels (scalerank 2)" + }, + "1444933372896.5967": { + "collapsed": true, + "name": "POI labels (scalerank 3)" + }, + "1444933456003.5437": { + "collapsed": true, + "name": "POI labels (scalerank 4)" + }, + "1444933575858.6992": { + "collapsed": true, + "name": "Highway shields" + }, + "1444933721429.3076": { + "collapsed": true, + "name": "Road labels" + }, + "1444933808272.805": { + "collapsed": true, + "name": "Water labels" + }, + "1444934295202.7542": { + "collapsed": true, + "name": "Admin boundaries" + }, + "1444934828655.3389": { + "collapsed": true, + "name": "Aeroways" + }, + "1456969573402.7817": { + "collapsed": true, + "name": "Hillshading" + }, + "1456970288113.8113": { + "collapsed": true, + "name": "Landcover" + } + }, + "mapbox:type": "default" + }, + "modified": 0, + "name": "Mapbox Streets", + "owner": "mapbox", + "sources": { + "composite": { + "type": "vector", + "url": "mapbox://mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v7" + }, + "testsource": { + "type": "geojson", + "data": { + "type": "Point", + "coordinates": [ + -73.992857, + 40.726989 + ] + } + } + }, + "sprite": "mapbox://sprites/mapbox/streets-v9", + "version": 8 +} diff --git a/benchmark/parse/filter.cpp b/benchmark/parse/filter.benchmark.cpp similarity index 100% rename from benchmark/parse/filter.cpp rename to benchmark/parse/filter.benchmark.cpp diff --git a/benchmark/src/mbgl/benchmark/util.cpp b/benchmark/src/mbgl/benchmark/util.cpp new file mode 100644 index 00000000000..a8f71f12067 --- /dev/null +++ b/benchmark/src/mbgl/benchmark/util.cpp @@ -0,0 +1,22 @@ +#include + +#include +#include +#include + +namespace mbgl { +namespace benchmark { + +void render(Map& map) { + PremultipliedImage result; + map.renderStill([&result](std::exception_ptr, PremultipliedImage&& image) { + result = std::move(image); + }); + + while (!result.size()) { + util::RunLoop::Get()->runOnce(); + } +} + +} // namespace benchmark +} // namespace mbgl diff --git a/benchmark/src/mbgl/benchmark/util.hpp b/benchmark/src/mbgl/benchmark/util.hpp new file mode 100644 index 00000000000..759015e0e30 --- /dev/null +++ b/benchmark/src/mbgl/benchmark/util.hpp @@ -0,0 +1,12 @@ +#pragma once + +namespace mbgl { + +class Map; + +namespace benchmark { + +void render(Map&); + +} // namespace benchmark +} // namespace mbgl diff --git a/cmake/benchmark-files.cmake b/cmake/benchmark-files.cmake new file mode 100644 index 00000000000..0306340fe0e --- /dev/null +++ b/cmake/benchmark-files.cmake @@ -0,0 +1,20 @@ +# Do not edit. Regenerate this with ./scripts/generate-benchmark-files.sh + +set(MBGL_BENCHMARK_FILES + # api + benchmark/api/query.benchmark.cpp + + # include/mbgl + benchmark/include/mbgl/benchmark.hpp + + # parse + benchmark/parse/filter.benchmark.cpp + + # src + benchmark/src/main.cpp + + # src/mbgl/benchmark + benchmark/src/mbgl/benchmark/benchmark.cpp + benchmark/src/mbgl/benchmark/util.cpp + benchmark/src/mbgl/benchmark/util.hpp +) diff --git a/cmake/benchmark.cmake b/cmake/benchmark.cmake new file mode 100644 index 00000000000..79da54459e2 --- /dev/null +++ b/cmake/benchmark.cmake @@ -0,0 +1,32 @@ +add_executable(mbgl-benchmark + ${MBGL_BENCHMARK_FILES} +) + +target_compile_options(mbgl-benchmark + PRIVATE -fvisibility-inlines-hidden +) + +target_include_directories(mbgl-benchmark + PRIVATE include + PRIVATE src # TODO: eliminate + PRIVATE benchmark/include + PRIVATE benchmark/src + PRIVATE platform/default +) + +if(DEFINED ENV{CI}) + target_compile_definitions(mbgl-benchmark + PRIVATE -DCI_BUILD=1 + ) +endif() + +target_link_libraries(mbgl-benchmark + PRIVATE mbgl-core +) + +target_add_mason_package(mbgl-benchmark PRIVATE benchmark) +target_add_mason_package(mbgl-benchmark PRIVATE rapidjson) + +mbgl_platform_benchmark() + +create_source_groups(mbgl-benchmark) diff --git a/cmake/test-files.cmake b/cmake/test-files.cmake index 74dc6050326..e98e993fe88 100644 --- a/cmake/test-files.cmake +++ b/cmake/test-files.cmake @@ -15,6 +15,7 @@ set(MBGL_TEST_FILES test/api/annotations.test.cpp test/api/api_misuse.test.cpp test/api/custom_layer.test.cpp + test/api/query.test.cpp test/api/render_missing.test.cpp test/api/repeated_render.test.cpp diff --git a/platform/linux/config.cmake b/platform/linux/config.cmake index 24bb5ede0cd..050a03bcb25 100644 --- a/platform/linux/config.cmake +++ b/platform/linux/config.cmake @@ -7,6 +7,7 @@ mason_use(libpng VERSION 1.6.25) mason_use(libjpeg-turbo VERSION 1.5.0) mason_use(webp VERSION 0.5.1) mason_use(gtest VERSION 1.7.0${MASON_CXXABI_SUFFIX}) +mason_use(benchmark VERSION 1.0.0) include(cmake/loop-uv.cmake) @@ -102,6 +103,23 @@ macro(mbgl_platform_test) endmacro() +macro(mbgl_platform_benchmark) + target_sources(mbgl-benchmark + PRIVATE benchmark/src/main.cpp + ) + + set_source_files_properties( + benchmark/src/main.cpp + PROPERTIES + COMPILE_FLAGS -DWORK_DIRECTORY="${CMAKE_SOURCE_DIR}" + ) + + target_link_libraries(mbgl-benchmark + PRIVATE mbgl-loop + ) +endmacro() + + macro(mbgl_platform_node) # Enabling node module by defining this macro endmacro() diff --git a/scripts/generate-benchmark-files.sh b/scripts/generate-benchmark-files.sh new file mode 100755 index 00000000000..0fb274cf311 --- /dev/null +++ b/scripts/generate-benchmark-files.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail + +echo "# Do not edit. Regenerate this with ./scripts/generate-benchmark-files.sh" > cmake/benchmark-files.cmake +echo "" >> cmake/benchmark-files.cmake +echo "set(MBGL_BENCHMARK_FILES" >> cmake/benchmark-files.cmake +PREFIX= +for FILE in $(git ls-files "benchmark/*.hpp" "benchmark/*.cpp" "benchmark/*.h" "benchmark/*.c" | sort) ; do + CURRENT_PREFIX=$(dirname ${FILE#benchmark/}) + if [ "${PREFIX}" != "${CURRENT_PREFIX}" ]; then + if [ ! -z "${PREFIX}" ]; then echo "" >> cmake/benchmark-files.cmake ; fi + echo " # ${CURRENT_PREFIX}" >> cmake/benchmark-files.cmake + PREFIX="${CURRENT_PREFIX}" + fi + echo " ${FILE}" >> cmake/benchmark-files.cmake +done +echo ")" >> cmake/benchmark-files.cmake +git diff cmake/benchmark-files.cmake diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp index 50de887dbc0..522965b953c 100644 --- a/src/mbgl/style/style.cpp +++ b/src/mbgl/style/style.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -393,10 +394,23 @@ RenderData Style::getRenderData(MapDebugOptions debugOptions) const { } std::vector Style::queryRenderedFeatures(const QueryParameters& parameters) const { + std::unordered_set sourceFilter; + + if (parameters.layerIDs) { + for (const auto& layerID : *parameters.layerIDs) { + auto layer = getLayer(layerID); + if (layer) sourceFilter.emplace(layer->baseImpl->source); + } + } + std::vector result; std::unordered_map> resultsByLayer; for (const auto& source : sources) { + if (!sourceFilter.empty() && sourceFilter.find(source->getID()) == sourceFilter.end()) { + continue; + } + auto sourceResults = source->baseImpl->queryRenderedFeatures(parameters); std::move(sourceResults.begin(), sourceResults.end(), std::inserter(resultsByLayer, resultsByLayer.begin())); } diff --git a/test/api/query.test.cpp b/test/api/query.test.cpp new file mode 100644 index 00000000000..7da0f4311c8 --- /dev/null +++ b/test/api/query.test.cpp @@ -0,0 +1,62 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace mbgl; + +namespace { + +class QueryTest { +public: + QueryTest() { + auto decoded = decodeImage(util::read_file("test/fixtures/sprites/default_marker.png")); + auto image = std::make_unique(std::move(decoded), 1.0); + + map.setStyleJSON(util::read_file("test/fixtures/api/query_style.json")); + map.addImage("test-icon", std::move(image)); + + test::render(map); + } + + util::RunLoop loop; + std::shared_ptr display { std::make_shared() }; + HeadlessView view { display, 1 }; + StubFileSource fileSource; + Map map { view, fileSource, MapMode::Still }; +}; + +} // end namespace + +TEST(Query, QueryRenderedFeatures) { + QueryTest test; + + auto features1 = test.map.queryRenderedFeatures(test.map.pixelForLatLng({ 0, 0 })); + EXPECT_EQ(features1.size(), 3u); + + auto features2 = test.map.queryRenderedFeatures(test.map.pixelForLatLng({ 9, 9 })); + EXPECT_EQ(features2.size(), 0u); +} + +TEST(Query, QueryRenderedFeaturesFilterLayer) { + QueryTest test; + + auto zz = test.map.pixelForLatLng({ 0, 0 }); + + auto features1 = test.map.queryRenderedFeatures(zz, {{ "layer1"}}); + EXPECT_EQ(features1.size(), 1u); + + auto features2 = test.map.queryRenderedFeatures(zz, {{ "layer1", "layer2" }}); + EXPECT_EQ(features2.size(), 2u); + + auto features3 = test.map.queryRenderedFeatures(zz, {{ "foobar" }}); + EXPECT_EQ(features3.size(), 0u); + + auto features4 = test.map.queryRenderedFeatures(zz, {{ "foobar", "layer3" }}); + EXPECT_EQ(features4.size(), 1u); +} diff --git a/test/fixtures/api/query_style.json b/test/fixtures/api/query_style.json new file mode 100644 index 00000000000..6978e1ba1b6 --- /dev/null +++ b/test/fixtures/api/query_style.json @@ -0,0 +1,61 @@ +{ + "version": 8, + "sources": { + "source1": { + "type": "geojson", + "data": { + "type": "Point", + "coordinates": [ + 0, + 0 + ] + } + }, + "source2": { + "type": "geojson", + "data": { + "type": "Point", + "coordinates": [ + 0, + 0 + ] + } + }, + "source3": { + "type": "geojson", + "data": { + "type": "Point", + "coordinates": [ + 0, + 0 + ] + } + } + }, + "layers": [ + { + "id": "layer1", + "type": "symbol", + "source": "source1", + "layout": { + "icon-image": "test-icon" + } + }, + { + "id": "layer2", + "type": "symbol", + "source": "source2", + "layout": { + "icon-image": "test-icon" + } + }, + { + "id": "layer3", + "type": "symbol", + "source": "source3", + "layout": { + "icon-image": "test-icon" + } + } + ] +}