Last active
March 12, 2018 20:06
-
-
Save glw/2c4e310cdf26f4b1714d7ba319c71eb8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Refill provides a high contrast, black & white basemap useful for data visualization. | |
| # Give OpenStreetMap data a professional basemap skin using the Tangram graphics library | |
| # and Mapzen's versatile Vector Tiles. | |
| # | |
| # Refill is a modern GL take on Geraldine's work on Toner for Stamen as part of their | |
| # great CityTracking project. Please use and adapt the open source scene file in | |
| # your own projects! | |
| # | |
| # Authors: Geraldine Sarmiento, Nathaniel V. Kelso | |
| # Read more: https://github.com/tangrams/refill-style | |
| # | |
| import: | |
| - https://www.nextzen.org/carto/refill-style/11/refill-style.zip | |
| - https://www.nextzen.org/carto/refill-style/11/themes/color-gray.zip | |
| - https://www.nextzen.org/carto/refill-style/11/themes/label-10.zip | |
| global: | |
| #ux/ui | |
| ux_language: false # l10n language code, trusting OSM in v0.10 tiles, fixed in v1.0 tiles | |
| ux_language_fallback: false # l10n language code, trusting OSM in v0.10 tiles, fixed in v1.0 tiles | |
| ux_language_text_source: | | |
| function() { | |
| // if a ux_langauge has been defined use that, else if there is feature name in the fallback_ux_language then use that, else use the feature's default name in the local language | |
| return (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature.name; | |
| } | |
| ux_language_text_source_left: | | |
| function() { | |
| // if a ux_langauge has been defined use that, else if there is feature name in the fallback_ux_language then use that, else use the feature's default name in the local language | |
| return (global.ux_language && feature['name:left:'+global.ux_language]) || (global.ux_language_fallback && feature['name:left:'+global.ux_language_fallback]) || feature['name:left']; | |
| } | |
| ux_language_text_source_right: | | |
| function() { | |
| // if a ux_langauge has been defined use that, else if there is feature name in the fallback_ux_language then use that, else use the feature's default name in the local language | |
| return (global.ux_language && feature['name:right:'+global.ux_language]) || (global.ux_language_fallback && feature['name:right:'+global.ux_language_fallback]) || feature['name:right']; | |
| } | |
| ux_language_text_source_boundary_lines_left_right: | |
| left: global.ux_language_text_source_left | |
| right: global.ux_language_text_source_right | |
| ux_language_text_source_boundary_lines: | | |
| function() { | |
| var right = (global.ux_language && feature['name:right:'+global.ux_language]) || (global.ux_language_fallback && feature['name:right:'+global.ux_language_fallback]) || feature['name:right']; | |
| var left = (global.ux_language && feature['name:left:'+global.ux_language]) || (global.ux_language_fallback && feature['name:left:'+global.ux_language_fallback]) || feature['name:left']; | |
| if( right && left ) { | |
| //if( right.includes(' ') || left.includes(' ') ) { | |
| return left + " - " + right; | |
| //} else { | |
| // return right + '\n' + left; | |
| //} | |
| } else { | |
| return (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature.name; | |
| } | |
| } | |
| ux_language_text_source_short: | | |
| function() { | |
| return (global.ux_language && feature['name:short:'+global.ux_language]) || (global.ux_language_fallback && feature['name:short:'+global.ux_language_fallback]) || feature['name:short']; | |
| } | |
| ux_language_text_source_short_proxy_name: | | |
| function() { | |
| var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'] || ''; | |
| var short = (global.ux_language && feature['name:short:'+global.ux_language]) || (global.ux_language_fallback && feature['name:short:'+global.ux_language_fallback]) || feature['name:short']; | |
| return short ? name : ''; | |
| } | |
| ux_language_text_source_abbreviation: | | |
| function() { | |
| var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'] || ''; | |
| var abbrev = (global.ux_language && feature['name:abbreviation:'+global.ux_language]) || (global.ux_language_fallback && feature['name:abbreviation:'+global.ux_language_fallback]) || feature['name:abbreviation']; | |
| return abbrev || name; | |
| } | |
| ux_language_text_source_iata: | | |
| function() { | |
| var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name']; | |
| if(feature.iata) { | |
| if (name) { | |
| return name + ' (' + feature.iata + ')'; | |
| } | |
| else { | |
| return feature.iata; | |
| } | |
| } else { | |
| return name; | |
| } | |
| } | |
| ux_language_text_source_ocean: | | |
| function() { | |
| var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'] || ''; | |
| name = name.split(' ').join('\n'); | |
| return name.split('').join(' '); | |
| } | |
| ux_language_text_source_sea: | | |
| function() { | |
| var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'] || ''; | |
| name = name.split(' ').join('\n'); | |
| return name.split('').join(' '); | |
| } | |
| ux_language_text_source_continent_stacked_only: | | |
| function() { | |
| var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'] || ''; | |
| return name.split(' ').join('\n'); | |
| } | |
| ux_language_text_source_continent: | | |
| function() { | |
| var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name'] || ''; | |
| name = name.split(' ').join('\n'); | |
| return name.split('').join(' '); | |
| } | |
| ux_language_text_source_road_ref_and_name: | | |
| function() { | |
| // if a ux_langauge has been defined use that, else if there is feature name in the fallback_ux_language then use that, else use the feature's default name in the local language | |
| return (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature.name; | |
| /* | |
| var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name']; | |
| if(feature.ref && name) { | |
| return (feature.ref + ' ' + name); | |
| } else { | |
| return name; | |
| } | |
| */ | |
| } | |
| ux_language_text_source_road_ref_and_name_short: | | |
| function() { | |
| // if a ux_langauge has been defined use that, else if there is feature name in the fallback_ux_language then use that, else use the feature's default name in the local language | |
| return (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature.name; | |
| /* | |
| var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name']; | |
| if (feature.ref && (feature.ref.length < 6) && name) { | |
| return feature.ref + ' ' + name; | |
| } else { | |
| return name; | |
| } | |
| */ | |
| } | |
| ux_language_text_source_piste_advanced: | | |
| function() { | |
| var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name']; | |
| return name ? ('◆ ' + name) : '◆'; | |
| } | |
| ux_language_text_source_piste_expert: | | |
| function() { | |
| var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name']; | |
| return name ? ('◆◆ ' + name) : '◆◆'; | |
| } | |
| ux_language_text_source_building_and_address: | | |
| function() { | |
| var name = (global.ux_language && feature['name:'+global.ux_language]) || (global.ux_language_fallback && feature['name:'+global.ux_language_fallback]) || feature['name']; | |
| if (name && feature.addr_housenumber) { | |
| return name + '\n' + feature.addr_housenumber; | |
| } else { | |
| return name; | |
| } | |
| } | |
| # To facilitate data visualizations several recommended sort orders are provided | |
| # | |
| # Your classic raster map overlay. | |
| # Over all line and polygon features. | |
| # Under map labels (icons and text), under UI elements | |
| # (like routeline and search result pins). | |
| sdk_order_over_everything_but_text_0: 490 | |
| sdk_order_over_everything_but_text_1: 491 | |
| sdk_order_over_everything_but_text_2: 492 | |
| sdk_order_over_everything_but_text_3: 493 | |
| sdk_order_over_everything_but_text_4: 494 | |
| sdk_order_over_everything_but_text_5: 495 | |
| sdk_order_over_everything_but_text_6: 496 | |
| sdk_order_over_everything_but_text_7: 497 | |
| sdk_order_over_everything_but_text_8: 498 | |
| sdk_order_over_everything_but_text_9: 499 | |
| # | |
| # Your classic "underlay" | |
| # Under roads. Above borders, water, landuse, and earth. | |
| sdk_order_under_roads_0: 290 | |
| sdk_order_under_roads_1: 291 | |
| sdk_order_under_roads_2: 292 | |
| sdk_order_under_roads_3: 293 | |
| sdk_order_under_roads_4: 294 | |
| sdk_order_under_roads_5: 295 | |
| sdk_order_under_roads_6: 296 | |
| sdk_order_under_roads_7: 297 | |
| sdk_order_under_roads_8: 298 | |
| sdk_order_under_roads_9: 299 | |
| # | |
| # Under water. | |
| # Above earth and most landuse. | |
| sdk_order_under_water_0: 190 | |
| sdk_order_under_water_1: 191 | |
| sdk_order_under_water_2: 192 | |
| sdk_order_under_water_3: 193 | |
| sdk_order_under_water_4: 194 | |
| sdk_order_under_water_5: 195 | |
| sdk_order_under_water_6: 196 | |
| sdk_order_under_water_7: 197 | |
| sdk_order_under_water_8: 198 | |
| sdk_order_under_water_9: 199 | |
| # | |
| # Under everything. | |
| # Tip: disable earth layer. | |
| sdk_order_under_everything_0: 0 | |
| sdk_order_under_everything_1: 1 | |
| sdk_order_under_everything_2: 2 | |
| sdk_order_under_everything_3: 3 | |
| sdk_order_under_everything_4: 4 | |
| sdk_order_under_everything_5: 5 | |
| sdk_order_under_everything_6: 6 | |
| sdk_order_under_everything_7: 7 | |
| sdk_order_under_everything_8: 8 | |
| sdk_order_under_everything_9: 9 | |
| # | |
| # TRANSIT OVERLAY | |
| # should default to "auto", with SDK overriding it to true or false, | |
| # or app logic sets other booleans that triggers auto behavior later | |
| sdk_transit_overlay: false | |
| # | |
| # SHIELDS | |
| sdk_shield_color: black | |
| sdk_shield_text_color: white | |
| # | |
| # enable interactivity for key features | |
| sdk_interactive: true | |
| # | |
| # default order for basemap features | |
| feature_order: function() { return feature.sort_rank; } | |
| # | |
| #label visibility | |
| icon_size: [[13, '14px'], [16, '18px'], [18, '19px']] | |
| text_visible_continent: false | |
| text_visible_admin: true | |
| text_visible_populated_places: true | |
| icon_visible_populated_places: false | |
| text_visible_neighbourhoods: false | |
| text_visible_neighbourhoods_e: false | |
| text_visible_building: false # false for default | |
| text_visible_address: false # false for default | |
| text_visible_water_labels: false | |
| text_visible_island: false | |
| label_visible_landuse_green: false #this needs work | |
| icon_visible_landuse_green: false #this needs work | |
| text_visible_landuse_green: false | |
| icon_size_green: [[13, '14px'], [16, '18px'], [18, '19px']] # 0px for no, default, more [[13, '14px'], [16, '18px'], [18, '19px']] | |
| icon_size_green_l: [[14, '24px'], [16, '32px']] # 0px for no, default, more [[14, '24px'], [16, '32px']] | |
| label_visible_poi_landuse: false #false on default | |
| icon_visible_poi_landuse: false #false on default | |
| text_visible_poi_landuse: false | |
| icon_visible_poi_landuse_e: false #false on default | |
| text_visible_landuse_generic: true # false for default | |
| label_visible_station: true | |
| icon_visible_station: true #false on default, this needs work | |
| text_visible_station: true | |
| text_visible_highway: true | |
| text_visible_trunk_primary: true | |
| text_visible_secondary: true | |
| text_visible_tertiary: true | |
| text_visible_minor_road: true | |
| text_visible_service_road: true | |
| text_visible_path: true | |
| text_visible_piste: true | |
| text_visible_steps: true | |
| text_visible_aerialway: true | |
| sdk_road_shields: true | |
| text_visible_exits: true | |
| text_visible_airport_gate: false | |
| #roads | |
| highway1: [1.00,1.00,1.00] | |
| highway_link1: [0.00, 0.00, 0.00] | |
| highway_casing1: [0.40, 0.40, 0.40] | |
| highway_tunnel1: [0.7, 0.7, 0.7] | |
| highway_tunnel_casing1: [1.00, 1.00, 1.00] | |
| highway_link_tunnel_casing1: [1.00, 1.00, 1.00] | |
| ferry1: [0.75,0.75,0.75] | |
| rail1: '#999' | |
| rail1_e: '#bbb' | |
| rail2: '#777' # less important rail (service, sidings) | |
| major_road1: [0.0, 0.0, 0.0] | |
| major_road1b: [0.935, 0.935, 0.935] | |
| major_road1c: white #15% | |
| major_road2: [0.935, 0.935, 0.935] | |
| major_road2a: [0.935, 0.935, 0.935] | |
| major_road2b: [0.935, 0.935, 0.935] | |
| major_road3: [0.935, 0.935, 0.935] | |
| major_road4: [0.00, 0.00, 0.00] | |
| major_road5: white | |
| major_casing1: [0.40, 0.40, 0.40] # same as highway_casing1 | |
| major_casing2: [0.40, 0.40, 0.40] # zoomed out | |
| major_tunnel1: [0.7, 0.7, 0.7] | |
| major_tunnel_casing1: [1.00, 1.00, 1.00] | |
| major_route1: [0.0, 0.0, 0.0] | |
| major_route2: [0.2, 0.2, 0.2] # zoomed out | |
| minor_route: [0.97, 0.97, 0.97] # same as major_route | |
| minor_road1: [0.935, 0.935, 0.935] # natural earth | |
| minor_road2: [0.935, 0.935, 0.935] # natural earth, same as major_road2 | |
| minor_road3: [0.935, 0.935, 0.935] | |
| minor_road4: [0.935, 0.935, 0.935] # zoomed out | |
| minor_road5: [0.935, 0.935, 0.935] # zoomed out, again | |
| minor_casing1: white # same as highway_casing1 | |
| minor_casing2: white # zoomed out | |
| minor_tunnel1: [0.7, 0.7, 0.7] | |
| minor_tunnel_casing1: [1.00, 1.00, 1.00] | |
| service_road1: [0.935, 0.935, 0.935] | |
| service_road2: white | |
| service_road_casing1: [0.40, 0.40, 0.40] | |
| service_road_casing2: white | |
| path1: [0.97, 0.97, 0.97] | |
| path2: [0.97, 0.97, 0.97] # zoomed out | |
| path_casing1: [0.40, 0.40, 0.40] | |
| path_bridge_casing1: [0.40, 0.40, 0.40] | |
| path_bridge_casing2: [0.40, 0.40, 0.40] # zoomed out | |
| path_steps1: red | |
| path_steps1_b: '#ccc' | |
| piste_easy: [0.367,0.750,0.622] | |
| piste_intermediate: [0.420,0.678,0.863] | |
| piste_advanced: [0.450,0.450,0.450] | |
| piste_expert: [0.450,0.450,0.450] | |
| # boundaries: | |
| country_boundary: '#ccc' | |
| region_boundary: [0.900,0.900,0.900] | |
| subregion_boundary: '#ccc' | |
| city_wall: [0.682,0.682,0.682] | |
| retaining_wall: [0.827,0.808,0.780] | |
| snow_fence: [0.827,0.808,0.780] | |
| fence: [0.827,0.808,0.780] | |
| # areas: | |
| scene1: white # map background | |
| water1: [0.584, 0.898, 0.976, 1.00] # water wave | |
| water2: [0.584, 0.898, 0.976, 1.00] # water wave | |
| water3: [0.584, 0.898, 0.976, 1.00] # playa texture | |
| water1_o: [0.584, 0.898, 0.976, 1.00] # water stroke (ocean coastline) | |
| water2_o: [0.584, 0.898, 0.976, 1.00] # water stroke 2 (streams, lake outlines) | |
| earth1: white # land color | |
| earth2: '#e9e4e0' # urban | |
| earth2_v: false # urban | |
| green1: [0.50,0.50,0.50] # park | |
| green1_r: '#bbbbbb' # park roads | |
| green1_b: [.65, .65, .65] # park buildings | |
| green1_bo: [.8, .8, .8] # park building outlines | |
| green2: [0.90,0.90,0.90] # cemetery | |
| green3: '#9a9a9a' # golf course | |
| green4: [0.90,0.90,0.90] # farm faint | |
| green4_v: false # farm faint | |
| green5: [0.75,0.75,0.75] # farm | |
| green6: [0.40,0.40,0.40] # nature reserve | |
| green7: [0.85,0.85,0.85] # forest | |
| green8: [0.80,0.80,0.80] # conservation | |
| green9: [0.85,0.85,0.85] # forest (landcover) | |
| green9_e: [0.90,0.90,0.90] # forest (landcover) early | |
| green9_v: true # forest (landcover) visibility | |
| green10: [0.85,0.85,0.85] # sports_centre | |
| green11: [0.85,0.85,0.85] # minor zoo related AOIs | |
| green11_o: [0.85,0.85,0.85] # minor zoo related AOIs outline | |
| orange1: '#aaaaaa' # stadium | |
| orange2: [0.40,0.40,0.40] # pitch (play field) | |
| brown1: '#7b7b7b' # university | |
| brown1_r: '#bbbbbb' # university roads | |
| brown1_b: [.65, .65, .65] # university buildings | |
| brown1_bo: [.8, .8, .8] # university building outlines | |
| brown2: '#aaaaaa' # school | |
| brown3: [0.40,0.40,0.40] # playground | |
| red1: '#a2a2a2' # hospital | |
| red1_r: '#bbbbbb' # hospital roads | |
| red1_b: [.65, .65, .65] # hospital buildings | |
| red1_bo: [.8, .8, .8] # hospital building outlines | |
| grey1: '#cccccc' # pedestrian, retail, airport apron, parking, church | |
| grey1_e: '#dad6d4' # pedestrian, retail, airport apron, parking, church early zoom 14 | |
| grey1_v: true # pedestrian, retail, airport apron, parking, church | |
| grey2: [0.5, 0.5, 0.5] # airport runway | |
| grey3: '#bbbbbb' # railway | |
| grey4: '#ffc52a' # airport taxiway | |
| grey5: '#ffc52a' # airport taxiway | |
| grey6: '#dddddd' # industrial | |
| grey6_b: [.65, .65, .65] # industrial buildings | |
| grey6_bo: [.8, .8, .8] # industrial building outlines | |
| grey7: '#ecebe9' # pedestrian, match minor road / path color | |
| grey7_v: true # pedestrian visibility | |
| grey8: '#ecebe9' # winter sports | |
| grey8_v: true # winter sports visibility | |
| grey9: [.7, .0, .0, 0.5] #[.7, .7, .7] # transit platform | |
| grey9_o: [.5, .5, .5] # transit platform outline | |
| grey9_v: true # transit platform visibility | |
| grey10: '#d4cce6' # generic major landuse (theme park, resort, aquarium, winery) | |
| grey10_o: '#bcb9c5' # generic major landuse outline | |
| grey11: '#d7d7d7' # generic minor landuse (attraction, artwork) | |
| grey11_o: '#cccccc' # generic minor landuse outline | |
| grey12: '#cfcfcf' # generic minor amusements (roller coasters, rides, slide, carousel) | |
| grey12_o: '#c5c5c5' # generic minor amusements | |
| purple: '#f0e1e1' # airport | |
| purple_v: false # airport | |
| mystry1: '#aaaaaa' # recreation ground (type of park, sometimes around reservoirs) | |
| building1: white # building | |
| building2: white # building stroke | |
| building_o: 25 # building stroke order | |
| building_e: true # building stroke order | |
| sdk_building_extrude: true # building extrusion toggle | |
| building_extrude_height: | # building extrude height logic | |
| function() { return feature.height || 20; } | |
| # labels: | |
| text_fill: global.black_color # WHITE | |
| text_fill2: '#000' # WHITE | |
| text_fill_road_e: '#555' # WHITE | |
| text_fill_exits: [0.40,0.40,0.40] # motorway junctions, highway_casing1 | |
| text_fill_building: '#000' # tan | |
| text_fill_address: [0.60,0.60,0.60] # HUH | |
| text_fill_water: '#000' # blue | |
| text_fill_park: [0.175,0.175,0.175] # green | |
| text_fill_beach: [0.35,0.35,0.35] # black | |
| text_fill_piste: [0.675,0.675,0.675] # dark gray | |
| text_fill_piste_e: [0.675,0.675,0.675] # dark gray early | |
| text_stroke: global.white_color # land color | |
| text_stroke_park: '#fff' # land color | |
| text_stroke_water: '#fff' | |
| text_stroke_address: [1.0,1.0,1.0] # address stroke color | |
| townspot_sprite: townspot-m-rev # depends on land color and text settings | |
| text_font_family: 'Open Sans' # branding in asperational Unicode, yo (or Helvetica) | |
| textures: | |
| pois: | |
| url: images/refill@2x.png | |
| filtering: mipmap | |
| sprites: | |
| # define sprites: [x origin, y origin, width, height] | |
| 'US:CA-1char': [488, 642, 82, 92] | |
| 'US:CA-2char': [388, 642, 94, 94] | |
| 'US:CA-3char': [268, 642, 112, 92] | |
| 'US:CA-4char': [136, 642, 124, 92] | |
| 'US:CA-5char': [0, 642, 128, 92] | |
| 'US:I-1char': [908, 745, 88, 100] | |
| 'US:I-2char': [798, 745, 102, 100] | |
| 'US:I-3char': [658, 745, 134, 100] | |
| 'US:I-4char': [512, 745, 140, 100] | |
| 'US:I-5char': [352, 745, 152, 100] | |
| 'US:NY-1char': [756, 386, 72, 88] | |
| 'US:NY-2char': [660, 386, 88, 88] | |
| 'US:NY-3char': [548, 386, 104, 86] | |
| 'US:NY-4char': [424, 388, 116, 84] | |
| 'US:NY-5char': [296, 386, 120, 86] | |
| 'US:PA-1char': [216, 386, 72, 88] | |
| 'US:PA-2char': [120, 386, 88, 88] | |
| 'US:PA-3char': [0, 386, 112, 88] | |
| 'US:PA-4char': [892, 254, 120, 88] | |
| 'US:PA-5char': [756, 254, 128, 88] | |
| 'US:US-1char': [256, 746, 88, 94] | |
| 'US:US-2char': [144, 746, 106, 94] | |
| 'US:US-3char': [0, 746, 138, 100] | |
| 'US:US-4char': [748, 642, 156, 100] | |
| 'US:US-5char': [576, 642, 164, 100] | |
| airport: [870, 0, 38, 38] | |
| aerodrome: [870, 0, 38, 38] | |
| aquarium: [732, 168, 38, 38] | |
| arrow: [368, 210, 38, 38] | |
| atm: [918, 126, 38, 38] | |
| bakery: [548, 168, 38, 38] | |
| bank: [964, 126, 38, 38] | |
| category-predicate-money: [964, 126, 38, 38] | |
| bar: [230, 168, 38, 38] | |
| pub: [230, 168, 38, 38] | |
| category-predicate-drink: [230, 168, 38, 38] | |
| baseball: [460, 84, 38, 38] | |
| basketball: [414, 84, 38, 38] | |
| beach: [598, 84, 38, 38] | |
| bench: [548, 0, 38, 38] | |
| bicycle: [872, 126, 38, 38] | |
| bicycle_rental: [872, 126, 38, 38] | |
| bicycle_rental_station: [872, 126, 38, 38] | |
| bicycle_parking: [644, 126, 38, 38] | |
| biergarten: [276, 210, 38, 38] | |
| brewery: [276, 210, 38, 38] | |
| books: [826, 126, 38, 38] | |
| bridge: [874, 84, 38, 38] | |
| buddhist: [736, 84, 38, 38] | |
| building: [414, 168, 38, 38] | |
| hangar: [414, 168, 38, 38] | |
| nursing_home: [414, 168, 38, 38] | |
| manor: [414, 168, 38, 38] | |
| apartments: [414, 168, 38, 38] | |
| care_home: [414, 168, 38, 38] | |
| bus_station: [778, 0, 38, 38] | |
| bus_stop: [778, 0, 38, 38] | |
| butcher: [920, 42, 38, 38] | |
| cafe: [502, 168, 38, 38] | |
| camp_site: [782, 84, 38, 38] | |
| summer_camp: [782, 84, 38, 38] | |
| capital-l: [590, 210, 32, 32] | |
| capital-m: [558, 210, 24, 24] | |
| capital-s: [528, 210, 20, 20] | |
| capital-xl: [678, 210, 42, 36] | |
| capital-xs: [506, 210, 16, 16] | |
| car: [780, 126, 38, 38] | |
| category-namespace-mobility: [780, 126, 38, 38] | |
| category-predicate-mobility: [780, 126, 38, 38] | |
| car_repair: [0, 168, 38, 38] | |
| car_sharing: [594, 0, 38, 38] | |
| castle: [414, 42, 38, 38] | |
| fort: [414, 42, 38, 38] | |
| cemetery: [690, 84, 38, 38] | |
| grave_yard: [690, 84, 38, 38] | |
| christian: [184, 126, 38, 38] | |
| cinema: [778, 168, 38, 38] | |
| clothes: [824, 168, 38, 38] | |
| fashion: [824, 168, 38, 38] | |
| college: [870, 168, 38, 38] | |
| university: [870, 168, 38, 38] | |
| confectionery: [0, 210, 38, 38] | |
| convenience: [46, 84, 38, 38] | |
| county_shield-1char: [404, 478, 72, 72] | |
| county_shield-2char: [300, 478, 96, 72] | |
| county_shield-3char: [160, 478, 132, 72] | |
| county_shield-4char: [0, 478, 152, 72] | |
| county_shield-5char: [836, 386, 180, 72] | |
| courthouse: [364, 0, 38, 38] | |
| department_store: [734, 126, 38, 38] | |
| drinking_water: [230, 210, 38, 38] | |
| dry_cleaning: [0, 84, 38, 38] | |
| electronics: [598, 126, 38, 38] | |
| computer: [598, 126, 38, 38] | |
| estate_agent: [138, 42, 38, 38] | |
| factory: [368, 168, 38, 38] | |
| industrial: [368, 168, 38, 38] | |
| chimney: [368, 168, 38, 38] | |
| substation: [368, 168, 38, 38] | |
| wastewater_plant: [368, 168, 38, 38] | |
| works: [368, 168, 38, 38] | |
| water_works: [368, 168, 38, 38] | |
| plant: [368, 168, 38, 38] | |
| generator: [368, 168, 38, 38] | |
| category-predicate-industry: [368, 168, 38, 38] | |
| fast_food: [138, 210, 38, 38] | |
| ferry: [824, 0, 38, 38] | |
| ferry_terminal: [824, 0, 38, 38] | |
| fire_station: [318, 0, 38, 38] | |
| fitness: [874, 42, 38, 38] | |
| fitness_station: [874, 42, 38, 38] | |
| florist: [138, 126, 38, 38] | |
| forest: [46, 210, 38, 38] | |
| natural_forest: [46, 210, 38, 38] | |
| nature_reserve: [46, 210, 38, 38] | |
| fountain: [276, 126, 38, 38] | |
| fuel: [960, 168, 38, 38] | |
| gallery: [640, 168, 38, 38] | |
| garden: [644, 84, 38, 38] | |
| generic: [414, 210, 38, 38] | |
| category-namespace-other: [414, 210, 38, 38] | |
| category-predicate-addressing: [414, 210, 38, 38] | |
| generic_shield-1char: [104, 554, 72, 72] | |
| generic_shield-2char: [0, 554, 98, 72] | |
| generic_shield-3char: [832, 478, 132, 72] | |
| generic_shield-4char: [672, 478, 152, 72] | |
| generic_shield-5char: [484, 478, 180, 72] | |
| gift: [92, 126, 38, 38] | |
| golf_course: [368, 84, 38, 38] | |
| government: [138, 168, 38, 38] | |
| townhall: [138, 168, 38, 38] | |
| public: [138, 168, 38, 38] | |
| embassy: [138, 168, 38, 38] | |
| category-predicate-civic: [138, 168, 38, 38] | |
| hairdresser: [46, 42, 38, 38] | |
| hardware: [828, 42, 38, 38] | |
| doityourself: [828, 42, 38, 38] | |
| painter: [828, 42, 38, 38] | |
| historical: [46, 126, 38, 38] | |
| hospital: [184, 0, 38, 38] | |
| category-namespace-health: [184, 0, 38, 38] | |
| category-predicate-health: [184, 0, 38, 38] | |
| hotel: [732, 0, 38, 38] | |
| motel: [732, 0, 38, 38] | |
| hostel: [732, 0, 38, 38] | |
| category-predicate-sleep: [732, 0, 38, 38] | |
| ice_cream: [322, 210, 38, 38] | |
| information: [460, 210, 38, 38] | |
| jewelry: [736, 42, 38, 38] | |
| jewish: [46, 0, 38, 38] | |
| landmark: [272, 0, 38, 38] | |
| memorial: [272, 0, 38, 38] | |
| monument: [272, 0, 38, 38] | |
| tower: [272, 0, 38, 38] | |
| beacon: [272, 0, 38, 38] | |
| laundry: [690, 42, 38, 38] | |
| library: [0, 0, 38, 38] | |
| light_rail: [686, 0, 38, 38] | |
| tram_stop: [686, 0, 38, 38] | |
| lighthouse: [230, 84, 38, 38] | |
| liquor: [506, 126, 38, 38] | |
| alcohol: [506, 126, 38, 38] | |
| mall: [644, 42, 38, 38] | |
| marina: [92, 168, 38, 38] | |
| dock: [92, 168, 38, 38] | |
| mineshaft: [782, 42, 38, 38] | |
| quarry: [782, 42, 38, 38] | |
| adit: [782, 42, 38, 38] | |
| mobile_phone: [506, 42, 38, 38] | |
| museum: [0, 126, 38, 38] | |
| observatory: [0, 126, 38, 38] | |
| music: [368, 42, 38, 38] | |
| muslim: [92, 0, 38, 38] | |
| newspaper: [322, 42, 38, 38] | |
| kiosk: [322, 42, 38, 38] | |
| office: [552, 84, 38, 38] | |
| insurance: [552, 84, 38, 38] | |
| company: [552, 84, 38, 38] | |
| category-predicate-service: [552, 84, 38, 38] | |
| optician: [276, 42, 38, 38] | |
| park: [230, 126, 38, 38] | |
| category-predicate-nature: [230, 126, 38, 38] | |
| parking: [690, 126, 38, 38] | |
| peak: [184, 84, 38, 38] | |
| pet: [230, 42, 38, 38] | |
| pharmacy: [966, 42, 38, 38] | |
| photographic_laboratory: [184, 42, 38, 38] | |
| photographer: [184, 42, 38, 38] | |
| pier: [640, 0, 38, 38] | |
| place_of_worship: [276, 168, 38, 38] | |
| chapel: [276, 168, 38, 38] | |
| wayside_shrine: [276, 168, 38, 38] | |
| category-predicate-religion: [276, 168, 38, 38] | |
| playground: [460, 42, 38, 38] | |
| police: [226, 0, 38, 38] | |
| post_office: [322, 168, 38, 38] | |
| recycling: [92, 42, 38, 38] | |
| restaurant: [92, 210, 38, 38] | |
| category-namespace-eat_and_drink: [92, 210, 38, 38] | |
| category-predicate-eat: [92, 210, 38, 38] | |
| retail: [598, 42, 38, 38] | |
| store: [598, 42, 38, 38] | |
| category-namespace-shop_and_service: [598, 42, 38, 38] | |
| category-predicate-shop: [598, 42, 38, 38] | |
| ruin: [502, 0, 38, 38] | |
| ruins: [502, 0, 38, 38] | |
| archaeological_site: [502, 0, 38, 38] | |
| school: [506, 84, 38, 38] | |
| kindergarten: [506, 84, 38, 38] | |
| category-namespace-education_and_religion: [506, 84, 38, 38] | |
| category-predicate-education: [506, 84, 38, 38] | |
| sdk_shield-1char: [832, 554, 84, 84] | |
| sdk_shield-2char: [712, 554, 112, 84] | |
| sdk_shield-3char: [560, 554, 144, 84] | |
| sdk_shield-4char: [384, 554, 168, 84] | |
| sdk_shield-5char: [184, 554, 192, 84] | |
| shoemaker: [552, 42, 38, 38] | |
| ski: [322, 126, 38, 38] | |
| ski_rental: [322, 126, 38, 38] | |
| ski_school: [322, 126, 38, 38] | |
| winter_sports: [322, 126, 38, 38] | |
| slipway: [138, 84, 38, 38] | |
| soccer: [322, 84, 38, 38] | |
| sports: [0, 42, 38, 38] | |
| sports_centre: [184, 168, 38, 38] | |
| pitch: [184, 168, 38, 38] | |
| recreation_ground: [184, 168, 38, 38] | |
| spring: [276, 84, 38, 38] | |
| hot_spring: [276, 84, 38, 38] | |
| stadium: [414, 126, 38, 38] | |
| subway_entrance: [456, 0, 38, 38] | |
| supermarket: [552, 126, 38, 38] | |
| greengrocer: [552, 126, 38, 38] | |
| swimming_pool: [460, 126, 38, 38] | |
| swimming_area: [460, 126, 38, 38] | |
| tailor: [962, 0, 38, 38] | |
| tennis: [368, 126, 38, 38] | |
| theatre: [594, 168, 38, 38] | |
| category-predicate-fun: [594, 168, 38, 38] | |
| theme_park: [966, 84, 38, 38] | |
| amusement_ride: [966, 84, 38, 38] | |
| toilets: [828, 84, 38, 38] | |
| townspot-l: [978, 210, 32, 32] | |
| townspot-l-rev: [806, 210, 32, 32] | |
| townspot-m: [946, 210, 24, 24] | |
| townspot-m-rev: [774, 210, 24, 24] | |
| townspot-s: [918, 210, 20, 20] | |
| townspot-s-rev: [746, 210, 20, 20] | |
| townspot-xl: [0, 254, 40, 40] | |
| townspot-xl-rev: [846, 210, 38, 38] | |
| townspot-xs: [894, 210, 16, 16] | |
| townspot-xs-rev: [726, 210, 12, 12] | |
| toys: [916, 0, 38, 38] | |
| traffic_signals: [916, 168, 38, 38] | |
| train_station: [410, 0, 38, 38] | |
| station: [410, 0, 38, 38] | |
| train: [410, 0, 38, 38] | |
| category-predicate-transport: [410, 0, 38, 38] | |
| ux-current-location: [342, 254, 88, 88] | |
| ux-locate-off: [676, 254, 72, 72] | |
| ux-locate-on: [596, 254, 72, 72] | |
| ux-route-arrow: [48, 254, 128, 128] | |
| ux-route-start: [262, 254, 72, 92] | |
| ux-route-stop: [184, 254, 72, 92] | |
| ux-search-active: [436, 254, 72, 108] | |
| ux-search-inactive: [516, 254, 72, 108] | |
| ux-transit-stop: [630, 212, 42, 36] | |
| veterinary: [138, 0, 38, 38] | |
| viewpoint: [686, 168, 38, 38] | |
| category-namespace-do_and_see: [686, 168, 38, 38] | |
| category-predicate-attraction: [686, 168, 38, 38] | |
| vineyard: [46, 168, 38, 38] | |
| volcano: [92, 84, 38, 38] | |
| wine: [184, 210, 38, 38] | |
| winery: [456, 168, 38, 38] | |
| zoo: [920, 84, 38, 38] | |
| building-grid: | |
| url: images/building-grid.gif | |
| filtering: mipmap | |
| sources: | |
| fpdcc_parking_lots: | |
| type: GeoJSON | |
| url: https://raw.githubusercontent.com/fpdcc/webmap_data_updates/master/basemap/FPCC-basemap-parking-icons.geojson | |
| fpdcc: | |
| type: GeoJSON | |
| url: https://raw.githubusercontent.com/fpdcc/webmap_data_updates/master/map%20data/geojson/FPCC_boundary.geojson | |
| mapzen: | |
| type: MVT | |
| url: https://tile.nextzen.org/tilezen/vector/v1/all/{z}/{x}/{y}.mvt | |
| url_params: | |
| api_key: mbsddWddR263J5Ev_c3ecg | |
| #url: https://tile.dev.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.topojson | |
| # url: //localhost:8080/vector/all/{z}/{x}/{y}.topojson | |
| #max_zoom: 16 | |
| cameras: | |
| isometric: | |
| type: isometric | |
| styles: | |
| ##### LIBRARY OF FUNCTIONS | |
| # SPACE functions | |
| space-tile: | |
| shaders: | |
| blocks: | |
| global: | | |
| // Variant to be add to both vertex and fragments shaders | |
| varying vec3 v_pos; | |
| // | |
| // Get the coordinates in tile space | |
| // ================================ | |
| vec2 getTileCoords() { | |
| return fract(v_pos.xy); | |
| } | |
| position: | | |
| // Normalize the attribute position of a vertex | |
| v_pos = modelPosition().xyz; | |
| space-constant: | |
| shaders: | |
| blocks: | |
| global: | | |
| // Get the constant coordinates (glitches on zooms) | |
| // ================================ | |
| vec2 getConstantCoords () { | |
| #ifdef TANGRAM_FRAGMENT_SHADER | |
| const float pixel_scale = 695.; | |
| float meter_pixels = u_meters_per_pixel / u_device_pixel_ratio; | |
| vec2 st = gl_FragCoord.xy/pixel_scale; | |
| const float dot_wrap = 1000.; | |
| st += mod(u_map_position.xy / meter_pixels, dot_wrap)/pixel_scale; | |
| return st; | |
| #else | |
| return vec2(0.0,0.0); | |
| #endif | |
| } | |
| # TILING functions | |
| tiling-tile: | |
| shaders: | |
| blocks: | |
| global: | | |
| // Repeats a coordinate space (st) in diferent tiles | |
| // ================================ | |
| vec2 tile(vec2 st, float zoom){ | |
| st *= zoom; | |
| return fract(st); | |
| } | |
| tiling-brick: | |
| shaders: | |
| blocks: | |
| global: | | |
| // Repeats a coordinate space (st) in diferent brick-like tiles | |
| // ================================ | |
| vec2 brick(vec2 st, float zoom){ | |
| st *= zoom; | |
| // Here is where the offset is happening | |
| st.x += step(1., mod(st.y, 2.0)) * 0.5; | |
| return fract(st); | |
| } | |
| tiling-mirror: | |
| shaders: | |
| blocks: | |
| global: | | |
| // Mirror the coordinate space | |
| // ================================ | |
| vec2 mirror(vec2 _st, vec2 _zoom){ | |
| _st *= _zoom; | |
| if (fract(_st.y * 0.5) > 0.5){ | |
| _st.x = _st.x + 0.5; | |
| _st.y = 1.0 - _st.y; | |
| } | |
| return fract(_st); | |
| } | |
| # Usefull functions | |
| functions-aastep: | |
| shaders: | |
| extensions: OES_standard_derivatives | |
| blocks: | |
| global: | | |
| // AntiAliased Step function | |
| //============================= | |
| float aastep(float threshold, float value) { | |
| #ifdef TANGRAM_FRAGMENT_SHADER | |
| #ifdef TANGRAM_EXTENSION_OES_standard_derivatives | |
| float afwidth = length(vec2(dFdx(value), dFdy(value))) * 0.70710678118654757; | |
| return smoothstep(threshold-afwidth, threshold+afwidth, value); | |
| #else | |
| return step(threshold, value); | |
| #endif | |
| #else | |
| return step(threshold, value); | |
| #endif | |
| } | |
| # Generative functions | |
| generative-random: | |
| shaders: | |
| blocks: | |
| global: | | |
| // 1D Random for 1 and 2 dimentions | |
| // ================================ | |
| float random(float x) { return fract(sin(x)*43758.5453);} | |
| float random(vec2 p) { return fract(1e4 * sin(17.0 * p.x + p.y * 0.1) * (0.1 + abs(sin(p.y * 13.0 + p.x)))); } | |
| float random(vec3 p) { return fract(sin(dot(p.xyz, vec3(70.9898,78.233,32.4355)))* 43758.5453123); } | |
| // | |
| // 2D Random for 2 dimentions | |
| // ================================ | |
| vec2 random2 (vec2 xy) { return fract(sin(vec2(dot(xy,vec2(127.1,311.7)),dot(xy,vec2(269.5,183.3))))*43758.5453); } | |
| // | |
| // 3D Random for 2 dimentions | |
| // ================================ | |
| vec3 random3 (vec2 xy) { return fract(sin(vec3( dot(xy,vec2(127.1,311.7)), dot(xy,vec2(269.5,183.3)), dot(xy,vec2(419.2,371.9)) ))*43758.5453); } | |
| vec3 random3 (vec3 c) { | |
| float j = 4096.0*sin(dot(c,vec3(17.0, 59.4, 15.0))); | |
| vec3 r; | |
| r.z = fract(512.0*j); | |
| j *= .125; | |
| r.x = fract(512.0*j); | |
| j *= .125; | |
| r.y = fract(512.0*j); | |
| return r-0.5; | |
| } | |
| # Drawing Shapes functions | |
| shapes-circle: | |
| mix: functions-aastep | |
| shaders: | |
| defines: | |
| PI: 3.14159265358979323846 | |
| blocks: | |
| global: | | |
| // get distance field of a Circle | |
| // ================================ | |
| float circleDF (vec2 st) { | |
| return dot(st,st); | |
| } | |
| // | |
| // Draw a circle in the middle of the ST space | |
| // ================================ | |
| float circle (vec2 st, float radius) { | |
| return 1.-aastep(radius, circleDF(st-vec2(0.5))*PI); | |
| } | |
| shapes-rect: | |
| shaders: | |
| blocks: | |
| global: | | |
| // get distance field of a rectangle in the center | |
| // ================================ | |
| float rectDF(vec2 st, vec2 size) { | |
| //float aspect = u_resolution.x/u_resolution.y; | |
| st = st*2.-1.; | |
| //st.x *= aspect; | |
| return length(max(abs(st)-size,.0)); | |
| } | |
| float rectDF(vec2 st, float size) { | |
| //float aspect = u_resolution.x/u_resolution.y; | |
| st = st*2.-1.; | |
| //st.x *= aspect; | |
| return length(max(abs(st)-size,.0)); | |
| } | |
| // Draw a round corners rectangle in the center | |
| // ================================ | |
| float rect(vec2 st, vec2 size, float radio) { | |
| radio = max(.000001, radio); | |
| return 1.0-step(radio, rectDF(st, size-radio)); | |
| } | |
| float rect(vec2 st, float size, float radio) { | |
| return rect(st,vec2(size),radio); | |
| } | |
| // Draw a rectangle in the center | |
| // ================================ | |
| float rect(vec2 st, vec2 size){ | |
| size = .25-size*.125; | |
| vec2 uv = step(size,st*(1.0-st)); | |
| return (uv.x*uv.y); | |
| } | |
| float rect(vec2 st, float size){ | |
| return rect(st,vec2(size)); | |
| } | |
| # Patterns compositions functions | |
| patterns-stripes: | |
| mix: functions-aastep | |
| shaders: | |
| defines: | |
| PI: 3.14159265358979323846 | |
| blocks: | |
| global: | | |
| // Return a distance function of stripes | |
| float stripesDF (vec2 st) { | |
| return abs(sin(st.y*PI)); | |
| } | |
| // Adjustable width stripes | |
| float stripes (vec2 st, float width) { | |
| return aastep(width,stripesDF(st)); | |
| } | |
| // Faster optimisation of diagonal stripes | |
| float diagonalStripes (vec2 st) { | |
| vec2 i_st = floor(st); | |
| vec2 f_st = fract(st); | |
| if (mod(i_st.y,2.) - mod(i_st.x,2.) == 0.) { | |
| return 1.0 - aastep(f_st.x,f_st.y); | |
| } else { | |
| return aastep(f_st.x,f_st.y); | |
| } | |
| } | |
| dots-honeycomb: | |
| mix: [space-tile, tiling-brick, shapes-circle] | |
| shaders: | |
| blocks: | |
| global: | | |
| // Interpolated dot patern between zooms attached to tile coords | |
| float TileDots(float scale, float size) { | |
| // Beginning of the transition | |
| vec2 IN = brick(getTileCoords()*scale,2.); | |
| float A = circleDF(vec2(0.5)-IN)*1.8; | |
| // | |
| // If over 18. add an end B to transition with | |
| float d = 0.0; | |
| if (u_map_position.z < 18.) { | |
| vec2 OUT = fract(getTileCoords()*scale*2.); | |
| float B = circleDF(vec2(0.25)-OUT)*5.; | |
| B = min(B, circleDF(vec2(0.75,0.25)-OUT)*5.); | |
| B = min(B, circleDF(vec2(0.5,0.75)-OUT)*5.); | |
| B = min(B, circleDF(vec2(0.,0.75)-OUT)*5.); | |
| B = min(B, circleDF(vec2(1.,0.75)-OUT)*5.); | |
| d = mix(A, B, pow(fract(u_map_position.z),10.)); | |
| } else { | |
| d = A; | |
| } | |
| // | |
| // Use the antialias step to make a shape from the DF | |
| return aastep(size,d);; | |
| } | |
| ##### ACTUAL STYLES | |
| dashed: | |
| base: lines | |
| dash: [1.25, 1.25] | |
| dashed_big: | |
| base: lines | |
| dash: [2.0, 1.0] | |
| dashed_steps: | |
| base: lines | |
| dash: [0.75, 0.25] | |
| dash_background_color: global.white_color | |
| railway_dash: | |
| base: lines | |
| dash: [0.25, 1.0] | |
| dash_background_color: global.offwhite_color | |
| pixel-pattern-light: | |
| mix: [space-tile, generative-random] | |
| base: polygons | |
| shaders: | |
| uniforms: | |
| u_tint: global.lightest_color | |
| blocks: | |
| filter: | | |
| vec3 pos = vec3(getTileCoords()*130.0,1.0); | |
| color.rgb = u_tint * vec3(random(abs(floor(pos)))+0.905); | |
| pixel-pattern-bright: | |
| mix: [space-tile, generative-random] | |
| base: polygons | |
| shaders: | |
| uniforms: | |
| u_tint: global.lightest_color | |
| blocks: | |
| filter: | | |
| vec3 pos = vec3(getTileCoords()*180.0,1.0); | |
| color.rgb = vec3(random(abs(floor(pos)))+0.950); | |
| color.rgb *= u_tint; | |
| dots: | |
| mix: [space-tile, tiling-tile, shapes-circle] | |
| base: polygons | |
| shaders: | |
| defines: | |
| PATTERN_SCALE: 50.0 | |
| DOT_SIZE: .1 | |
| COLOR1: vec3(1.00,1.00,1.00) | |
| COLOR2: color.rgb | |
| blocks: | |
| color: | | |
| color.rgb = mix(COLOR1, COLOR2, circle(tile(getTileCoords(),PATTERN_SCALE), DOT_SIZE)); | |
| dots-rev-grid: | |
| mix: [space-tile, tiling-tile, shapes-circle] | |
| base: polygons | |
| shaders: | |
| defines: | |
| PATTERN_SCALE: 60.0 | |
| DOT_SIZE: .4 | |
| COLOR1: vec3(1.00,1.00,1.00) | |
| COLOR2: color.rgb | |
| blocks: | |
| color: | | |
| color.rgb = mix(COLOR2, COLOR1, circle(tile(getTileCoords(),PATTERN_SCALE), DOT_SIZE)); | |
| medium-dots: | |
| mix: dots | |
| base: polygons | |
| shaders: | |
| defines: | |
| PATTERN_SCALE: 60.0 | |
| DOT_SIZE: .25 | |
| COLOR1: vec3(1.00,1.00,1.00) | |
| COLOR2: color.rgb | |
| tiny-dots: | |
| mix: dots | |
| shaders: | |
| defines: | |
| PATTERN_SCALE: 70.0 | |
| DOT_SIZE: .125 | |
| COLOR1: vec3(1.00,1.00,1.00) | |
| COLOR2: color.rgb | |
| dots-rev: | |
| base: polygons | |
| mix: dots-honeycomb | |
| shaders: | |
| defines: | |
| COLOR1: vec3(1.00,1.00,1.00) | |
| PATTERN_SCALE: 35.0 | |
| blocks: | |
| color: | | |
| color.rgb = mix(COLOR1, color.rgb, TileDots(PATTERN_SCALE, 0.31)); | |
| horizontal-bars: | |
| base: polygons | |
| mix: [space-constant, shapes-rect] | |
| texcoords: false | |
| shaders: | |
| defines: | |
| COLOR1: vec3(1.0,1.0,1.0) | |
| blocks: | |
| global: | | |
| float bar(in vec2 st, float size){ | |
| return rect(st, vec2(size*0.90,size*0.2)); | |
| } | |
| filter: | | |
| vec2 pos = getConstantCoords()*50.0; | |
| float pct = clamp(bar(fract(pos),0.5),0.0,1.0); | |
| color.rgb = mix(COLOR1,color.rgb,pct); | |
| horizontal-bars-rev: | |
| base: polygons | |
| mix: [space-constant, shapes-rect] | |
| texcoords: false | |
| shaders: | |
| defines: | |
| COLOR1: vec3(1.0,1.0,1.0) | |
| PATTERN_SCALE: 50.0 | |
| blocks: | |
| global: | | |
| float bar(in vec2 st, float size){ | |
| return rect(st, vec2(size*1.05,size*0.5)); | |
| } | |
| filter: | | |
| vec2 pos = getConstantCoords()*PATTERN_SCALE; | |
| float pct = clamp(bar(fract(pos),0.5),0.0,1.0); | |
| color.rgb = mix(color.rgb,COLOR1,pct); | |
| scale-buildings: | |
| shaders: | |
| blocks: | |
| position: | | |
| // scale buildings based on zoom | |
| float zoom = u_map_position.z; | |
| float min = .1; // minimum building scale | |
| float midpoint = 16.; // middle of zoom range | |
| float inspeed = .1; // number of zooms to scale buildings up | |
| float outspeed = 2.; // number of zooms to scale buildings back down | |
| float e = 0.; | |
| if (zoom >= midpoint) { | |
| e = (zoom - midpoint) / (outspeed * .2); | |
| } else { | |
| e = abs(zoom - midpoint) / inspeed; | |
| } | |
| position.z *= ((1. - min) / (1. + (exp(e)))) + min; | |
| building-grid: | |
| base: polygons | |
| lighting: false | |
| mix: [scale-buildings] | |
| texcoords: true | |
| shaders: | |
| uniforms: | |
| u_tex_grid: building-grid | |
| u_grid_color: global.black_color | |
| defines: | |
| WALL_TINT: vec3(1., 3., .993) | |
| blocks: | |
| color: | | |
| // If it's a wall | |
| color.rgb = mix(mix(color.rgb, u_grid_color.rgb, texture2D(u_tex_grid, v_texcoord).a), | |
| color.rgb, | |
| step(.5,dot(vec3(0., 0., 1.), worldNormal()))); | |
| building-lines: | |
| base: lines | |
| mix: scale-buildings | |
| texcoords: true | |
| lines_transparent: | |
| base: lines | |
| blend: overlay | |
| outline_transparent: | |
| base: lines | |
| blend: overlay | |
| polygons_transparent: | |
| base: polygons | |
| blend: overlay | |
| icons: | |
| base: points | |
| texture: pois | |
| blend_order: 1 | |
| colorized-icons: | |
| mix: icons | |
| shaders: | |
| uniforms: | |
| u_tint: global.black_color | |
| u_fill: global.white_color | |
| blocks: | |
| filter: | | |
| color.rgb = mix(u_tint.rgb, u_fill.rgb, color.rgb); | |
| text-blend-order: | |
| base: text | |
| blend_order: 1 | |
| ux-lines-overlay: | |
| base: lines | |
| blend: overlay | |
| blend_order: 0 | |
| ux-transit-line-overlay: | |
| base: lines | |
| blend: overlay | |
| blend_order: 0 | |
| ux-location-gem-overlay: | |
| base: points | |
| texture: pois | |
| blend: overlay | |
| blend_order: 2 | |
| ux-icons-overlay: | |
| base: points | |
| texture: pois | |
| blend: overlay | |
| blend_order: 3 | |
| sdk-point-overlay: | |
| base: points | |
| texture: pois | |
| blend: overlay | |
| blend_order: 3 | |
| sdk-shield-overlay: | |
| base: points | |
| texture: pois | |
| blend: overlay | |
| blend_order: 3 | |
| sdk-line-overlay: | |
| base: lines | |
| blend: overlay | |
| blend_order: 0 | |
| sdk-polygon-overlay: | |
| base: polygons | |
| blend: overlay | |
| blend_order: 0 | |
| scene: | |
| background: | |
| color: global.white_color | |
| fonts: | |
| Open Sans: | |
| - weight: 300 # Light | |
| url: fonts/OpenSans-Light.woff | |
| - weight: normal # Regular | |
| url: fonts/OpenSans-Regular.woff | |
| - weight: normal # Regular | |
| style: italic | |
| url: fonts/OpenSans-Italic.woff | |
| - weight: 600 # Semi Bold | |
| url: fonts/OpenSans-Semibold.woff | |
| - weight: 600 # Semi Bold | |
| style: italic | |
| url: fonts/OpenSans-SemiboldItalic.woff | |
| - weight: bold | |
| url: fonts/OpenSans-Bold.woff | |
| Montserrat: | |
| - weight: normal | |
| #url: https://fonts.gstatic.com/s/montserrat/v7/zhcz-_WihjSQC0oHJ9TCYL3hpw3pgy2gAi-Ip7WPMi0.woff | |
| url: fonts/Montserrat-Regular.woff | |
| scene: | |
| background: | |
| color: global.white_color | |
| layers: | |
| # Map overlays for styling the server response (using special source layer names) for route line, current location, and search result pins | |
| fpdcc_parking_points: | |
| data: {source: fpdcc_parking_lots} | |
| draw: | |
| points: | |
| order: 1 | |
| #url: https://gist.github.com/glw/2c4e310cdf26f4b1714d7ba319c71eb8/raw/f0db4affb364ed9f0ed2df5809ea6ff2c81e515f/fpdcc_parking.png | |
| # define sprites: [x origin, y origin, width, height] | |
| color: [0.039, 0.004, 0.435, 0.50] | |
| fpdcc_boundaries: | |
| data: {source: fpdcc} | |
| draw: | |
| polygons: | |
| order: 180 | |
| color: [0.678, 0.820, 0.694, 1.00] | |
| mz_route_line: | |
| data: { source: mz_route_line } | |
| draw: | |
| ux-lines-overlay: | |
| interactive: global.sdk_interactive | |
| color: global.route_line | |
| order: 500 | |
| width: [[0,3.5px],[5,5px],[9,7px],[10,6px],[11,6px],[13,8px],[14,9px],[15,10px],[16,11px],[17,12px],[18,10px]] | |
| mz_route_line_transit: | |
| data: { source: mz_route_line_transit } | |
| draw: | |
| ux-transit-line-overlay: | |
| # each transit route segment could be a different "line" each with it's own color | |
| # but some transit lines don't define a color, in those cases default to blue | |
| # and since the color is coming from Transit.land they call it "color" instead of "colour" | |
| interactive: global.sdk_interactive | |
| color: function() { return feature.color || '#06a6d4'; } | |
| order: 500 | |
| width: [[0,3.5px],[5,5px],[9,7px],[10,6px],[11,6px],[13,8px],[14,9px],[15,10px],[16,11px],[17,12px],[18,10px]] | |
| mz_current_location_gem: | |
| data: { source: mz_current_location } | |
| draw: | |
| ux-location-gem-overlay: | |
| interactive: global.sdk_interactive | |
| sprite: ux-current-location | |
| size: 36px | |
| collide: false | |
| transition: { show: { time: 0s }, hide: { time: 0s } } | |
| mz_route_location: | |
| data: { source: mz_route_location } | |
| draw: | |
| ux-location-gem-overlay: | |
| interactive: global.sdk_interactive | |
| sprite: ux-route-arrow | |
| size: [60px,60px] | |
| collide: false | |
| transition: { show: { time: 0s }, hide: { time: 0s } } | |
| mz_route_start: | |
| data: { source: mz_route_start } | |
| draw: | |
| ux-icons-overlay: | |
| interactive: global.sdk_interactive | |
| priority: 1 | |
| sprite: ux-route-start | |
| size: [36px,46px] | |
| collide: false | |
| anchor: top | |
| transition: { show: { time: 0s }, hide: { time: 0s } } | |
| mz_route_destination: | |
| data: { source: mz_route_destination } | |
| draw: | |
| ux-icons-overlay: | |
| interactive: global.sdk_interactive | |
| priority: 1 | |
| sprite: ux-route-stop | |
| size: [36px,46px] | |
| collide: false | |
| anchor: top | |
| transition: { show: { time: 0s }, hide: { time: 0s } } | |
| mz_route_transit_stop: | |
| data: { source: mz_route_transit_stop } | |
| draw: | |
| ux-icons-overlay: | |
| interactive: global.sdk_interactive | |
| sprite: ux-transit-stop | |
| size: [15px,15px] | |
| collide: false | |
| transition: { show: { time: 0s }, hide: { time: 0s } } | |
| mz_search_result: | |
| data: { source: mz_search_result } | |
| draw: | |
| ux-icons-overlay: | |
| interactive: global.sdk_interactive | |
| sprite: ux-search-active | |
| size: [36px,54px] | |
| collide: false | |
| anchor: top | |
| transition: { show: { time: 0s }, hide: { time: 0s } } | |
| inactive: | |
| filter: { state: inactive } | |
| draw: | |
| ux-icons-overlay: | |
| sprite: ux-search-inactive | |
| mz_dropped_pin: | |
| data: { source: mz_dropped_pin } | |
| draw: | |
| ux-icons-overlay: | |
| interactive: global.sdk_interactive | |
| sprite: ux-search-active | |
| size: [36px,54px] | |
| collide: false | |
| anchor: top | |
| transition: { show: { time: 0s }, hide: { time: 0s } } | |
| # Used by the SDK to place point, line, and polygon overlays on the map | |
| mz_default_point: | |
| data: { source: mz_default_point } | |
| draw: | |
| sdk-point-overlay: | |
| interactive: global.sdk_interactive | |
| sprite: ux-search-active | |
| size: [36px,54px] | |
| collide: false | |
| anchor: top | |
| transition: { show: { time: 0s }, hide: { time: 0s } } | |
| mz_default_shield: | |
| data: { source: mz_default_shield } | |
| draw: | |
| sdk-shield-overlay: | |
| interactive: global.sdk_interactive | |
| sprite: | | |
| function() { | |
| if( feature.ref ) { | |
| return ('sdk_shield-' + feature.ref.length + 'char'); | |
| } else { | |
| return ('sdk_shield-' + feature.name.length + 'char'); | |
| } | |
| } | |
| sprite_default: sdk_shield-1char | |
| color: global.sdk_shield_color | |
| collide: false | |
| transition: { show: { time: 0s }, hide: { time: 0s } } | |
| text: | |
| # offset: [0px, -1px] | |
| text_source: | | |
| function() { | |
| if( feature.ref ) { | |
| return feature.ref; | |
| } else { | |
| return feature.name; | |
| } | |
| } | |
| anchor: center | |
| font: | |
| family: Montserrat | |
| fill: global.sdk_shield_text_color | |
| style: bold | |
| size: [[7,7px],[12,8px],[16,11px]] | |
| width_1char: | |
| filter: | | |
| function() { | |
| if( feature.ref ) { | |
| return (feature.ref.length === 1); | |
| } else { | |
| return (feature.name.length === 1); | |
| } | |
| } | |
| draw: | |
| sdk-shield-overlay: | |
| size: [[6,[16px,16px]],[13,[18px,18px]],[16,[21px,21px]]] | |
| width_2char: | |
| filter: | | |
| function() { | |
| if( feature.ref ) { | |
| return (feature.ref.length === 2); | |
| } else { | |
| return (feature.name.length === 2); | |
| } | |
| } | |
| draw: | |
| sdk-shield-overlay: | |
| size: [[6,[21px,16px]],[13,[24px,18px]],[16,[28px,21px]]] | |
| width_3char: | |
| filter: | | |
| function() { | |
| if( feature.ref ) { | |
| return (feature.ref.length === 3); | |
| } else { | |
| return (feature.name.length === 3); | |
| } | |
| } | |
| draw: | |
| sdk-shield-overlay: | |
| size: [[6,[27px,16px]],[13,[31px,18px]],[16,[36px,21px]]] | |
| width_4char: | |
| filter: | | |
| function() { | |
| if( feature.ref ) { | |
| return (feature.ref.length === 4); | |
| } else { | |
| return (feature.name.length === 4); | |
| } | |
| } | |
| draw: | |
| sdk-shield-overlay: | |
| size: [[6,[32px,16px]],[13,[36px,18px]],[16,[41px,21px]]] | |
| width_5char: | |
| filter: | | |
| function() { | |
| if( feature.ref ) { | |
| return (feature.ref.length === 5); | |
| } else { | |
| return (feature.name.length === 5); | |
| } | |
| } | |
| draw: | |
| sdk-shield-overlay: | |
| size: [[6,[37px,16px]],[13,[41px,18px]],[16,[48px,21px]]] | |
| # this is kinda a hack | |
| width_longggggg: | |
| filter: | | |
| function() { | |
| if( feature.ref ) { | |
| return (feature.ref.length > 5); | |
| } else { | |
| return (feature.name.length > 5); | |
| } | |
| } | |
| draw: | |
| sdk-shield-overlay: | |
| visible: false | |
| mz_default_line: | |
| data: { source: mz_default_line } | |
| draw: | |
| sdk-line-overlay: | |
| interactive: global.sdk_interactive | |
| color: '#06a6d4' | |
| order: 503 | |
| width: 3px | |
| mz_default_polygon: | |
| data: { source: mz_default_polygon } | |
| draw: | |
| sdk-polygon-overlay: | |
| interactive: global.sdk_interactive | |
| color: [0.02,0.65,0.82,0.5] #'#06b1e2' | |
| order: 501 | |
| sdk-line-overlay: | |
| color: '#06a6d4' | |
| order: 502 | |
| width: 0px | |
| # Basemap styling | |
| earth: | |
| data: { source: mapzen, layer: earth } | |
| continent: | |
| filter: { name: true, kind: [continent], $zoom: {max: 5} } | |
| draw: | |
| text-blend-order: | |
| visible: global.text_visible_continent | |
| text_source: ux_language_text_source | |
| font: | |
| size: 14px | |
| style: italic | |
| fill: global.black_color | |
| weight: 600 | |
| transform: uppercase | |
| continent-spacer: | |
| filter: { kind: continent } | |
| continent-spacer-z1-z5: | |
| filter: { $zoom: { min: 1, max: 5 } } | |
| draw: | |
| text-blend-order: | |
| text_source: ux_language_text_source_continent | |
| text_wrap: false | |
| island: | |
| filter: { kind: [archipelago, island, islet] } | |
| draw: | |
| text-blend-order: | |
| visible: global.text_visible_island | |
| text_wrap: 10 | |
| font: | |
| size: 12px | |
| style: italic | |
| fill: global.black_color | |
| weight: normal | |
| stroke: { color: global.white_color, width: 4 } | |
| new_water: | |
| data: { source: mapzen, layer: water } | |
| draw: | |
| polygons: | |
| order: global.feature_order | |
| color: [0.584, 0.898, 0.976, 1.00] # colors the wave lines | |
| new_later: | |
| filter: { $zoom: { min: 12 } } | |
| draw: | |
| polygons: | |
| color: [0.059, 0.404, 0.710, 1.00] # colors the wave lines | |
| order: global.feature_order | |
| new_lakes: | |
| filter: | |
| all: | |
| - kind: [ocean, lake, water, riverbank, reservoir, swimming_pool] | |
| any: | |
| # limit show smaller landuse areas to higher zooms | |
| - { $zoom: { min: 1 }, area: { min: 40000000000 } } | |
| - { $zoom: { min: 2 }, area: { min: 20000000000 } } | |
| # some weird natural earth scale set transition | |
| - { $zoom: { min: 3 }, area: { min: 80000000000 } } | |
| - { $zoom: { min: 4 }, area: { min: 5000000000 } } | |
| - { $zoom: { min: 5 }, area: { min: 700000000 } } | |
| - { $zoom: { min: 6 }, area: { min: 500000000 } } | |
| - { $zoom: { min: 7 }, area: { min: 160000000 } } | |
| - { $zoom: { min: 8 }, area: { min: 40000000 } } | |
| - { $zoom: { min: 9 }, area: { min: 10000000 } } | |
| - { $zoom: { min: 10 }, area: { min: 8000000 } } | |
| - { $zoom: { min: 11 }, area: { min: 2000000 } } | |
| - { $zoom: { min: 12 }, area: { min: 200000 } } | |
| - { $zoom: { min: 13 }, area: { min: 100000 } } | |
| - { $zoom: { min: 14 }, area: { min: 2000 } } | |
| - { $zoom: { min: 15 } } | |
| draw: | |
| polygons: | |
| color: red | |
| order: global.feature_order | |
| #draw: | |
| # polygons: | |
| # color: [0.584, 0.898, 0.976] | |
| other-water-areas: | |
| filter: { not: { kind: [ocean, lake, water, reservoir, playa] }, $zoom: { min: 11 }, area: { min: 100 } } | |
| draw: | |
| polygons: | |
| color: [0.078, 0.180, 0.392, 1.00] | |
| playas: | |
| filter: { kind: playa } | |
| draw: | |
| polygons: | |
| order: global.feature_order | |
| color: [0.584, 0.898, 0.976, 1.00] | |
| swimming_pool: | |
| filter: { kind: swimming_pool } | |
| draw: | |
| polygons: | |
| color: [0.584, 0.898, 0.976, 1.00] | |
| water-boundary-ocean: | |
| filter: { boundary: true, kind: ocean, $zoom: { min: 1 } } | |
| draw: | |
| coast: | |
| order: global.feature_order | |
| color: [0.584, 0.898, 0.976, 1.00] | |
| width: [[1, 1px], [20, 10px]] | |
| join: round | |
| water_boundaries-not-ocean: | |
| filter: { boundary: true, not: { kind: ocean }, $zoom: { min: 8 } } | |
| draw: | |
| coast: | |
| order: global.feature_order | |
| color: [0.584, 0.898, 0.976, 1.00] | |
| width: [[6, 0.75px], [10, 1px], [14, 2px], [16, 3px]] | |
| join: round | |
| # do we still need this? | |
| # early: | |
| # filter: { $zoom: { min: 14 } } | |
| # draw: | |
| # lines: | |
| # order: 241 | |
| swimming-pools-early: | |
| filter: { kind: swimming_pool, $zoom: { max: 19 } } | |
| draw: | |
| coast: | |
| visible: false | |
| new_riverbank: | |
| # river boundaries like the thames in london, la seine in paris | |
| filter: { kind: riverbank } | |
| draw: | |
| coast: | |
| color: [0.137, 0.290, 0.569, 1.00] | |
| width: [[9, 0.5px], [11, 1px], [14, 1px], [15, 2px]] | |
| new_river: | |
| #river center lines, not boundaries for polygons | |
| filter: { kind: [river,canal,stream,dam,ditch,drain], $zoom: { min: 14 }, not: { is_tunnel: true } } | |
| draw: | |
| lines: | |
| order: global.feature_order | |
| color: [0.059, 0.173, 0.380, 1.00] | |
| width: [[14, 0.5px], [15, 2px], [17, 6px],[ 18, 8px]] | |
| cap: round | |
| water-area-labels: | |
| filter: | |
| all: | |
| - name: true | |
| - function() { return global.text_visible_water_labels; } | |
| ocean-sea-labels: | |
| filter: { kind: [sea, ocean] } | |
| draw: | |
| text-blend-order: | |
| text_source: global.ux_language_text_source | |
| font: | |
| fill: global.black_color | |
| family: global.text_font_family | |
| weight: normal | |
| size: 12px | |
| transform: uppercase | |
| ocean-spacer: | |
| filter: { kind: ocean } | |
| ocean-spacer-z1-up: | |
| filter: { $zoom: { min: 1 } } | |
| draw: | |
| text-blend-order: | |
| text_source: global.ux_language_text_source_ocean | |
| text_wrap: false | |
| ocean-labels: | |
| draw: | |
| text-blend-order: | |
| font: | |
| size: [[1, 7px], [2, 9px], [4, 15px]] | |
| sea-early: | |
| filter: { $zoom: [3], kind: sea } | |
| draw: { text-blend-order: { visible: false } } | |
| sea-spacer: | |
| filter: { not: { kind: [ocean] }, $zoom: { min: 4 } } | |
| draw: | |
| text-blend-order: | |
| text_source: global.ux_language_text_source_sea | |
| text_wrap: false | |
| sea-labels: | |
| filter: { not: { kind: [ocean] } } | |
| draw: | |
| text-blend-order: | |
| font: | |
| fill: global.dark_color | |
| size: [[4, 9px], [6, 10px], [18, 16px]] | |
| mostly-lakes: | |
| filter: | |
| all: | |
| - $geometry: point | |
| - not: { kind: [riverbank, dock, playa] } | |
| - area: true | |
| any: | |
| # show labels for smaller landuse areas at higher zooms | |
| - { $zoom: { min: 5 }, area: { min: 10000000000 } } | |
| - { $zoom: { min: 6 }, area: { min: 5000000000 } } | |
| - { $zoom: { min: 7 }, area: { min: 400000000 } } | |
| - { $zoom: { min: 8 }, area: { min: 200000000 } } | |
| - { $zoom: { min: 9 }, area: { min: 100000000 } } | |
| - { $zoom: { min: 10 }, area: { min: 100000000 } } | |
| - { $zoom: { min: 11 }, area: { min: 10000000 } } | |
| - { $zoom: { min: 12 }, area: { min: 2000000 } } | |
| - { $zoom: { min: 13 }, area: { min: 1000000 } } | |
| - { $zoom: { min: 14 }, area: { min: 500000 } } | |
| - { $zoom: { min: 15 }, area: { min: 100000 } } | |
| - { $zoom: { min: 15 }, area: { min: 50000 } } | |
| - { $zoom: { min: 16 }, area: { min: 20000 } } | |
| - { $zoom: { min: 17 } } | |
| default-label-text: | |
| draw: | |
| text-blend-order: | |
| text_source: global.ux_language_text_source | |
| font: | |
| fill: global.black_color | |
| family: global.text_font_family | |
| style: italic | |
| weight: normal | |
| size: 12px | |
| lakes-z5-up: | |
| filter: { $zoom: { min: 5 } } | |
| draw: | |
| text-blend-order: | |
| font: | |
| size: [[5, 9px], [10, 13px]] | |
| playa-labels: | |
| filter: | |
| all: | |
| - $geometry: point | |
| - kind: playa | |
| - area: true | |
| any: | |
| # show labels for smaller landuse areas at higher zooms | |
| - { $zoom: { min: 7 }, area: { min: 1500000000 } } | |
| - { $zoom: { min: 8 }, area: { min: 200000000 } } | |
| - { $zoom: { min: 9 }, area: { min: 100000000 } } | |
| - { $zoom: { min: 10 }, area: { min: 100000000 } } | |
| - { $zoom: { min: 11 }, area: { min: 10000000 } } | |
| - { $zoom: { min: 12 }, area: { min: 2000000 } } | |
| - { $zoom: { min: 13 }, area: { min: 1000000 } } | |
| - { $zoom: { min: 14 }, area: { min: 500000 } } | |
| - { $zoom: { min: 15 }, area: { min: 100000 } } | |
| - { $zoom: { min: 15 }, area: { min: 50000 } } | |
| - { $zoom: { min: 16 }, area: { min: 20000 } } | |
| - { $zoom: { min: 17 } } | |
| draw: | |
| text-blend-order: | |
| text_source: global.ux_language_text_source | |
| font: | |
| fill: global.mid_color | |
| family: global.text_font_family | |
| style: italic | |
| weight: normal | |
| size: 9px | |
| stroke: { color: global.white_color, width: 3 } | |
| water-line-labels: | |
| filter: | |
| all: | |
| - $geometry: line | |
| - kind: [river,canal,stream,dam,ditch,drain] | |
| - $zoom: { min: 14 } | |
| draw: | |
| text-blend-order: | |
| text_source: global.ux_language_text_source | |
| font: | |
| fill: global.black_color | |
| family: global.text_font_family | |
| style: italic | |
| weight: normal | |
| size: 12px | |
| water-line-labels: | |
| draw: | |
| text-blend-order: | |
| font: | |
| size: [[14,10px],[17,14px]] | |
| not-river-not-stream: | |
| filter: { kind: [canal,dam,ditch,drain], $zoom: { max: 16 } } | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| stream: | |
| filter: { kind: [stream], $zoom: { max: 17 } } | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| transit: | |
| data: { source: mapzen, layer: transit } | |
| subway-light-rail: | |
| filter: { not: { kind: [platform] }, $zoom: { min: 14 } } | |
| draw: | |
| lines: | |
| order: function() { return feature.sort_rank || 275; } | |
| railway: | |
| filter: { kind: [railway,train] } | |
| draw: | |
| lines: | |
| color: global.lighter_color | |
| width: [[14,0.5px],[16,1px],[18,1px]] | |
| subway: | |
| filter: { kind: subway } | |
| draw: | |
| lines: | |
| color: global.lighter_color | |
| width: [[14,0.5px],[16,1px],[18,1px]] | |
| light_rail: | |
| filter: { kind: [light_rail,tram], $zoom: { min: 15 } } | |
| draw: | |
| lines: | |
| order: 415 | |
| color: global.lighter_color | |
| width: [[14, 0px], [16, 1px]] | |
| transit-overlay-rail-lines: | |
| filter: | |
| not: { kind: [platform, railway] } | |
| draw: | |
| lines: | |
| order: 499 | |
| visible: global.sdk_transit_overlay | |
| color: purple | |
| width: [[5,1.5px],[6,2px],[11,3px],[18,4px]] | |
| outline: | |
| color: [1.,1.,1.,.8] | |
| width: [[7,0px],[8,0.25px],[9,0.5px],[12,1.0px],[13,1.75px],[14,2px]] | |
| train-sizing-color: | |
| filter: { kind: train } | |
| draw: | |
| lines: | |
| color: purple | |
| width: [[5,1.0px],[6,1.0px],[7,1.25px],[11,2.0px],[13,2.5px],[18,3.5px]] | |
| outline: | |
| width: [[12,1.0px],[13,1.75px],[14,2px]] | |
| stack-below-other-transit-later-zooms: | |
| filter: { $zoom: { min: 9 } } | |
| draw: | |
| lines: | |
| order: 511 | |
| subway-sizing: | |
| filter: { kind: subway } | |
| draw: | |
| lines: | |
| width: [[9,1px],[11,2px],[12,3px],[13,4px],[15,5px],[16,7px],[17,9px]] | |
| outline: | |
| #color: [[10,white],[11,black]] | |
| width: [[9,0px],[10,0.5px],[12,1.25px],[13,1.5px],[15,2px]] | |
| #width: [[12,1.5px],[13,2.0px],[14,2.5px]] | |
| light-rail-and-tram-sizing: | |
| filter: { kind: [light_rail, tram] } | |
| draw: | |
| lines: | |
| width: [[10,1px],[12,1.5px],[15,2px],[18,3.5px]] | |
| outline: | |
| #color: [[11,white],[12,black]] | |
| width: [[12,0.25px],[13,0.5px],[14,1px],[16,2px]] | |
| has-data-color: | |
| filter: { colour: true } | |
| draw: | |
| lines: | |
| order: 510 | |
| width: [[9,2px],[11,3px],[12,4px]] | |
| color: function() { return feature.colour || 'purple'; } | |
| #outline: | |
| #color: function() { if(feature.colour == 'silver') { return 'black'; } else { return [0.,0.,0.,.1]; } } | |
| #width: [[12,1.0px],[13,1.75px],[14,2px]] | |
| train-with-color: | |
| filter: { kind: train } | |
| draw: | |
| lines: | |
| order: 514 | |
| subway-with-color: | |
| filter: { kind: subway } | |
| draw: | |
| lines: | |
| order: 513 | |
| light-rail-and-tram-with-color: | |
| filter: { kind: [light_rail, tram] } | |
| draw: | |
| lines: | |
| order: 512 | |
| missing-colour: | |
| filter: { colour: false } | |
| train-missing-color: | |
| filter: { kind: train, colour: false } | |
| draw: | |
| lines: | |
| #width: [[5,1.25px],[6,1.75px],[11,2.0px],[13,2.5px],[18,2.5m]] | |
| order: 506 | |
| subway-missing-color: | |
| filter: { kind: subway, colour: false } | |
| draw: | |
| lines: | |
| order: 505 | |
| #outline: | |
| # width: [[12,1.5px],[13,2.0px],[14,2.5px]] | |
| light-rail-and-tram-missing-color: | |
| filter: { kind: [light_rail, tram], colour: false } | |
| draw: | |
| lines: | |
| order: 504 | |
| labels-transit-lines: | |
| filter: | |
| all: | |
| - function() { return global.sdk_transit_overlay; } | |
| - all: | |
| - $zoom: { min: 13 } | |
| - ref: true | |
| draw: | |
| icons: | |
| priority: 20 | |
| # you need to match any custom shield to the vector tile `network` values | |
| sprite: function() { return ('sdk_shield-' + feature.ref.length + 'char'); } | |
| sprite_default: sdk_shield_5char | |
| color: function() { if ( feature.kind === 'train') { return 'purple' } else { return feature.colour || 'purple'; } } | |
| # Size is specified below, and limited to 5 char in another filter | |
| repeat_group: shields | |
| repeat_distance: [[8,90px],[10,40px],[13,30px]] | |
| placement: midpoint | |
| placement_min_length_ratio: | |
| - [8, 0.1] | |
| - [9, 0.25] | |
| - [10, 0.25] | |
| - [11, 0.15] | |
| - [12, 1] | |
| - [13, 1.50] | |
| - [14, 2.0] | |
| cull_from_tile: true | |
| # visible: false | |
| text: | |
| offset: [0px, -0.5px] | |
| repeat_distance: 200px | |
| anchor: center | |
| text_source: function() { if( feature.ref.length < 6 ) { return feature.ref; } else { return ''; } } | |
| font: | |
| family: Montserrat | |
| fill: function() { if(feature.colour == 'yellow') { return '#555'; } else { return 'white'; } } | |
| style: bold | |
| size: [[7,7px],[12,8px],[16,11px]] | |
| width_1char: | |
| filter: function() { return (feature.ref.length === 1); } | |
| draw: | |
| icons: | |
| size: [[6,[16px,16px]],[13,[18px,18px]],[16,[21px,21px]]] | |
| width_2char: | |
| filter: function() { return (feature.ref.length === 2); } | |
| draw: | |
| icons: | |
| size: [[6,[21px,16px]],[13,[24px,18px]],[16,[28px,21px]]] | |
| width_3char: | |
| filter: function() { return (feature.ref.length === 3); } | |
| draw: | |
| icons: | |
| size: [[6,[27px,16px]],[13,[31px,18px]],[16,[36px,21px]]] | |
| width_4char: | |
| filter: function() { return (feature.ref.length === 4); } | |
| draw: | |
| icons: | |
| size: [[6,[32px,16px]],[13,[36px,18px]],[16,[41px,21px]]] | |
| # London sucks | |
| early: | |
| filter: { $zoom: { max: 14 } } | |
| draw: | |
| icons: | |
| visible: false | |
| width_5char: | |
| filter: function() { return (feature.ref.length === 5); } | |
| draw: | |
| icons: | |
| size: [[6,[37px,16px]],[13,[41px,18px]],[16,[48px,21px]]] | |
| # London sucks | |
| early: | |
| filter: { $zoom: { max: 14 } } | |
| draw: | |
| icons: | |
| visible: false | |
| # this is kinda a hack | |
| width_longggggg: | |
| filter: function() { return (feature.ref.length > 5); } | |
| draw: | |
| icons: | |
| visible: false | |
| z19-show-long-route-name: | |
| filter: | |
| all: | |
| - function() { return global.sdk_transit_overlay; } | |
| - $zoom: { min: 19 } | |
| draw: | |
| text: | |
| font: | |
| fill: global.black_color | |
| style: italic | |
| stroke: { color: global.white_color, width: 3px } | |
| platforms: | |
| data: { source: mapzen, layer: transit } | |
| filter: { kind: platform } | |
| draw: | |
| lines_transparent: | |
| color: global.transparent | |
| width: 5m | |
| visible: true | |
| polygon_geom: | |
| filter: { $geometry: polygon } | |
| draw: | |
| polygons_transparent: | |
| color: global.transparent | |
| visible: true | |
| lines_transparent: | |
| visible: false | |
| outline_transparent: | |
| color: global.transparent | |
| width: [[15, 0px], [16, 0.5px], [17, 1px], [19, 2px]] | |
| roads: | |
| data: { source: mapzen, layer: roads } | |
| draw: | |
| lines: | |
| #color: black | |
| width: 1px | |
| order: global.feature_order | |
| # but give them all the same outline | |
| outline: | |
| order: 352 | |
| text-blend-order: | |
| text_source: global.ux_language_text_source | |
| visible: false # labels are enabled by each layer below | |
| font: | |
| family: global.text_font_family | |
| weight: normal | |
| fill: global.black_color | |
| arrows: | |
| # oneway arrows and shields are distinct groups! | |
| filter: { oneway: yes, shield_text: false, not: { kind: rail }, $zoom: { min: 17 } } | |
| draw: | |
| arrows: | |
| style: icons | |
| flat: true | |
| visible: global.icon_visible_landuse_green | |
| sprite: arrow | |
| color: global.midlight_color | |
| size: [[17, 6px], [20, 14px]] | |
| placement: spaced | |
| placement_spacing: [[17, 70px], [20, 175px]] | |
| angle: auto | |
| early: | |
| filter: { $zoom: { max: 15 } } | |
| draw: | |
| lines: | |
| outline: | |
| order: global.feature_order | |
| bridges-tunnels: | |
| filter: { any: [is_bridge: true, is_tunnel: true] } | |
| draw: | |
| lines: | |
| #cap: butt | |
| outline: | |
| # except bridges and tunnels, their outlines should also self-sort | |
| order: global.feature_order | |
| # default outlines starting at zoom 16 | |
| default-outline-width: | |
| filter: { $zoom: { min: 16 } } | |
| draw: | |
| lines: | |
| outline: | |
| width: function () { return 3/16 * Math.log($zoom); } | |
| natural_earth_highways: | |
| filter: { $zoom: { min: 5, max: 8 } } | |
| draw: | |
| lines: | |
| color: [[5, global.mid_color], [6, global.black_color]] | |
| width: [[5, 0.5px], [6, 0.5px], [7, 0.75px]] | |
| outline: | |
| color: global.mid_color | |
| width: [[9, 0px], [10, 0px], [12, 1px], [16, 2px]] | |
| major_road: | |
| filter: { kind: major_road } | |
| draw: | |
| lines: | |
| color: [[5, global.light_color], [7, global.mid_color]] | |
| width: [[5, 0.25px], [7, 0.5px]] | |
| # outline: | |
| # width: [[8, 0.0px], [9, 0.0px], [11, .5px], [16, .75px]] | |
| minor_road: | |
| filter: { kind: minor_road } | |
| draw: | |
| lines: | |
| color: global.offwhite_color | |
| width: 0.5px | |
| # outline: | |
| # width: [[12, 0px], [14, .5px], [17, 1px]] | |
| ferry: | |
| filter: { kind: ferry } | |
| draw: | |
| lines: | |
| color: global.light_color | |
| width: 0.5px | |
| outline: | |
| width: 0px | |
| highway: | |
| filter: { kind: highway, $zoom: { min: 8 } } | |
| draw: | |
| lines: | |
| color: [[8, global.black_color], [13, global.black_color], [14, global.white_color]] | |
| width: [[8, 1px], [13, 1.25px], [14, 0.1px], [15, 1.5px], [17, 8px], [18, 10m]] | |
| outline: | |
| color: [[8, global.white_color], [12, global.white_color], [13, global.black_color]] | |
| width: [[8, 0px], [13, 0px], [14, 1px], [15, 2px], [19, 6px]] | |
| link: | |
| filter: { is_link: true } # on- and off-ramps, etc | |
| draw: | |
| lines: | |
| color: [[9, global.mid_color], [13, global.mid_color], [14, global.white_color]] | |
| width: [[9, 0px], [13, 0.75px], [14, 0.1px], [17, 4px], [18, 5m]] | |
| outline: | |
| color: [[9, global.white_color], [12, global.white_color], [13, global.mid_color], [15, global.black_color]] | |
| width: [[9, 0px], [13, 0px], [14, 0.4px], [17, 1.5px], [18, 2px]] | |
| early_link: | |
| filter: { $zoom: {min: 13, max: 15} } | |
| draw: | |
| lines: | |
| order: 352 | |
| tunnel-link: | |
| filter: {is_tunnel: true, $zoom: { min: 13 } } | |
| draw: | |
| lines: | |
| color: [[13, global.light_color], [14, global.ultralight_color]] | |
| outline: | |
| color: [[12, global.white_color], [13, global.light_color]] | |
| tunnel: | |
| filter: { is_tunnel: true, $zoom: { min: 13 } } | |
| draw: | |
| lines: | |
| color: [[13, global.light_color], [14, global.ultralight_color]] | |
| outline: | |
| color: [[12, global.white_color], [13, global.light_color]] | |
| highway_bridge: | |
| filter: { is_bridge: true } | |
| draw: | |
| lines: | |
| cap: round | |
| outline: | |
| cap: butt | |
| labels-highway-z13-z14: | |
| filter: | |
| $zoom: [13,14] | |
| draw: | |
| text-blend-order: | |
| priority: 50 | |
| visible: global.text_visible_highway | |
| text_source: global.ux_language_text_source_road_ref_and_name | |
| font: | |
| fill: global.black_color | |
| weight: 600 | |
| size: 11px | |
| stroke: { color: global.white_color, width: 4 } | |
| labels-highway-z15-up: | |
| filter: { $zoom: { min: 15 } } | |
| draw: | |
| text-blend-order: | |
| priority: 50 | |
| visible: global.text_visible_highway | |
| font: | |
| fill: global.white_color | |
| weight: 600 | |
| size: [[15, 12px], [19, 16px]] | |
| stroke: { color: global.black_color, width: [[15, 3], [17, 4]] } | |
| major_road: | |
| filter: { kind: major_road, $zoom: { min: 8 } } | |
| # default style | |
| draw: | |
| lines: | |
| color: [[8, global.black_color], [13, global.black_color], [17, global.white_color]] | |
| width: [[13, 1px], [14, 1px], [16, 2.5px], [17, 3px]] | |
| outline: | |
| width: [[12, 0px], [13, .5px], [15, 1px], [17, 2px]] | |
| trunk_primary: | |
| filter: { kind_detail: [trunk, primary] } | |
| draw: | |
| lines: | |
| color: [[8, global.midlight_color], [12, global.mid_color], [13, global.black_color], [14, global.white_color]] | |
| width: [[8, 0.5px], [11, 0.5px], [13, 1px], [14, 0.1px], [16, 2px], [17, 8px], [18, 10m]] | |
| outline: | |
| color: [[8, global.white_color], [12, global.white_color], [13, global.black_color]] | |
| width: [[8, 0px], [13, 0px], [14, 0.75px], [16, 1.5px], [18, 4px]] | |
| early: | |
| filter: { $zoom: { max: 16 } } | |
| draw: | |
| lines: | |
| order: 352 | |
| outline: | |
| order: function() { return feature.sort_rank + 2; } | |
| primary: | |
| filter: { kind: [primary] } | |
| draw: | |
| lines: | |
| outline: | |
| order: function() { return feature.sort_rank + 1; } | |
| routes: | |
| filter: { ref: true } | |
| draw: | |
| lines: | |
| color: [[8, global.midlight_color], [12, global.mid_color], [13, global.black_color], [14, global.white_color]] | |
| width: [[9, 0.5px], [13, 1px], [14, 0.1px], [15, 1.25px], [16, 2px], [17, 8px], [18, 10m]] | |
| outline: | |
| color: [[8, global.white_color], [12, global.white_color], [13, global.black_color]] | |
| width: [[8, 0px], [13, 0px], [14, 0.75px], [15, 1.5px], [17, 3px], [18, 4px]] | |
| early: | |
| filter: { $zoom: { max: 16 } } | |
| draw: | |
| lines: | |
| order: function() { return feature.sort_rank + 2; } | |
| outline: | |
| order: 353 | |
| tunnel: | |
| filter: { is_tunnel: true, $zoom: { min: 13 } } | |
| draw: | |
| lines: | |
| color: [[13, global.light_color], [14, global.ultralight_color]] | |
| outline: | |
| color: [[12, global.white_color], [13, global.light_color]] | |
| labels-trunk_primary-route-z13-z14: | |
| filter: { $zoom: [13,14] } | |
| draw: | |
| text-blend-order: | |
| priority: 51 | |
| visible: global.text_visible_trunk_primary | |
| text_source: global.ux_language_text_source_road_ref_and_name | |
| font: | |
| fill: global.dark_color | |
| size: 11px | |
| stroke: { color: global.white_color, width: 3 } | |
| labels-trunk_primary-route-z15-up: | |
| filter: { $zoom: { min: 15 } } | |
| draw: | |
| text-blend-order: | |
| priority: 51 | |
| visible: global.text_visible_trunk_primary | |
| text_source: global.ux_language_text_source_road_ref_and_name | |
| font: | |
| fill: global.black_color | |
| weight: 600 | |
| size: [[15, 12px], [16, 13px], [19, 16px]] | |
| stroke: { color: global.white_color, width: [[15, 3], [17, 6]] } | |
| labels-trunk_primary-z11-z15: | |
| filter: | |
| $zoom: [11,12,13,14,15] | |
| draw: | |
| text-blend-order: | |
| priority: 51 | |
| visible: global.text_visible_trunk_primary | |
| text_source: global.ux_language_text_source_road_ref_and_name_short | |
| font: | |
| fill: global.dark_color | |
| size: [[11, 10px], [15, 12px]] | |
| stroke: { color: global.white_color, width: [[11, 3], [13, 3], [14, 4]] } | |
| labels-trunk_primary-z16-up: | |
| filter: { $zoom: { min: 16 } } | |
| draw: | |
| text-blend-order: | |
| priority: 51 | |
| visible: global.text_visible_trunk_primary | |
| text_source: global.ux_language_text_source_road_ref_and_name | |
| font: | |
| fill: [[16, global.dark_color], [18, global.black_color]] | |
| weight: 600 | |
| size: [[16, 13px], [18, 13px], [19, 16px]] | |
| stroke: { color: global.white_color, width: [[16, 4], [17, 6]]} | |
| link: | |
| filter: { is_link: true } # on- and off-ramps, etc | |
| draw: | |
| lines: | |
| color: [[10, global.mid_color], [15, global.light_color], [16, global.white_color]] | |
| width: [[10, 0.5px], [12, 0.5px], [15, 1px], [16, 1.75px], [17, 3px], [18, 5m]] | |
| outline: | |
| color: [[10, global.white_color], [15, global.mid_color], [16, global.black_color]] | |
| width: [[10, 0px], [15, 0px], [16, 1px], [18, 2px]] | |
| tunnel: | |
| filter: { is_tunnel: true, $zoom: { min: 13 } } | |
| draw: | |
| lines: | |
| color: [[13, global.light_color], [14, global.ultralight_color]] | |
| outline: | |
| color: [[12, global.white_color], [13, global.light_color]] | |
| secondary: | |
| filter: { kind_detail: secondary } | |
| draw: | |
| lines: | |
| color: [[10, global.lighter_color], [13, global.midlight_color], [15, global.dark_color], [16, global.white_color]] | |
| width: [[10, 0.5px], [12, 0.5px], [14, 1px], [15, 1.5px], [16, 0.1px], [17, 7.5px], [18, 9m]] | |
| outline: | |
| color: [[10, global.white_color], [14, global.white_color], [15, global.black_color]] | |
| width: [[10, 0px], [15, 0px], [16, 1.1px], [17, 2px]] | |
| early: | |
| filter: { $zoom: { max: 16 } } | |
| draw: | |
| lines: | |
| order: 352 | |
| outline: | |
| order: 353 #function() { return feature.sort_rank + 2; } | |
| routes: | |
| filter: { ref: true, $zoom: { min: 12 } } | |
| draw: | |
| lines: | |
| color: [[10, global.lighter_color], [13, global.mid_color], [15, global.black_color], [16, global.white_color]] | |
| width: [[10, 0.5px], [13, 1px], [15, 1.5px], [16, 0.1px], [17, 7.5px], [18, 9m]] | |
| outline: | |
| color: [[10, global.white_color], [14, global.white_color], [15, global.black_color]] | |
| width: [[10, 0px], [15, 0px], [16, 1.5px], [17, 2px]] | |
| early: | |
| filter: { $zoom: { max: 15 } } | |
| draw: | |
| lines: | |
| order: function() { return feature.sort_rank + 2; } | |
| outline: | |
| order: 353 | |
| tunnel: | |
| filter: {is_tunnel: true, $zoom: { min: 13 } } | |
| draw: | |
| lines: | |
| color: [[13, global.light_color], [15, global.light_color], [16, global.ultralight_color]] | |
| outline: | |
| color: [[13, global.white_color], [14, global.white_color], [15, global.light_color]] | |
| labels-secondary-routes-z13-z14: | |
| filter: { $zoom: [13,14] } | |
| draw: | |
| text-blend-order: | |
| priority: 56 | |
| visible: global.text_visible_secondary | |
| text_source: global.ux_language_text_source_road_ref_and_name_short | |
| font: | |
| fill: global.black_color | |
| size: 11px | |
| stroke: { color: global.white_color, width: 4 } | |
| labels-secondary-routes-z15-up: | |
| filter: { $zoom: { min: 15 } } | |
| draw: | |
| text-blend-order: | |
| priority: 56 | |
| visible: global.text_visible_secondary | |
| text_source: global.ux_language_text_source_road_ref_and_name_short | |
| font: | |
| fill: global.black_color | |
| weight: 600 | |
| size: [[15, 11px], [17, 13px]] | |
| stroke: { color: global.white_color, width: 4 } | |
| labels-secondary: | |
| filter: { $zoom: { min: 13 } } | |
| draw: | |
| text-blend-order: | |
| priority: 56 | |
| visible: global.text_visible_secondary | |
| text_source: global.ux_language_text_source_road_ref_and_name_short | |
| font: | |
| fill: [[13, global.dark_color], [17, global.black_color]] | |
| size: [[13, 10px], [17, 13px]] | |
| stroke: { color: global.white_color, width: 4 } | |
| tertiary: | |
| filter: { kind_detail: [tertiary, tertiary_link] } | |
| draw: | |
| lines: | |
| color: [[11, global.lighter_color], [15, global.dark_color], [16, global.white_color]] | |
| width: [[11, 0.5px], [15, 1.25px], [16, 0.1px], [17, 6px], [18, 9m]] | |
| outline: | |
| color: [[11, global.white_color], [14, global.white_color], [15, global.black_color]] | |
| width: [[11, 0px], [15, 0px], [16, 1px], [17, 2px], [18, 2px]] | |
| early: | |
| filter: { $zoom: { max: 15 } } | |
| draw: | |
| lines: | |
| order: 352 | |
| outline: | |
| order: function() { return feature.sort_rank + 3; } | |
| routes: | |
| filter: { ref: true, $zoom: { min: 12} } | |
| draw: | |
| lines: | |
| color: [[11, global.lighter_color], [15, global.dark_color], [16, global.white_color]] | |
| width: [[11, 0.5px], [15, 1.25px], [16, 0.1px], [17, 6px], [18, 9m]] | |
| outline: | |
| color: [[11, global.white_color], [14, global.white_color], [15, global.black_color]] | |
| width: [[11, 0px], [15, 0px], [16, 1px], [17, 2px], [18, 2px]] | |
| early: | |
| filter: { $zoom: { max: 15 } } | |
| draw: | |
| lines: | |
| order: function() { return feature.sort_rank + 3; } | |
| outline: | |
| order: 353 | |
| tunnel: | |
| filter: { is_tunnel: true, $zoom: { min: 13 } } | |
| draw: | |
| lines: | |
| color: [[13, global.light_color], [15, global.light_color], [16, global.ultralight_color]] | |
| outline: | |
| color: [[13, global.white_color], [14, global.white_color], [15, global.light_color]] | |
| link: | |
| filter: { is_link: true } # on- and off-ramps, etc | |
| draw: | |
| lines: | |
| color: [[14, global.light_color], [15, global.dark_color], [16, global.white_color]] | |
| width: [[11, 0.0px], [15, 0.5px], [16, 0.1px], [18, 4.5m]] | |
| outline: | |
| color: [[11, global.white_color], [14, global.white_color], [15, global.black_color]] | |
| width: [[11, 0px], [14, 0px], [16, 0.25px], [18, 2px]] | |
| labels-tertiary: | |
| filter: { $zoom: { min: 13 } } | |
| draw: | |
| text-blend-order: | |
| priority: 57 | |
| visible: global.text_visible_tertiary | |
| text_source: global.ux_language_text_source_road_ref_and_name_short | |
| font: | |
| fill: [[13, global.dark_color], [18, global.black_color]] | |
| size: [[13, 10px], [17, 13px]] | |
| stroke: { color: global.white_color, width: 4 } | |
| minor_road: | |
| filter: { kind: minor_road, not: { kind_detail: service }, $zoom: { min: 8 } } | |
| draw: | |
| lines: | |
| color: [[11, global.offwhite_color], [15, global.midlight_color], [16, global.white_color]] | |
| width: [[11, 0.35px], [13, 0.5px], [14, 1px], [15, 1px], [16, 0.1px], [17, 3.5px], [18, 9m]] | |
| outline: | |
| color: [[11, global.white_color], [14, global.white_color], [15, global.midlight_color], [17, global.black_color]] | |
| width: [[11, 0px], [15, 0px], [16, 0.75px], [17, 1.5px], [18, 1.5px]] | |
| early: | |
| filter: { $zoom: { max: 16 } } | |
| draw: | |
| lines: | |
| order: 350 | |
| outline: | |
| order: 351 | |
| # Is this junk code? | |
| round: | |
| filter: { $zoom: { min: 17 } } | |
| draw: | |
| lines: | |
| cap: round | |
| join: round | |
| tunnel: | |
| filter: {is_tunnel: true, $zoom: { min: 13 } } | |
| draw: | |
| lines: | |
| color: [[13, global.light_color], [15, global.light_color], [16, global.ultralight_color]] | |
| outline: | |
| color: [[13, global.white_color], [14, global.white_color], [15, global.light_color]] | |
| minor_road_bridge: | |
| filter: { is_bridge: true } | |
| draw: | |
| lines: | |
| cap: round | |
| outline: | |
| cap: butt | |
| labels-minor_road: | |
| filter: { $zoom: { min: 15 } } | |
| draw: | |
| text-blend-order: | |
| priority: 59 | |
| visible: global.text_visible_minor_road | |
| text_source: name | |
| font: | |
| fill: [[15, global.mid_color], [18, global.black_color]] | |
| size: [[15, 10px], [18, 13px]] | |
| stroke: { color: global.white_color, width: 4 } | |
| service_road: | |
| filter: { kind: minor_road, kind_detail: service, $zoom: { min: 13 } } | |
| draw: | |
| lines: | |
| color: [[13, global.offwhite_color], [15, global.midlight_color], [16, global.white_color]] | |
| width: [[13, 0px], [15, 0.75px], [16, 0.1px], [17, 2.5px], [18, 5m]] | |
| outline: | |
| color: [[13, global.white_color], [14, global.white_color], [15, global.mid_color], [18, global.black_color]] | |
| width: [[13, 0px], [15, 0px], [16, 0.6px], [19, 1.5px]] | |
| labels-service_road: | |
| filter: { $zoom: { min: 17 } } | |
| draw: | |
| text-blend-order: | |
| priority: 60 | |
| visible: global.text_visible_service_road | |
| text_source: name | |
| font: | |
| fill: [[17, global.dark_color], [18, global.black_color]] | |
| size: [[17, 11px], [18, 12px]] | |
| stroke: { color: global.white_color, width: 4 } | |
| fpdcc_path: | |
| filter: | |
| all: | |
| - operator: 'Forest Preserve District of Cook County' | |
| draw: | |
| lines: | |
| color: [0.722, 0.004, 0.004, 0.00] | |
| path: | |
| filter: | |
| all: | |
| - kind: [path, portage_way] | |
| not: | |
| - kind_detail: [steps, track, pier] | |
| - operator: 'Forest Preserve District of Cook County' | |
| - landuse_kind: [golf_course] | |
| draw: | |
| lines: | |
| color: [[14, global.light_color], [16, global.white_color]] | |
| width: [[14, 0.35px], [15, 0px], [16, 0.25px], [18, 2px], [20, 1m]] | |
| outline: | |
| color: global.light_color | |
| width: [[14, 0px], [15, 0.35px], [16, 0.45px], [17, 1px]] | |
| early: | |
| filter: | |
| $zoom: { max: 15 } | |
| draw: | |
| lines: | |
| order: 351 | |
| outline: | |
| order: 350 | |
| pedestrian: | |
| filter: { kind_detail: pedestrian } | |
| draw: | |
| lines: | |
| color: [[14, global.light_color], [16, global.white_color]] | |
| width: [[14, 0.35px], [15, 0px], [16, 0.25px], [18, 2px], [20, 1m]] | |
| outline: | |
| color: global.light_color | |
| width: [[14, 0px], [15, 0.35px], [16, 0.45px], [17, 1px]] | |
| footway: | |
| filter: { kind_detail: footway } | |
| draw: | |
| lines: | |
| color: [[14, global.light_color], [16, global.white_color]] | |
| width: [[14, 0.35px], [15, 0px], [16, 0.25px], [18, 2px], [20, 1m]] | |
| outline: | |
| color: global.light_color | |
| width: [[14, 0px], [15, 0.35px], [16, 0.45px], [17, 1px]] | |
| bridge: | |
| filter: { is_bridge: true } | |
| draw: | |
| lines: | |
| cap: round | |
| outline: | |
| color: global.mid_color | |
| cap: butt | |
| bridge: | |
| filter: { is_bridge: true } | |
| draw: | |
| lines: | |
| cap: round | |
| outline: | |
| color: global.mid_color | |
| cap: butt | |
| labels-path: | |
| filter: { $zoom: { min: 17 } } | |
| draw: | |
| text-blend-order: | |
| priority: 61 | |
| visible: global.text_visible_path | |
| text_source: name | |
| font: | |
| fill: global.dark_color | |
| size: 12px | |
| stroke: { color: global.white_color, width: 4 } | |
| track: | |
| filter: { kind: path, kind_detail: track } | |
| draw: | |
| lines: | |
| color: [[13, global.white_color], [16, global.light_color], [17, global.white_color]] | |
| width: [[13, 0px], [14, 0.15px], [16, 1px], [18, 1.5px], [20, 1m]] | |
| outline: | |
| color: [[14, global.light_color], [15, global.white_color], [16, global.white_color], [17, global.light_color]] | |
| width: [[13, 0px], [14, 0.25px], [15, 0.5px], [16, 1px], [17, 1px]] | |
| bridge: | |
| filter: { is_bridge: true } | |
| draw: | |
| lines: | |
| cap: butt | |
| color: [[13, global.white_color], [16, global.light_color], [17, global.white_color]] | |
| width: [[13, 0px], [14, 0.15px], [16, 1px], [18, 1.5px], [20, 1m]] | |
| outline: | |
| color: [[14, global.light_color], [15, global.white_color], [16, global.white_color], [17, global.dark_color]] | |
| width: [[13, 0px], [14, 0.25px], [15, 0.5px], [16, 1px], [17, 1px]] | |
| cap: butt | |
| steps: | |
| filter: | |
| all: | |
| - kind: path | |
| - kind_detail: steps | |
| draw: | |
| dashed_steps: | |
| order: global.feature_order | |
| color: [[15, global.light_color], [19, global.lighter_color]] | |
| width: [[15, 0.5], [18, 3px], [19, 1.5m]] | |
| outline: | |
| color: global.offwhite_color | |
| width: [[15, 0px], [18, 1px]] | |
| labels-steps: | |
| filter: { $zoom: { min: 17 } } | |
| draw: | |
| text-blend-order: | |
| priority: 62 | |
| visible: global.text_visible_steps | |
| text_source: name | |
| font: | |
| fill: global.mid_color | |
| size: 11px | |
| stroke: { color: global.white_color, width: 4 } | |
| shields: | |
| filter: | |
| all: | |
| - $zoom: { min: 6 } | |
| # | |
| # United State looks great with shield_text alone, but... | |
| # | |
| #shield_text: true # some roads don't have shield text, deal with that later | |
| # | |
| # Europe doesn't have many network relations set, so we could look for either | |
| # shield_text or ref (with no shield_text) but... | |
| # that makes United States look a bit funky with `(xxx)` and generic shields | |
| # showing up in fields of custom state shields like US:CA and US:NY | |
| # | |
| - function() { return global.sdk_road_shields; } | |
| - any: | |
| - shield_text: true # some roads don't have shield text, deal with that later | |
| - all: | |
| - shield_text: false # some roads don't have shield text, deal with that later | |
| - ref: true | |
| - kind_detail: [motorway, trunk, primary, secondary, tertiary] | |
| # default | |
| draw: | |
| colorized-icons: | |
| # you need to match any custom shield to the vector tile `network` values | |
| sprite: | | |
| function() { | |
| if( feature.shield_text ) { | |
| return ('generic_shield-' + feature.shield_text.length + 'char'); | |
| } else { | |
| return ('generic_shield-' + feature.ref.length + 'char'); | |
| } | |
| } | |
| sprite_default: generic_shield_5char | |
| priority: 58 | |
| repeat_group: shields | |
| repeat_distance: [[8, 90px],[10, 40px],[13, 30px]] | |
| placement: midpoint | |
| placement_min_length_ratio: | |
| - [8, 0.1] | |
| - [9, 0.25] | |
| - [10, 0.25] | |
| - [11, 0.15] | |
| - [12, 1] | |
| - [13, 1.50] | |
| - [14, 2.0] | |
| cull_from_tile: true | |
| visible: false | |
| text: | |
| offset: [0px, -0.5px] | |
| repeat_distance: 200px | |
| anchor: center | |
| text_source: | | |
| function() { | |
| if( feature.shield_text ) { | |
| return feature.shield_text; | |
| } else { | |
| return feature.ref; | |
| } | |
| } | |
| font: | |
| family: Montserrat | |
| fill: global.black_color | |
| size: [[7,7px],[12,8px],[16,11px]] | |
| default_priority_highway: | |
| filter: | |
| all: | |
| - kind_detail: motorway | |
| - $zoom: { min: 9 } | |
| draw: | |
| colorized-icons: | |
| priority: 47 | |
| #color: yellow | |
| visible: global.sdk_road_shields | |
| default_priority_trunk: | |
| filter: | |
| all: | |
| - kind_detail: [trunk] | |
| - $zoom: { min: 10 } | |
| draw: | |
| colorized-icons: | |
| priority: 48 | |
| #color: red | |
| visible: global.sdk_road_shields | |
| default_priority_primary: | |
| filter: | |
| all: | |
| - kind_detail: [primary] | |
| - $zoom: { min: 12 } | |
| draw: | |
| colorized-icons: | |
| priority: 49 | |
| #color: aqua | |
| visible: global.sdk_road_shields | |
| default_priority_trunk_secondary: | |
| filter: | |
| all: | |
| - kind_detail: [secondary] | |
| - $zoom: { min: 12 } | |
| draw: | |
| colorized-icons: | |
| priority: 53 | |
| #color: blue | |
| visible: global.sdk_road_shields | |
| default_priority_trunk_tertiary: | |
| filter: | |
| all: | |
| - kind_detail: tertiary | |
| - $zoom: { min: 13 } | |
| draw: | |
| colorized-icons: | |
| priority: 55 | |
| #color: green | |
| visible: global.sdk_road_shields | |
| # not-special: | |
| # filter: | |
| # not: { network: ['US:I','US:US'] } | |
| # $zoom: { max: 9 } | |
| # draw: | |
| # colorized-icons: | |
| # visible: false | |
| width_1char: | |
| filter: | | |
| function() { | |
| if( feature.shield_text ) { | |
| return (feature.shield_text.length === 1) | |
| } else { | |
| return (feature.ref.length === 1) | |
| } | |
| } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[14px,14px]],[13,[16px,16px]],[16,[18px,18px]]] | |
| width_2char: | |
| filter: | | |
| function() { | |
| if( feature.shield_text ) { | |
| return (feature.shield_text.length === 2) | |
| } else { | |
| return (feature.ref.length === 2) | |
| } | |
| } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[18px,14px]],[13,[20px,15px]],[16,[24px,18px]]] | |
| width_3char: | |
| filter: | | |
| function() { | |
| if( feature.shield_text ) { | |
| return (feature.shield_text.length === 3) | |
| } else { | |
| return (feature.ref.length === 3) | |
| } | |
| } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[25px,14px]],[13,[27px,15px]],[16,[33px,18px]]] | |
| width_4char: | |
| filter: | | |
| function() { | |
| if( feature.shield_text ) { | |
| return (feature.shield_text.length === 4) | |
| } else { | |
| return (feature.ref.length === 4) | |
| } | |
| } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[29px,14px]],[13,[31px,15px]],[16,[38px,18px]]] | |
| # London sucks | |
| early: | |
| filter: { $zoom: { max: 14 } } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| width_5char: | |
| filter: | | |
| function() { | |
| if( feature.shield_text ) { | |
| return (feature.shield_text.length === 5) | |
| } else { | |
| return (feature.ref.length === 5) | |
| } | |
| } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[34px,14px]],[13,[37px,15px]],[16,[45px,18px]]] | |
| # London sucks | |
| early: | |
| filter: { $zoom: { max: 14 } } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| # this is kinda a hack | |
| width_longggggg: | |
| filter: | | |
| function() { | |
| if( feature.shield_text ) { | |
| return (feature.shield_text.length > 5) | |
| } else { | |
| return (feature.ref.length > 5) | |
| } | |
| } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| # missing-route-relations: | |
| # filter: { shield_text: false } | |
| # draw: | |
| # lines: | |
| # order: 1000 | |
| # color: red | |
| # width: 2px | |
| # | |
| # Now for the good stuff | |
| # | |
| legit-shields: | |
| filter: { shield_text: true } | |
| # draw: | |
| # colorized-icons: | |
| # color: red | |
| # US Interstate roads | |
| US-I: | |
| filter: | |
| network: 'US:I' | |
| draw: | |
| colorized-icons: | |
| # you need to match any custom shield to the vector tile `network` values | |
| sprite: function() { return (feature.network + '-' + feature.shield_text.length + 'char'); } | |
| priority: 46 | |
| visible: global.sdk_road_shields | |
| text: | |
| offset: [0px, 0.5px] | |
| font: | |
| # fill: global.black_color | |
| size: [[7,8px],[13,9px],[15,11px]] | |
| width_1char: | |
| filter: function() { return (feature.shield_text.length === 1) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[15px,18px]],[13,[17px,20px]],[15,[22px,25px]]] | |
| width_2char: | |
| filter: function() { return (feature.shield_text.length === 2) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[18px,18px]],[13,[20px,20px]],[15,[25px,25px]]] | |
| width_3char: | |
| filter: function() { return (feature.shield_text.length === 3) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[23px,18px]],[13,[26px,20px]],[15,[33px,25px]]] | |
| width_4char: | |
| filter: function() { return (feature.shield_text.length === 4) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[25px,18px]],[13,[27px,20px]],[15,[35px,25px]]] | |
| width_5char: | |
| filter: function() { return (feature.shield_text.length === 5) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[26px,18px]],[13,[30px,20px]],[15,[38px,25px]]] | |
| # US Federal Routes | |
| US-US: | |
| filter: | |
| network: ['US:US','US:US:Business', 'US:US:Truck', 'US:US:Alternate'] | |
| $zoom: { min: 7 } | |
| draw: | |
| colorized-icons: | |
| # you need to match any custom shield to the vector tile `network` values | |
| sprite: | | |
| function() { return ('US:US-' + feature.shield_text.length + 'char'); } | |
| priority: 47 | |
| cull_from_tile: true | |
| visible: global.sdk_road_shields | |
| text: | |
| offset: [0px, -0.7px] | |
| font: | |
| # fill: global.black_color | |
| size: [[7,8px],[13,9px],[15,11px]] | |
| # early: | |
| # filter: { $zoom: [7] } | |
| # colorized-icons: | |
| # visible: false | |
| width_1char: | |
| filter: function() { return (feature.shield_text.length === 1) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[15px,17px]],[13,[17px,19px]],[15,[22px,24px]]] | |
| width_2char: | |
| filter: function() { return (feature.shield_text.length === 2) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[18px,17px]],[13,[20px,19px]],[15,[26px,24px]]] | |
| width_3char: | |
| filter: function() { return (feature.shield_text.length === 3) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[22px,17px]],[13,[25px,19px]],[15,[34px,25px]]] | |
| width_4char: | |
| filter: function() { return (feature.shield_text.length === 4) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[25px,17px]],[13,[29px,19px]],[15,[39px,25px]]] | |
| width_5char: | |
| filter: function() { return (feature.shield_text.length === 5) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[27px,17px]],[13,[30px,19px]],[15,[41px,25px]]] | |
| # US State Routes | |
| # US-states: | |
| # # Match state highways: `US:??` | |
| # filter: | | |
| # function() { | |
| # return feature.shield_text && | |
| # /^US:(?!US)\w\w$/.test(feature.network) | |
| # } | |
| # draw: | |
| # colorized-icons: | |
| # # you need to match any custom shield to the vector tile `network` values | |
| # priority: 18 | |
| # early: | |
| # filter: { $zoom: [7,8,9] } | |
| # colorized-icons: | |
| # visible: false | |
| US-CA: | |
| # Match California state highways: `US:CA` | |
| filter: | | |
| function() { | |
| return feature.shield_text && | |
| /^US:CA$/.test(feature.network) | |
| } | |
| draw: | |
| colorized-icons: | |
| sprite: function() { return (feature.network + '-' + feature.shield_text.length + 'char'); } | |
| text: | |
| offset: [0px, 1px] | |
| font: | |
| # fill: global.black_color | |
| size: [[7,7px],[13,9px],[15,10px]] | |
| motorway: | |
| filter: { kind_detail: [motorway], $zoom: [7,8] } | |
| draw: | |
| colorized-icons: | |
| visible: global.sdk_road_shields | |
| trunk: | |
| filter: { kind_detail: [trunk], $zoom: [8,9] } | |
| draw: | |
| colorized-icons: | |
| visible: global.sdk_road_shields | |
| primary: | |
| filter: { kind_detail: primary, $zoom: [10,11] } | |
| draw: | |
| colorized-icons: | |
| visible: global.sdk_road_shields | |
| width_1char: | |
| filter: function() { return (feature.shield_text.length === 1) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[14px,16px]],[13,[15px,18px]],[15,[18px,21px]]] | |
| width_2char: | |
| filter: function() { return (feature.shield_text.length === 2) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[18px,18px]],[13,[20px,20px]],[15,[23px,23px]]] | |
| width_3char: | |
| filter: function() { return (feature.shield_text.length === 3) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[21px,18px]],[13,[24px,20px]],[15,[28px,23px]]] | |
| width_4char: | |
| filter: function() { return (feature.shield_text.length === 4) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[24px,18px]],[13,[26px,20px]],[15,[31px,23px]]] | |
| width_5char: | |
| filter: function() { return (feature.shield_text.length === 5) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[25px,18px]],[13,[27px,20px]],[15,[32px,23px]]] | |
| US-NY: | |
| # Match New York state highways: `US:NY` | |
| filter: | | |
| function() { | |
| return feature.shield_text && | |
| /^US:NY$/.test(feature.network) | |
| /* (/^US:NY$/.test(feature.network) || /^NY:US$/.test(feature.network)) */ | |
| } | |
| draw: | |
| colorized-icons: | |
| sprite: | | |
| function() { return ( 'US:NY-' + feature.shield_text.length + 'char'); } | |
| text: | |
| # offset: [0px, 1px] | |
| font: | |
| # fill: global.black_color | |
| size: [[7,7px],[13,9px],[15,10px]] | |
| width_1char: | |
| filter: function() { return (feature.shield_text.length === 1) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[13px,17px]],[13,[15px,19px]],[15,[18px,22px]]] | |
| width_2char: | |
| filter: function() { return (feature.shield_text.length === 2) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[17px,17px]],[13,[19px,19px]],[15,[22px,22px]]] | |
| width_3char: | |
| filter: function() { return (feature.shield_text.length === 3) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[20px,17px]],[13,[22px,19px]],[15,[27px,22px]]] | |
| width_4char: | |
| filter: function() { return (feature.shield_text.length === 4) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[21px,17px]],[13,[24px,19px]],[15,[29px,22px]]] | |
| width_5char: | |
| filter: function() { return (feature.shield_text.length === 5) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[22px,17px]],[13,[25px,19px]],[15,[30px,22px]]] | |
| US-PA: | |
| # Match Pennsylvania state highways | |
| filter: | | |
| function() { | |
| return feature.shield_text && | |
| /^US:PA$/.test(feature.network) | |
| } | |
| draw: | |
| colorized-icons: | |
| sprite: | | |
| function() { return ( 'US:PA-' + feature.shield_text.length + 'char'); } | |
| text: | |
| offset: [0px, 1px] | |
| font: | |
| # fill: global.black_color | |
| size: [[7,7px],[13,9px],[15,10px]] | |
| width_1char: | |
| filter: function() { return (feature.shield_text.length === 1) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[13px,17px]],[13,[15px,19px]],[15,[18px,22px]]] | |
| width_2char: | |
| filter: function() { return (feature.shield_text.length === 2) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[17px,17px]],[13,[19px,19px]],[15,[22px,22px]]] | |
| width_3char: | |
| filter: function() { return (feature.shield_text.length === 3) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[21px,17px]],[13,[24px,19px]],[15,[28px,22px]]] | |
| width_4char: | |
| filter: function() { return (feature.shield_text.length === 4) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[22px,17px]],[13,[25px,19px]],[15,[30x,22px]]] | |
| width_5char: | |
| filter: function() { return (feature.shield_text.length === 5) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[24px,17px]],[13,[27px,19px]],[15,[32px,22px]]] | |
| # USA County Routes | |
| US-counties: | |
| # Match state highways: `US:??:*` | |
| # | |
| # this is very USA specific | |
| # | |
| # filter: | | |
| # function() { | |
| # return feature.shield_text && | |
| # /^US:(?!US)\w\w:.*$/.test(feature.network) | |
| # } | |
| # | |
| # this generic for any country with 3rd level networks (like county routes in USA) | |
| # BEWARE: | |
| # US:US:Business about 150 | |
| # US:US:Truck | |
| # US:US:Alternate | |
| # | |
| # STATE ROUTE | |
| # ??:??:Loop about 200 | |
| # ??:??:Spur about 200 | |
| # ??:??:Business about 100 | |
| # | |
| # STATE TEXAS SPECIAL ROUTE | |
| # US:TX:FM -- probably just state? there are 3k of these | |
| # | |
| # | |
| filter: | | |
| function() { | |
| return feature.shield_text && | |
| /^\w+:\w+:(!Alternate).+$/.test(feature.network) && | |
| $zoom > 10 | |
| } | |
| draw: | |
| colorized-icons: | |
| # you need to match any custom shield to the vector tile `network` values | |
| sprite: function() { return ('county_shield-' + feature.shield_text.length + 'char'); } | |
| # priority: 19 | |
| visible: global.sdk_road_shields | |
| text: | |
| font: | |
| fill: global.black_color | |
| #size: [[11,7px],[15,10px]] | |
| # early: | |
| # filter: { $zoom: { max: 11 } } | |
| # draw: | |
| # colorized-icons: | |
| # visible: false | |
| width_1char: | |
| filter: function() { return (feature.shield_text.length === 1) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[14px,14px]],[13,[16px,16px]],[15,[18px,18px]]] | |
| width_2char: | |
| filter: function() { return (feature.shield_text.length === 2) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[16px,14px]],[13,[18px,16px]],[15,[22px,18px]]] | |
| width_3char: | |
| filter: function() { return (feature.shield_text.length === 3) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[20px,14px]],[13,[21px,15px]],[15,[26px,18px]]] | |
| width_4char: | |
| filter: function() { return (feature.shield_text.length === 4) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[25px,14px]],[13,[28px,15px]],[15,[34px,18px]]] | |
| width_5char: | |
| filter: function() { return (feature.shield_text.length === 5) } | |
| draw: | |
| colorized-icons: | |
| size: [[6,[30px,14px]],[13,[33px,15px]],[15,[40px,18px]]] | |
| winter_sport_pistes: | |
| filter: { kind: piste } | |
| draw: | |
| lines: | |
| order: 388 # We override the server value here because Eraser Map is also a special Ski Map | |
| cap: round | |
| join: round | |
| color: global.offwhite_color | |
| width: [[13,0px], [14, 3px], [15, 5px], [16, 6px], [18, 3m]] | |
| text-blend-order: | |
| priority: 18 | |
| visible: global.text_visible_piste | |
| font: | |
| fill: global.midlight_color | |
| size: [[15, 11px], [17, 12px]] | |
| # stroke: { color: global.grey8, width: 4 } | |
| early: | |
| filter: { $zoom: { max: 15 } } | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| easy: | |
| filter: { piste_difficulty: easy } | |
| draw: | |
| lines: | |
| color: global.white_color | |
| intermediate: | |
| filter: { piste_difficulty: intermediate } | |
| draw: | |
| lines: | |
| color: global.white_color | |
| advanced: | |
| filter: { piste_difficulty: advanced } | |
| draw: | |
| lines: | |
| color: global.white_color | |
| text-blend-order: | |
| text_source: global.ux_language_text_source_piste_advanced | |
| expert: | |
| filter: { piste_difficulty: expert } | |
| draw: | |
| lines: | |
| color: global.white_color | |
| text-blend-order: | |
| text_source: global.ux_language_text_source_piste_expert | |
| pier: | |
| filter: { kind: path, kind_detail: pier } | |
| draw: | |
| lines: | |
| color: global.offwhite_color | |
| width: [[13, 0px], [14, 0.5px],[15, 1.5px], [16, 2.5px],[17, 3px],[18, 3m]] | |
| outline: | |
| color: global.mid_color | |
| width: [[15, 0px],[16,0.65px], [17, 0.75px], [18, 1px], [19, 1.5px]] | |
| racetrack: | |
| filter: { kind: racetrack } | |
| draw: | |
| lines: | |
| cap: round | |
| join: round | |
| color: global.black_color | |
| width: [[13,0.5px],[14,1px],[15, 1px], [16, 1.5px], [18, 3px], [19, 5px]] | |
| airport-lines: | |
| filter: { kind: aeroway, kind_detail: [runway,taxiway] } | |
| draw: | |
| lines: | |
| color: global.lighter_color | |
| cap: butt | |
| width: [[10, 1px], [13, 3px], [15, 16px], [17, 60m]] | |
| outline: | |
| color: global.white_color | |
| # Features come in at zoom 9, but include mostly minor airports without POIs until z13 | |
| early: | |
| filter: { $zoom: { max: 12 }, not: { landuse_kind: [aerodrome, runway, taxiway] } } | |
| draw: | |
| lines: | |
| visible: false | |
| not-round: | |
| filter: { $zoom: { min: 17 } } | |
| draw: | |
| lines: | |
| cap: butt | |
| taxiway: | |
| filter: { kind_detail: taxiway } | |
| draw: | |
| lines: | |
| color: global.lighter_color | |
| width: [[14, 1px], [16, 6px], [18, 4m]] | |
| outline: | |
| width: 0.5px | |
| color: global.white_color | |
| early: | |
| filter: { $zoom: { max: 13 } } | |
| draw: | |
| lines: | |
| visible: false | |
| ferry: | |
| filter: { kind: ferry } | |
| draw: | |
| lines: | |
| color: global.light_color | |
| width: [[12, 0.5px], [13, 0.75px], [15, 1.0px]] | |
| aerialway: | |
| filter: { kind: aerialway } | |
| draw: | |
| lines: | |
| color: global.mid_color | |
| width: [[14, 0.5px], [15, 1.0px], [16, 2m]] | |
| gondola_cable_car: | |
| filter: { kind_detail: [gondola, cable_car] } | |
| draw: | |
| lines: | |
| color: global.midlight_color | |
| width: [[12, 0.5px], [14, 0.6px], [16, 2px]] | |
| chair_lift: | |
| filter: { kind_detail: chair_lift } | |
| draw: | |
| lines: | |
| color: global.midlight_color | |
| width: [[12, 0.5px], [14, 0.6px], [16, 2px], [18, 3m]] | |
| aerialway-labels: | |
| filter: { $zoom: { min: 14 } } | |
| draw: | |
| text-blend-order: | |
| priority: 63 | |
| visible: global.text_visible_aerialway | |
| text_source: name | |
| font: | |
| fill: global.black_color | |
| size: 10px | |
| stroke: { color: global.white_color, width: 4 } | |
| minor: | |
| filter: { not: { kind_detail: [gondola,cable_car,chair_lift] }, $zoom: { max: 17 } } | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| later: | |
| filter: { $zoom: { min: 15 } } | |
| draw: | |
| text-blend-order: | |
| font: | |
| weight: 600 | |
| railway: | |
| filter: { kind: rail, not: { kind_detail: [subway,light_rail,tram] } } | |
| draw: | |
| railway_dash: | |
| color: [[12, global.lightest_color], [17, global.light_color]] | |
| width: [[12, 0px], [12, 0.5px], [18, 4px], [20, 2m]] | |
| # let roads sort themselves past zoom 14 | |
| order: global.feature_order | |
| # but give them all the same outline | |
| outline: | |
| order: 354 | |
| bridges-tunnels: | |
| filter: { any: [is_bridge: true, is_tunnel: true] } | |
| draw: | |
| lines: | |
| outline: | |
| # except bridges and tunnels, their outlines should also self-sort | |
| order: function() { return feature.sort_rank || 305; } | |
| service: | |
| filter: { service: true } | |
| draw: | |
| lines: | |
| color: global.light_color | |
| width: [[14,0px],[15,0.5px],[16,0.75px],[17,1px],[18,1px]] | |
| buildings: | |
| data: { source: mapzen, layer: buildings } | |
| filter: | |
| not: { location: underground } | |
| # set default footprint and extrusion draw properties, but don't draw by default (rules below will turn visibility on) | |
| draw: | |
| polygons: | |
| visible: false | |
| order: 329 | |
| color: global.white_color | |
| lines: | |
| visible: false | |
| style: lines | |
| order: 330 | |
| color: [[14, global.light_color], [16, global.midlight_color], [19, global.dark_color]] | |
| width: [[14, 0.3px], [15, 0.5px], [16, 0.75px],[18, 0.75px], [19, 1px]] | |
| # building footprints, pre-extrusion | |
| footprints: | |
| filter: | |
| any: | |
| - { $zoom: [13], scale_rank: [1,2] } | |
| - { $zoom: [14], scale_rank: [1,2,3] } | |
| - { $zoom: [15], height: { min: 100 } } | |
| - { $zoom: [15], area: { min: 500 } } | |
| - { $zoom: [15], volume: { min: 100000 } } | |
| - { $zoom: [16], area: { min: 100 } } | |
| - { $zoom: [16], volume: { min: 50000 } } | |
| - { $zoom: { min: 17 }, area: true } | |
| draw: | |
| polygons: | |
| visible: false | |
| lines: | |
| visible: false | |
| # 3d buildings | |
| extrude: | |
| filter: | |
| all: | |
| - function() { return global.sdk_building_extrude; } | |
| - any: | |
| - { $zoom: [15], height: { min: 190 } } | |
| - { $zoom: [15], area: { min: 5000 } } | |
| - { $zoom: [15], volume: { min: 100000 } } | |
| - { $zoom: [16], height: { min: 100 } } | |
| - { $zoom: [16], area: { min: 3500 } } | |
| - { $zoom: [16], volume: { min: 50000 } } | |
| - { $zoom: [17], area: { min: 500 } } | |
| - { $zoom: [17], volume: { min: 15000 } } | |
| - { $zoom: { min: 18 } } | |
| - not: | |
| - layer: [-1, -2, -3, -4, -5] | |
| draw: | |
| polygons: | |
| visible: false | |
| order: 438 | |
| style: building-grid | |
| extrude: global.building_extrude_height | |
| # color: global.white_color | |
| lines: | |
| visible: false | |
| order: 439 | |
| style: building-lines | |
| extrude: global.building_extrude_height | |
| basement: | |
| filter: | |
| all: | |
| - layer: [-1, -2, -3, -4, -5] | |
| draw: | |
| lines: | |
| color: global.lightest_color | |
| building-labels: | |
| filter: | |
| all: | |
| - { $zoom: { min: 16 } } | |
| - $geometry: point | |
| - kind: [false, building, university, college, school, kindergarten] | |
| - function() { return global.text_visible_building; } | |
| any: | |
| - { $zoom: [16], area: { min: 5000 }, name: true } | |
| - { $zoom: [16], area: { min: 5000 }, kind: true } | |
| - { $zoom: [16], area: { min: 10000 }, landuse_kind: true } | |
| - { $zoom: [16], area: { min: 7000 }, kind: [university, college, school, kindergarten] } | |
| - { $zoom: [16], volume: { min: 50000 }, name: true } | |
| - { $zoom: [17], area: { min: 3000 }, name: true } | |
| - { $zoom: [17], area: { min: 2000 }, kind: [university, college, school, kindergarten] } | |
| - { $zoom: [18], area: { min: 1000 }, name: true } | |
| - { $zoom: [18], kind: [university, college, school, kindergarten] } | |
| - { $zoom: [19], area: { min: 200 }, name: true } | |
| - { $zoom: { min: 19 }, kind: [university, college, school, kindergarten] } | |
| - { $zoom: { min: 20 }, name: true } | |
| draw: | |
| text-blend-order: | |
| interactive: global.sdk_interactive | |
| text_source: global.ux_language_text_source_building_and_address | |
| move_into_tile: true | |
| priority: 51 | |
| order: 7 | |
| font: | |
| fill: global.dark_color | |
| family: global.text_font_family | |
| style: italic | |
| size: 11px | |
| stroke: { color: global.white_color , width: 4 } | |
| building_labels-z15-z16: | |
| filter: { $zoom: [15,16] } | |
| draw: { text-blend-order: { font: { size: 9px, stroke: { width: 3 } } } } | |
| building_labels-z17-z18: | |
| filter: { $zoom: [17,18] } | |
| draw: { text-blend-order: { font: { size: 11px, stroke: { width: 3 } } } } | |
| building_labels-z19-up: | |
| filter: { $zoom: [19,20] } | |
| draw: { text-blend-order: { font: { size: 12px, stroke: { width: 3 } } } } | |
| building-labels-z16: | |
| filter: function() { if( $zoom == 16 && feature.name.length > 20 ) { return true; } else { return false; } } | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| building-labels-z17: | |
| filter: function() { if( $zoom == 17 && feature.name.length > 30 ) { return true; } else { return false; } } | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| building-labels-z20+: | |
| filter: { $zoom: { min: 20 } } | |
| draw: | |
| text-blend-order: | |
| text_source: function() { if( feature.addr_housenumber ) { return feature.name + '\n' + feature.addr_housenumber; } else { return feature.name; } } | |
| address-labels: | |
| filter: | |
| all: | |
| - $zoom: { min: 20 } | |
| - function() { return global.text_visible_address; } | |
| any: | |
| - kind: address | |
| - { label_position: true, addr_housenumber: true, name: false } | |
| draw: | |
| text-blend-order: | |
| interactive: global.sdk_interactive | |
| order: 7 | |
| text_source: addr_housenumber | |
| font: | |
| fill: global.mid_color | |
| family: global.text_font_family | |
| style: italic | |
| size: 11px | |
| stroke: { color: global.white_color, width: 4 } | |
| boundaries: | |
| data: { source: mapzen, layer: boundaries } | |
| # country subdivisions (states, provinces) | |
| draw: | |
| lines: | |
| order: global.feature_order | |
| country: | |
| filter: | |
| any: | |
| - kind: country | |
| - admin_level: 2 | |
| draw: | |
| country-outerline: | |
| style: lines | |
| order: function() { return (feature.sort_rank -1); } | |
| color: [[0, global.lightest_color], [8, global.lighter_color]] | |
| width: [[0, 0px], [6, 4px], [14, 7px], [17, 14m]] | |
| lines: | |
| color: global.white_color | |
| width: [[0, 0px], [5, 0px], [6, 1px]] | |
| water: | |
| filter: { maritime_boundary: true } | |
| draw: | |
| country-outerline: | |
| visible: false | |
| lines: | |
| visible: false | |
| country-labels: | |
| filter: { name: true, $zoom: { min: 8 }, not: { maritime_boundary: true } } | |
| draw: | |
| text-blend-order: | |
| priority: 2 | |
| visible: global.text_visible_admin | |
| text_source: global.ux_language_text_source_boundary_lines_left_right | |
| offset: [[8,[0, 7px]],[11,[0, 8px]],[12,[0, 9px]]] | |
| text_wrap: 100 | |
| font: | |
| family: global.text_font_family | |
| size: 10px | |
| fill: global.black_color | |
| transform: uppercase | |
| other_country_boundary_disputed_etc: | |
| filter: { kind: [disputed, indefinite, indeterminate, lease_limit, line_of_control, overlay_limit] } | |
| draw: | |
| dashed: | |
| order: global.feature_order | |
| color: global.lighter_color | |
| width: [[1,0.2px],[9,1.5px],[17,10m]] | |
| disputed: | |
| filter: { kind: [disputed, line_of_control] } | |
| draw: | |
| dashed: | |
| visible: false | |
| dashed_big: | |
| order: global.feature_order | |
| color: global.lighter_color | |
| width: [[1, 0.5px], [9, 2.5px], [17,14m]] | |
| region: | |
| filter: | |
| any: | |
| - kind: [region,macroregion] | |
| - kind_detail: [3,4] | |
| draw: | |
| lines: | |
| color: global.ultralight_color | |
| width: [[0, 0.5px], [5, 2px], [9, 4px], [14, 5.5px], [16, 6.5px], [17, 16m]] | |
| water: | |
| filter: { maritime_boundary: true } | |
| draw: | |
| lines: | |
| visible: false | |
| early: | |
| filter: { not: { min_zoom: [1,2] }, $zoom: { max: 8 } } | |
| draw: | |
| lines: | |
| visible: false | |
| region-labels: | |
| filter: { name: true, $zoom: { min: 9 }, not: { maritime_boundary: true } } | |
| draw: | |
| text-blend-order: | |
| priority: 3 | |
| visible: global.text_visible_admin | |
| text_source: global.ux_language_text_source_boundary_lines_left_right | |
| offset: [[8,[0, 5px]], [11, [0, 6px]], [12,[0, 7px]]] | |
| text_wrap: 100 | |
| # offset: [0px, 10px] | |
| # anchor: top | |
| font: | |
| family: global.text_font_family | |
| size: 9px | |
| fill: global.mid_color | |
| transform: uppercase | |
| places: | |
| data: { source: mapzen, layer: places } | |
| filter: | |
| name: true | |
| draw: | |
| colorized-icons: | |
| text: | |
| text_source: global.ux_language_text_source | |
| visible: false | |
| buffer: 3px | |
| font: | |
| family: global.text_font_family | |
| fill: global.black_color | |
| # NOTE: This is a hack for localities because of an icon & text bug, see note below | |
| text-blend-order: | |
| text_source: global.ux_language_text_source | |
| visible: false # labels are enabled by each layer below | |
| buffer: 3px | |
| font: | |
| family: global.text_font_family | |
| fill: global.black_color | |
| # END NOTE | |
| country: | |
| filter: | |
| kind: country | |
| $zoom: { min: 2, max: 9 } | |
| draw: | |
| text-blend-order: | |
| priority: 3 | |
| visible: global.text_visible_admin | |
| text_source: global.ux_language_text_source | |
| font: | |
| fill: global.black_color | |
| weight: 600 | |
| stroke: { color: global.white_color, width: 4 } | |
| country-z2-3: | |
| filter: | |
| $zoom: [2,3] | |
| draw: | |
| text-blend-order: | |
| priority: 10 | |
| buffer: 10px | |
| font: | |
| weight: 300 | |
| size: 11px | |
| early-ones-z2: | |
| filter: | |
| $zoom: [2] | |
| not: { name: [United States of America,Brasil,中华人民共和国,Россия,Canada,Kalaallit Nunaat,Ísland,Australia,India,日本,Guam,Indonesia,South Africa,مصر,Nigeria,Kenya] } | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| early-ones-z3: | |
| filter: | |
| $zoom: [3] | |
| name: [Nederland,Luxembourg,Liechtenstein,San Marino,Civitatis Vaticanæ,Crna Gora,Македонија,The Gambia,Burundi,Swaziland,الإمارات العربية المتحدة,العراق,Singapore,El Salvador,Belize,Trinidad and Tobago, Saint Lucia, Montserrat,Anguilla,República Dominicana,Bahamas,British Virgin Islands,Antigua and Barbuda,Grenada,Sint Maarten,Saint Kitts and Nevis,Cayman Islands,België - Belgique - Belgien,Deutschland,España] | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| country-z4: | |
| filter: | |
| $zoom: [4] | |
| draw: | |
| text-blend-order: | |
| buffer: 10px | |
| priority: 8 | |
| font: | |
| weight: 300 | |
| size: 13px | |
| early-ones-z4: | |
| filter: | |
| name: [Nederland,Luxembourg,Liechtenstein,San Marino,Civitatis Vaticanæ,Crna Gora,Македонија,The Gambia,Burundi,Swaziland,الإمارات العربية المتحدة,العراق,Singapore,El Salvador,Belize,Trinidad and Tobago, Saint Lucia, Montserrat,Anguilla,República Dominicana,Bahamas,British Virgin Islands,Antigua and Barbuda,Grenada,Sint Maarten,Saint Kitts and Nevis,Cayman Islands,België - Belgique - Belgien,Deutschland,España,Magyarország,Österreich,Polska,Хуссар Ирыстон,Аҧсны - Абхазия] | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| country-z5: | |
| filter: | |
| $zoom: [5] | |
| draw: | |
| text-blend-order: | |
| priority: 8 | |
| font: | |
| size: 13px | |
| early-ones-z5: | |
| filter: | |
| # South Ossetia and Abkhazia aren't countries (they are disputed areas) | |
| - name: [Luxembourg,Liechtenstein,San Marino,Civitatis Vaticanæ,El Salvador,Belize,België - Belgique - Belgien,"Хуссар Ирыстон - Южная Осетия","Хуссар Ирыстон","Аҧсны - Абхазия","Լեռնային Ղարաբաղի Հանրապետությու (Nagorno-Karabakh Republic)"] | |
| - population: { max: 5000000 } | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| country-z6: | |
| filter: | |
| $zoom: [6] | |
| draw: | |
| text-blend-order: | |
| priority: 8 | |
| font: | |
| size: 14px | |
| small-ones-z6: | |
| filter: | |
| # South Ossetia and Abkhazia aren't countries (they are disputed areas) | |
| - name: [Luxembourg,Liechtenstein,San Marino,Civitatis Vaticanæ,België - Belgique - Belgien,"Хуссар Ирыстон - Южная Осетия","Хуссар Ирыстон","Аҧсны - Абхазия","Լեռնային Ղարաբաղի Հանրապետությու (Nagorno-Karabakh Republic)"] | |
| - population: { max: 5000000 } | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| country-z7: | |
| # South Ossetia and Abkhazia aren't countries (they are disputed areas) | |
| filter: { $zoom: { min: 7, max: 9 } } | |
| draw: | |
| text-blend-order: | |
| font: | |
| size: [[7,18px],[9,24px]] | |
| small-ones-z7: | |
| filter: | |
| $zoom: [7] | |
| # South Ossetia and Abkhazia aren't countries (they are disputed areas) | |
| name: [Liechtenstein,San Marino,Civitatis Vaticanæ,"Хуссар Ирыстон - Южная Осетия","Хуссар Ирыстон","Аҧсны - Абхазия","Լեռնային Ղարաբաղի Հանրապետությու (Nagorno-Karabakh Republic)"] | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| small-pop: | |
| filter: | |
| - population: { max: 5000000 } | |
| draw: | |
| text-blend-order: | |
| priority: 30 | |
| font: | |
| size: 12px | |
| region: | |
| filter: | |
| kind: region | |
| $zoom: { min: 4, max: 9 } | |
| draw: | |
| text-blend-order: | |
| priority: 14 | |
| visible: false | |
| text_source: global.ux_language_text_source_short | |
| font: | |
| size: 11px | |
| weight: normal | |
| fill: [[4, global.light_color], [9, global.midlight_color]] | |
| stroke: { color: global.white_color, width: 4 } | |
| region-z4: | |
| filter: | |
| $zoom: [4] | |
| not: { name: [Western Cape,Eastern Cape,Northern Cape,North West,Limpopo,KwaZulu-Natal,Hamburg,Freie und Hansestadt Hamburg,Neuchâtel,Nordrhein-Westfalen,Haute-Normandie,Baden-Württemberg,Bayern,Sachsen-Anhalt,Berlin,Mecklenburg-Vorpommern,Schleswig-Holstein,Brandenburg,Niedersachsen,Saarland,Thüringen,Hessen,Sachsen] } | |
| draw: | |
| text-blend-order: | |
| visible: global.text_visible_admin | |
| # font: | |
| # fill: [0.70,0.70,0.70] | |
| region-z5: | |
| filter: | |
| $zoom: [5] | |
| not: { name: [Western Cape,Eastern Cape,Northern Cape,North West,Limpopo,KwaZulu-Natal,Hamburg,Freie und Hansestadt Hamburg,Neuchâtel,Nordrhein-Westfalen,Haute-Normandie,Baden-Württemberg,Bayern,Sachsen-Anhalt,Berlin,Mecklenburg-Vorpommern,Schleswig-Holstein,Brandenburg,Niedersachsen,Saarland,Thüringen,Hessen,Sachsen] } | |
| draw: | |
| text-blend-order: | |
| visible: global.text_visible_admin | |
| font: | |
| size: 18px | |
| weight: 300 | |
| region-z6: | |
| filter: | |
| $zoom: [6] | |
| not: { name: [Western Cape,Eastern Cape,Northern Cape,North West,Limpopo,KwaZulu-Natal,Hamburg,Freie und Hansestadt Hamburg,Neuchâtel,Nordrhein-Westfalen,Haute-Normandie,Baden-Württemberg,Bayern,Sachsen-Anhalt,Berlin,Mecklenburg-Vorpommern,Schleswig-Holstein,Brandenburg,Niedersachsen,Saarland,Thüringen,Hessen,Sachsen] } | |
| draw: | |
| text-blend-order: | |
| visible: global.text_visible_admin | |
| font: | |
| size: 21px | |
| weight: 300 | |
| transform: uppercase | |
| region-z7-z8: | |
| filter: { $zoom: [7,8] } | |
| draw: | |
| text-blend-order: | |
| visible: global.text_visible_admin | |
| text_source: global.ux_language_text_source_short_proxy_name | |
| font: | |
| size: 30px | |
| weight: 300 | |
| transform: uppercase | |
| pesky: | |
| filter: | |
| $zoom: [7] | |
| name: [Western Cape,Eastern Cape,Northern Cape,North West,Limpopo,KwaZulu-Natal,Hamburg,Freie und Hansestadt Hamburg,Neuchâtel,Nordrhein-Westfalen,Haute-Normandie,Baden-Württemberg,Bayern,Sachsen-Anhalt,Berlin,Mecklenburg-Vorpommern,Schleswig-Holstein,Brandenburg,Niedersachsen,Saarland,Thüringen,Hessen,Sachsen] | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| abbrev-small-ones-z7: | |
| filter: | |
| $zoom: [7] | |
| name: [Delaware,New Jersey,Connecticut,Rhode Island,Massachusetts,New Hampshire,Vermont] | |
| draw: | |
| text-blend-order: | |
| text_source: global.ux_language_text_source_abbreviation | |
| font: { transform: uppercase } | |
| region-z8: | |
| filter: | |
| $zoom: [8] | |
| draw: | |
| text-blend-order: | |
| text_source: global.ux_language_text_source | |
| no-pop: | |
| filter: | |
| any: | |
| - population: false | |
| - population: { max: 1000000 } | |
| draw: | |
| text-blend-order: | |
| font: | |
| size: 16px | |
| populated-places: | |
| filter: | |
| kind: locality | |
| draw: | |
| colorized-icons: | |
| visible: global.icon_visible_populated_places | |
| size: [[10,4px],[11,0px]] | |
| sprite: townspot-xs-rev | |
| buffer: 8px | |
| priority: 30 | |
| text: | |
| visible: global.text_visible_populated_places | |
| buffer: 3px | |
| font: | |
| size: [[5,9px],[8,10px],[12,11px]] | |
| stroke: { color: global.white_color, width: 4 } | |
| # fill: global.text_fill | |
| text-blend-order: | |
| visible: global.text_visible_populated_places | |
| buffer: 10px | |
| font: | |
| size: [[5,9px],[8,10px],[12,11px]] | |
| stroke: { color: global.white_color, width: 4 } | |
| # fill: global.text_fill | |
| # | |
| # NOTE: you'd think no-townspot would be the way to go, but icons with size 0px seems to have a bug to also hide the text :( | |
| # | |
| # no-townspot: | |
| # filter: { $zoom: { min: 11 } } | |
| # draw: | |
| # colorized-icons: | |
| # size: 0px | |
| # text: | |
| # anchor: center | |
| # | |
| # NOTE: So instead we play a shell game with symbolizers per zoom | |
| # | |
| _icons_later: | |
| filter: { $zoom: { min: 11 } } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| text-blend-order: | |
| visible: global.text_visible_populated_places | |
| _text_early: | |
| filter: { $zoom: { max: 11 } } | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| # END HACK | |
| z8-50k-below: | |
| filter: { $zoom: [8,9], population: { min: 10000, max: 50000 } } | |
| draw: | |
| colorized-icons: | |
| buffer: 25px | |
| #color: red | |
| #visible: false | |
| z9-10k-below: | |
| filter: { $zoom: [8,9], population: { max: 10000 } } | |
| draw: | |
| colorized-icons: | |
| buffer: 18px | |
| #color: blue | |
| #visible: false | |
| z9-no-population: | |
| filter: { $zoom: [8,9], population: false } | |
| draw: | |
| colorized-icons: | |
| buffer: 10px | |
| #color: yellow | |
| #visible: false | |
| sorry-denver: | |
| filter: | |
| $zoom: [3] | |
| name: [Denver] | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| # HACK | |
| # NOTE: These should use icon: buffer instead of going visible: false, but there are problems using icon here :( | |
| # This fixes Paris area, but causes problems for small places in the USA eg Table Bluff near Eureka, California. | |
| funky-village: | |
| filter: { $zoom: [11], population: { max: 1000 }, kind_detail: [village] } | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| funky-isolated_dwelling: | |
| filter: { $zoom: [13], kind_detail: [isolated_dwelling] } | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| hamlet: | |
| filter: { $zoom: [13], kind_detail: hamlet } | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| # END HACK | |
| # someone in London and Salt Lake City thought neighbourhoods should be tagged place: locality | |
| # They were wrong | |
| funky-fake-neighbourhoods: | |
| filter: { $zoom: { min: 13 }, kind_detail: [locality] } | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| population-10m-up: | |
| filter: | |
| population: { min: 10000000 } | |
| draw: | |
| colorized-icons: | |
| size: [[4,5px],[8,6px],[9,0px]] | |
| sprite: townspot-m-rev | |
| priority: 6 | |
| text: | |
| font: | |
| size: [[2,11px],[6,15px],[8,18px],[10,20px],[12,20px],[13,0px]] | |
| text-blend-order: | |
| priority: 6 | |
| font: | |
| size: [[2,11px],[6,15px],[8,18px],[10,20px],[12,20px],[13,0px]] | |
| capital: | |
| filter: { country_capital: true, $zoom: { min: 5 } } | |
| draw: | |
| colorized-icons: | |
| size: [[10,8px],[11,0px]] | |
| sprite: capital-l | |
| priority: 5 | |
| text-blend-order: | |
| priority: 5 | |
| population-5m-10m: | |
| filter: | |
| population: { min: 5000000, max: 10000000 } | |
| draw: | |
| colorized-icons: | |
| size: [[4,5px],[8,6px],[9,0px]] | |
| sprite: townspot-m-rev | |
| priority: 7 | |
| text: | |
| font: | |
| size: [[4,10px],[6,14px],[8,18px],[10,20px],[12,20px],[13,0px]] | |
| text-blend-order: | |
| priority: 7 | |
| font: | |
| size: [[4,10px],[6,14px],[8,18px],[10,20px],[12,20px],[13,0px]] | |
| capital: | |
| # we only want townspots to show as capital dots starting at zoom 5 | |
| filter: { country_capital: true, $zoom: { min: 5 } } | |
| draw: | |
| colorized-icons: | |
| size: [[10,8px],[11,0px]] | |
| sprite: capital-l | |
| priority: 6 | |
| text-blend-order: | |
| priority: 6 | |
| population-1m-5m: | |
| filter: | |
| population: { min: 1000000, max: 5000000 } | |
| draw: | |
| colorized-icons: | |
| size: [[4,5px],[8,6px],[9,0px]] | |
| sprite: townspot-m-rev | |
| priority: 9 | |
| text: | |
| font: | |
| size: [[4,10px],[6,14px],[8,15px],[12,18px],[13,0px]] | |
| text-blend-order: | |
| priority: 9 | |
| font: | |
| size: [[4,10px],[6,14px],[8,15px],[12,18px],[13,0px]] | |
| capital: | |
| # we only want townspots to show as capital dots starting at zoom 5 | |
| filter: { country_capital: true, $zoom: { min: 5 } } | |
| draw: | |
| colorized-icons: | |
| size: [[10,8px],[11,0px]] | |
| sprite: capital-l | |
| priority: 8 | |
| text-blend-order: | |
| priority: 8 | |
| population-500k-1m: | |
| filter: | |
| population: { min: 500000, max: 1000000 } | |
| draw: | |
| colorized-icons: | |
| size: [[8,6px],[9,0px]] | |
| sprite: townspot-m-rev | |
| priority: 11 | |
| text: | |
| font: | |
| size: [[5,10px],[8,12px],[10,14px],[12,16px],[13,0px]] | |
| text-blend-order: | |
| priority: 11 | |
| font: | |
| size: [[5,10px],[8,12px],[10,14px],[12,16px],[13,0px]] | |
| capital: | |
| filter: { country_capital: true, $zoom: { min: 5 } } | |
| draw: | |
| colorized-icons: | |
| size: [[10,6px],[11,0px]] | |
| sprite: capital-m | |
| priority: 10 | |
| text-blend-order: | |
| priority: 10 | |
| population-200k-500k: | |
| filter: | |
| population: { min: 200000, max: 500000 } | |
| draw: | |
| colorized-icons: | |
| size: [[8,6px],[9,6px],[10,6px],[11,0px]] | |
| sprite: townspot-m-rev | |
| priority: 13 | |
| collide: false #debug | |
| text: | |
| font: | |
| size: [[6,10px],[8,14px],[10,15px],[12,16px],[13,0px]] | |
| text-blend-order: | |
| priority: 13 | |
| font: | |
| size: [[6,10px],[8,14px],[10,15px],[12,16px],[13,0px]] | |
| capital: | |
| filter: { country_capital: true, $zoom: { min: 5 } } | |
| draw: | |
| colorized-icons: | |
| size: [[10,6px],[11,0px]] | |
| sprite: capital-m | |
| priority: 12 | |
| text-blend-order: | |
| priority: 12 | |
| population-100k-200k: | |
| filter: | |
| population: { min: 100000, max: 200000 } | |
| draw: | |
| colorized-icons: | |
| size: [[8,6px],[9,6px],[10,6px],[11,0px]] | |
| sprite: townspot-m-rev | |
| priority: 15 | |
| text: | |
| font: | |
| size: [[6,10px],[8,12px],[14,14px],[15,0px]] | |
| text-blend-order: | |
| priority: 15 | |
| font: | |
| size: [[6,10px],[8,12px],[14,14px],[15,0px]] | |
| capital: | |
| filter: { country_capital: true, $zoom: { min: 5 } } | |
| draw: | |
| colorized-icons: | |
| size: [[10,6px],[11,0px]] | |
| sprite: capital-m | |
| priority: 14 | |
| text-blend-order: | |
| priority: 14 | |
| population-50k-100k: | |
| filter: | |
| population: { min: 50000, max: 100000 } | |
| draw: | |
| colorized-icons: | |
| size: [[8,5px],[9,5px],[10,6px],[11,0px]] | |
| sprite: townspot-s-rev | |
| priority: 17 | |
| text: | |
| font: | |
| size: [[6,10px],[8,12px],[14,14px],[15,0px]] | |
| text-blend-order: | |
| priority: 17 | |
| font: | |
| size: [[6,10px],[8,12px],[14,14px],[15,0px]] | |
| capital: | |
| filter: { country_capital: true, $zoom: { min: 5 } } | |
| draw: | |
| colorized-icons: | |
| size: [[10,5px],[11,0px]] | |
| sprite: capital-m | |
| priority: 16 | |
| text-blend-order: | |
| priority: 16 | |
| population-20k-50k: | |
| filter: | |
| population: { min: 20000, max: 50000 } | |
| draw: | |
| colorized-icons: | |
| size: [[8,5px],[9,5px],[10,5px],[11,0px]] | |
| sprite: townspot-s-rev | |
| priority: 19 | |
| text: | |
| font: | |
| size: [[9,10px],[14,12px],[15,0px]] | |
| text-blend-order: | |
| priority: 19 | |
| font: | |
| size: [[9,10px],[14,12px],[15,0px]] | |
| capital: | |
| filter: { country_capital: true, $zoom: { min: 5 } } | |
| draw: | |
| colorized-icons: | |
| size: [[10,5px],[11,0px]] | |
| sprite: capital-s | |
| priority: 18 | |
| text-blend-order: | |
| priority: 18 | |
| population-10k-20k: | |
| filter: | |
| population: { min: 10000, max: 20000 } | |
| draw: | |
| colorized-icons: | |
| size: [[8,4px],[9,4px],[10,4px],[11,0px]] | |
| sprite: townspot-xs-rev | |
| priority: 21 | |
| text: | |
| font: | |
| fill: [[9, global.dark_color], [11, global.black_color]] | |
| size: [[9, 10px], [14, 12px], [15, 0px]] | |
| text-blend-order: | |
| priority: 21 | |
| font: | |
| fill: [[9, global.dark_color], [11, global.black_color]] | |
| size: [[9, 10px],[14, 12px],[15, 0px]] | |
| capital: | |
| filter: { country_capital: true, $zoom: { min: 5 } } | |
| draw: | |
| colorized-icons: | |
| size: [[10,5px],[11,0px]] | |
| sprite: capital-s | |
| priority: 20 | |
| text-blend-order: | |
| priority: 20 | |
| population-5k-10k: | |
| filter: | |
| population: { min: 5000, max: 10000 } | |
| draw: | |
| colorized-icons: | |
| size: [[8,4px],[9,4px],[10,4px],[11,0px]] | |
| sprite: townspot-xs-rev | |
| priority: 23 | |
| text: | |
| font: | |
| fill: [[9, global.dark_color], [11, global.black_color]] | |
| size: [[9,10px], [14,12px], [15,0px]] | |
| text-blend-order: | |
| priority: 23 | |
| font: | |
| fill: [[9, global.dark_color], [11, global.black_color]] | |
| size: [[9,10px], [14,12px], [15,0px]] | |
| capital: | |
| filter: { country_capital: true, $zoom: { min: 5 } } | |
| draw: | |
| colorized-icons: | |
| size: [[10,5px],[11,0px]] | |
| sprite: capital-s | |
| priority: 22 | |
| text-blend-order: | |
| priority: 22 | |
| population-2k-5k: | |
| filter: | |
| population: { min: 2000, max: 5000 } | |
| draw: | |
| colorized-icons: | |
| size: [[8,4px],[9,4px],[10,4px],[11,0px]] | |
| sprite: townspot-xs-rev | |
| priority: 25 | |
| text: | |
| font: | |
| fill: [[9, global.dark_color],[11, global.black_color]] | |
| size: [[9,10px], [14,12px], [15,0px]] | |
| text-blend-order: | |
| priority: 25 | |
| font: | |
| fill: [[9, global.dark_color],[11, global.black_color]] | |
| size: [[9,10px], [14,12px], [15,0px]] | |
| capital: | |
| filter: { country_capital: true, $zoom: { min: 5 } } | |
| draw: | |
| colorized-icons: | |
| size: [[10,5px],[11,0px]] | |
| sprite: capital-s | |
| priority: 24 | |
| text-blend-order: | |
| priority: 24 | |
| population-1k-2k: | |
| filter: | |
| population: { min: 1000, max: 2000 } | |
| draw: | |
| colorized-icons: | |
| size: [[8,4px],[9,4px],[10,4px],[11,0px]] | |
| sprite: townspot-xs-rev | |
| priority: 27 | |
| text: | |
| font: | |
| fill: [[9, global.dark_color], [11, global.black_color]] | |
| size: [[9,10px], [14,12px], [15,0px]] | |
| text-blend-order: | |
| priority: 27 | |
| font: | |
| fill: [[9, global.dark_color], [11, global.black_color]] | |
| size: [[9, 10px], [14, 12px], [15, 0px]] | |
| capital: | |
| filter: { country_capital: true, $zoom: { min: 5 } } | |
| draw: | |
| colorized-icons: | |
| size: [[10,5px],[11,0px]] | |
| sprite: capital-s | |
| priority: 26 | |
| text-blend-order: | |
| priority: 26 | |
| population-200-1k: | |
| filter: | |
| population: { min: 200, max: 1000 } | |
| draw: | |
| colorized-icons: | |
| size: [[8,4px],[9,4px],[10,4px],[11,0px]] | |
| sprite: townspot-xs-rev | |
| priority: 28 | |
| text: | |
| font: | |
| fill: [[9, global.dark_color],[11, global.black_color]] | |
| size: [[9, 10px], [14, 11px], [15, 0px]] | |
| text-blend-order: | |
| priority: 28 | |
| font: | |
| fill: [[9, global.dark_color],[11, global.black_color]] | |
| size: [[9, 10px], [14, 11px], [15, 0px]] | |
| capital: | |
| filter: { country_capital: true, $zoom: { min: 5 } } | |
| draw: | |
| colorized-icons: | |
| size: [[10,5px],[11,0px]] | |
| sprite: capital-s | |
| priority: 27 | |
| text-blend-order: | |
| priority: 27 | |
| neighbourhoods: | |
| filter: | |
| kind: | |
| - macrohood | |
| - neighbourhood | |
| - borough | |
| $zoom: { min: 10 } | |
| is_landuse_aoi: false | |
| draw: | |
| text-blend-order: | |
| visible: false | |
| priority: 29 | |
| buffer: 8px | |
| text_wrap: 10 | |
| max_lines: 2 | |
| font: | |
| fill: global.mid_color | |
| transform: uppercase | |
| stroke: { color: global.white_color, width: 4 } | |
| neighborhood-z11: | |
| filter: | |
| $zoom: [11] | |
| min_zoom: [11] | |
| max_zoom: { min: 12 } | |
| #- kind_tile_rank: { max: 6 } | |
| draw: | |
| text-blend-order: | |
| visible: global.text_visible_neighbourhoods_e | |
| font: | |
| size: 9px | |
| weight: normal | |
| neighborhood-z12: | |
| filter: | |
| $zoom: [12] | |
| min_zoom: [11,12] | |
| max_zoom: { min: 13 } | |
| #- kind_tile_rank: { max: 8 } | |
| draw: | |
| text-blend-order: | |
| visible: global.text_visible_neighbourhoods_e | |
| font: | |
| size: 10px | |
| weight: normal | |
| neighborhood-z13: | |
| filter: | |
| $zoom: [13] | |
| min_zoom: [11,12,13] | |
| max_zoom: { min: 14 } | |
| kind_tile_rank: { max: 8 } | |
| draw: | |
| text-blend-order: | |
| visible: global.text_visible_neighbourhoods_e | |
| font: | |
| size: 12px | |
| weight: 300 | |
| stroke: { color: global.white_color, width: 6 } | |
| neighborhood-z14: | |
| filter: | |
| $zoom: [14] | |
| min_zoom: [11,12,13,14] | |
| max_zoom: { min: 15 } | |
| kind_tile_rank: { max: 8 } | |
| draw: | |
| text-blend-order: | |
| text_wrap: 12 | |
| visible: global.text_visible_neighbourhoods | |
| font: | |
| size: 16px | |
| weight: 300 | |
| stroke: { color: global.white_color, width: 6 } | |
| neighborhood-z15: | |
| filter: | |
| $zoom: [15] | |
| min_zoom: [11,12,13,14,15] | |
| max_zoom: { min: 16 } | |
| kind_tile_rank: { max: 8 } | |
| draw: | |
| text-blend-order: | |
| text_wrap: 12 | |
| visible: global.text_visible_neighbourhoods | |
| font: | |
| size: 21px | |
| weight: 300 | |
| fill: global.mid_color | |
| stroke: { color: global.white_color, width: 8 } | |
| z15-new: | |
| filter: | |
| all: | |
| - min_zoom: 15 | |
| draw: | |
| text-blend-order: | |
| priority: 19 | |
| font: | |
| size: 13px | |
| neighborhood-z16: | |
| filter: | |
| $zoom: [16] | |
| min_zoom: [11,12,13,14,15,16] | |
| max_zoom: { min: 17 } | |
| kind_tile_rank: { max: 8 } | |
| draw: | |
| text-blend-order: | |
| visible: global.text_visible_neighbourhoods | |
| font: | |
| size: 24px | |
| weight: 300 | |
| fill: global.mid_color | |
| stroke: { color: global.white_color, width: 8 } | |
| pois: | |
| data: { source: mapzen, layer: pois } | |
| #visible: global.label_visible_poi_landuse | |
| filter: | |
| all: | |
| - not: { kind: [building,address,farm,tree,apron,residential,commercial,industrial] } | |
| # White list a few kinds to "always" show per the tile zoom inclusion, else test feature's min_zoom | |
| #- function() { return feature.min_zoom <= $zoom } | |
| - function() { if( feature.kind == 'restaurant' || feature.kind == 'landmark' || feature.kind == 'cafe' ) { return true } else { return feature.min_zoom <= $zoom } } | |
| draw: | |
| colorized-icons: | |
| visible: global.icon_visible_poi_landuse | |
| size: global.icon_size | |
| sprite: function() { return feature.kind; } | |
| sprite_default: generic | |
| interactive: global.sdk_interactive | |
| priority: 65 #function() { return (feature.min_zoom && Math.floor(feature.min_zoom * 1000)) || 65; } | |
| repeat_group: abc | |
| buffer: 3px | |
| text: | |
| visible: global.text_visible_poi_landuse | |
| text_source: global.ux_language_text_source | |
| buffer: 3px | |
| text_wrap: 18 | |
| max_lines: 3 | |
| font: | |
| family: global.text_font_family | |
| weight: normal | |
| fill: global.dark_color | |
| size: [[13, 10px], [14, 11px], [17, 12px], [19, 12px], [20, 14px]] | |
| stroke: { color: global.white_color, width: [[12,2px],[16,4px]] } | |
| # improve legibility at high zooms | |
| poi_labels-z18: | |
| filter: { $zoom: { min: 18 } } | |
| draw: | |
| colorized-icons: | |
| text: | |
| # some pois have really long names | |
| max_lines: 5 | |
| font: | |
| weight: 600 | |
| # source icon sprite from something other than kind | |
| sports-pitch: | |
| filter: { kind: [grass, pitch] } | |
| draw: | |
| colorized-icons: | |
| sprite: function() { return feature.kind_detail; } | |
| # needs a better recreation icon, so just use generic (default) for now | |
| #sprite_default: sports | |
| place_of_worship: | |
| filter: | |
| kind: [place_of_worship, wayside_chapel] | |
| draw: | |
| colorized-icons: | |
| sprite: function() { return feature.religion; } | |
| sprite_default: place_of_worship | |
| # TODO: some or all of this may be unnecessary for the sprite, but is necessary for the early filter | |
| building-icon: | |
| filter: | |
| kind: [apartments, auditorium, building, hangar, manor, recreation_center, retirement_home, terminal] | |
| draw: | |
| colorized-icons: | |
| sprite: building | |
| early: | |
| filter: | |
| any: | |
| # show labels for smaller landuse areas at higher zooms | |
| - { $zoom: [14], area: { max: 200000 } } | |
| - { $zoom: [15], area: { max: 20000 } } | |
| - { $zoom: [16], area: { max: 5000 } } | |
| - { $zoom: [17], area: { max: 1000 } } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| #end different icon sprites | |
| #most POI icons without name should be hidden, except these | |
| no-name: | |
| filter: { name: false } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| # eg park polygons in SF that have area but no name, sigh | |
| no-name-no-area: | |
| filter: | |
| kind: true | |
| name: false | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| sports-pitch: | |
| filter: | |
| $zoom: { min: 17 } | |
| kind: [grass, pitch] | |
| kind_detail: [baseball, basketball, football, hockey, soccer, tennis] | |
| draw: | |
| colorized-icons: | |
| visible: global.icon_visible_poi_landuse_e | |
| priority: 69 | |
| z17: | |
| filter: | |
| $zoom: { min: 17 } | |
| kind: [parking] | |
| draw: { colorized-icons: { visible: global.icon_visible_poi_landuse_e } } | |
| z18: | |
| # for different styles, different sets | |
| # since [picnic_site] doesn't have bubble-wrap icon, it's omitted here | |
| filter: | |
| $zoom: { min: 18 } | |
| kind: [drinking_water, information, playground, toilets, traffic_signals] | |
| draw: { colorized-icons: { visible: global.icon_visible_poi_landuse_e } } | |
| z19: | |
| filter: | |
| $zoom: { min: 19 } | |
| kind: [bicycle_parking] | |
| draw: { colorized-icons: { visible: global.icon_visible_poi_landuse_e } } | |
| # NOTE: all natural_* should only be in landuse layer | |
| suppress-icon-always: | |
| filter: | |
| kind: [natural_forest, natural_park, natural_wood] | |
| draw: | |
| colorized-icons: | |
| size: 0px | |
| priority: 100 | |
| text: | |
| font: | |
| fill: global.mid_color | |
| family: global.text_font_family | |
| style: italic | |
| size: 11px | |
| suppress-icon-z17: | |
| filter: | |
| $zoom: { min: 17 } | |
| kind: [common, grass, houseboat, pedestrian, railway, ship, wetland] | |
| draw: | |
| colorized-icons: | |
| size: 0px | |
| #visible: false | |
| text: { font: { style: italic } } | |
| # the server should be setting better values here | |
| z-server-friend: | |
| hide-until-z12-any: | |
| filter: | |
| kind: [landmark, museum, prison] | |
| $zoom: { max: 12 } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| hide-until-z14-any: | |
| filter: | |
| kind: [natural_forest, natural_park, natural_wood, post_office] | |
| $zoom: { max: 14 } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| hide-until-z15-any: | |
| filter: | |
| $zoom: { max: 15 } | |
| kind: [cafe, restaurant] | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| hide-until-z15-no-area: | |
| filter: | |
| area: false | |
| $zoom: { max: 15 } | |
| kind: [park] | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| hide-until-z15-with-area: | |
| filter: | |
| area: true | |
| $zoom: { max: 15 } | |
| kind: [nursing_home] | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| hide-until-z16-any: | |
| filter: | |
| kind: [fire_station, grass, peak, police, tram_stop] | |
| $zoom: { max: 16 } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| hide-until-z16-no-area: | |
| filter: | |
| area: false | |
| kind: [allotments, college, garden, university] | |
| $zoom: { max: 16 } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| # no POIs for commercial, residential | |
| hide-until-z17-any: | |
| filter: | |
| $zoom: { max: 17 } | |
| kind: [bank, bus_stop, car_sharing, wood] | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| hide-until-z17-with-area: | |
| filter: | |
| area: true | |
| $zoom: { max: 17 } | |
| kind: [common, grass, houseboat, pedestrian, pitch, railway, ship, wetland] | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| hide-until-z17-no-area: | |
| filter: | |
| area: false | |
| $zoom: { max: 17 } | |
| # note: atm and drinking_water appear hear and in area versions | |
| kind: [accountant, administrative, advertising_agency, animal, architect, association, atm, bakery, bed_and_breakfast, bicycle, bicycle_parking, bicycle_rental_station, books, butcher, car, car_repair, chalet, clothes, company, computer, consulting, convenience, doityourself, drinking_water, dry_cleaning, educational_institution, emergency_phone, employment_agency, estate_agent, fashion, financial, florist, foundation, gift, government, greengrocer, guest_house, hairdresser, hostel, hotel, insurance, it, jewelry, lawyer, mast, memorial, mobile_phone, motel, newspaper, ngo, notary, optician, parking, pet, physician, playground, political_party, post_box, religion, research, subway_entrance, tax_advisor, telecommunication, telephone, theatre, therapist, toilets, traffic_signals, travel_agent, water_tower] | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| hide-until-z18-any: | |
| filter: | |
| kind: [atm, bus_stop, drinking_water] | |
| $zoom: { max: 18 } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| hide-until-z18-no-area: | |
| filter: | |
| $zoom: { max: 18 } | |
| area: false | |
| kind: [bench, parking, waste_basket] | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| hide-until-z19-any: | |
| filter: | |
| $zoom: { max: 19 } | |
| kind: [bicycle_parking, burial_vault, car_sharing] | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| # hide based on kind and area filters | |
| military-early: | |
| filter: | |
| kind: [military] | |
| any: | |
| # show labels for smaller landuse areas at higher zooms | |
| - { $zoom: [8], area: { max: 50000000 } } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| university-early: | |
| filter: | |
| kind: [university, college] | |
| any: | |
| # show labels for smaller landuse areas at higher zooms | |
| - { $zoom: [11], area: { max: 2000000 } } | |
| - { $zoom: [12], area: { max: 500000 } } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| school-early: | |
| filter: | |
| kind: [school, kindergarten] | |
| any: | |
| # show labels for smaller landuse areas at higher zooms | |
| - { $zoom: [13], area: { max: 100000 } } | |
| - { $zoom: [14], area: { max: 50000 } } | |
| - { $zoom: [15], area: { max: 10000 } } | |
| - { $zoom: [16], area: { max: 5000 } } | |
| - { $zoom: [17], area: { max: 2000 } } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| garden-area-early: | |
| filter: | |
| kind: [garden, allotments] | |
| any: | |
| # limit show smaller landuse areas to higher zooms | |
| - { $zoom: [12], area: { max: 500000 } } | |
| - { $zoom: [13], area: { max: 100000 } } | |
| - { $zoom: [14], area: { max: 10000 } } | |
| - { $zoom: [15], area: { max: 5000 } } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| cemetery-early: | |
| filter: | |
| kind: [cemetery] | |
| # limit show smaller landuse areas to higher zooms | |
| any: | |
| - { $zoom: [12], area: { max: 3000000 } } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| golf_course-early: | |
| filter: | |
| kind: golf_course | |
| any: | |
| - { $zoom: [12], area: { max: 2500000 } } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| office-early: | |
| filter: | |
| - { kind: [insurance, office, company], $zoom: [15], area: { max: 10000 } } | |
| - { kind: [insurance, office, company], $zoom: [16], area: { max: 5000 } } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| landuse-labels-green-areas-not-national-park: | |
| filter: | |
| kind: [park, conservation, protected_area, nature_reserve, forest, grass] | |
| any: | |
| # show labels for smaller landuse areas at higher zooms | |
| - { $zoom: { max: 6 }, area: true } | |
| - { $zoom: [6], area: { max: 5000000000 } } | |
| - { $zoom: [7], area: { max: 5000000000 } } | |
| - { $zoom: [8], area: { max: 1000000000 } } | |
| - { $zoom: [9], area: { max: 100000000 } } | |
| - { $zoom: [10], area: { max: 50000000 } } | |
| - { $zoom: [11], area: { max: 25000000 } } | |
| - { $zoom: [12], area: { max: 5000000 } } | |
| - { $zoom: [13], area: { max: 200000 } } | |
| - { $zoom: [14], area: { max: 50000 } } | |
| - { $zoom: [15], area: { max: 10000 } } | |
| - { $zoom: [16], area: { max: 1000 } } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| wilderness-areas-early: | |
| filter: function() { return $zoom < 9 && feature.name && (feature.name.indexOf("Wilderness") > -1 || feature.name.indexOf("BLM") > -1 || feature.protect_class == '1' || feature.protect_class == '1a' || feature.protect_class == '1b' ); } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| not-national-park: | |
| filter: function() { return feature.name && !((feature.name.indexOf("National Park") > -1) || feature.name.indexOf("National Monument") > -1); } | |
| early: | |
| filter: { $zoom: { max: 8 } } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| landuse-labels-not-any-above: | |
| filter: | |
| $zoom: { max: 6 } | |
| not: { kind: [aerodrome, airport, allotments, aquarium, attraction, battlefield, beach, cemetery, college, conservation, forest, garden, glacier, golf_course, grass, kindergarten, landmark, maze, national_park, nature_reserve, park, playground, protected_area, resort, school, stadium, station, theme_park, university, winery, winter_sports, zoo] } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| glacier: | |
| filter: { $zoom: { max: 14 }, kind: glacier, area: false } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| # set special priority, sprite, and text styles per kind | |
| has-area: | |
| filter: { area: true } | |
| draw: | |
| colorized-icons: | |
| priority: 41 | |
| national-park-protected-areas: | |
| filter: | |
| kind: [national_park, battlefield] | |
| draw: | |
| colorized-icons: | |
| visible: global.icon_visible_landuse_green | |
| size: global.icon_size_green | |
| sprite: park | |
| text: | |
| visible: global.text_visible_landuse_green | |
| font: | |
| fill: global.dark_color | |
| style: italic | |
| # large park icon | |
| # z14-parks: | |
| # filter: { $zoom: { min: 14 } } | |
| # draw: | |
| # colorized-icons: | |
| # sprite: park-l | |
| # size: [[14,24px],[16,32px]] | |
| parks: | |
| filter: | |
| - kind: [park, conservation, grass] | |
| - { kind: protected_area, not: { protect_class: [6, '6'] } } | |
| draw: | |
| colorized-icons: | |
| visible: global.icon_visible_landuse_green | |
| size: global.icon_size_green | |
| sprite: park | |
| text: | |
| visible: global.text_visible_landuse_green | |
| font: | |
| fill: global.dark_color | |
| style: italic | |
| only-text-later: | |
| filter: { kind: [grass], $zoom: { min: 16 } } | |
| draw: | |
| colorized-icons: | |
| size: 0px | |
| text: | |
| font: | |
| style: italic | |
| forest: | |
| filter: | |
| - kind: forest | |
| - { kind: protected_area, protect_class: [6, '6'] } | |
| draw: | |
| colorized-icons: | |
| visible: global.icon_visible_landuse_green | |
| size: global.icon_size_green | |
| sprite: forest | |
| text: | |
| visible: global.text_visible_landuse_green | |
| font: | |
| fill: global.dark_color | |
| style: italic | |
| beach: | |
| filter: | |
| kind: [beach] | |
| draw: | |
| colorized-icons: | |
| visible: global.icon_visible_landuse_green | |
| size: global.icon_size_green | |
| text: | |
| visible: global.text_visible_landuse_green | |
| font: | |
| fill: global.dark_color | |
| airport: | |
| filter: | |
| kind: [airport, aerodrome] | |
| draw: | |
| colorized-icons: | |
| priority: 42 | |
| visible: global.icon_visible_landuse_green | |
| size: global.icon_size_green | |
| text: | |
| visible: global.text_visible_landuse_green | |
| text_source: global.ux_language_text_source_iata | |
| early: | |
| filter: { $zoom: [9,10,11] } | |
| draw: { colorized-icons: { text: { text_source: iata } } } | |
| enclosure-related: | |
| filter: | |
| kind: [enclosure, animal] | |
| draw: | |
| colorized-icons: | |
| priority: 43 | |
| size: 0px | |
| #: dot-black | |
| text: | |
| text_wrap: 10 | |
| font: | |
| style: italic | |
| weight: normal | |
| glacier: | |
| filter: | |
| kind: glacier | |
| draw: | |
| colorized-icons: | |
| size: 0px | |
| #visible: false | |
| text: | |
| visible: true | |
| priority: 44 | |
| text_wrap: 10 | |
| font: | |
| weight: normal | |
| style: italic | |
| fill: global.dark_color | |
| landuse-labels-not-any-above: | |
| filter: | |
| not: { kind: [aerodrome, airport, allotments, aquarium, attraction, battlefield, beach, cemetery, college, conservation, forest, garden, glacier, golf_course, grass, kindergarten, landmark, maze, national_park, nature_reserve, park, playground, protected_area, resort, school, stadium, station, theme_park, university, winery, winter_sports, zoo] } | |
| draw: | |
| colorized-icons: | |
| priority: 43 | |
| building-like: | |
| filter: { kind: [commercial,residential,warehouse,public,dormitory], osm_relation: false } | |
| draw: | |
| colorized-icons: | |
| sprite: building | |
| station-train-subway: | |
| filter: { kind: [station, train_station] } | |
| draw: | |
| colorized-icons: | |
| visible: global.icon_visible_station | |
| size: [[13, 12px], [14, 12px], [15, 16px], [17, 18px], [18, 20px]] | |
| priority: 42 | |
| text: | |
| visible: global.text_visible_station | |
| station-early: | |
| filter: | |
| $zoom: { max: 11 } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| # for a transit style we'd want to see **all**, so don't move this above (it's special to this style) | |
| low-priority-early: | |
| filter: { kind_tile_rank: { min: 5 }, $zoom: { min: 0, max: 13 } } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| low-priority-early-z13: | |
| filter: { kind_tile_rank: { min: 5 }, $zoom: [13] } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| low-priority-early-z14: | |
| filter: { kind_tile_rank: { min: 7 }, $zoom: [14] } | |
| draw: | |
| colorized-icons: | |
| text: { visible: false } | |
| garden-no-area-early: | |
| filter: { kind: [garden, allotments], $zoom: [16], area: false } | |
| draw: | |
| colorized-icons: | |
| priority: 45 | |
| size: 14px | |
| text: { font: { size: 10px, style: italic } } | |
| garden-no-area-later: | |
| filter: { kind: [garden, allotments], $zoom: { min: 17 }, area: false } | |
| draw: | |
| colorized-icons: | |
| priority: 45 | |
| size: 16px | |
| text: { font: { size: 11px, style: italic } } | |
| gate: | |
| filter: { kind: gate, name: true } | |
| draw: { colorized-icons: { sprite: generic } } | |
| parking-labels: | |
| filter: | |
| kind: [parking] | |
| $zoom: { min: 18 } | |
| draw: | |
| colorized-icons: | |
| text: | |
| visible: global.text_visible_poi_landuse | |
| font: | |
| size: 10px | |
| tower: | |
| filter: { kind: [tower], label_placement: true } | |
| draw: | |
| colorized-icons: | |
| size: 0px | |
| #visible: false | |
| text: | |
| font: | |
| style: italic | |
| # TODO: this isn't working, should see small icons near the transbay terminal in SF | |
| bus_stop: | |
| filter: | |
| kind: [bus_stop] | |
| draw: | |
| colorized-icons: | |
| size: [[18,12px],[20,18px]] | |
| text: | |
| optional: true | |
| font: | |
| size: 11px | |
| weight: normal | |
| early: | |
| filter: { $zoom: { max: 19 } } | |
| draw: | |
| colorized-icons: | |
| text: | |
| visible: false | |
| airport-gate: | |
| filter: { kind: aeroway_gate } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| text-blend-order: | |
| visible: global.text_visible_airport_gate | |
| text_source: ref | |
| priority: 63 | |
| font: | |
| fill: global.mid_color | |
| size: [[16,9px],[17,12px],[20,14px]] | |
| later: | |
| filter: { $zoom: { min: 19 } } | |
| draw: | |
| colorized-icons: | |
| text: | |
| font: | |
| weight: 600 | |
| highway-exit: | |
| filter: { kind: motorway_junction, $zoom: { min: 14 } } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| text-blend-order: | |
| visible: global.text_visible_exits | |
| text_source: ref | |
| priority: 63 | |
| font: | |
| family: Montserrat | |
| fill: global.mid_color | |
| size: [[12,9px],[15,12px],[17,14px]] | |
| stroke: { color: global.text_stroke, width: [[12,2px],[14,3px],[15,3px]] } | |
| later: | |
| filter: { $zoom: { min: 16 } } | |
| draw: | |
| colorized-icons: | |
| text: | |
| font: | |
| weight: 600 | |
| transit-overlay-station-labels: | |
| filter: | |
| all: | |
| - function() { return global.sdk_transit_overlay; } | |
| - kind: [station, tram_stop, bus_station, subway_entrance, halt, stop, platform, bus_stop, stop_position ] | |
| - any: | |
| - area: false | |
| - area: true | |
| all: | |
| - $geometry: point | |
| - kind: true | |
| draw: | |
| colorized-icons: | |
| size: [[13, 12px], [16, 16px], [19, 20px]] | |
| interactive: global.sdk_interactive | |
| priority: 15 | |
| text: | |
| buffer: 4px | |
| move_into_tile: false # preserves text alignment w/icons in JS | |
| #anchor: bottom | |
| #offset: [[13, [0, 6px]], [16, [0, 8px]], [19, [0, 10px]]] # offset tracks alongside icon size (half icon height) | |
| interactive: global.sdk_interactive | |
| priority: 16 | |
| font: | |
| fill: global.black_color | |
| weight: normal | |
| size: 11px | |
| stroke: { color: global.white_color, width: 3 } | |
| poi_labels-z14: | |
| filter: { $zoom: [14] } | |
| draw: { colorized-icons: { text: { font: { size: 11px } } } } | |
| poi_labels-z15: | |
| filter: { $zoom: [15,16,17] } | |
| draw: { colorized-icons: { text: { font: { size: 12px, stroke: { width: 2 } } } } } | |
| poi_labels-z18: | |
| filter: { $zoom: [18,19] } | |
| draw: { colorized-icons: { text: { font: { size: 12px, weight: 600, stroke: { width: 3 } } } } } | |
| poi_labels-z20-up: | |
| filter: { $zoom: { min: 20 } } | |
| draw: { colorized-icons: { text: { font: { size: 14px, weight: 600, stroke: { width: 3 } } } } } | |
| station-train-subway: | |
| filter: { kind: [station, train-station, train_station] } #, $zoom: { min: 13 } | |
| draw: | |
| colorized-icons: | |
| sprite: train_station | |
| size: [[13, 12px], [14, 14px], [15, 16px], [17, 20px]] | |
| priority: 11 | |
| text: | |
| #offset: [[13, [0, 6px]], [14, [0, 7px]],[15, [0, 8px]], [17, [0, 10px]]] | |
| priority: 12 | |
| low-priority-early: | |
| filter: { kind_tile_rank: { min: 3 }, $zoom: { min: 0, max: 12 } } | |
| draw: | |
| colorized-icons: | |
| size: [[12, 5px], [14, 6px], [15, 16px]] | |
| text: | |
| visible: false | |
| long-tail: | |
| filter: { kind_tile_rank: { min: 10 }, $zoom: [10] } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| low-priority-early-z12: | |
| filter: { kind_tile_rank: { min: 8 }, $zoom: [12] } | |
| draw: | |
| colorized-icons: | |
| # visible: false | |
| size: [[12, 5px], [14, 6px], [15, 16px]] | |
| text: | |
| visible: false | |
| low-priority-early-z13: | |
| filter: { kind_tile_rank: { min: 8 }, $zoom: [13] } | |
| draw: | |
| colorized-icons: | |
| #visible: false | |
| size: [[12, 8px], [14, 6px], [15, 16px]] | |
| text: | |
| visible: false | |
| low-priority-early-z14: | |
| filter: { kind_tile_rank: { min: 7 }, $zoom: [14] } | |
| draw: | |
| colorized-icons: | |
| size: [[12, 10px], [14, 11px], [15, 16px]] | |
| #visible: false | |
| text: | |
| visible: false | |
| late: | |
| filter: { $zoom: { min: 16 } } | |
| draw: | |
| colorized-icons: | |
| text: | |
| font: | |
| weight: 600 | |
| size: 12px | |
| subway-early: | |
| filter: { is_subway: true, is_train: false, $zoom: { max: 12 } } | |
| draw: | |
| colorized-icons: | |
| visible: false | |
| text: | |
| visible: false | |
| halt-early: | |
| filter: { kind: [halt,stop], $zoom: { max: 15 } } | |
| draw: | |
| colorized-icons: | |
| size: [[15, 8px], [16, 18px]] | |
| visible: global.sdk_transit_overlay | |
| sprite: light_rail | |
| text: | |
| visible: false | |
| platform-early: | |
| filter: { kind: [platform] } | |
| draw: | |
| colorized-icons: | |
| size: [[15, 8px], [16, 18px]] | |
| visible: global.sdk_transit_overlay | |
| sprite: generic | |
| text: | |
| visible: false | |
| tram-stop-early: | |
| filter: { kind: [tram_stop], $zoom: { max: 16 } } | |
| draw: | |
| colorized-icons: | |
| size: [[13, 0px], [14, 7px], [15, 8px]] | |
| visible: global.sdk_transit_overlay | |
| sprite: light_rail | |
| text: | |
| visible: false | |
| tram-stop: | |
| filter: { kind: tram_stop, $zoom: { min: 16 } } | |
| draw: | |
| colorized-icons: | |
| size: [[16, 12px], [17, 14px], [18, 18px]] | |
| sprite: light_rail | |
| #text: | |
| #offset: [[13, [0, 6px]], [16, [0, 9px]]] | |
| bus-like-labels: | |
| filter: | |
| kind: [platform, stop_position] | |
| draw: | |
| colorized-icons: | |
| size: [[13, 8px], [16, 10px], [17, 12px], [18, 18px]] | |
| sprite: bus_station | |
| text: | |
| interactive: global.sdk_interactive | |
| font: | |
| fill: global.black_color | |
| size: 12px | |
| stroke: { color: global.white_color, width: 4 } | |
| bus-station-labels: | |
| filter: | |
| kind: [bus_station, bus_stop] | |
| $zoom: { min: 16 } | |
| draw: | |
| colorized-icons: | |
| size: [[13, 12px], [16, 18px]] | |
| sprite: bus_station | |
| priority: 17 | |
| text: | |
| interactive: global.sdk_interactive | |
| priority: 18 | |
| font: | |
| fill: global.black_color | |
| size: 12px | |
| stroke: { color: global.white_color, width: 4 } | |
| bus_stop: | |
| filter: | |
| kind: [bus_stop] | |
| $zoom: { max: 19 } | |
| draw: | |
| colorized-icons: | |
| size: [[13, 8px], [19, 18px]] | |
| text: | |
| visible: false | |
| subway-entrance: | |
| filter: | |
| kind: [subway_entrance] | |
| draw: | |
| colorized-icons: | |
| sprite: subway_entrance | |
| size: [[17, 12px], [19, 14px]] | |
| priority: 19 | |
| text: | |
| #offset: [[17, [0, 6px]], [19, [0, 7px]]] # offset tracks alongside icon size (half icon height) | |
| priority: 20 | |
| interactive: global.sdk_interactive | |
| text_source: function() { if( feature.ref || feature.name ) { if( feature.ref && feature.name ) { return '[' + feature.ref + ']\n' + feature.name; } else { return feature.name; } } else { return "Entrance"; } } | |
| font: | |
| fill: global.black_color | |
| size: 12px | |
| stroke: { color: global.white_color, width: 4 } | |
| earth-labels: | |
| data: { source: mapzen, layer: earth } | |
| continent: | |
| filter: { kind: [continent], $zoom: {max: 5} } | |
| draw: | |
| text-blend-order: | |
| visible: global.text_visible_continent | |
| text_source: global.ux_language_text_source_continent_stacked_only | |
| text_wrap: false | |
| font: | |
| family: global.text_font_family | |
| size: [[1,11px],[3,14px]] | |
| style: italic | |
| fill: global.black_color | |
| weight: normal | |
| transform: uppercase | |
| continent-spacer: | |
| filter: { $zoom: { min: 2 } } | |
| draw: | |
| text-blend-order: | |
| text_source: global.ux_language_text_source_continent | |
| island: | |
| filter: { kind: [archipelago, island, islet] } | |
| draw: | |
| text-blend-order: | |
| visible: global.text_visible_island | |
| text_wrap: 10 | |
| font: | |
| family: global.text_font_family | |
| size: 12px | |
| style: italic | |
| fill: global.black_color | |
| weight: normal | |
| stroke: { color: global.white_color, width: 4 } | |
| landuse: | |
| data: { source: mapzen } | |
| draw: | |
| dots: | |
| order: global.feature_order | |
| visible: false | |
| medium-dots: | |
| order: global.feature_order | |
| visible: false | |
| horizontal-bars: | |
| order: global.feature_order | |
| visible: false | |
| horizontal-bars-rev: | |
| order: global.feature_order | |
| visible: false | |
| dots-rev: | |
| order: global.feature_order | |
| visible: false | |
| dots-rev-grid: | |
| order: global.feature_order | |
| visible: false | |
| pixel-pattern-light: | |
| order: global.feature_order | |
| visible: false | |
| pixel-pattern-bright: | |
| order: global.feature_order | |
| visible: false | |
| tiny-dots: | |
| order: global.feature_order | |
| visible: false | |
| polygons: | |
| order: global.feature_order | |
| visible: false | |
| lines: | |
| order: global.feature_order | |
| landuse-labels: | |
| filter: | |
| all: | |
| - label_placement: true | |
| - name: true | |
| draw: | |
| text-blend-order: | |
| text_source: global.ux_language_text_source | |
| interactive: global.sdk_interactive | |
| move_into_tile: true | |
| priority: 100 | |
| visible: global.text_visible_landuse_generic | |
| font: | |
| fill: global.mid_color | |
| family: global.text_font_family | |
| style: italic | |
| size: 11px | |
| stroke: { color: global.white_color, width: 1 } | |
| #tier1: | |
| national_park: | |
| filter: | |
| all: | |
| - kind: [national_park, battlefield, protected_area] | |
| any: | |
| - not: { operator: [ "United States Forest Service", "Forest Preserve District of Cook County" ] } | |
| - protect_class: ['2','3','5'] | |
| draw: | |
| dots: | |
| color: global.lighter_color | |
| order: 18 | |
| visible: true | |
| us_national_park: | |
| # yosemite national park, death valley national park, grand canyon national park | |
| filter: | |
| any: | |
| - operator: [ "United States National Park Service" ] | |
| - protect_class: ['2','3','5'] | |
| draw: | |
| pixel-pattern-light: | |
| visible: true | |
| #tier2: | |
| # effectively wilderness | |
| conservation: | |
| filter: | |
| all: | |
| - $zoom: { min: 4 } | |
| - kind: [protected_area, nature_reserve, national_park] | |
| any: | |
| - protect_class: ['2','3','5'] | |
| - not: { operator: { "Forest Preserve District of Cook County" } } | |
| draw: | |
| pixel-pattern-light: | |
| color: global.white_color | |
| visible: true | |
| national_forest_level_6: | |
| filter: | |
| all: | |
| - kind: forest | |
| any: | |
| - protect_class: ['6'] | |
| - operator: ['United States Forest Service'] | |
| draw: | |
| pixel-pattern-bright: | |
| color: global.lighter_color | |
| visible: true | |
| forest-landcover: | |
| filter: | |
| all: | |
| - kind: [forest, natural_forest, wood, natural_wood, natural_park] | |
| - $zoom: { min: 10 } | |
| any: | |
| - not: { operator: [ "United States Forest Service", "Forest Preserve District of Cook County" ] } | |
| draw: | |
| pixel-pattern-light: | |
| visible: true | |
| parks-and-national-forests-not-national-park: | |
| filter: | |
| all: | |
| - $zoom: { min: 4 } | |
| - kind: [park, national_park] | |
| any: | |
| - not: { operator: [ "United States National Park Service", "United States Forest Service", "Forest Preserve District of Cook County" ] } | |
| - protect_class: ['2','3','5','6'] | |
| # default for national forests and more? | |
| draw: | |
| dots: | |
| color: global.lighter_color | |
| visible: true | |
| national_park: | |
| #filter: function() { return feature.name && (feature.name.indexOf('National Park') > -1); } | |
| filter: | |
| all: | |
| - kind: national_park | |
| any: | |
| - protect_class: ['2','3','5','6'] | |
| - not: { operator: [ "United States National Park Service", "Forest Preserve District of Cook County" ] } | |
| draw: | |
| pixel-pattern-light: | |
| visible: true | |
| # gotta be a protected area to draw green, not just a landcover type | |
| farm: | |
| filter: | |
| kind: [farm, farmland] | |
| $zoom: { min: 10} | |
| draw: | |
| tiny-dots: | |
| color: global.offwhite_color | |
| visible: true | |
| #tier3: | |
| university: | |
| filter: | |
| kind: [university, college] | |
| draw: | |
| dots-rev: | |
| color: global.lightest_color | |
| visible: true | |
| #tier4: | |
| cemetery: | |
| filter: | |
| kind: cemetery | |
| draw: | |
| tiny-dots: | |
| color: global.lighter_color | |
| visible: true | |
| golf_course: | |
| filter: | |
| kind: golf_course | |
| draw: | |
| medium-dots: | |
| color: global.lighter_color | |
| visible: true | |
| hospital: | |
| filter: | |
| kind: hospital | |
| draw: | |
| medium-dots: | |
| color: global.lightest_color | |
| visible: true | |
| sports_centre: | |
| filter: | |
| kind: sports_centre | |
| draw: | |
| dots-rev-grid: | |
| color: global.offwhite_color | |
| recreation_ground: | |
| filter: | |
| kind: recreation_ground | |
| draw: | |
| dots-rev-grid: | |
| color: global.offwhite_color | |
| visible: true | |
| stadium: | |
| filter: | |
| kind: stadium | |
| draw: | |
| dots-rev-grid: | |
| color: global.offwhite_color | |
| visible: true | |
| zoo: | |
| filter: | |
| kind: [zoo, wildlife_park] | |
| draw: | |
| tiny-dots: | |
| color: global.offwhite_color | |
| visible: true | |
| winter_sports: | |
| filter: | |
| kind: winter_sports | |
| draw: | |
| polygons: | |
| color: [[9, global.white_color], [20, global.offwhite_color]] | |
| visible: true | |
| man-made: | |
| filter: { kind: [pier,wastewater_plant,works,bridge,tower,breakwater,water_works,groyne,dike,cutline] } | |
| draw: | |
| horizontal-bars: | |
| color: global.lightest_color | |
| visible: true | |
| pier: | |
| filter: { kind: [pier,bridge,breakwater,groyne,dike,cutline] } | |
| draw: | |
| polygons: | |
| color: global.offwhite_color | |
| visible: true | |
| tier5: | |
| filter: | |
| all: | |
| - kind: | |
| - theme_park | |
| - resort | |
| - aquarium | |
| - winery | |
| - maze | |
| - beach | |
| tourism-related: | |
| filter: | |
| kind: | |
| - theme_park | |
| - resort | |
| - aquarium | |
| - winery | |
| - maze | |
| draw: | |
| dots: | |
| color: global.light_color | |
| visible: true | |
| beach: | |
| filter: | |
| kind: beach | |
| draw: | |
| dots: | |
| color: global.lightest_color | |
| visible: true | |
| #tier6: | |
| garden: | |
| filter: | |
| kind: garden | |
| draw: | |
| tiny-dots: | |
| color: global.light_color | |
| visible: true | |
| parking: | |
| filter: | |
| all: | |
| - kind: parking | |
| - $zoom: { min: 14 } | |
| any: | |
| - { $zoom: { min: 14 }, area: { min: 10000 } } | |
| - { $zoom: { min: 15 }, area: { min: 5000 } } | |
| draw: | |
| horizontal-bars-rev: | |
| color: global.ultralight_color | |
| visible: true | |
| early: | |
| filter: { $zoom: { max: 15 } } | |
| draw: | |
| horizontal-bars-rev: | |
| color: global.offwhite_color | |
| visible: true | |
| pedestrian: | |
| filter: | |
| kind: [pedestrian,common] | |
| draw: | |
| dots: | |
| color: global.offwhite_color | |
| visible: true | |
| green-stuff: | |
| filter: | |
| surface: [grass] | |
| draw: | |
| dots: | |
| color: global.lighter_color | |
| pitch: | |
| filter: { kind: pitch } | |
| draw: | |
| tiny-dots: | |
| color: global.lightest_color | |
| visible: true | |
| outline: | |
| style: lines | |
| order: global.feature_order | |
| color: global.ultralight_color | |
| width: [[14, 0px], [15, 1px], [18, 2px]] | |
| playground: | |
| filter: | |
| kind: playground | |
| draw: | |
| dots-rev: | |
| color: global.ultralight_color | |
| visible: true | |
| school: | |
| filter: | |
| kind: school | |
| draw: | |
| dots-rev: | |
| color: global.offwhite_color | |
| visible: true | |
| minor-landuse: | |
| filter: | |
| kind: | |
| - attraction | |
| - artwork | |
| - wilderness_hut | |
| - hanami | |
| draw: | |
| dots: | |
| color: global.light_color | |
| visible: true | |
| landuse-not-filtered: | |
| # runways and taxiways are also in the roads layer as lines | |
| # these ones are probably duplicate features, but have AREA (a good thing) | |
| filter: | |
| kind: | |
| - runway | |
| - apron | |
| - beach | |
| - roller_coaster | |
| - amusement_ride | |
| - summer_toboggan | |
| - trail_riding_station | |
| - water_slide | |
| - carousel | |
| - animal | |
| - enclosure | |
| - petting_zoo | |
| - aviary | |
| draw: | |
| dots: | |
| order: global.feature_order | |
| visible: false | |
| polygons: | |
| visible: false | |
| order: global.feature_order | |
| runway: | |
| filter: | |
| kind: runway | |
| draw: | |
| polygons: | |
| visible: true | |
| color: global.lighter_color | |
| apron: | |
| filter: | |
| kind: apron | |
| $zoom: { min: 15 } | |
| draw: | |
| dots: | |
| color: global.offwhite_color | |
| visible: global.grey1_v | |
| minor-amusement-park-landuse: | |
| filter: | |
| kind: | |
| - roller_coaster | |
| - amusement_ride | |
| - summer_toboggan | |
| - trail_riding_station | |
| - water_slide | |
| - carousel | |
| draw: | |
| dots: | |
| color: global.light_color | |
| visible: true | |
| minor-zoo-landuse: | |
| filter: | |
| kind: | |
| - animal | |
| - enclosure | |
| - petting_zoo | |
| - aviary | |
| draw: | |
| dots: | |
| color: global.lighter_color | |
| visible: true | |
| # city_walls: | |
| # filter: { kind: city_wall } | |
| # draw: | |
| # lines: | |
| # order: 8 | |
| # color: global.city_wall | |
| # width: [[12, 0.75px], [13, 1.0px], [14, 1.2px], [15, 2.0px], [16, 2.5px], [19, 6m]] | |
| retaining_wall: | |
| filter: { kind: retaining_wall } | |
| draw: | |
| lines: | |
| color: global.lightest_color | |
| width: [[14, 0.5px], [15, 1.0px], [16, 1.5px], [17, 2.0px], [19, 2m]] | |
| # filter: { kind: snow_fence } | |
| # draw: | |
| # lines: | |
| # order: 8 | |
| # color: [1.0,0.0,0.0] # global.snow_fence | |
| # width: [[14, 0.5px], [15, 1.0px], [16, 1.5px], [17, 2.0px], [19, 4m]] | |
| fence: | |
| filter: { kind: fence } | |
| draw: | |
| lines: | |
| color: global.lightest_color | |
| width: [[14, 0.5px], [15, 1.0px], [16, 1.5px], [19, 0.5m]] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html lang="en"> | |
| <head> | |
| <title>My Web Map</title> | |
| <meta charset="utf-8"> | |
| <link rel="stylesheet" href="https://unpkg.com/leaflet@1.0.3/dist/leaflet.css" /> | |
| <style> | |
| html, body { margin: 0; padding: 0; } | |
| #map { height: 100%; width: 100%; position: absolute; } | |
| </style> | |
| </head> | |
| <body> | |
| <div id="map"></div> | |
| <script src="https://unpkg.com/leaflet@1.0.3/dist/leaflet.js"></script> | |
| <script src="https://unpkg.com/tangram/dist/tangram.min.js"></script> | |
| <script> | |
| var map = L.map('map'); | |
| var layer = Tangram.leafletLayer({ | |
| scene: 'https://gist.githubusercontent.com/glw/2c4e310cdf26f4b1714d7ba319c71eb8/raw/f9b603adbbf004fa6a3ef0773799ff6e466c96cb/fpdcc_style.yaml', | |
| attribution: '<a href="https://mapzen.com/tangram" target="_blank">Tangram</a> | © OSM contributors' | |
| }); | |
| layer.addTo(map); | |
| map.setView([42.0618, -88.1694], 13.1542); | |
| </script> | |
| </body> | |
| </html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment