[Feature Request] Add Open Cycle Maps to default Map Layer
Summary As cyclists are also target users of wanderer it would be useful to have Open Cycle Maps as a additional layer on the layer selection. https://www.thunderforest.com/maps/opencyclemap/
POC I did a little POC by help of github pilot and added it to mapStyles in: web/src/lib/components/trail/map_with_elevation_maplibre.svelte
... { text: "Carto Dark", value: "https://basemaps.cartocdn.com/gl/dark-matter-gl-style/style.json", thumbnail: "https://basemaps.cartocdn.com/dark_all/1/0/[email protected]", }, { text: "Open Cycle Maps", value: { version: 8, sources: { "opencyclemap-tiles": { type: "raster", tiles: [ "https://tile.thunderforest.com/cycle/{z}/{x}/{y}.png?apikey=<API_KEY>", ], tileSize: 256, }, }, layers: [ { id: "opencyclemap-layer", type: "raster", source: "opencyclemap-tiles", }, ], }, thumbnail: "https://tile.thunderforest.com/cycle/1/0/0.png", }, ...
This works for me locally. But as you can see theres a API_KEY needed which needs to be stored i guess in some environment variable. As I'm not familiar enough with your project structure to provide a proper PR I created this feature request. Probably you could pick up the work.
EDIT: I tried a little bit around with setting it inside .env file and building it with vite (what actually worked). I guess that because of the API_KEY is needed in frontend it needs to be provided at build time which makes it complex when it comes to the strategy to roll out wanderer by prebuild docker images. Setting it inside the docker-compose file and reading it didn't worked. I saw that there is already a option in settings to configure custom map layer. But unfortunately this is limited to a specific user
Thank you and keep up this great project!
I opened a PR for this
https://github.com/Flomp/wanderer/pull/302
Hey there,
The big problem that I see is that ThunderForest does not provide OpenCycleMaps as a vector tileset but only as a raster map: https://www.thunderforest.com/docs/vector-styles-api/#5/51.51/-0.09
wanderer moved to vector tilesets for performance reasons. What I suggest is that you create your own custom style.json and put it somewhere where you can reference it as a URL from wanderer. Then you can simply add it as a normal tileset via the settings within wanderer.
E.g.:
{
"version": 8,
"sources": {
"ocm-tiles": {
"type": "raster",
"tiles": [
"https://tile.thunderforest.com/cycle/{z}/{x}/{y}.png?apikey=<YOUR_API_KEY_HERE>"
],
"tileSize": 256
},
"outdoors": {
"type": "vector",
"url": "https://tile.thunderforest.com/thunderforest.outdoors-v2.json?apikey=<YOUR_API_KEY_HERE>",
"attribution": "<a href=\"https://www.thunderforest.com/\" target=\"_blank\">© Thunderforest</a> <a href=\"https://www.openstreetmap.org/copyright\" target=\"_blank\">© OpenStreetMap contributors</a>"
}
},
"glyphs": "https://tiles.basemaps.cartocdn.com/fonts/{fontstack}/{range}.pbf",
"layers": [
{
"paint": {
"background-color": "#f2eee7"
},
"id": "background",
"source": "outdoors",
"source-layer": "background",
"type": "background"
},
{
"paint": {
"fill-opacity": 0.9,
"fill-color": "#a8d4f3"
},
"id": "landcover-lowzoom__1",
"source": "outdoors",
"source-layer": "landcover-lowzoom",
"type": "fill",
"filter": [
"==",
[
"get",
"value"
],
0
],
"minzoom": 0,
"maxzoom": 5
},
{
"paint": {
"fill-opacity": 0.9,
"fill-color": "#daeacb"
},
"id": "landcover-lowzoom__2",
"source": "outdoors",
"source-layer": "landcover-lowzoom",
"type": "fill",
"filter": [
"in",
[
"get",
"value"
],
[
"literal",
[
1,
2,
3,
4,
5
]
]
],
"minzoom": 0,
"maxzoom": 9
},
{
"paint": {
"fill-opacity": 0.9,
"fill-color": "#ebe5da"
},
"id": "landcover-lowzoom__3",
"source": "outdoors",
"source-layer": "landcover-lowzoom",
"type": "fill",
"filter": [
"==",
[
"get",
"value"
],
13
],
"minzoom": 0,
"maxzoom": 9
},
{
"paint": {
"fill-opacity": 0.9,
"fill-color": "#f5faff"
},
"id": "landcover-lowzoom__4",
"source": "outdoors",
"source-layer": "landcover-lowzoom",
"type": "fill",
"filter": [
"==",
[
"get",
"value"
],
15
],
"minzoom": 0,
"maxzoom": 9
},
{
"paint": {
"fill-color": "#daeacb"
},
"source-layer": "landuse",
"id": "parks",
"source": "outdoors",
"type": "fill",
"filter": [
"in",
[
"get",
"type"
],
[
"literal",
[
"park",
"garden",
"common",
"golf_course",
"pitch",
"cemetery",
"recreation_ground",
"village_green"
]
]
],
"minzoom": 9,
"maxzoom": 22
},
{
"paint": {
"fill-color": "#d5e7c4"
},
"source-layer": "landuse",
"id": "parks__1",
"source": "outdoors",
"type": "fill",
"filter": [
"all",
[
"==",
[
"get",
"type"
],
"pitch"
],
[
"in",
[
"get",
"type"
],
[
"literal",
[
"park",
"garden",
"common",
"golf_course",
"pitch",
"cemetery",
"recreation_ground",
"village_green"
]
]
]
],
"minzoom": 14,
"maxzoom": 22
},
{
"paint": {
"fill-color": "#efeae1"
},
"source-layer": "landuse",
"id": "built_up",
"source": "outdoors",
"type": "fill",
"filter": [
"in",
[
"get",
"type"
],
[
"literal",
[
"industrial",
"residential",
"commercial"
]
]
],
"minzoom": 9,
"maxzoom": 22
},
{
"paint": {
"fill-color": "#f0ebe3"
},
"source-layer": "landuse",
"id": "built_up__1",
"source": "outdoors",
"type": "fill",
"filter": [
"in",
[
"get",
"type"
],
[
"literal",
[
"industrial",
"residential",
"commercial"
]
]
],
"minzoom": 13,
"maxzoom": 14
},
{
"paint": {
"fill-color": "#f1ede5"
},
"source-layer": "landuse",
"id": "built_up__2",
"source": "outdoors",
"type": "fill",
"filter": [
"in",
[
"get",
"type"
],
[
"literal",
[
"industrial",
"residential",
"commercial"
]
]
],
"minzoom": 14,
"maxzoom": 22
},
{
"paint": {
"fill-color": "#d5e7c4"
},
"source-layer": "landcover",
"id": "woodland__1",
"source": "outdoors",
"type": "fill",
"filter": [
"in",
[
"get",
"type"
],
[
"literal",
[
"wood",
"forest",
"orchard"
]
]
],
"minzoom": 9,
"maxzoom": 22
},
{
"paint": {
"fill-color": "#daeacb"
},
"source-layer": "landcover",
"id": "woodland__2",
"source": "outdoors",
"type": "fill",
"filter": [
"in",
[
"get",
"type"
],
[
"literal",
[
"scrub",
"heath",
"grassland",
"vineyard",
"grass",
"meadow"
]
]
],
"minzoom": 9,
"maxzoom": 22
},
{
"paint": {
"fill-color": "#f5faff"
},
"id": "glacier",
"source": "outdoors",
"source-layer": "glacier",
"type": "fill",
"minzoom": 9,
"maxzoom": 22
},
{
"paint": {
"line-color": "#e1e5e1",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
11,
2,
12,
7,
14,
18
]
},
"id": "aeroway",
"source": "outdoors",
"source-layer": "aeroway",
"type": "line",
"filter": [
"==",
[
"get",
"aeroway"
],
"runway"
],
"minzoom": 11,
"maxzoom": 22
},
{
"paint": {
"line-color": "#e1e5e1",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
11,
1,
12,
4,
14,
6
]
},
"source-layer": "aeroway",
"id": "aeroway_taxiway",
"source": "outdoors",
"type": "line",
"filter": [
"==",
[
"get",
"aeroway"
],
"taxiway"
],
"minzoom": 11,
"maxzoom": 22
},
{
"paint": {
"fill-color": "#e9e9e4"
},
"id": "aeroway-area",
"source": "outdoors",
"source-layer": "aeroway-area",
"type": "fill",
"minzoom": 10,
"maxzoom": 22
},
{
"paint": {
"fill-color": "#a8d4f3"
},
"id": "ocean",
"source": "outdoors",
"source-layer": "ocean",
"type": "fill",
"minzoom": 5,
"maxzoom": 22
},
{
"paint": {
"fill-color": "#a8d4f3"
},
"id": "water",
"source": "outdoors",
"source-layer": "water",
"type": "fill",
"filter": [
"any",
[
"all",
[
"<",
[
"zoom"
],
11
],
[
">",
[
"get",
"way_area"
],
[
"*",
[
"^",
2,
[
"-",
11,
[
"zoom"
]
]
],
100000
]
]
],
[
">=",
[
"zoom"
],
11
]
],
"minzoom": 5,
"maxzoom": 22
},
{
"paint": {
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
10,
0.3,
13,
1.2,
16,
7
],
"line-color": "#a8d4f3"
},
"id": "waterway",
"source": "outdoors",
"source-layer": "waterway",
"type": "line",
"filter": [
"in",
[
"get",
"waterway"
],
[
"literal",
[
"river",
"canal"
]
]
],
"minzoom": 10,
"maxzoom": 22
},
{
"paint": {
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
13,
0.9,
16,
4
],
"line-color": "#a8d4f3"
},
"source-layer": "waterway",
"id": "waterway_small",
"source": "outdoors",
"type": "line",
"filter": [
"in",
[
"get",
"waterway"
],
[
"literal",
[
"stream",
"ditch",
"drain"
]
]
],
"minzoom": 13,
"maxzoom": 22
},
{
"paint": {
"line-color": "#f2eee7",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
14,
1,
20,
14
]
},
"id": "water-feature",
"source": "outdoors",
"source-layer": "water-feature",
"type": "line",
"filter": [
"all",
[
"in",
[
"geometry-type"
],
[
"literal",
[
"LineString",
"MultiLineString"
]
]
],
[
"in",
[
"get",
"type"
],
[
"literal",
[
"pier",
"breakwater",
"groyne"
]
]
]
],
"minzoom": 14,
"maxzoom": 22
},
{
"paint": {
"fill-color": "#f2eee7"
},
"source-layer": "water-feature",
"id": "water_feature_polygon",
"source": "outdoors",
"type": "fill",
"filter": [
"all",
[
"in",
[
"geometry-type"
],
[
"literal",
[
"Polygon",
"MultiPolygon"
]
]
],
[
"in",
[
"get",
"type"
],
[
"literal",
[
"pier",
"breakwater",
"groyne"
]
]
]
],
"minzoom": 14,
"maxzoom": 22
},
{
"paint": {
"line-width": [
"interpolate",
[
"linear"
],
[
"zoom"
],
2,
0.5,
6,
1
],
"line-color": "#bbbbbb"
},
"id": "country-line",
"source": "outdoors",
"source-layer": "country-line",
"type": "line",
"minzoom": 2,
"maxzoom": 8
},
{
"paint": {
"line-width": 1,
"line-color": "#bbbbbb"
},
"id": "admin",
"source": "outdoors",
"source-layer": "admin",
"type": "line",
"filter": [
"==",
[
"get",
"admin_level"
],
"2"
],
"minzoom": 8,
"maxzoom": 22
},
{
"paint": {
"line-color": "#bbbbbb",
"line-width": 0.5,
"line-dasharray": [
3,
3
]
},
"id": "state-line",
"source": "outdoors",
"source-layer": "state-line",
"type": "line",
"filter": [
"in",
[
"get",
"adm0_a3"
],
[
"literal",
[
"USA",
"CAN",
"AUS"
]
]
],
"minzoom": 3,
"maxzoom": 9
},
{
"paint": {
"line-color": "#75bbe5",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
15,
1,
17,
2
],
"line-dasharray": [
6,
6
]
},
"id": "ferry",
"source": "outdoors",
"source-layer": "ferry",
"type": "line",
"minzoom": 15,
"maxzoom": 22
},
{
"paint": {
"fill-color": [
"interpolate",
[
"linear"
],
[
"zoom"
],
13,
"#f4e6d5",
14,
"#f5e9d9"
]
},
"id": "building",
"source": "outdoors",
"source-layer": "building",
"type": "fill",
"minzoom": 14,
"maxzoom": 22
},
{
"paint": {
"line-width": 0.7,
"line-color": "#d7cdbe"
},
"source-layer": "building",
"id": "building_line",
"source": "outdoors",
"type": "line",
"minzoom": 15,
"maxzoom": 22
},
{
"paint": {
"line-color": "#cccccc",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
7,
2,
9,
4,
16,
14.5,
22,
75
]
},
"source-layer": "road",
"id": "road_casing__1",
"source": "outdoors",
"type": "line",
"filter": [
"in",
[
"get",
"highway"
],
[
"literal",
[
"motorway"
]
]
],
"minzoom": 7,
"maxzoom": 22
},
{
"paint": {
"line-color": "#cccccc",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
7,
2,
9,
3,
16,
14.5,
22,
75
]
},
"source-layer": "road",
"id": "road_casing__2",
"source": "outdoors",
"type": "line",
"filter": [
"in",
[
"get",
"highway"
],
[
"literal",
[
"trunk",
"primary"
]
]
],
"minzoom": 10,
"maxzoom": 22
},
{
"paint": {
"line-color": "#cccccc",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
7,
2,
9,
2,
16,
12.5,
22,
75
]
},
"source-layer": "road",
"id": "road_casing__3",
"source": "outdoors",
"type": "line",
"filter": [
"==",
[
"get",
"highway"
],
"secondary"
],
"minzoom": 10,
"maxzoom": 22
},
{
"paint": {
"line-color": "#cccccc",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
7,
1,
9,
1,
16,
9,
22,
45
]
},
"source-layer": "road",
"id": "road_casing__4",
"source": "outdoors",
"type": "line",
"filter": [
"in",
[
"get",
"highway"
],
[
"literal",
[
"motorway_link",
"trunk_link",
"primary_link",
"secondary_link"
]
]
],
"minzoom": 10,
"maxzoom": 22
},
{
"paint": {
"line-color": "#cccccc",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
12,
3.5,
16,
8,
22,
55
]
},
"source-layer": "road",
"id": "road_casing__5",
"source": "outdoors",
"type": "line",
"filter": [
"==",
[
"get",
"highway"
],
"tertiary"
],
"minzoom": 12,
"maxzoom": 22
},
{
"paint": {
"line-color": "#cccccc",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
13,
2.5,
16,
8,
22,
55
]
},
"source-layer": "road",
"id": "road_casing__6",
"source": "outdoors",
"type": "line",
"filter": [
"in",
[
"get",
"highway"
],
[
"literal",
[
"track",
"residential",
"unclassified",
"living_street"
]
]
],
"minzoom": 14,
"maxzoom": 22
},
{
"paint": {
"line-color": "#cccccc",
"line-width": [
"interpolate",
[
"linear"
],
[
"zoom"
],
13,
3,
22,
6
]
},
"source-layer": "road",
"id": "road_casing__7",
"source": "outdoors",
"type": "line",
"filter": [
"in",
[
"get",
"highway"
],
[
"literal",
[
"service"
]
]
],
"minzoom": 14,
"maxzoom": 22
},
{
"paint": {
"line-color": "#ffffff",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
7,
1,
9,
2.5,
16,
12,
22,
70
]
},
"id": "road__1",
"source": "outdoors",
"source-layer": "road",
"type": "line",
"filter": [
"==",
[
"get",
"highway"
],
"motorway"
],
"minzoom": 6,
"maxzoom": 22
},
{
"paint": {
"line-color": "#ffffff",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
7,
0.5,
8,
1,
9,
1.5,
16,
12,
22,
70
]
},
"id": "road__2",
"source": "outdoors",
"source-layer": "road",
"type": "line",
"filter": [
"==",
[
"get",
"highway"
],
"trunk"
],
"minzoom": 7,
"maxzoom": 22
},
{
"paint": {
"line-color": "#ffffff",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
7,
0.5,
8,
1,
9,
1.5,
16,
12,
22,
70
]
},
"id": "road__3",
"source": "outdoors",
"source-layer": "road",
"type": "line",
"filter": [
"==",
[
"get",
"highway"
],
"primary"
],
"minzoom": 8,
"maxzoom": 22
},
{
"paint": {
"line-color": "#ffffff",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
9,
0.6,
10,
2,
16,
10,
22,
70
]
},
"id": "road__4",
"source": "outdoors",
"source-layer": "road",
"type": "line",
"filter": [
"==",
[
"get",
"highway"
],
"secondary"
],
"minzoom": 9,
"maxzoom": 22
},
{
"paint": {
"line-color": "#ffffff",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
7,
0.5,
9,
0.5,
16,
7,
22,
40
]
},
"id": "road__5",
"source": "outdoors",
"source-layer": "road",
"type": "line",
"filter": [
"in",
[
"get",
"highway"
],
[
"literal",
[
"motorway_link",
"trunk_link",
"primary_link",
"secondary_link"
]
]
],
"minzoom": 7,
"maxzoom": 22
},
{
"paint": {
"line-color": "#ffffff",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
11,
1,
12,
2,
13,
3,
16,
6,
22,
50
]
},
"id": "road__6",
"source": "outdoors",
"source-layer": "road",
"type": "line",
"filter": [
"==",
[
"get",
"highway"
],
"tertiary"
],
"minzoom": 11,
"maxzoom": 22
},
{
"paint": {
"line-color": "#ffffff",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
12,
0.6,
13,
1,
16,
6,
22,
50
]
},
"id": "road__7",
"source": "outdoors",
"source-layer": "road",
"type": "line",
"filter": [
"in",
[
"get",
"highway"
],
[
"literal",
[
"residential",
"unclassified",
"living_street"
]
]
],
"minzoom": 12,
"maxzoom": 22
},
{
"paint": {
"line-color": "#f7f7f7",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
12,
0.6,
13,
1,
16,
6,
22,
50
]
},
"id": "road__8",
"source": "outdoors",
"source-layer": "road",
"type": "line",
"filter": [
"==",
[
"get",
"highway"
],
"track"
],
"minzoom": 14,
"maxzoom": 22
},
{
"paint": {
"line-color": "#ffffff",
"line-width": [
"interpolate",
[
"linear"
],
[
"zoom"
],
13,
2,
22,
5
]
},
"id": "road__9",
"ref": "road_casing__7"
},
{
"paint": {
"line-color": "#ffffff",
"line-width": 2,
"line-dasharray": [
1.5,
3
]
},
"id": "path",
"source": "outdoors",
"source-layer": "path",
"type": "line",
"filter": [
"!",
[
"in",
[
"get",
"access"
],
[
"literal",
[
"private",
"no"
]
]
]
],
"minzoom": 16,
"maxzoom": 22
},
{
"paint": {
"line-color": "#cccccc",
"line-width": {
"base": 1.5,
"stops": [
[
10,
1.6
],
[
18,
7
]
]
}
},
"id": "railway__1",
"source": "outdoors",
"source-layer": "railway",
"type": "line",
"filter": [
"all",
[
"==",
[
"get",
"railway"
],
"rail"
],
[
"all",
[
"!",
[
"in",
[
"get",
"service"
],
[
"literal",
[
"yard",
"siding",
"spur"
]
]
]
],
[
"!=",
[
"get",
"tunnel"
],
"yes"
]
]
],
"minzoom": 10,
"maxzoom": 22
},
{
"paint": {
"line-color": "#cccccc",
"line-width": {
"base": 1.5,
"stops": [
[
10,
1.6
],
[
18,
7
]
]
}
},
"id": "railway__2",
"source": "outdoors",
"source-layer": "railway",
"type": "line",
"filter": [
"all",
[
"==",
[
"get",
"railway"
],
"subway"
],
[
"all",
[
"!",
[
"in",
[
"get",
"service"
],
[
"literal",
[
"yard",
"siding",
"spur"
]
]
]
],
[
"!=",
[
"get",
"tunnel"
],
"yes"
]
]
],
"minzoom": 14,
"maxzoom": 22
},
{
"paint": {
"line-color": "#f2eee7",
"line-width": {
"base": 1,
"stops": [
[
10,
0.2
],
[
18,
3
]
]
},
"line-dasharray": [
4,
4
]
},
"source-layer": "railway",
"id": "railway_dashes__1",
"source": "outdoors",
"type": "line",
"filter": [
"all",
[
"==",
[
"get",
"railway"
],
"rail"
],
[
"all",
[
"!",
[
"in",
[
"get",
"service"
],
[
"literal",
[
"yard",
"siding",
"spur"
]
]
]
],
[
"!=",
[
"get",
"tunnel"
],
"yes"
]
]
],
"minzoom": 13,
"maxzoom": 22
},
{
"paint": {
"line-color": "#f2eee7",
"line-width": {
"base": 1,
"stops": [
[
10,
0.2
],
[
18,
3
]
]
},
"line-dasharray": [
4,
4
]
},
"id": "railway_dashes__2",
"ref": "railway__2"
},
{
"paint": {
"line-color": "#cccccc",
"line-width": 1,
"line-dasharray": [
4,
2
]
},
"source-layer": "railway",
"id": "railway_tunnel",
"source": "outdoors",
"type": "line",
"filter": [
"==",
[
"get",
"tunnel"
],
"yes"
],
"minzoom": 14,
"maxzoom": 22
},
{
"paint": {
"line-color": "#cccccc",
"line-width": [
"interpolate",
[
"exponential",
1.2
],
[
"zoom"
],
14,
0.8,
18,
1,
19,
1.5
]
},
"source-layer": "railway",
"id": "railway_light_rail",
"source": "outdoors",
"type": "line",
"filter": [
"all",
[
"in",
[
"get",
"railway"
],
[
"literal",
[
"tram",
"light_rail",
"funicular",
"narrow_gauge",
"monorail",
"preserved"
]
]
],
[
"!",
[
"in",
[
"get",
"service"
],
[
"literal",
[
"yard",
"siding",
"spur"
]
]
]
]
],
"minzoom": 14,
"maxzoom": 22
},
{
"paint": {
"line-color": "#cccccc",
"line-width": 1,
"line-dasharray": [
4,
2
]
},
"source-layer": "railway",
"id": "railway_siding",
"source": "outdoors",
"type": "line",
"filter": [
"in",
[
"get",
"service"
],
[
"literal",
[
"yard",
"siding",
"spur"
]
]
],
"minzoom": 16,
"maxzoom": 22
},
{
"layout": {
"text-field": "{name}",
"icon-image": "rail",
"icon-size": {
"stops": [
[
15,
0.5
],
[
17,
0.5
],
[
22,
1
]
]
},
"icon-padding": 0,
"text-optional": true,
"text-font": [
"NotoSans_Regular"
],
"text-max-width": 7,
"text-offset": {
"stops": [
[
15,
[
0,
0.9
]
],
[
17,
[
0,
1.2
]
],
[
22,
[
0,
1.6
]
]
]
},
"text-padding": 0,
"text-anchor": "top",
"text-size": {
"stops": [
[
13,
10
],
[
17,
13
]
]
}
},
"paint": {
"text-color": "#888888",
"text-halo-color": "#ffffff",
"text-halo-width": 2
},
"id": "railway-station",
"source": "outdoors",
"source-layer": "railway-station",
"type": "symbol",
"filter": [
"==",
[
"get",
"railway"
],
"station"
],
"minzoom": 13,
"maxzoom": 22
},
{
"layout": {
"icon-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
16,
0.6,
18,
1
],
"symbol-placement": "line",
"icon-image": "oneway",
"icon-ignore-placement": false,
"icon-allow-overlap": true,
"icon-padding": 0,
"symbol-spacing": {
"stops": [
[
14,
30
],
[
18,
60
]
]
}
},
"source-layer": "road-label",
"id": "oneway",
"source": "outdoors",
"type": "symbol",
"filter": [
"in",
[
"get",
"oneway"
],
[
"literal",
[
"yes",
"-1"
]
]
],
"minzoom": 16,
"maxzoom": 22
},
{
"layout": {
"icon-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
16,
0.6,
18,
1
],
"symbol-placement": "line",
"icon-image": "oneway-reverse"
},
"source-layer": "road-label",
"id": "oneway__1",
"source": "outdoors",
"type": "symbol",
"filter": [
"all",
[
"==",
[
"get",
"oneway"
],
"-1"
],
[
"in",
[
"get",
"oneway"
],
[
"literal",
[
"yes",
"-1"
]
]
]
],
"minzoom": 16,
"maxzoom": 22
},
{
"layout": {
"icon-image": "shield",
"text-field": "{ref}",
"text-font": [
"NotoSans_Regular"
],
"icon-text-fit": "both",
"icon-padding": 30,
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
14,
9,
15,
10,
18,
20
],
"text-letter-spacing": 0.02
},
"paint": {
"text-color": "#444444"
},
"source-layer": "road-label",
"id": "road-ref",
"source": "outdoors",
"type": "symbol",
"filter": [
"all",
[
"has",
"ref"
],
[
"any",
[
"any",
[
"any",
[
"in",
[
"get",
"highway"
],
[
"literal",
[
"trunk",
"motorway"
]
]
],
[
"all",
[
">=",
[
"zoom"
],
11
],
[
"==",
[
"get",
"highway"
],
"primary"
]
]
],
[
"all",
[
">=",
[
"zoom"
],
12
],
[
"==",
[
"get",
"highway"
],
"secondary"
]
]
],
[
">=",
[
"zoom"
],
13
]
]
],
"minzoom": 9,
"maxzoom": 22
},
{
"layout": {
"symbol-placement": "line",
"text-field": "{name}",
"text-font": [
"NotoSans_Regular"
],
"text-letter-spacing": 0.01,
"text-padding": 0,
"text-keep-upright": true,
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
12,
9.5,
15,
13,
18,
20
]
},
"paint": {
"text-halo-color": "#ffffff",
"text-halo-width": 2,
"text-color": "#444444"
},
"id": "road-label__1",
"source": "outdoors",
"source-layer": "road-label",
"type": "symbol",
"filter": [
"all",
[
"in",
[
"get",
"highway"
],
[
"literal",
[
"trunk",
"primary",
"secondary"
]
]
],
[
"has",
"name"
]
],
"minzoom": 12,
"maxzoom": 22
},
{
"layout": {
"symbol-placement": "line",
"text-field": "{name}",
"text-font": [
"NotoSans_Regular"
],
"text-letter-spacing": 0.01,
"text-padding": 0,
"text-keep-upright": true,
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
12,
8,
15,
11,
18,
16
]
},
"paint": {
"text-halo-color": "#ffffff",
"text-halo-width": 2,
"text-color": "#444444"
},
"id": "road-label__2",
"source": "outdoors",
"source-layer": "road-label",
"type": "symbol",
"filter": [
"all",
[
"!",
[
"in",
[
"get",
"highway"
],
[
"literal",
[
"trunk",
"primary",
"secondary"
]
]
]
],
[
"has",
"name"
]
],
"minzoom": 12,
"maxzoom": 22
},
{
"layout": {
"symbol-placement": "line",
"text-field": "{name}",
"text-font": [
"NotoSans_Regular"
],
"text-padding": 0,
"text-keep-upright": true,
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
15,
8,
18,
13
]
},
"paint": {
"text-halo-color": "#ffffff",
"text-halo-width": 2,
"text-color": "#444444"
},
"id": "path-label",
"source": "outdoors",
"source-layer": "path-label",
"type": "symbol",
"filter": [
"has",
"name"
],
"minzoom": 15,
"maxzoom": 22
},
{
"layout": {
"text-field": "{name_with_en}",
"text-font": [
"NotoSans_Regular"
],
"text-line-height": 1.1,
"text-max-width": 6,
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
5,
10,
7,
12
]
},
"paint": {
"text-color": "#555555",
"text-halo-color": "#ffffff",
"text-halo-width": 1
},
"source-layer": "place-label",
"id": "place_low",
"source": "outdoors",
"type": "symbol",
"minzoom": 4,
"maxzoom": 6
},
{
"layout": {
"text-field": [
"upcase",
[
"get",
"name"
]
],
"text-font": [
"NotoSans_Regular"
],
"text-line-height": 1.3,
"text-max-width": 5,
"text-letter-spacing": 0.2,
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
12,
9.5,
14,
13,
16,
18
]
},
"paint": {
"text-color": [
"interpolate-lab",
[
"linear"
],
[
"zoom"
],
12,
"#888",
14,
"#444"
],
"text-halo-color": "#ffffff",
"text-halo-width": [
"interpolate",
[
"linear"
],
[
"zoom"
],
7,
1,
12,
2
]
},
"id": "place-label__1",
"source": "outdoors",
"source-layer": "place-label",
"type": "symbol",
"filter": [
"in",
[
"get",
"place"
],
[
"literal",
[
"neighbourhood",
"suburb"
]
]
],
"minzoom": 12,
"maxzoom": 22
},
{
"layout": {
"text-field": "{name_with_en}",
"text-font": [
"NotoSans_Regular"
],
"text-line-height": 1.1,
"text-max-width": 5,
"icon-image": "dot",
"icon-size": {
"stops": [
[
11,
1
],
[
16,
2
]
]
},
"text-anchor": "bottom",
"text-offset": [
0,
-0.5
],
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
12,
12,
14,
16
]
},
"paint": {
"text-color": "#555555",
"text-halo-color": "#ffffff",
"text-halo-width": [
"interpolate",
[
"linear"
],
[
"zoom"
],
7,
1,
12,
2
]
},
"id": "place-label__2",
"source": "outdoors",
"source-layer": "place-label",
"type": "symbol",
"filter": [
"==",
[
"get",
"place"
],
"village"
],
"minzoom": 11,
"maxzoom": 22
},
{
"layout": {
"text-field": "{name_with_en}",
"text-font": [
"NotoSans_Regular"
],
"text-line-height": 1.1,
"text-max-width": 6,
"icon-image": "circle",
"icon-size": {
"stops": [
[
7,
0.35
],
[
16,
0.5
]
]
},
"text-anchor": "bottom",
"text-offset": [
0,
-0.3
],
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
8,
10,
9,
12,
14,
20
]
},
"paint": {
"text-color": "#555555",
"text-halo-color": "#ffffff",
"text-halo-width": [
"interpolate",
[
"linear"
],
[
"zoom"
],
7,
1,
12,
2
]
},
"id": "place-label__3",
"source": "outdoors",
"source-layer": "place-label",
"type": "symbol",
"filter": [
"==",
[
"get",
"place"
],
"town"
],
"minzoom": 7,
"maxzoom": 16
},
{
"layout": {
"text-field": "{name_with_en}",
"text-font": [
"NotoSans_Regular"
],
"text-line-height": 1.1,
"text-max-width": 6,
"icon-image": "circle",
"icon-size": {
"stops": [
[
4,
0.3
],
[
7,
0.4
],
[
16,
0.8
]
]
},
"text-anchor": "bottom",
"text-offset": [
0,
-0.5
],
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
5,
10,
7,
12,
8,
14,
9,
20
]
},
"paint": {
"text-color": "#555555",
"text-halo-color": "#ffffff",
"text-halo-width": [
"interpolate",
[
"linear"
],
[
"zoom"
],
7,
1,
12,
2
]
},
"id": "place-label__4",
"source": "outdoors",
"source-layer": "place-label",
"type": "symbol",
"filter": [
"==",
[
"get",
"place"
],
"city"
],
"minzoom": 6,
"maxzoom": 14
},
{
"layout": {
"symbol-placement": "line",
"text-field": "{name}",
"text-font": [
"NotoSans_Italic"
],
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
12,
9.5,
18,
20
],
"text-keep-upright": true
},
"paint": {
"text-halo-color": "#ffffff",
"text-halo-width": 1.4,
"text-color": "#6cadd4"
},
"id": "waterway-label",
"source": "outdoors",
"source-layer": "waterway-label",
"type": "symbol",
"minzoom": 13,
"maxzoom": 22
},
{
"layout": {
"text-field": "{name}",
"text-font": [
"NotoSans_Italic"
],
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
12,
10,
18,
23
],
"text-max-width": 7
},
"paint": {
"text-halo-color": "#ffffff",
"text-halo-width": 1.4,
"text-color": "#6cadd4"
},
"id": "water-label",
"source": "outdoors",
"source-layer": "water-label",
"type": "symbol",
"filter": [
"any",
[
">",
[
"get",
"way_area"
],
[
"*",
[
"^",
2,
[
"-",
14,
[
"zoom"
]
]
],
100000
]
],
[
">",
[
"zoom"
],
16
]
],
"minzoom": 5,
"maxzoom": 22
},
{
"layout": {
"text-field": "{name}",
"text-font": [
"NotoSans_Italic"
],
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
14,
11,
18,
20
],
"text-max-width": 7
},
"paint": {
"text-halo-color": "#ffffff",
"text-halo-width": 1.4,
"text-color": "#98a48d"
},
"id": "landcover-label",
"source": "outdoors",
"source-layer": "landcover-label",
"type": "symbol",
"filter": [
"all",
[
"in",
[
"get",
"type"
],
[
"literal",
[
"orchard",
"vineyard",
"wood",
"scrub",
"heath",
"grassland",
"forest"
]
]
],
[
"any",
[
">",
[
"get",
"way_area"
],
[
"*",
[
"^",
2,
[
"-",
12,
[
"zoom"
]
]
],
640000
]
],
[
">",
[
"zoom"
],
17
]
]
],
"minzoom": 14,
"maxzoom": 22
},
{
"layout": {
"text-field": "{name}",
"text-font": [
"NotoSans_Italic"
],
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
14,
11,
18,
20
],
"text-max-width": 7
},
"paint": {
"text-halo-color": "#ffffff",
"text-halo-width": 1.4,
"text-color": "#98a48d"
},
"id": "landuse-label",
"source": "outdoors",
"source-layer": "landuse-label",
"type": "symbol",
"filter": [
"all",
[
"in",
[
"get",
"type"
],
[
"literal",
[
"recreation_ground",
"village_green",
"cemetery",
"park",
"golf_course",
"pitch",
"garden",
"common",
"cemetery"
]
]
],
[
"any",
[
">",
[
"get",
"way_area"
],
[
"*",
[
"^",
2,
[
"-",
12,
[
"zoom"
]
]
],
640000
]
],
[
">",
[
"zoom"
],
17
]
]
],
"minzoom": 14,
"maxzoom": 22
},
{
"layout": {
"text-field": "{name}",
"text-font": [
"NotoSans_Italic"
],
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
14,
12,
18,
20
],
"text-max-width": 9
},
"paint": {
"text-halo-color": "#ffffff",
"text-halo-width": 1.4,
"text-color": "#6cadd4"
},
"id": "glacier-label",
"source": "outdoors",
"source-layer": "glacier-label",
"type": "symbol",
"filter": [
"any",
[
">",
[
"get",
"way_area"
],
[
"*",
[
"^",
2,
[
"-",
12,
[
"zoom"
]
]
],
5120000
]
],
[
">",
[
"zoom"
],
18
]
],
"minzoom": 13,
"maxzoom": 22
},
{
"layout": {
"text-field": "{name}",
"text-font": [
"NotoSans_Regular"
],
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
3,
8,
4,
12,
7,
20
],
"text-padding": 10
},
"paint": {
"text-color": "#000000",
"text-halo-width": 1.5,
"text-halo-color": "#ffffff"
},
"id": "state-label",
"source": "outdoors",
"source-layer": "state-label",
"type": "symbol",
"filter": [
"in",
[
"get",
"sr_adm0_a3"
],
[
"literal",
[
"USA",
"CAN",
"AUS"
]
]
],
"minzoom": 3,
"maxzoom": 7
},
{
"layout": {
"text-field": "{name_en}",
"text-font": [
"NotoSans_Regular"
],
"text-padding": 5,
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
3,
12,
5,
17
]
},
"paint": {
"text-color": "#000000",
"text-halo-width": 1.6,
"text-halo-color": "#ffffff"
},
"id": "country-label__1",
"source": "outdoors",
"source-layer": "country-label",
"type": "symbol",
"filter": [
"<",
[
"get",
"labelrank"
],
4
],
"minzoom": 3,
"maxzoom": 5
},
{
"layout": {
"text-field": "{name_en}",
"text-font": [
"NotoSans_Regular"
],
"text-padding": 5,
"text-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
5,
17,
6,
19
]
},
"paint": {
"text-color": "#000000",
"text-halo-width": 1.6,
"text-halo-color": "#ffffff"
},
"id": "country-label__2",
"source": "outdoors",
"source-layer": "country-label",
"type": "symbol",
"filter": [
"<",
[
"get",
"labelrank"
],
6
],
"minzoom": 5,
"maxzoom": 6
},
{
"layout": {
"text-field": "{name_en}",
"text-font": [
"NotoSans_Regular"
],
"text-padding": 5,
"text-size": 19
},
"paint": {
"text-color": "#000000",
"text-halo-width": 1.6,
"text-halo-color": "#ffffff"
},
"id": "country-label__3",
"source": "outdoors",
"source-layer": "country-label",
"type": "symbol",
"minzoom": 6,
"maxzoom": 7
},
{
"layout": {
"icon-image": "airport_large",
"text-padding": 0,
"text-anchor": "top",
"text-font": [
"NotoSans_Regular"
],
"text-size": 14,
"icon-size": [
"interpolate",
[
"linear"
],
[
"zoom"
],
12,
0.6,
14,
1
],
"text-field": "{iata}",
"text-offset": [
0,
0.8
]
},
"paint": {
"text-color": "#888888",
"text-halo-width": 1.4,
"text-halo-color": "#ffffff"
},
"id": "aeroway-label__1",
"source": "outdoors",
"source-layer": "aeroway-label",
"type": "symbol",
"filter": [
"all",
[
"any",
[
"has",
"iata"
],
[
"has",
"icao"
]
],
[
"==",
[
"get",
"aeroway"
],
"aerodrome"
]
],
"minzoom": 12,
"maxzoom": 13
},
{
"layout": {
"icon-image": "airport_large",
"text-padding": 0,
"text-anchor": "top",
"text-font": [
"NotoSans_Regular"
],
"text-size": 12,
"text-field": "{name}",
"icon-size": 0.8,
"text-offset": [
0,
1.2
]
},
"paint": {
"text-color": "#888888",
"text-halo-width": 1.4,
"text-halo-color": "#ffffff"
},
"id": "aeroway-label__2",
"source": "outdoors",
"source-layer": "aeroway-label",
"type": "symbol",
"filter": [
"all",
[
"all",
[
"!",
[
"has",
"iata"
]
],
[
"!",
[
"has",
"icao"
]
]
],
[
"==",
[
"get",
"aeroway"
],
"aerodrome"
]
],
"minzoom": 13,
"maxzoom": 17
},
{
"layout": {
"icon-image": "airport_large",
"text-padding": 0,
"text-anchor": "top",
"text-font": [
"NotoSans_Regular"
],
"text-size": 14,
"icon-size": 1,
"text-field": "{iata}\n{name}",
"text-offset": [
0,
1
]
},
"paint": {
"text-color": "#888888",
"text-halo-width": 1.4,
"text-halo-color": "#ffffff"
},
"id": "aeroway-label__3",
"source": "outdoors",
"source-layer": "aeroway-label",
"type": "symbol",
"filter": [
"all",
[
"any",
[
"has",
"iata"
],
[
"has",
"icao"
]
],
[
"==",
[
"get",
"aeroway"
],
"aerodrome"
]
],
"minzoom": 14,
"maxzoom": 17
},
{
"layout": {
"text-field": [
"case",
[
"all",
[
"has",
"addr_housenumber"
],
[
"has",
"addr_housename"
]
],
[
"concat",
[
"get",
"addr_housenumber"
],
" ",
[
"get",
"addr_housename"
]
],
[
"coalesce",
[
"get",
"addr_housenumber"
],
[
"get",
"addr_housename"
]
]
],
"text-font": [
"NotoSans_Regular"
],
"text-size": 11,
"text-max-width": 5,
"text-padding": 10
},
"paint": {
"text-color": "#aaaaaa",
"text-halo-color": "#ffffff",
"text-halo-width": 1.4
},
"id": "address",
"source": "outdoors",
"source-layer": "address",
"type": "symbol",
"minzoom": 17,
"maxzoom": 22
},
{
"paint": {
"line-color": "#aaaaaa",
"line-width": 0.2
},
"id": "interpolation",
"source": "outdoors",
"source-layer": "interpolation",
"type": "line",
"minzoom": 17,
"maxzoom": 22
},
{
"layout": {
"text-field": "{name}",
"icon-size": {
"stops": [
[
15,
0.5
],
[
17,
0.5
],
[
22,
1
]
]
},
"icon-padding": 0,
"text-optional": true,
"text-font": [
"NotoSans_Regular"
],
"text-max-width": 7,
"text-offset": {
"stops": [
[
15,
[
0,
0.9
]
],
[
17,
[
0,
1.2
]
],
[
22,
[
0,
1.6
]
]
]
},
"text-padding": 0,
"text-anchor": "top",
"text-size": {
"stops": [
[
15,
9
],
[
17,
11
]
]
},
"icon-image": "lodging"
},
"paint": {
"text-color": "#888888",
"text-halo-color": "#ffffff",
"text-halo-width": 2
},
"id": "poi-label__1",
"source": "outdoors",
"source-layer": "poi-label",
"type": "symbol",
"filter": [
"in",
[
"get",
"feature"
],
[
"literal",
[
"hotel",
"motel",
"alpine_hut",
"guest_house",
"hostel"
]
]
],
"minzoom": 16,
"maxzoom": 22
},
{
"layout": {
"text-field": "{name}",
"icon-size": {
"stops": [
[
15,
0.5
],
[
17,
0.5
],
[
22,
1
]
]
},
"icon-padding": 0,
"text-optional": true,
"text-font": [
"NotoSans_Regular"
],
"text-max-width": 7,
"text-offset": {
"stops": [
[
15,
[
0,
0.9
]
],
[
17,
[
0,
1.2
]
],
[
22,
[
0,
1.6
]
]
]
},
"text-padding": 0,
"text-anchor": "top",
"text-size": {
"stops": [
[
15,
9
],
[
17,
11
]
]
},
"icon-image": "{feature}"
},
"paint": {
"text-color": "#888888",
"text-halo-color": "#ffffff",
"text-halo-width": 2
},
"id": "poi-label__2",
"source": "outdoors",
"source-layer": "poi-label",
"type": "symbol",
"filter": [
"in",
[
"get",
"feature"
],
[
"literal",
[
"restaurant",
"cafe",
"bar",
"pub",
"fuel"
]
]
],
"minzoom": 16,
"maxzoom": 22
},
{
"layout": {
"icon-image": "parking",
"icon-size": {
"stops": [
[
15,
0.5
],
[
17,
0.5
],
[
22,
1
]
]
}
},
"source-layer": "poi-label",
"id": "parking",
"source": "outdoors",
"type": "symbol",
"filter": [
"==",
[
"get",
"feature"
],
"parking"
],
"minzoom": 17,
"maxzoom": 22
},
{
"layout": {
"text-field": "{name}",
"text-font": [
"NotoSans_Regular"
],
"text-max-width": 7,
"text-padding": 0,
"text-anchor": "top",
"text-size": {
"stops": [
[
15,
9
],
[
17,
11
]
]
}
},
"paint": {
"text-color": "#888888",
"text-halo-color": "#ffffff",
"text-halo-width": 2
},
"source-layer": "poi-label",
"id": "poi_generic",
"source": "outdoors",
"type": "symbol",
"filter": [
"in",
[
"get",
"feature"
],
[
"literal",
[
"place_of_worship",
"hospital",
"museum"
]
]
],
"minzoom": 16,
"maxzoom": 22
},
{
"id": "ocm-tiles",
"type": "raster",
"source": "ocm-tiles",
"minzoom": 0,
"maxzoom": 19
}
]
}
Hi! Thank you for your reply @Flomp Question: I already saw the map settings and that it's more or less what we need. But there is one thing missing. Is it possible to make a map layer available for all users?
Added in v0.18.0.