├── .gitignore ├── .travis.yml ├── LICENSE ├── Makefile ├── README.md ├── data └── .gitkeep ├── docker-compose.yml ├── geosummit_poster.pdf └── src ├── export-vectortiles ├── Dockerfile ├── export-local.sh └── utils.sh ├── import-osm ├── Dockerfile ├── import-osm.sh └── mapping.yml ├── mapbox-gl ├── sprites │ ├── motorway_1.svg │ ├── motorway_2.svg │ ├── motorway_3.svg │ ├── motorway_4.svg │ ├── motorway_5.svg │ └── motorway_6.svg └── style.json ├── mapbox-studio └── Dockerfile ├── postgres ├── Dockerfile ├── initdb-database.sh └── initdb-postgis.sh └── vector-datasource └── data.yml /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | *.swp 6 | *.DS_Store 7 | 8 | # C extensions 9 | *.so 10 | 11 | # Distribution / packaging 12 | .Python 13 | env/ 14 | build/ 15 | develop-eggs/ 16 | dist/ 17 | downloads/ 18 | eggs/ 19 | .eggs/ 20 | lib/ 21 | lib64/ 22 | parts/ 23 | sdist/ 24 | var/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | 29 | # PyInstaller 30 | # Usually these files are written by a python script from a template 31 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 32 | *.manifest 33 | *.spec 34 | 35 | # Installer logs 36 | pip-log.txt 37 | pip-delete-this-directory.txt 38 | 39 | # Unit test / coverage reports 40 | htmlcov/ 41 | .tox/ 42 | .coverage 43 | .coverage.* 44 | .cache 45 | nosetests.xml 46 | coverage.xml 47 | *,cover 48 | .hypothesis/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | 57 | # Sphinx documentation 58 | docs/_build/ 59 | 60 | # PyBuilder 61 | target/ 62 | 63 | #Ipython Notebook 64 | .ipynb_checkpoints 65 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: required 2 | language: bash 3 | services: 4 | - docker 5 | before_install: 6 | - wget -nc -P "$TRAVIS_BUILD_DIR/data" "http://download.geofabrik.de/europe/switzerland-latest.osm.pbf" 7 | - make 8 | script: 9 | - docker-compose up -d postgres 10 | - sleep 10 11 | - docker-compose run import-osm 12 | - docker-compose run export-vectortiles 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Lukas Martinelli 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: all 2 | 3 | all: postgres import-osm mapbox-studio export-vectortiles 4 | 5 | postgres: 6 | docker build -t lukasmartinelli/osm-noise-pollution:postgres src/postgres 7 | 8 | import-osm: 9 | docker build -t lukasmartinelli/osm-noise-pollution:import-osm src/import-osm 10 | 11 | mapbox-studio: 12 | docker build -t lukasmartinelli/osm-noise-pollution:mapbox-studio src/mapbox-studio 13 | 14 | export-vectortiles: 15 | docker build -t lukasmartinelli/osm-noise-pollution:export-vectortiles src/export-vectortiles 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # osm-noise-pollution ![stability-deprecated](https://img.shields.io/badge/stability-deprecated-red.svg) [![Build Status](https://travis-ci.org/lukasmartinelli/osm-noise-pollution.svg?branch=master)](https://travis-ci.org/lukasmartinelli/osm-noise-pollution) 2 | 3 | > :warning: This repository is no longer actively maintained by Lukas Martinelli. 4 | 5 | **[Checkout the global noise pollution map online](http://lukasmartinelli.ch/gis/2016/04/03/openstreetmap-noise-pollution-map.html)** 6 | 7 | Approximate global noise pollution with OSM data and very simple noise model. 8 | Using global street, landuse and building data from [OpenStreetMap](https://openstreetmap.org) 9 | we can approximate where noise pollution might happen. 10 | We use a very simple noise model inspired by [noise pollution concept of Cities Skylines](http://www.skylineswiki.com/Pollution#Noise_pollution). 11 | 12 | - Inspired [Urban Noise Mapping](https://medium.com/@Urbica.co/urban-noise-mapping-5dfb5a49eb1c) by Urbica. 13 | - [Radio interview about noise in Zurich](http://www.srf.ch/news/regional/zuerich-schaffhausen/viel-verkehr-viel-laerm) 14 | - [Maps Mania article](http://googlemapsmania.blogspot.ch/2016/04/the-worldwide-noise-pollution-map.html) 15 | - [Introduction into the global noise pollution map](http://lukasmartinelli.ch/gis/2016/04/03/openstreetmap-noise-pollution-map.html) 16 | - [Conference poster](https://github.com/lukasmartinelli/osm-noise-pollution/blob/master/geosummit_poster.pdf) 17 | 18 | [![Noise map of Zurich](http://lukasmartinelli.ch/media/noise_maps/zurich.png)](http://lukasmartinelli.ch/gis/2016/04/03/openstreetmap-noise-pollution-map.html) 19 | 20 | In the model we add a buffer to **noisy objects**. This is the area that is probably affected by noise. Very noisy objects get a high buffer and less noisy objects a smaller buffer. 21 | 22 | In order for this to work we make several assumptions: 23 | 24 | 1. Highways, trunks, primary and secondary roads are noisy. Normal street or service roads are not 25 | 2. Railways are noisy 26 | 3. Retail and industrial zones always have a noisy base limit 27 | 4. All shops and food places (especially restaurants) are noisy 28 | 5. Most party and event buildings are noisy (except some shady places) 29 | 6. Most leisure buildings are noisy 30 | 7. Some sport buildings are noisy 31 | 8. Some tourism buildings are noisy 32 | 33 | For OSM features that match this criterias we assign a buffer and remove the overlapping parts which results 34 | in a simple approximation of noise pollution. 35 | 36 | ## Noise Levels 37 | 38 | The noise pollution areas are divided into three noise level. 39 | 40 | | Zone | dB 41 | |--------|----------- 42 | | L1 | ≥ 65 43 | | L2 | 55 - 64.9 44 | | L3 | 45 - 54.9 45 | 46 | Each OSM feature emits a custom buffer for each noise level. 47 | You are very welcome to suggest different values, they are only educated guesses derived from the Swiss [sonBASE noise map](https://map.geo.admin.ch/?Y=716599.25&X=230992.54&zoom=8&bgLayer=ch.swisstopo.pixelkarte-grau&layers=ch.bafu.laerm-strassenlaerm_tag&layers_opacity=0.7&lang=de&topic=bafu). Of course this approximation does not include damping through buildings, 48 | traffic volume and all the other fancy stuff - but it is simple enough to be applied globally. 49 | 50 | ### Roads 51 | 52 | | Tag | L1 | L2 | L3 53 | |---------------------|-------|--------|--------- 54 | | `highway=motorway` | `60m` | `220m` | `500m` 55 | | `highway=trunk` | `50m` | `190m` | `400m` 56 | | `highway=primary` | `35m` | `160m` | `300m` 57 | | `highway=secondary` | | `80m` | `125m` 58 | | `highway=tertiary` | | `35m` | `65m` 59 | 60 | ### Railways 61 | 62 | | Tag | L1 | L2 | L3 63 | |-------------------------------|-------|-------|--------- 64 | | `rail=[rail,narrow_gauge,..]` | `30m` | `60m` | `100m` 65 | | `rail=[light_rail,tram,..]` | | `30m` | `60m` 66 | 67 | ### Industrial and Retail Zones 68 | 69 | | Tag | L1 | L2 | L3 | 70 | |-------------------|-----|------|------| 71 | | `landuse=industrial`| | `50m` | `100m` | 72 | | `landuse=retail` | | `70m` | `180m` | 73 | 74 | ### Shops and Food 75 | 76 | | Tag | L1 | L2 | L3 77 | |-----------------------------|-----|-------|-------- 78 | | `shop=[any]` | | `30m` | `65m` 79 | | `amenity=[bar,bbq,cafe,..]` | | `35m` | `75m` 80 | 81 | ### Party 82 | 83 | | Tag | L1 | L2 | L3 84 | |----------------------------------------|-------|-------|-------- 85 | | `amenity=[cinema,casino,nightclub,..]` | `40m` | `70m` | `150m` 86 | 87 | 88 | ### Leisure 89 | 90 | | Tag | L1 | L2 | L3 91 | |---------------------------------|-------|--------|------- 92 | | `leisure=[beach_resort,zoo,..]` | `35m` | `55m` | `75m` 93 | 94 | ### Sport 95 | 96 | | Tag | L1 | L2 | L3 97 | |-------------------------------|-------|--------|------- 98 | | `sporty=[baseball,soccer,..]` | `40m` | `60m` | `80m` 99 | 100 | These values are implemented in the vector tile data source in `src/vector-datasource/data.yml`. 101 | 102 | ## Develop 103 | 104 | We use the Docker Compose based workflow we developed at [osm2vectortiles](https://github.com/osm2vectortiles/osm2vectortiles) to create an ETL workflow to get data in and out of PostGIS. The Mapbox GL stylesheet used for the map can be found in `src/mapbox-gl/style.json`. 105 | 106 | 107 | ### Get Started 108 | 109 | You need a complete OSM PBF data dump either from a [country extract](http://download.geofabrik.de/index.html) or of the [entire world](http://planet.osm.org/). 110 | In this example we will work with my beloved Switzerland. Download the data and put it into the `data` directory. 111 | You can use Docker compose directly with the prebuilt images. If you want to develop on *osm-noise-pollution* you can build 112 | the images yourself running `make`. 113 | 114 | ```bash 115 | wget --directory-prefix=./data http://download.geofabrik.de/europe/switzerland-latest.osm.pbf 116 | ``` 117 | 118 | Now we need to set up the database and import the data using the `import-osm` Docker container. 119 | 120 | ```bash 121 | # This will automatically initialize the database 122 | docker-compose up -d postgres 123 | 124 | # Import the OSM data dump from the ./data folder 125 | docker-compose run import-osm 126 | ``` 127 | 128 | We can now export vector tiles containing the noise pollution geometries ready to 129 | use for map visualizations with Mapnik or Mapbox GL. 130 | If you want to change the export bounding box from Switzerland to a different 131 | country you need to modify the `BBOX` env var in `docker-compose.yml` 132 | for the `export-vectortiles` container. 133 | 134 | ```bash 135 | docker-compose run export-vectortiles 136 | ``` 137 | 138 | And now we have all the data and code in place. 139 | Let's look at it visually. Start Mapbox Studio and visit the port `3000` on your 140 | Docker host. 141 | 142 | ```bash 143 | docker-compose up mapbox-studio 144 | ``` 145 | 146 | Login and open the source project via `Browse` mounted at `/projects`. You should see `vector-datasource.tm2source`. 147 | Open this project and navigate to the location of your extract to check the noise pollution visualized 148 | in the vector data editor. 149 | 150 | ### Components 151 | 152 | The different components that attach to the `postgres` container are all located in the `src` directory. 153 | 154 | | Component | Description 155 | |-------------------|-------------------------------------------------------------- 156 | | postgres | PostGIS data store for OSM data and to perform noise analysis 157 | | import-osm | Imposm3 based import tool with custom mapping to import selective OSM into the database and reconstruct it as GIS geometries 158 | | vector-datasource | Mapbox Studio Source project to generate vector tiles from the noise pollution geometries. 159 | | export-vectortiles| Produce vector tiles for the noise pollution geometries from the `vector-datasource` using tilelive 160 | | mapbox-studio | Mapbox Studio in a Docker container with the mounted `vector-datasource` to interactively work with the vector tile project. 161 | -------------------------------------------------------------------------------- /data/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukasmartinelli/osm-noise-pollution/db34a659edde4db51df5eb32164e2408ef3527a6/data/.gitkeep -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | pgdata: 2 | image: "tianon/true" 3 | volumes: 4 | - /var/lib/postgresql/data 5 | cache: 6 | image: "tianon/true" 7 | volumes: 8 | - /data/cache 9 | postgres: 10 | image: "lukasmartinelli/osm-noise-pollution:postgres" 11 | mem_limit: 500000000 12 | volumes_from: 13 | - pgdata 14 | ports: 15 | - "5432" 16 | import-osm: 17 | image: "lukasmartinelli/osm-noise-pollution:import-osm" 18 | command: ./import-osm.sh 19 | volumes: 20 | - ./data:/data/import 21 | volumes_from: 22 | - cache 23 | links: 24 | - postgres:postgres 25 | mapbox-studio: 26 | image: "lukasmartinelli/osm-noise-pollution:mapbox-studio" 27 | mem_limit: 500000000 28 | volumes: 29 | - ./src/vector-datasource:/projects/vector-datasource.tm2source 30 | links: 31 | - postgres:postgres 32 | ports: 33 | - "3000:3000" 34 | export-vectortiles: 35 | image: "lukasmartinelli/osm-noise-pollution:export-vectortiles" 36 | volumes: 37 | - ./data:/data/export 38 | - ./src/vector-datasource:/data/tm2source 39 | links: 40 | - postgres:db 41 | environment: 42 | BBOX: "5.8559113 45.717995 10.5922941 47.9084648" 43 | MIN_ZOOM: "10" 44 | MAX_ZOOM: "10" 45 | serve-vectortiles: 46 | image: "klokantech/tileserver-php" 47 | volumes: 48 | - ./data:/var/www 49 | ports: 50 | - "8080:80" 51 | -------------------------------------------------------------------------------- /geosummit_poster.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lukasmartinelli/osm-noise-pollution/db34a659edde4db51df5eb32164e2408ef3527a6/geosummit_poster.pdf -------------------------------------------------------------------------------- /src/export-vectortiles/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:5 2 | MAINTAINER Lukas Martinelli 3 | 4 | RUN mkdir -p /usr/src/app 5 | WORKDIR /usr/src/app 6 | 7 | RUN npm install -g \ 8 | tl@0.8.x \ 9 | mapnik@3.5.x \ 10 | mbtiles@0.8.x \ 11 | tilelive@5.12.x \ 12 | tilelive-tmsource@0.4.x \ 13 | tilelive-vector@3.9.x \ 14 | tilelive-bridge@2.3.x \ 15 | tilelive-mapnik@0.6.x 16 | 17 | VOLUME /data/tm2source /data/export 18 | ENV SOURCE_PROJECT_DIR=/data/tm2source EXPORT_DIR=/data/export TILELIVE_BIN=tl 19 | COPY . /usr/src/app/ 20 | 21 | CMD ["/usr/src/app/export-local.sh"] 22 | -------------------------------------------------------------------------------- /src/export-vectortiles/export-local.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -o errexit 3 | set -o pipefail 4 | set -o nounset 5 | 6 | source utils.sh 7 | 8 | readonly RENDER_SCHEME=${RENDER_SCHEME:-pyramid} 9 | readonly MIN_ZOOM=${MIN_ZOOM:-0} 10 | readonly MAX_ZOOM=${MAX_ZOOM:-14} 11 | readonly BBOX=${BBOX:-"-180, -85.0511, 180, 85.0511"} 12 | 13 | function export_local_mbtiles() { 14 | local mbtiles_name="tiles.mbtiles" 15 | 16 | exec tl copy \ 17 | -s pyramid \ 18 | -b "$BBOX" \ 19 | --min-zoom="$MIN_ZOOM" \ 20 | --max-zoom="$MAX_ZOOM" \ 21 | "tmsource://$DEST_PROJECT_DIR" "mbtiles://$EXPORT_DIR/$mbtiles_name" 22 | } 23 | 24 | function main() { 25 | copy_source_project 26 | cleanup_dest_project 27 | replace_db_connection 28 | export_local_mbtiles 29 | } 30 | 31 | main 32 | -------------------------------------------------------------------------------- /src/export-vectortiles/utils.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -o errexit 3 | set -o pipefail 4 | 5 | readonly SOURCE_PROJECT_DIR=${SOURCE_PROJECT_DIR:-/data/tm2source} 6 | readonly EXPORT_DIR=${EXPORT_DIR:-/data/export} 7 | 8 | readonly DEST_PROJECT_DIR="/tmp/project" 9 | readonly DEST_PROJECT_FILE="${DEST_PROJECT_DIR%%/}/data.yml" 10 | 11 | readonly OSM_HOST=$DB_PORT_5432_TCP_ADDR 12 | readonly OSM_PORT=$DB_PORT_5432_TCP_PORT 13 | readonly OSM_DB=${OSM_DB:-noise} 14 | readonly OSM_USER=${OSM_USER:-noise} 15 | readonly OSM_PASSWORD=${OSM_PASSWORD:-noise} 16 | 17 | # project config will be copied to new folder because we 18 | # modify the source configuration 19 | function copy_source_project() { 20 | cp -rf "$SOURCE_PROJECT_DIR" "$DEST_PROJECT_DIR" 21 | } 22 | 23 | # project.yml is single source of truth, therefore the mapnik 24 | # stylesheet is not necessary 25 | function cleanup_dest_project() { 26 | rm -f "${DEST_PROJECT_DIR%%/}/project.xml" 27 | } 28 | 29 | # replace database connection with postgis container connection 30 | function replace_db_connection() { 31 | local replace_expr_1="s|host: .*|host: \"$OSM_HOST\"|g" 32 | local replace_expr_2="s|port: .*|port: \"$OSM_PORT\"|g" 33 | local replace_expr_3="s|dbname: .*|dbname: \"$OSM_DB\"|g" 34 | local replace_expr_4="s|user: .*|user: \"$OSM_USER\"|g" 35 | local replace_expr_5="s|password: .*|password: \"$OSM_PASSWORD\"|g" 36 | 37 | sed -i "$replace_expr_1" "$DEST_PROJECT_FILE" 38 | sed -i "$replace_expr_2" "$DEST_PROJECT_FILE" 39 | sed -i "$replace_expr_3" "$DEST_PROJECT_FILE" 40 | sed -i "$replace_expr_4" "$DEST_PROJECT_FILE" 41 | sed -i "$replace_expr_5" "$DEST_PROJECT_FILE" 42 | } 43 | -------------------------------------------------------------------------------- /src/import-osm/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM golang:1.4 2 | 3 | RUN DEBIAN_FRONTEND=noninteractive apt-get update && \ 4 | DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ 5 | libprotobuf-dev \ 6 | libleveldb-dev \ 7 | libgeos-dev \ 8 | postgresql-client \ 9 | osmctools \ 10 | --no-install-recommends \ 11 | && ln -s /usr/lib/libgeos_c.so /usr/lib/libgeos.so \ 12 | && rm -rf /var/lib/apt/lists/* 13 | 14 | RUN go get github.com/omniscale/imposm3 15 | 16 | # Purge no longer needed packages to keep image small. 17 | # Protobuf and LevelDB dependencies cannot be removed 18 | # because they are dynamically linked. 19 | RUN apt-get purge -y --auto-remove \ 20 | g++ gcc libc6-dev make git \ 21 | && rm -rf /var/lib/apt/lists/* 22 | 23 | VOLUME /data/import /data/cache 24 | ENV IMPORT_DATA_DIR=/data/import \ 25 | IMPOSM_CACHE_DIR=/data/cache \ 26 | MAPPING_YAML=/usr/src/app/mapping.yml 27 | 28 | WORKDIR /usr/src/app 29 | COPY . /usr/src/app/ 30 | 31 | CMD ["./import-pbf.sh"] 32 | -------------------------------------------------------------------------------- /src/import-osm/import-osm.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -o errexit 3 | set -o pipefail 4 | set -o nounset 5 | 6 | readonly IMPORT_DATA_DIR=${IMPORT_DATA_DIR:-/data/import} 7 | readonly IMPOSM_CACHE_DIR=${IMPOSM_CACHE_DIR:-/data/cache} 8 | readonly MAPPING_JSON=${MAPPING_JSON:-/usr/src/app/mapping.json} 9 | 10 | readonly DB_NAME=${DB_NAME:-noise} 11 | readonly DB_USER=${DB_USER:-noise} 12 | readonly DB_PASSWORD=${DB_PASSWORD:-noise} 13 | readonly DB_HOST=$POSTGRES_PORT_5432_TCP_ADDR 14 | 15 | readonly DB_SCHEMA=${DB_SCHEMA:-public} 16 | readonly PG_CONNECT="postgis://$DB_USER:$DB_PASSWORD@$DB_HOST/$DB_NAME" 17 | 18 | function import_pbf() { 19 | local pbf_file="$1" 20 | imposm3 import \ 21 | -connection "$PG_CONNECT" \ 22 | -mapping "$MAPPING_YAML" \ 23 | -overwritecache \ 24 | -cachedir "$IMPOSM_CACHE_DIR" \ 25 | -read "$pbf_file" \ 26 | -dbschema-import="${DB_SCHEMA}" \ 27 | -write 28 | } 29 | 30 | function main() { 31 | if [ "$(ls -A $IMPORT_DATA_DIR/*.pbf 2> /dev/null)" ]; then 32 | local pbf_file 33 | for pbf_file in "$IMPORT_DATA_DIR"/*.pbf; do 34 | import_pbf "$pbf_file" 35 | break 36 | done 37 | else 38 | echo "No PBF files for import found." 39 | echo "Please mount the $IMPORT_DATA_DIR volume to a folder containing OSM PBF files." 40 | exit 404 41 | fi 42 | } 43 | 44 | main 45 | -------------------------------------------------------------------------------- /src/import-osm/mapping.yml: -------------------------------------------------------------------------------- 1 | tables: 2 | motorway: 3 | type: linestring 4 | fields: 5 | - name: geometry 6 | type: geometry 7 | mapping: 8 | highway: 9 | - motorway 10 | - motorway_link 11 | filters: 12 | exclude_tags: 13 | - ["tunnel", "yes"] 14 | trunk: 15 | type: linestring 16 | fields: 17 | - name: geometry 18 | type: geometry 19 | mapping: 20 | highway: 21 | - trunk 22 | - trunk_link 23 | filters: 24 | exclude_tags: 25 | - ["tunnel", "yes"] 26 | primary_road: 27 | type: linestring 28 | fields: 29 | - name: geometry 30 | type: geometry 31 | mapping: 32 | highway: 33 | - primary 34 | - primary_link 35 | filters: 36 | exclude_tags: 37 | - ["tunnel", "yes"] 38 | secondary_road: 39 | type: linestring 40 | fields: 41 | - name: geometry 42 | type: geometry 43 | mapping: 44 | highway: 45 | - secondary 46 | - secondary_link 47 | filters: 48 | exclude_tags: 49 | - ["tunnel", "yes"] 50 | tertiary_road: 51 | type: linestring 52 | fields: 53 | - name: geometry 54 | type: geometry 55 | mapping: 56 | highway: 57 | - tertiary 58 | - tertiary_link 59 | filters: 60 | exclude_tags: 61 | - ["tunnel", "yes"] 62 | industrial_zone: 63 | type: polygon 64 | fields: 65 | - name: geometry 66 | type: geometry 67 | mapping: 68 | landuse: 69 | - industrial 70 | retail_zone: 71 | type: polygon 72 | fields: 73 | - name: geometry 74 | type: geometry 75 | mapping: 76 | landuse: 77 | - retail 78 | shop: 79 | type: point 80 | fields: 81 | - name: geometry 82 | type: geometry 83 | mapping: 84 | shop: [__any__] 85 | food: 86 | type: point 87 | fields: 88 | - name: geometry 89 | type: geometry 90 | mapping: 91 | amenity: 92 | - bar 93 | - bbq 94 | - cafe 95 | - biergarten 96 | - fast_food 97 | - food_court 98 | - ice_cream 99 | - pub 100 | - restaurant 101 | party: 102 | type: point 103 | fields: 104 | - name: geometry 105 | type: geometry 106 | mapping: 107 | amenity: 108 | - cinema 109 | - casino 110 | - community_centre 111 | - gambling 112 | - nightclub 113 | - stripclub 114 | - theatre 115 | leisure: 116 | type: point 117 | fields: 118 | - name: geometry 119 | type: geometry 120 | mapping: 121 | leisure: 122 | - beach_resort 123 | - swimming_area 124 | - water_park 125 | tourism: 126 | - camp_site 127 | - museum 128 | - picnic_site 129 | - theme_park 130 | - zoo 131 | sport: 132 | type: point 133 | fields: 134 | - name: geometry 135 | type: geometry 136 | mapping: 137 | sport: 138 | - american_football 139 | - baseball 140 | - beachvolleyball 141 | - bmx 142 | - canadian_football 143 | - cockfighting 144 | - cricket 145 | - dog_racing 146 | - field_hockey 147 | - horse_racing 148 | - ice_hockey 149 | - ice_skating 150 | - obstacle_course 151 | - rc_car 152 | - rugby_league 153 | - rugby_union 154 | - shooting 155 | - soccer 156 | - volleyball 157 | - tennis 158 | - water_ski 159 | railway: 160 | type: linestring 161 | fields: 162 | - name: geometry 163 | type: geometry 164 | mapping: 165 | railway: 166 | - rail 167 | - narrow_gauge 168 | - preserved 169 | - funicular 170 | - monorail 171 | - disused 172 | filters: 173 | exclude_tags: 174 | - ["tunnel", "yes"] 175 | light_railway: 176 | type: linestring 177 | fields: 178 | - name: geometry 179 | type: geometry 180 | mapping: 181 | railway: 182 | - tram 183 | - light_rail 184 | - funicular 185 | - monorail 186 | filters: 187 | exclude_tags: 188 | - ["tunnel", "yes"] 189 | -------------------------------------------------------------------------------- /src/mapbox-gl/sprites/motorway_1.svg: -------------------------------------------------------------------------------- 1 | 2 | 13 | 15 | 17 | 18 | 20 | image/svg+xml 21 | 23 | 24 | 25 | 26 | 27 | 30 | 33 | 42 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/mapbox-gl/sprites/motorway_2.svg: -------------------------------------------------------------------------------- 1 | 2 | 13 | 15 | 17 | 18 | 20 | image/svg+xml 21 | 23 | 24 | 25 | 26 | 27 | 30 | 33 | 43 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /src/mapbox-gl/sprites/motorway_3.svg: -------------------------------------------------------------------------------- 1 | 2 | 13 | 15 | 17 | 18 | 20 | image/svg+xml 21 | 23 | 24 | 25 | 26 | 27 | 30 | 33 | 42 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/mapbox-gl/sprites/motorway_4.svg: -------------------------------------------------------------------------------- 1 | 2 | 13 | 15 | 17 | 18 | 20 | image/svg+xml 21 | 23 | 24 | 25 | 26 | 27 | 30 | 33 | 42 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/mapbox-gl/sprites/motorway_5.svg: -------------------------------------------------------------------------------- 1 | 2 | 13 | 15 | 17 | 18 | 20 | image/svg+xml 21 | 23 | 24 | 25 | 26 | 27 | 30 | 33 | 42 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/mapbox-gl/sprites/motorway_6.svg: -------------------------------------------------------------------------------- 1 | 2 | 13 | 15 | 17 | 18 | 20 | image/svg+xml 21 | 23 | 24 | 25 | 26 | 27 | 30 | 33 | 35 | 44 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /src/mapbox-gl/style.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 8, 3 | "name": "OSM Noise Pollution", 4 | "metadata": { 5 | "mapbox:autocomposite": true, 6 | "mapbox:groups": { 7 | "1444849364238.8171": { 8 | "name": "Buildings", 9 | "collapsed": false 10 | }, 11 | "1444849354174.1904": { 12 | "name": "Tunnels", 13 | "collapsed": true 14 | }, 15 | "1459193066085.223": { 16 | "name": "Noise", 17 | "collapsed": true 18 | }, 19 | "1444849320558.5054": { 20 | "name": "Water labels", 21 | "collapsed": true 22 | }, 23 | "1444849371739.5945": { 24 | "name": "Aeroways", 25 | "collapsed": true 26 | }, 27 | "1444849258897.3083": { 28 | "name": "Marine labels", 29 | "collapsed": true 30 | }, 31 | "1444849388993.3071": { 32 | "name": "Landuse", 33 | "collapsed": true 34 | }, 35 | "1444849242106.713": { 36 | "name": "Country labels", 37 | "collapsed": true 38 | }, 39 | "1444849382550.77": { 40 | "name": "Water", 41 | "collapsed": true 42 | }, 43 | "1444849345966.4436": { 44 | "name": "Roads", 45 | "collapsed": false 46 | }, 47 | "1444849307123.581": { 48 | "name": "Admin lines", 49 | "collapsed": true 50 | }, 51 | "1456163609504.0715": { 52 | "name": "Road labels", 53 | "collapsed": true 54 | }, 55 | "1444849272561.29": { 56 | "name": "Place labels", 57 | "collapsed": true 58 | }, 59 | "1444849290021.1838": { 60 | "name": "Road labels", 61 | "collapsed": true 62 | }, 63 | "1444849334699.1902": { 64 | "name": "Bridges", 65 | "collapsed": true 66 | }, 67 | "1444849297111.495": { 68 | "name": "POI labels", 69 | "collapsed": true 70 | } 71 | } 72 | }, 73 | "center": [ 74 | 8.509536455302538, 75 | 47.36251660509191 76 | ], 77 | "zoom": 12.50985829847463, 78 | "bearing": 0, 79 | "pitch": 0, 80 | "sources": { 81 | "composite": { 82 | "url": "mapbox://mapbox.mapbox-streets-v7,morgenkaffee.c6677fff", 83 | "type": "vector" 84 | } 85 | }, 86 | "sprite": "mapbox://sprites/morgenkaffee/cimi6phf0007wcem3cyr9cl3o", 87 | "glyphs": "mapbox://fonts/morgenkaffee/{fontstack}/{range}.pbf", 88 | "layers": [ 89 | { 90 | "id": "background", 91 | "type": "background", 92 | "paint": { 93 | "background-color": "hsl(30, 33%, 85%)" 94 | }, 95 | "interactive": true 96 | }, 97 | { 98 | "id": "landuse_overlay_national_park", 99 | "type": "fill", 100 | "source": "composite", 101 | "source-layer": "landuse_overlay", 102 | "filter": [ 103 | "==", 104 | "class", 105 | "national_park" 106 | ], 107 | "paint": { 108 | "fill-color": "#d8e8c8", 109 | "fill-opacity": 0.75 110 | }, 111 | "metadata": { 112 | "mapbox:group": "1444849388993.3071" 113 | }, 114 | "interactive": true 115 | }, 116 | { 117 | "id": "landuse_park", 118 | "type": "fill", 119 | "source": "composite", 120 | "source-layer": "landuse", 121 | "filter": [ 122 | "==", 123 | "class", 124 | "park" 125 | ], 126 | "paint": { 127 | "fill-color": "#6a4", 128 | "fill-opacity": 0.4 129 | }, 130 | "metadata": { 131 | "mapbox:group": "1444849388993.3071" 132 | }, 133 | "interactive": true 134 | }, 135 | { 136 | "id": "landuse_cemetery", 137 | "type": "fill", 138 | "source": "composite", 139 | "source-layer": "landuse", 140 | "filter": [ 141 | "==", 142 | "class", 143 | "cemetery" 144 | ], 145 | "paint": { 146 | "fill-color": "#e0e4dd" 147 | }, 148 | "metadata": { 149 | "mapbox:group": "1444849388993.3071" 150 | }, 151 | "interactive": true 152 | }, 153 | { 154 | "id": "landuse_hospital", 155 | "type": "fill", 156 | "source": "composite", 157 | "source-layer": "landuse", 158 | "filter": [ 159 | "==", 160 | "class", 161 | "hospital" 162 | ], 163 | "paint": { 164 | "fill-color": "#fde" 165 | }, 166 | "metadata": { 167 | "mapbox:group": "1444849388993.3071" 168 | }, 169 | "interactive": true 170 | }, 171 | { 172 | "id": "landuse_school", 173 | "type": "fill", 174 | "source": "composite", 175 | "source-layer": "landuse", 176 | "filter": [ 177 | "==", 178 | "class", 179 | "school" 180 | ], 181 | "paint": { 182 | "fill-color": "#f0e8f8" 183 | }, 184 | "metadata": { 185 | "mapbox:group": "1444849388993.3071" 186 | }, 187 | "interactive": true 188 | }, 189 | { 190 | "id": "landuse_wood", 191 | "type": "fill", 192 | "source": "composite", 193 | "source-layer": "landuse", 194 | "filter": [ 195 | "==", 196 | "class", 197 | "wood" 198 | ], 199 | "paint": { 200 | "fill-color": "hsl(100, 43%, 47%)", 201 | "fill-opacity": { 202 | "base": 1, 203 | "stops": [ 204 | [ 205 | 10, 206 | 0.1 207 | ], 208 | [ 209 | 12, 210 | 0.3 211 | ] 212 | ] 213 | } 214 | }, 215 | "metadata": { 216 | "mapbox:group": "1444849388993.3071" 217 | }, 218 | "interactive": true 219 | }, 220 | { 221 | "interactive": true, 222 | "layout": { 223 | "line-cap": "round" 224 | }, 225 | "metadata": { 226 | "mapbox:group": "1444849382550.77" 227 | }, 228 | "filter": [ 229 | "all", 230 | [ 231 | "!=", 232 | "class", 233 | "river" 234 | ], 235 | [ 236 | "!=", 237 | "class", 238 | "stream" 239 | ], 240 | [ 241 | "!=", 242 | "class", 243 | "canal" 244 | ] 245 | ], 246 | "type": "line", 247 | "source": "composite", 248 | "id": "waterway", 249 | "paint": { 250 | "line-color": "#a0c8f0", 251 | "line-width": { 252 | "base": 1.3, 253 | "stops": [ 254 | [ 255 | 13, 256 | 0.5 257 | ], 258 | [ 259 | 20, 260 | 2 261 | ] 262 | ] 263 | } 264 | }, 265 | "source-layer": "waterway" 266 | }, 267 | { 268 | "interactive": true, 269 | "layout": { 270 | "line-cap": "round" 271 | }, 272 | "metadata": { 273 | "mapbox:group": "1444849382550.77" 274 | }, 275 | "filter": [ 276 | "==", 277 | "class", 278 | "river" 279 | ], 280 | "type": "line", 281 | "source": "composite", 282 | "id": "waterway_river", 283 | "paint": { 284 | "line-color": "#a0c8f0", 285 | "line-width": { 286 | "base": 1.2, 287 | "stops": [ 288 | [ 289 | 11, 290 | 0.5 291 | ], 292 | [ 293 | 20, 294 | 6 295 | ] 296 | ] 297 | } 298 | }, 299 | "source-layer": "waterway" 300 | }, 301 | { 302 | "interactive": true, 303 | "layout": { 304 | "line-cap": "round" 305 | }, 306 | "metadata": { 307 | "mapbox:group": "1444849382550.77" 308 | }, 309 | "filter": [ 310 | "in", 311 | "class", 312 | "stream", 313 | "canal" 314 | ], 315 | "type": "line", 316 | "source": "composite", 317 | "id": "waterway_stream_canal", 318 | "paint": { 319 | "line-color": "#a0c8f0", 320 | "line-width": { 321 | "base": 1.3, 322 | "stops": [ 323 | [ 324 | 13, 325 | 0.5 326 | ], 327 | [ 328 | 20, 329 | 6 330 | ] 331 | ] 332 | } 333 | }, 334 | "source-layer": "waterway" 335 | }, 336 | { 337 | "id": "water", 338 | "type": "fill", 339 | "source": "composite", 340 | "source-layer": "water", 341 | "paint": { 342 | "fill-color": "hsl(210, 52%, 68%)", 343 | "fill-opacity": { 344 | "base": 1, 345 | "stops": [ 346 | [ 347 | 10, 348 | 0.6 349 | ], 350 | [ 351 | 12, 352 | 1 353 | ] 354 | ] 355 | } 356 | }, 357 | "metadata": { 358 | "mapbox:group": "1444849382550.77" 359 | }, 360 | "interactive": true 361 | }, 362 | { 363 | "id": "water_offset", 364 | "paint": { 365 | "fill-color": "white", 366 | "fill-opacity": 0.3, 367 | "fill-translate": [ 368 | 0, 369 | 2.5 370 | ] 371 | }, 372 | "metadata": { 373 | "mapbox:group": "1444849382550.77" 374 | }, 375 | "interactive": true, 376 | "ref": "water" 377 | }, 378 | { 379 | "id": "water_pattern", 380 | "paint": { 381 | "fill-translate": [ 382 | 0, 383 | 2.5 384 | ], 385 | "fill-pattern": "wave" 386 | }, 387 | "metadata": { 388 | "mapbox:group": "1444849382550.77" 389 | }, 390 | "interactive": true, 391 | "ref": "water" 392 | }, 393 | { 394 | "interactive": true, 395 | "minzoom": 11, 396 | "metadata": { 397 | "mapbox:group": "1444849371739.5945" 398 | }, 399 | "filter": [ 400 | "==", 401 | "$type", 402 | "Polygon" 403 | ], 404 | "type": "fill", 405 | "source": "composite", 406 | "id": "aeroway_fill", 407 | "paint": { 408 | "fill-color": "hsla(43, 85%, 60%, 0.9)", 409 | "fill-opacity": 0.7 410 | }, 411 | "source-layer": "aeroway" 412 | }, 413 | { 414 | "interactive": true, 415 | "minzoom": 11, 416 | "metadata": { 417 | "mapbox:group": "1444849371739.5945" 418 | }, 419 | "filter": [ 420 | "all", 421 | [ 422 | "==", 423 | "$type", 424 | "LineString" 425 | ], 426 | [ 427 | "==", 428 | "type", 429 | "runway" 430 | ] 431 | ], 432 | "type": "line", 433 | "source": "composite", 434 | "id": "aeroway_runway", 435 | "paint": { 436 | "line-color": "hsla(25, 72%, 51%, 0.7)", 437 | "line-width": { 438 | "base": 1.2, 439 | "stops": [ 440 | [ 441 | 11, 442 | 3 443 | ], 444 | [ 445 | 20, 446 | 16 447 | ] 448 | ] 449 | } 450 | }, 451 | "source-layer": "aeroway" 452 | }, 453 | { 454 | "interactive": true, 455 | "minzoom": 11, 456 | "metadata": { 457 | "mapbox:group": "1444849371739.5945" 458 | }, 459 | "filter": [ 460 | "all", 461 | [ 462 | "==", 463 | "$type", 464 | "LineString" 465 | ], 466 | [ 467 | "==", 468 | "type", 469 | "taxiway" 470 | ] 471 | ], 472 | "type": "line", 473 | "source": "composite", 474 | "id": "aeroway_taxiway", 475 | "paint": { 476 | "line-color": "hsla(25, 72%, 51%, 0.7)", 477 | "line-width": { 478 | "base": 1.2, 479 | "stops": [ 480 | [ 481 | 11, 482 | 0.5 483 | ], 484 | [ 485 | 20, 486 | 6 487 | ] 488 | ] 489 | } 490 | }, 491 | "source-layer": "aeroway" 492 | }, 493 | { 494 | "interactive": true, 495 | "minzoom": 10, 496 | "layout": { 497 | "visibility": "visible" 498 | }, 499 | "metadata": { 500 | "mapbox:group": "1459193066085.223" 501 | }, 502 | "filter": [ 503 | "==", 504 | "noise_level", 505 | 3 506 | ], 507 | "type": "fill", 508 | "source": "composite", 509 | "id": "noise-industrial-3", 510 | "paint": { 511 | "fill-color": "hsla(43, 85%, 60%, 0.9)", 512 | "fill-antialias": true, 513 | "fill-opacity": 1, 514 | "fill-outline-color": "#efbf43" 515 | }, 516 | "source-layer": "noise_industrial" 517 | }, 518 | { 519 | "interactive": true, 520 | "minzoom": 10, 521 | "layout": { 522 | "visibility": "visible" 523 | }, 524 | "metadata": { 525 | "mapbox:group": "1459193066085.223" 526 | }, 527 | "filter": [ 528 | "==", 529 | "noise_level", 530 | 3 531 | ], 532 | "type": "fill", 533 | "source": "composite", 534 | "id": "noise-leisure-3", 535 | "paint": { 536 | "fill-color": "hsla(43, 85%, 60%, 0.9)", 537 | "fill-outline-color": "#efbf43", 538 | "fill-opacity": 1, 539 | "fill-antialias": true 540 | }, 541 | "source-layer": "noise_leisure" 542 | }, 543 | { 544 | "interactive": true, 545 | "minzoom": 10, 546 | "layout": { 547 | "visibility": "visible" 548 | }, 549 | "metadata": { 550 | "mapbox:group": "1459193066085.223" 551 | }, 552 | "filter": [ 553 | "==", 554 | "noise_level", 555 | 3 556 | ], 557 | "type": "fill", 558 | "source": "composite", 559 | "id": "noise-nightlife-3", 560 | "paint": { 561 | "fill-color": "hsla(43, 85%, 60%, 0.9)", 562 | "fill-antialias": true, 563 | "fill-opacity": 1, 564 | "fill-outline-color": "#efbf43" 565 | }, 566 | "source-layer": "noise_nightlife" 567 | }, 568 | { 569 | "interactive": true, 570 | "minzoom": 10, 571 | "layout": { 572 | "visibility": "visible" 573 | }, 574 | "metadata": { 575 | "mapbox:group": "1459193066085.223" 576 | }, 577 | "filter": [ 578 | "all", 579 | [ 580 | "in", 581 | "$type", 582 | "Point", 583 | "LineString", 584 | "Polygon" 585 | ], 586 | [ 587 | "==", 588 | "noise_level", 589 | 3 590 | ] 591 | ], 592 | "type": "fill", 593 | "source": "composite", 594 | "id": "noise-retail-3", 595 | "paint": { 596 | "fill-color": "hsla(43, 85%, 60%, 0.9)", 597 | "fill-antialias": true, 598 | "fill-opacity": 1, 599 | "fill-outline-color": "#efbf43" 600 | }, 601 | "source-layer": "noise_retail" 602 | }, 603 | { 604 | "interactive": true, 605 | "minzoom": 10, 606 | "layout": { 607 | "visibility": "visible" 608 | }, 609 | "metadata": { 610 | "mapbox:group": "1459193066085.223" 611 | }, 612 | "filter": [ 613 | "==", 614 | "noise_level", 615 | 3 616 | ], 617 | "type": "fill", 618 | "source": "composite", 619 | "id": "noise-road-3", 620 | "paint": { 621 | "fill-color": "hsla(43, 85%, 60%, 0.9)", 622 | "fill-antialias": true, 623 | "fill-opacity": 1, 624 | "fill-outline-color": "#efbf43" 625 | }, 626 | "source-layer": "noise_road" 627 | }, 628 | { 629 | "interactive": true, 630 | "minzoom": 10, 631 | "layout": { 632 | "visibility": "visible" 633 | }, 634 | "metadata": { 635 | "mapbox:group": "1459193066085.223" 636 | }, 637 | "filter": [ 638 | "==", 639 | "noise_level", 640 | 3 641 | ], 642 | "type": "fill", 643 | "source": "composite", 644 | "id": "noise-shop-level-3", 645 | "paint": { 646 | "fill-color": "hsla(43, 85%, 60%, 0.9)", 647 | "fill-antialias": true, 648 | "fill-opacity": 1, 649 | "fill-outline-color": "#efbf43" 650 | }, 651 | "source-layer": "noise_shop" 652 | }, 653 | { 654 | "interactive": true, 655 | "minzoom": 10, 656 | "layout": { 657 | "visibility": "visible" 658 | }, 659 | "metadata": { 660 | "mapbox:group": "1459193066085.223" 661 | }, 662 | "filter": [ 663 | "==", 664 | "noise_level", 665 | 3 666 | ], 667 | "type": "fill", 668 | "source": "composite", 669 | "id": "noise-sport-3", 670 | "paint": { 671 | "fill-color": "hsla(43, 85%, 60%, 0.9)", 672 | "fill-antialias": true, 673 | "fill-opacity": 1, 674 | "fill-outline-color": "#efbf43" 675 | }, 676 | "source-layer": "noise_sport" 677 | }, 678 | { 679 | "layout": { 680 | "visibility": "visible" 681 | }, 682 | "metadata": { 683 | "mapbox:group": "1459193066085.223" 684 | }, 685 | "filter": [ 686 | "==", 687 | "noise_level", 688 | 3 689 | ], 690 | "type": "fill", 691 | "source": "composite", 692 | "id": "noise-rail-3", 693 | "paint": { 694 | "fill-color": "hsla(43, 85%, 60%, 0.9)", 695 | "fill-opacity": 1, 696 | "fill-antialias": true, 697 | "fill-outline-color": "#efbf43" 698 | }, 699 | "source-layer": "noise_rail", 700 | "interactive": true 701 | }, 702 | { 703 | "layout": { 704 | "visibility": "visible" 705 | }, 706 | "metadata": { 707 | "mapbox:group": "1459193066085.223" 708 | }, 709 | "filter": [ 710 | "==", 711 | "noise_level", 712 | 2 713 | ], 714 | "type": "fill", 715 | "source": "composite", 716 | "id": "noise-rail-2", 717 | "paint": { 718 | "fill-opacity": 1, 719 | "fill-color": "hsla(25, 72%, 51%, 0.7)", 720 | "fill-antialias": false 721 | }, 722 | "source-layer": "noise_rail", 723 | "interactive": true 724 | }, 725 | { 726 | "interactive": true, 727 | "minzoom": 10, 728 | "layout": { 729 | "visibility": "visible" 730 | }, 731 | "metadata": { 732 | "mapbox:group": "1459193066085.223" 733 | }, 734 | "filter": [ 735 | "==", 736 | "noise_level", 737 | 2 738 | ], 739 | "type": "fill", 740 | "source": "composite", 741 | "id": "noise-industrial-2", 742 | "paint": { 743 | "fill-color": "hsla(25, 72%, 51%, 0.7)", 744 | "fill-antialias": false, 745 | "fill-opacity": 1, 746 | "fill-outline-color": "hsla(7, 63%, 54%, 0.9)" 747 | }, 748 | "source-layer": "noise_industrial" 749 | }, 750 | { 751 | "interactive": true, 752 | "minzoom": 10, 753 | "layout": { 754 | "visibility": "visible" 755 | }, 756 | "metadata": { 757 | "mapbox:group": "1459193066085.223" 758 | }, 759 | "filter": [ 760 | "all", 761 | [ 762 | "in", 763 | "$type", 764 | "Point", 765 | "LineString", 766 | "Polygon" 767 | ], 768 | [ 769 | "==", 770 | "noise_level", 771 | 2 772 | ] 773 | ], 774 | "type": "fill", 775 | "source": "composite", 776 | "id": "noise-retail-2", 777 | "paint": { 778 | "fill-color": "hsla(25, 72%, 51%, 0.7)", 779 | "fill-antialias": false, 780 | "fill-opacity": 1, 781 | "fill-outline-color": "hsla(7, 63%, 54%, 0.9)" 782 | }, 783 | "source-layer": "noise_retail" 784 | }, 785 | { 786 | "interactive": true, 787 | "minzoom": 10, 788 | "layout": { 789 | "visibility": "visible" 790 | }, 791 | "metadata": { 792 | "mapbox:group": "1459193066085.223" 793 | }, 794 | "filter": [ 795 | "==", 796 | "noise_level", 797 | 2 798 | ], 799 | "type": "fill", 800 | "source": "composite", 801 | "id": "noise-shop-level-2", 802 | "paint": { 803 | "fill-color": "hsla(25, 72%, 51%, 0.7)", 804 | "fill-antialias": false, 805 | "fill-opacity": 1, 806 | "fill-outline-color": "hsla(7, 63%, 54%, 0.9)" 807 | }, 808 | "source-layer": "noise_shop" 809 | }, 810 | { 811 | "interactive": true, 812 | "minzoom": 10, 813 | "layout": { 814 | "visibility": "visible" 815 | }, 816 | "metadata": { 817 | "mapbox:group": "1459193066085.223" 818 | }, 819 | "filter": [ 820 | "==", 821 | "noise_level", 822 | 2 823 | ], 824 | "type": "fill", 825 | "source": "composite", 826 | "id": "noise-road-2", 827 | "paint": { 828 | "fill-color": "hsla(25, 72%, 51%, 0.7)", 829 | "fill-antialias": false, 830 | "fill-opacity": 1, 831 | "fill-outline-color": "hsla(7, 63%, 54%, 0.9)" 832 | }, 833 | "source-layer": "noise_road" 834 | }, 835 | { 836 | "interactive": true, 837 | "minzoom": 10, 838 | "layout": { 839 | "visibility": "visible" 840 | }, 841 | "metadata": { 842 | "mapbox:group": "1459193066085.223" 843 | }, 844 | "filter": [ 845 | "==", 846 | "noise_level", 847 | 2 848 | ], 849 | "type": "fill", 850 | "source": "composite", 851 | "id": "noise-leisure-2", 852 | "paint": { 853 | "fill-color": "hsla(25, 72%, 51%, 0.7)", 854 | "fill-outline-color": "hsla(7, 63%, 54%, 0.9)", 855 | "fill-antialias": false, 856 | "fill-opacity": 1 857 | }, 858 | "source-layer": "noise_leisure" 859 | }, 860 | { 861 | "interactive": true, 862 | "minzoom": 10, 863 | "layout": { 864 | "visibility": "visible" 865 | }, 866 | "metadata": { 867 | "mapbox:group": "1459193066085.223" 868 | }, 869 | "filter": [ 870 | "==", 871 | "noise_level", 872 | 2 873 | ], 874 | "type": "fill", 875 | "source": "composite", 876 | "id": "noise-sport-2", 877 | "paint": { 878 | "fill-color": "hsla(25, 72%, 51%, 0.7)", 879 | "fill-antialias": false, 880 | "fill-opacity": 1, 881 | "fill-outline-color": "hsla(7, 63%, 54%, 0.9)" 882 | }, 883 | "source-layer": "noise_sport" 884 | }, 885 | { 886 | "interactive": true, 887 | "minzoom": 10, 888 | "layout": { 889 | "visibility": "visible" 890 | }, 891 | "metadata": { 892 | "mapbox:group": "1459193066085.223" 893 | }, 894 | "filter": [ 895 | "==", 896 | "noise_level", 897 | 2 898 | ], 899 | "type": "fill", 900 | "source": "composite", 901 | "id": "noise-nightlife-2", 902 | "paint": { 903 | "fill-color": "hsla(7, 63%, 54%, 0.9)", 904 | "fill-antialias": false, 905 | "fill-opacity": 1, 906 | "fill-outline-color": "hsla(7, 63%, 54%, 0.9)" 907 | }, 908 | "source-layer": "noise_nightlife" 909 | }, 910 | { 911 | "interactive": true, 912 | "minzoom": 10, 913 | "layout": { 914 | "visibility": "visible" 915 | }, 916 | "metadata": { 917 | "mapbox:group": "1459193066085.223" 918 | }, 919 | "filter": [ 920 | "==", 921 | "noise_level", 922 | 1 923 | ], 924 | "type": "fill", 925 | "source": "composite", 926 | "id": "noise-industrial-1", 927 | "paint": { 928 | "fill-color": "hsla(7, 63%, 54%, 0.9)", 929 | "fill-antialias": false, 930 | "fill-opacity": 1, 931 | "fill-outline-color": "hsla(7, 63%, 54%, 0.9)" 932 | }, 933 | "source-layer": "noise_industrial" 934 | }, 935 | { 936 | "interactive": true, 937 | "minzoom": 10, 938 | "layout": { 939 | "visibility": "visible" 940 | }, 941 | "metadata": { 942 | "mapbox:group": "1459193066085.223" 943 | }, 944 | "filter": [ 945 | "==", 946 | "noise_level", 947 | 1 948 | ], 949 | "type": "fill", 950 | "source": "composite", 951 | "id": "noise-sport-1", 952 | "paint": { 953 | "fill-color": "hsla(7, 63%, 54%, 0.9)", 954 | "fill-antialias": false, 955 | "fill-opacity": 1, 956 | "fill-outline-color": "hsla(7, 63%, 54%, 0.9)" 957 | }, 958 | "source-layer": "noise_sport" 959 | }, 960 | { 961 | "interactive": true, 962 | "minzoom": 10, 963 | "layout": { 964 | "visibility": "visible" 965 | }, 966 | "metadata": { 967 | "mapbox:group": "1459193066085.223" 968 | }, 969 | "filter": [ 970 | "all", 971 | [ 972 | "in", 973 | "$type", 974 | "Point", 975 | "LineString", 976 | "Polygon" 977 | ], 978 | [ 979 | "==", 980 | "noise_level", 981 | 1 982 | ] 983 | ], 984 | "type": "fill", 985 | "source": "composite", 986 | "id": "noise-retail-1", 987 | "paint": { 988 | "fill-color": "hsla(7, 63%, 54%, 0.9)", 989 | "fill-antialias": false, 990 | "fill-opacity": 1, 991 | "fill-outline-color": "hsla(7, 63%, 54%, 0.9)" 992 | }, 993 | "source-layer": "noise_retail" 994 | }, 995 | { 996 | "layout": { 997 | "visibility": "visible" 998 | }, 999 | "metadata": { 1000 | "mapbox:group": "1459193066085.223" 1001 | }, 1002 | "filter": [ 1003 | "==", 1004 | "noise_level", 1005 | 1 1006 | ], 1007 | "type": "fill", 1008 | "source": "composite", 1009 | "id": "noise-rail-1", 1010 | "paint": { 1011 | "fill-color": "hsla(7, 63%, 54%, 0.9)", 1012 | "fill-opacity": 1, 1013 | "fill-antialias": false 1014 | }, 1015 | "source-layer": "noise_rail", 1016 | "interactive": true 1017 | }, 1018 | { 1019 | "interactive": true, 1020 | "minzoom": 10, 1021 | "layout": { 1022 | "visibility": "visible" 1023 | }, 1024 | "metadata": { 1025 | "mapbox:group": "1459193066085.223" 1026 | }, 1027 | "filter": [ 1028 | "==", 1029 | "noise_level", 1030 | 1 1031 | ], 1032 | "type": "fill", 1033 | "source": "composite", 1034 | "id": "noise-shop-level-1", 1035 | "paint": { 1036 | "fill-color": "hsla(7, 63%, 54%, 0.9)", 1037 | "fill-antialias": false, 1038 | "fill-opacity": 1, 1039 | "fill-outline-color": "hsla(7, 63%, 54%, 0.9)" 1040 | }, 1041 | "source-layer": "noise_shop" 1042 | }, 1043 | { 1044 | "interactive": true, 1045 | "minzoom": 10, 1046 | "layout": { 1047 | "visibility": "visible" 1048 | }, 1049 | "metadata": { 1050 | "mapbox:group": "1459193066085.223" 1051 | }, 1052 | "filter": [ 1053 | "==", 1054 | "noise_level", 1055 | 1 1056 | ], 1057 | "type": "fill", 1058 | "source": "composite", 1059 | "id": "noise-road-1", 1060 | "paint": { 1061 | "fill-color": "hsla(7, 63%, 54%, 0.9)", 1062 | "fill-antialias": false, 1063 | "fill-opacity": 1, 1064 | "fill-outline-color": "hsla(7, 63%, 54%, 0.9)" 1065 | }, 1066 | "source-layer": "noise_road" 1067 | }, 1068 | { 1069 | "interactive": true, 1070 | "minzoom": 10, 1071 | "layout": { 1072 | "visibility": "visible" 1073 | }, 1074 | "metadata": { 1075 | "mapbox:group": "1459193066085.223" 1076 | }, 1077 | "filter": [ 1078 | "==", 1079 | "noise_level", 1080 | 1 1081 | ], 1082 | "type": "fill", 1083 | "source": "composite", 1084 | "id": "noise-leisure-1", 1085 | "paint": { 1086 | "fill-color": "hsla(7, 63%, 54%, 0.9)", 1087 | "fill-outline-color": "hsla(7, 63%, 54%, 0.9)", 1088 | "fill-antialias": false, 1089 | "fill-opacity": 1 1090 | }, 1091 | "source-layer": "noise_leisure" 1092 | }, 1093 | { 1094 | "interactive": true, 1095 | "minzoom": 10, 1096 | "layout": { 1097 | "visibility": "visible" 1098 | }, 1099 | "metadata": { 1100 | "mapbox:group": "1459193066085.223" 1101 | }, 1102 | "filter": [ 1103 | "==", 1104 | "noise_level", 1105 | 1 1106 | ], 1107 | "type": "fill", 1108 | "source": "composite", 1109 | "id": "noise-nightlife-1", 1110 | "paint": { 1111 | "fill-color": "hsla(7, 63%, 54%, 0.9)", 1112 | "fill-antialias": false, 1113 | "fill-opacity": 1, 1114 | "fill-outline-color": "hsla(7, 63%, 54%, 0.9)" 1115 | }, 1116 | "source-layer": "noise_nightlife" 1117 | }, 1118 | { 1119 | "interactive": true, 1120 | "layout": { 1121 | "line-join": "round", 1122 | "visibility": "visible" 1123 | }, 1124 | "metadata": { 1125 | "mapbox:group": "1444849354174.1904" 1126 | }, 1127 | "filter": [ 1128 | "all", 1129 | [ 1130 | "==", 1131 | "structure", 1132 | "tunnel" 1133 | ], 1134 | [ 1135 | "==", 1136 | "class", 1137 | "motorway_link" 1138 | ] 1139 | ], 1140 | "type": "line", 1141 | "source": "composite", 1142 | "id": "tunnel_motorway_link_casing", 1143 | "paint": { 1144 | "line-color": "hsl(17, 40%, 34%)", 1145 | "line-dasharray": [ 1146 | 0.5, 1147 | 0.25 1148 | ], 1149 | "line-width": { 1150 | "base": 1.2, 1151 | "stops": [ 1152 | [ 1153 | 12, 1154 | 1 1155 | ], 1156 | [ 1157 | 13, 1158 | 3 1159 | ], 1160 | [ 1161 | 14, 1162 | 4 1163 | ], 1164 | [ 1165 | 20, 1166 | 15 1167 | ] 1168 | ] 1169 | }, 1170 | "line-opacity": 1 1171 | }, 1172 | "source-layer": "road" 1173 | }, 1174 | { 1175 | "interactive": true, 1176 | "layout": { 1177 | "line-join": "round" 1178 | }, 1179 | "metadata": { 1180 | "mapbox:group": "1444849354174.1904" 1181 | }, 1182 | "filter": [ 1183 | "all", 1184 | [ 1185 | "==", 1186 | "structure", 1187 | "tunnel" 1188 | ], 1189 | [ 1190 | "in", 1191 | "class", 1192 | "service", 1193 | "track" 1194 | ] 1195 | ], 1196 | "type": "line", 1197 | "source": "composite", 1198 | "id": "tunnel_service_track_casing", 1199 | "paint": { 1200 | "line-color": "hsl(45, 48%, 52%)", 1201 | "line-dasharray": [ 1202 | 0.5, 1203 | 0.25 1204 | ], 1205 | "line-width": { 1206 | "base": 1.2, 1207 | "stops": [ 1208 | [ 1209 | 15, 1210 | 1 1211 | ], 1212 | [ 1213 | 16, 1214 | 4 1215 | ], 1216 | [ 1217 | 20, 1218 | 11 1219 | ] 1220 | ] 1221 | } 1222 | }, 1223 | "source-layer": "road" 1224 | }, 1225 | { 1226 | "interactive": true, 1227 | "layout": { 1228 | "line-join": "round" 1229 | }, 1230 | "metadata": { 1231 | "mapbox:group": "1444849354174.1904" 1232 | }, 1233 | "filter": [ 1234 | "all", 1235 | [ 1236 | "==", 1237 | "structure", 1238 | "tunnel" 1239 | ], 1240 | [ 1241 | "==", 1242 | "class", 1243 | "link" 1244 | ] 1245 | ], 1246 | "type": "line", 1247 | "source": "composite", 1248 | "id": "tunnel_link_casing", 1249 | "paint": { 1250 | "line-color": "hsl(17, 40%, 34%)", 1251 | "line-width": { 1252 | "base": 1.2, 1253 | "stops": [ 1254 | [ 1255 | 12, 1256 | 1 1257 | ], 1258 | [ 1259 | 13, 1260 | 3 1261 | ], 1262 | [ 1263 | 14, 1264 | 4 1265 | ], 1266 | [ 1267 | 20, 1268 | 15 1269 | ] 1270 | ] 1271 | }, 1272 | "line-opacity": 1 1273 | }, 1274 | "source-layer": "road" 1275 | }, 1276 | { 1277 | "interactive": true, 1278 | "layout": { 1279 | "line-join": "round" 1280 | }, 1281 | "metadata": { 1282 | "mapbox:group": "1444849354174.1904" 1283 | }, 1284 | "filter": [ 1285 | "all", 1286 | [ 1287 | "==", 1288 | "structure", 1289 | "tunnel" 1290 | ], 1291 | [ 1292 | "in", 1293 | "class", 1294 | "street", 1295 | "street_limited" 1296 | ] 1297 | ], 1298 | "type": "line", 1299 | "source": "composite", 1300 | "id": "tunnel_street_casing", 1301 | "paint": { 1302 | "line-color": "hsl(45, 48%, 52%)", 1303 | "line-width": { 1304 | "base": 1.2, 1305 | "stops": [ 1306 | [ 1307 | 12, 1308 | 0.5 1309 | ], 1310 | [ 1311 | 13, 1312 | 1 1313 | ], 1314 | [ 1315 | 14, 1316 | 4 1317 | ], 1318 | [ 1319 | 20, 1320 | 15 1321 | ] 1322 | ] 1323 | }, 1324 | "line-opacity": { 1325 | "stops": [ 1326 | [ 1327 | 12, 1328 | 0 1329 | ], 1330 | [ 1331 | 12.5, 1332 | 1 1333 | ] 1334 | ] 1335 | } 1336 | }, 1337 | "source-layer": "road" 1338 | }, 1339 | { 1340 | "interactive": true, 1341 | "layout": { 1342 | "line-join": "round" 1343 | }, 1344 | "metadata": { 1345 | "mapbox:group": "1444849354174.1904" 1346 | }, 1347 | "filter": [ 1348 | "all", 1349 | [ 1350 | "==", 1351 | "structure", 1352 | "tunnel" 1353 | ], 1354 | [ 1355 | "in", 1356 | "class", 1357 | "secondary", 1358 | "tertiary" 1359 | ] 1360 | ], 1361 | "type": "line", 1362 | "source": "composite", 1363 | "id": "tunnel_secondary_tertiary_casing", 1364 | "paint": { 1365 | "line-color": "hsl(17, 40%, 34%)", 1366 | "line-width": { 1367 | "base": 1.2, 1368 | "stops": [ 1369 | [ 1370 | 8, 1371 | 1.5 1372 | ], 1373 | [ 1374 | 20, 1375 | 17 1376 | ] 1377 | ] 1378 | }, 1379 | "line-opacity": 1 1380 | }, 1381 | "source-layer": "road" 1382 | }, 1383 | { 1384 | "interactive": true, 1385 | "layout": { 1386 | "line-join": "round" 1387 | }, 1388 | "metadata": { 1389 | "mapbox:group": "1444849354174.1904" 1390 | }, 1391 | "filter": [ 1392 | "all", 1393 | [ 1394 | "==", 1395 | "structure", 1396 | "tunnel" 1397 | ], 1398 | [ 1399 | "in", 1400 | "class", 1401 | "trunk", 1402 | "primary" 1403 | ] 1404 | ], 1405 | "type": "line", 1406 | "source": "composite", 1407 | "id": "tunnel_trunk_primary_casing", 1408 | "paint": { 1409 | "line-color": "hsl(17, 40%, 34%)", 1410 | "line-width": { 1411 | "base": 1.2, 1412 | "stops": [ 1413 | [ 1414 | 5, 1415 | 0.4 1416 | ], 1417 | [ 1418 | 6, 1419 | 0.6 1420 | ], 1421 | [ 1422 | 7, 1423 | 1.5 1424 | ], 1425 | [ 1426 | 20, 1427 | 22 1428 | ] 1429 | ] 1430 | }, 1431 | "line-dasharray": [ 1432 | 0.5, 1433 | 0.25 1434 | ] 1435 | }, 1436 | "source-layer": "road" 1437 | }, 1438 | { 1439 | "interactive": true, 1440 | "layout": { 1441 | "line-join": "round", 1442 | "visibility": "visible" 1443 | }, 1444 | "metadata": { 1445 | "mapbox:group": "1444849354174.1904" 1446 | }, 1447 | "filter": [ 1448 | "all", 1449 | [ 1450 | "==", 1451 | "structure", 1452 | "tunnel" 1453 | ], 1454 | [ 1455 | "==", 1456 | "class", 1457 | "motorway" 1458 | ] 1459 | ], 1460 | "type": "line", 1461 | "source": "composite", 1462 | "id": "tunnel_motorway_casing", 1463 | "paint": { 1464 | "line-color": "hsl(17, 40%, 34%)", 1465 | "line-dasharray": [ 1466 | 0.5, 1467 | 0.25 1468 | ], 1469 | "line-width": { 1470 | "base": 1.2, 1471 | "stops": [ 1472 | [ 1473 | 5, 1474 | 0.4 1475 | ], 1476 | [ 1477 | 6, 1478 | 0.6 1479 | ], 1480 | [ 1481 | 7, 1482 | 1.5 1483 | ], 1484 | [ 1485 | 20, 1486 | 22 1487 | ] 1488 | ] 1489 | } 1490 | }, 1491 | "source-layer": "road" 1492 | }, 1493 | { 1494 | "interactive": true, 1495 | "metadata": { 1496 | "mapbox:group": "1444849354174.1904" 1497 | }, 1498 | "id": "tunnel_motorway_link", 1499 | "paint": { 1500 | "line-color": "hsla(7, 71%, 39%, 0.9)", 1501 | "line-width": { 1502 | "base": 1.2, 1503 | "stops": [ 1504 | [ 1505 | 12.5, 1506 | 0 1507 | ], 1508 | [ 1509 | 13, 1510 | 1.5 1511 | ], 1512 | [ 1513 | 14, 1514 | 2.5 1515 | ], 1516 | [ 1517 | 20, 1518 | 11.5 1519 | ] 1520 | ] 1521 | } 1522 | }, 1523 | "ref": "tunnel_motorway_link_casing" 1524 | }, 1525 | { 1526 | "interactive": true, 1527 | "metadata": { 1528 | "mapbox:group": "1444849354174.1904" 1529 | }, 1530 | "id": "tunnel_service_track", 1531 | "paint": { 1532 | "line-color": "hsl(38, 82%, 72%)", 1533 | "line-width": { 1534 | "base": 1.2, 1535 | "stops": [ 1536 | [ 1537 | 15.5, 1538 | 0 1539 | ], 1540 | [ 1541 | 16, 1542 | 2 1543 | ], 1544 | [ 1545 | 20, 1546 | 7.5 1547 | ] 1548 | ] 1549 | } 1550 | }, 1551 | "ref": "tunnel_service_track_casing" 1552 | }, 1553 | { 1554 | "interactive": true, 1555 | "metadata": { 1556 | "mapbox:group": "1444849354174.1904" 1557 | }, 1558 | "id": "tunnel_link", 1559 | "paint": { 1560 | "line-color": "hsl(22, 34%, 53%)", 1561 | "line-width": { 1562 | "base": 1.2, 1563 | "stops": [ 1564 | [ 1565 | 12.5, 1566 | 0 1567 | ], 1568 | [ 1569 | 13, 1570 | 1.5 1571 | ], 1572 | [ 1573 | 14, 1574 | 2.5 1575 | ], 1576 | [ 1577 | 20, 1578 | 11.5 1579 | ] 1580 | ] 1581 | } 1582 | }, 1583 | "ref": "tunnel_link_casing" 1584 | }, 1585 | { 1586 | "interactive": true, 1587 | "metadata": { 1588 | "mapbox:group": "1444849354174.1904" 1589 | }, 1590 | "id": "tunnel_street", 1591 | "paint": { 1592 | "line-color": "hsl(38, 82%, 72%)", 1593 | "line-width": { 1594 | "base": 1.2, 1595 | "stops": [ 1596 | [ 1597 | 13.5, 1598 | 0 1599 | ], 1600 | [ 1601 | 14, 1602 | 2.5 1603 | ], 1604 | [ 1605 | 20, 1606 | 11.5 1607 | ] 1608 | ] 1609 | }, 1610 | "line-opacity": 1 1611 | }, 1612 | "ref": "tunnel_street_casing" 1613 | }, 1614 | { 1615 | "interactive": true, 1616 | "metadata": { 1617 | "mapbox:group": "1444849354174.1904" 1618 | }, 1619 | "id": "tunnel_secondary_tertiary", 1620 | "paint": { 1621 | "line-color": "hsl(22, 34%, 53%)", 1622 | "line-width": { 1623 | "base": 1.2, 1624 | "stops": [ 1625 | [ 1626 | 6.5, 1627 | 0 1628 | ], 1629 | [ 1630 | 7, 1631 | 0.5 1632 | ], 1633 | [ 1634 | 20, 1635 | 10 1636 | ] 1637 | ] 1638 | } 1639 | }, 1640 | "ref": "tunnel_secondary_tertiary_casing" 1641 | }, 1642 | { 1643 | "interactive": true, 1644 | "metadata": { 1645 | "mapbox:group": "1444849354174.1904" 1646 | }, 1647 | "id": "tunnel_trunk_primary", 1648 | "paint": { 1649 | "line-color": "hsla(1, 38%, 52%, 0.95)", 1650 | "line-width": { 1651 | "base": 1.2, 1652 | "stops": [ 1653 | [ 1654 | 6.5, 1655 | 0 1656 | ], 1657 | [ 1658 | 7, 1659 | 0.5 1660 | ], 1661 | [ 1662 | 20, 1663 | 18 1664 | ] 1665 | ] 1666 | } 1667 | }, 1668 | "ref": "tunnel_trunk_primary_casing" 1669 | }, 1670 | { 1671 | "interactive": true, 1672 | "metadata": { 1673 | "mapbox:group": "1444849354174.1904" 1674 | }, 1675 | "id": "tunnel_motorway", 1676 | "paint": { 1677 | "line-color": "hsl(6, 49%, 53%)", 1678 | "line-width": { 1679 | "base": 1.2, 1680 | "stops": [ 1681 | [ 1682 | 6.5, 1683 | 0 1684 | ], 1685 | [ 1686 | 7, 1687 | 0.5 1688 | ], 1689 | [ 1690 | 20, 1691 | 18 1692 | ] 1693 | ] 1694 | } 1695 | }, 1696 | "ref": "tunnel_motorway_casing" 1697 | }, 1698 | { 1699 | "id": "tunnel_major_rail", 1700 | "type": "line", 1701 | "source": "composite", 1702 | "source-layer": "road", 1703 | "filter": [ 1704 | "all", 1705 | [ 1706 | "==", 1707 | "structure", 1708 | "tunnel" 1709 | ], 1710 | [ 1711 | "in", 1712 | "class", 1713 | "major_rail", 1714 | "minor_rail" 1715 | ] 1716 | ], 1717 | "paint": { 1718 | "line-color": "hsl(0, 83%, 37%)", 1719 | "line-width": { 1720 | "base": 1.4, 1721 | "stops": [ 1722 | [ 1723 | 14, 1724 | 0.4 1725 | ], 1726 | [ 1727 | 15, 1728 | 0.75 1729 | ], 1730 | [ 1731 | 20, 1732 | 2 1733 | ] 1734 | ] 1735 | } 1736 | }, 1737 | "metadata": { 1738 | "mapbox:group": "1444849354174.1904" 1739 | }, 1740 | "interactive": true 1741 | }, 1742 | { 1743 | "id": "tunnel_major_rail_hatching", 1744 | "paint": { 1745 | "line-color": "hsl(0, 83%, 37%)", 1746 | "line-dasharray": [ 1747 | 0.2, 1748 | 8 1749 | ], 1750 | "line-width": { 1751 | "base": 1.4, 1752 | "stops": [ 1753 | [ 1754 | 14.5, 1755 | 0 1756 | ], 1757 | [ 1758 | 15, 1759 | 3 1760 | ], 1761 | [ 1762 | 20, 1763 | 8 1764 | ] 1765 | ] 1766 | } 1767 | }, 1768 | "metadata": { 1769 | "mapbox:group": "1444849354174.1904" 1770 | }, 1771 | "interactive": true, 1772 | "ref": "tunnel_major_rail" 1773 | }, 1774 | { 1775 | "interactive": true, 1776 | "minzoom": 12, 1777 | "layout": { 1778 | "line-cap": "round", 1779 | "line-join": "round" 1780 | }, 1781 | "metadata": { 1782 | "mapbox:group": "1444849345966.4436" 1783 | }, 1784 | "filter": [ 1785 | "all", 1786 | [ 1787 | "==", 1788 | "class", 1789 | "motorway_link" 1790 | ], 1791 | [ 1792 | "!in", 1793 | "structure", 1794 | "bridge", 1795 | "tunnel" 1796 | ] 1797 | ], 1798 | "type": "line", 1799 | "source": "composite", 1800 | "id": "road_motorway_link_casing", 1801 | "paint": { 1802 | "line-color": "hsl(17, 40%, 34%)", 1803 | "line-width": { 1804 | "base": 1.2, 1805 | "stops": [ 1806 | [ 1807 | 12, 1808 | 1 1809 | ], 1810 | [ 1811 | 13, 1812 | 3 1813 | ], 1814 | [ 1815 | 14, 1816 | 4 1817 | ], 1818 | [ 1819 | 20, 1820 | 15 1821 | ] 1822 | ] 1823 | }, 1824 | "line-opacity": 1 1825 | }, 1826 | "source-layer": "road" 1827 | }, 1828 | { 1829 | "interactive": true, 1830 | "layout": { 1831 | "line-cap": "round", 1832 | "line-join": "round" 1833 | }, 1834 | "metadata": { 1835 | "mapbox:group": "1444849345966.4436" 1836 | }, 1837 | "filter": [ 1838 | "all", 1839 | [ 1840 | "in", 1841 | "class", 1842 | "service", 1843 | "track" 1844 | ], 1845 | [ 1846 | "!in", 1847 | "structure", 1848 | "bridge", 1849 | "tunnel" 1850 | ] 1851 | ], 1852 | "type": "line", 1853 | "source": "composite", 1854 | "id": "road_service_track_casing", 1855 | "paint": { 1856 | "line-color": "hsl(45, 48%, 52%)", 1857 | "line-width": { 1858 | "base": 1.2, 1859 | "stops": [ 1860 | [ 1861 | 15, 1862 | 1 1863 | ], 1864 | [ 1865 | 16, 1866 | 4 1867 | ], 1868 | [ 1869 | 20, 1870 | 11 1871 | ] 1872 | ] 1873 | }, 1874 | "line-opacity": { 1875 | "base": 0.9, 1876 | "stops": [ 1877 | [ 1878 | 12, 1879 | 0.3 1880 | ], 1881 | [ 1882 | 18, 1883 | 1 1884 | ] 1885 | ] 1886 | } 1887 | }, 1888 | "source-layer": "road" 1889 | }, 1890 | { 1891 | "interactive": true, 1892 | "minzoom": 13, 1893 | "layout": { 1894 | "line-cap": "round", 1895 | "line-join": "round", 1896 | "visibility": "visible" 1897 | }, 1898 | "metadata": { 1899 | "mapbox:group": "1444849345966.4436" 1900 | }, 1901 | "filter": [ 1902 | "all", 1903 | [ 1904 | "==", 1905 | "class", 1906 | "link" 1907 | ], 1908 | [ 1909 | "!in", 1910 | "structure", 1911 | "bridge", 1912 | "tunnel" 1913 | ] 1914 | ], 1915 | "type": "line", 1916 | "source": "composite", 1917 | "id": "road_link_casing", 1918 | "paint": { 1919 | "line-color": "hsl(17, 40%, 34%)", 1920 | "line-width": { 1921 | "base": 1.2, 1922 | "stops": [ 1923 | [ 1924 | 12, 1925 | 1 1926 | ], 1927 | [ 1928 | 13, 1929 | 3 1930 | ], 1931 | [ 1932 | 14, 1933 | 4 1934 | ], 1935 | [ 1936 | 20, 1937 | 15 1938 | ] 1939 | ] 1940 | }, 1941 | "line-opacity": 1 1942 | }, 1943 | "source-layer": "road" 1944 | }, 1945 | { 1946 | "interactive": true, 1947 | "layout": { 1948 | "line-cap": "round", 1949 | "line-join": "round" 1950 | }, 1951 | "metadata": { 1952 | "mapbox:group": "1444849345966.4436" 1953 | }, 1954 | "filter": [ 1955 | "all", 1956 | [ 1957 | "==", 1958 | "$type", 1959 | "LineString" 1960 | ], 1961 | [ 1962 | "all", 1963 | [ 1964 | "in", 1965 | "class", 1966 | "street", 1967 | "street_limited" 1968 | ], 1969 | [ 1970 | "!in", 1971 | "structure", 1972 | "bridge", 1973 | "tunnel" 1974 | ] 1975 | ] 1976 | ], 1977 | "type": "line", 1978 | "source": "composite", 1979 | "id": "road_street_casing", 1980 | "paint": { 1981 | "line-color": "hsl(45, 48%, 52%)", 1982 | "line-width": { 1983 | "base": 1.2, 1984 | "stops": [ 1985 | [ 1986 | 12, 1987 | 0.5 1988 | ], 1989 | [ 1990 | 13, 1991 | 1 1992 | ], 1993 | [ 1994 | 14, 1995 | 4 1996 | ], 1997 | [ 1998 | 20, 1999 | 15 2000 | ] 2001 | ] 2002 | }, 2003 | "line-opacity": { 2004 | "stops": [ 2005 | [ 2006 | 12, 2007 | 0 2008 | ], 2009 | [ 2010 | 14, 2011 | 1 2012 | ] 2013 | ], 2014 | "base": 1 2015 | } 2016 | }, 2017 | "source-layer": "road" 2018 | }, 2019 | { 2020 | "interactive": true, 2021 | "layout": { 2022 | "line-cap": "round", 2023 | "line-join": "round", 2024 | "visibility": "visible" 2025 | }, 2026 | "metadata": { 2027 | "mapbox:group": "1444849345966.4436" 2028 | }, 2029 | "filter": [ 2030 | "all", 2031 | [ 2032 | "in", 2033 | "class", 2034 | "secondary", 2035 | "tertiary" 2036 | ], 2037 | [ 2038 | "!in", 2039 | "structure", 2040 | "bridge", 2041 | "tunnel" 2042 | ] 2043 | ], 2044 | "type": "line", 2045 | "source": "composite", 2046 | "id": "road_secondary_tertiary_casing", 2047 | "paint": { 2048 | "line-color": "hsl(17, 40%, 34%)", 2049 | "line-width": { 2050 | "base": 1.2, 2051 | "stops": [ 2052 | [ 2053 | 8, 2054 | 1.5 2055 | ], 2056 | [ 2057 | 20, 2058 | 17 2059 | ] 2060 | ] 2061 | }, 2062 | "line-opacity": 1 2063 | }, 2064 | "source-layer": "road" 2065 | }, 2066 | { 2067 | "interactive": true, 2068 | "layout": { 2069 | "line-cap": "round", 2070 | "line-join": "round", 2071 | "visibility": "visible" 2072 | }, 2073 | "metadata": { 2074 | "mapbox:group": "1444849345966.4436" 2075 | }, 2076 | "filter": [ 2077 | "all", 2078 | [ 2079 | "in", 2080 | "class", 2081 | "trunk", 2082 | "primary" 2083 | ], 2084 | [ 2085 | "!in", 2086 | "structure", 2087 | "bridge", 2088 | "tunnel" 2089 | ] 2090 | ], 2091 | "type": "line", 2092 | "source": "composite", 2093 | "id": "road_trunk_primary_casing", 2094 | "paint": { 2095 | "line-color": "hsl(17, 40%, 34%)", 2096 | "line-width": { 2097 | "base": 1.2, 2098 | "stops": [ 2099 | [ 2100 | 5, 2101 | 0.4 2102 | ], 2103 | [ 2104 | 6, 2105 | 0.6 2106 | ], 2107 | [ 2108 | 7, 2109 | 1.5 2110 | ], 2111 | [ 2112 | 20, 2113 | 22 2114 | ] 2115 | ] 2116 | }, 2117 | "line-opacity": 1 2118 | }, 2119 | "source-layer": "road" 2120 | }, 2121 | { 2122 | "interactive": true, 2123 | "minzoom": 5, 2124 | "layout": { 2125 | "line-cap": "round", 2126 | "line-join": "round", 2127 | "visibility": "visible" 2128 | }, 2129 | "metadata": { 2130 | "mapbox:group": "1444849345966.4436" 2131 | }, 2132 | "filter": [ 2133 | "all", 2134 | [ 2135 | "==", 2136 | "class", 2137 | "motorway" 2138 | ], 2139 | [ 2140 | "!in", 2141 | "structure", 2142 | "bridge", 2143 | "tunnel" 2144 | ] 2145 | ], 2146 | "type": "line", 2147 | "source": "composite", 2148 | "id": "road_motorway_casing", 2149 | "paint": { 2150 | "line-color": "hsl(17, 40%, 34%)", 2151 | "line-width": { 2152 | "base": 1.2, 2153 | "stops": [ 2154 | [ 2155 | 5, 2156 | 0.4 2157 | ], 2158 | [ 2159 | 6, 2160 | 0.6 2161 | ], 2162 | [ 2163 | 7, 2164 | 1.5 2165 | ], 2166 | [ 2167 | 20, 2168 | 22 2169 | ] 2170 | ] 2171 | } 2172 | }, 2173 | "source-layer": "road" 2174 | }, 2175 | { 2176 | "interactive": true, 2177 | "metadata": { 2178 | "mapbox:group": "1444849345966.4436" 2179 | }, 2180 | "id": "road_motorway_link", 2181 | "paint": { 2182 | "line-color": "hsla(7, 71%, 39%, 0.9)", 2183 | "line-width": { 2184 | "base": 1.2, 2185 | "stops": [ 2186 | [ 2187 | 12.5, 2188 | 0 2189 | ], 2190 | [ 2191 | 13, 2192 | 1.5 2193 | ], 2194 | [ 2195 | 14, 2196 | 2.5 2197 | ], 2198 | [ 2199 | 20, 2200 | 11.5 2201 | ] 2202 | ] 2203 | } 2204 | }, 2205 | "ref": "road_motorway_link_casing" 2206 | }, 2207 | { 2208 | "interactive": true, 2209 | "metadata": { 2210 | "mapbox:group": "1444849345966.4436" 2211 | }, 2212 | "id": "road_service_track", 2213 | "paint": { 2214 | "line-color": "hsl(38, 82%, 72%)", 2215 | "line-width": { 2216 | "base": 1.2, 2217 | "stops": [ 2218 | [ 2219 | 15.5, 2220 | 0 2221 | ], 2222 | [ 2223 | 16, 2224 | 2 2225 | ], 2226 | [ 2227 | 20, 2228 | 7.5 2229 | ] 2230 | ] 2231 | } 2232 | }, 2233 | "ref": "road_service_track_casing" 2234 | }, 2235 | { 2236 | "interactive": true, 2237 | "metadata": { 2238 | "mapbox:group": "1444849345966.4436" 2239 | }, 2240 | "id": "road_link", 2241 | "paint": { 2242 | "line-color": "hsl(1, 36%, 46%)", 2243 | "line-width": { 2244 | "base": 1.2, 2245 | "stops": [ 2246 | [ 2247 | 12.5, 2248 | 0 2249 | ], 2250 | [ 2251 | 13, 2252 | 1.5 2253 | ], 2254 | [ 2255 | 14, 2256 | 2.5 2257 | ], 2258 | [ 2259 | 20, 2260 | 11.5 2261 | ] 2262 | ] 2263 | } 2264 | }, 2265 | "ref": "road_link_casing" 2266 | }, 2267 | { 2268 | "interactive": true, 2269 | "metadata": { 2270 | "mapbox:group": "1444849345966.4436" 2271 | }, 2272 | "id": "road_street", 2273 | "paint": { 2274 | "line-color": "hsl(38, 82%, 72%)", 2275 | "line-width": { 2276 | "base": 1.2, 2277 | "stops": [ 2278 | [ 2279 | 13.5, 2280 | 0 2281 | ], 2282 | [ 2283 | 14, 2284 | 2.5 2285 | ], 2286 | [ 2287 | 20, 2288 | 11.5 2289 | ] 2290 | ] 2291 | }, 2292 | "line-opacity": 1 2293 | }, 2294 | "ref": "road_street_casing" 2295 | }, 2296 | { 2297 | "interactive": true, 2298 | "metadata": { 2299 | "mapbox:group": "1444849345966.4436" 2300 | }, 2301 | "id": "road_secondary_tertiary", 2302 | "paint": { 2303 | "line-color": "hsl(1, 36%, 46%)", 2304 | "line-width": { 2305 | "base": 1.2, 2306 | "stops": [ 2307 | [ 2308 | 6.5, 2309 | 0 2310 | ], 2311 | [ 2312 | 8, 2313 | 0.5 2314 | ], 2315 | [ 2316 | 20, 2317 | 13 2318 | ] 2319 | ] 2320 | } 2321 | }, 2322 | "ref": "road_secondary_tertiary_casing" 2323 | }, 2324 | { 2325 | "interactive": true, 2326 | "metadata": { 2327 | "mapbox:group": "1444849345966.4436" 2328 | }, 2329 | "id": "road_trunk_primary", 2330 | "paint": { 2331 | "line-color": "hsl(1, 36%, 46%)", 2332 | "line-width": { 2333 | "base": 1.2, 2334 | "stops": [ 2335 | [ 2336 | 6.5, 2337 | 0 2338 | ], 2339 | [ 2340 | 7, 2341 | 0.5 2342 | ], 2343 | [ 2344 | 20, 2345 | 18 2346 | ] 2347 | ] 2348 | } 2349 | }, 2350 | "ref": "road_trunk_primary_casing" 2351 | }, 2352 | { 2353 | "interactive": true, 2354 | "metadata": { 2355 | "mapbox:group": "1444849345966.4436" 2356 | }, 2357 | "id": "road_motorway", 2358 | "paint": { 2359 | "line-color": "hsla(7, 71%, 39%, 0.9)", 2360 | "line-width": { 2361 | "base": 1.2, 2362 | "stops": [ 2363 | [ 2364 | 6.5, 2365 | 0 2366 | ], 2367 | [ 2368 | 7, 2369 | 0.5 2370 | ], 2371 | [ 2372 | 20, 2373 | 18 2374 | ] 2375 | ] 2376 | } 2377 | }, 2378 | "ref": "road_motorway_casing" 2379 | }, 2380 | { 2381 | "id": "road_major_rail", 2382 | "type": "line", 2383 | "source": "composite", 2384 | "source-layer": "road", 2385 | "filter": [ 2386 | "all", 2387 | [ 2388 | "==", 2389 | "class", 2390 | "major_rail" 2391 | ], 2392 | [ 2393 | "!in", 2394 | "structure", 2395 | "bridge", 2396 | "tunnel" 2397 | ] 2398 | ], 2399 | "paint": { 2400 | "line-color": "hsl(0, 83%, 37%)", 2401 | "line-width": { 2402 | "base": 1.4, 2403 | "stops": [ 2404 | [ 2405 | 14, 2406 | 0.7 2407 | ], 2408 | [ 2409 | 15, 2410 | 1.2 2411 | ], 2412 | [ 2413 | 20, 2414 | 6 2415 | ] 2416 | ] 2417 | } 2418 | }, 2419 | "metadata": { 2420 | "mapbox:group": "1444849345966.4436" 2421 | }, 2422 | "interactive": true 2423 | }, 2424 | { 2425 | "id": "road_major_rail_hatching", 2426 | "paint": { 2427 | "line-color": "hsl(0, 83%, 37%)", 2428 | "line-dasharray": [ 2429 | 0.2, 2430 | 8 2431 | ], 2432 | "line-width": { 2433 | "base": 1.4, 2434 | "stops": [ 2435 | [ 2436 | 14.5, 2437 | 2 2438 | ], 2439 | [ 2440 | 15, 2441 | 4 2442 | ], 2443 | [ 2444 | 20, 2445 | 20 2446 | ] 2447 | ] 2448 | } 2449 | }, 2450 | "metadata": { 2451 | "mapbox:group": "1444849345966.4436" 2452 | }, 2453 | "interactive": true, 2454 | "ref": "road_major_rail" 2455 | }, 2456 | { 2457 | "id": "road_minor_rail_hatching", 2458 | "paint": { 2459 | "line-color": "hsl(0, 83%, 37%)", 2460 | "line-dasharray": [ 2461 | 0.2, 2462 | 4 2463 | ], 2464 | "line-width": { 2465 | "base": 1.4, 2466 | "stops": [ 2467 | [ 2468 | 14.5, 2469 | 0 2470 | ], 2471 | [ 2472 | 15, 2473 | 3 2474 | ], 2475 | [ 2476 | 20, 2477 | 8 2478 | ] 2479 | ] 2480 | } 2481 | }, 2482 | "metadata": { 2483 | "mapbox:group": "1444849345966.4436" 2484 | }, 2485 | "interactive": true, 2486 | "type": "line", 2487 | "filter": [ 2488 | "all", 2489 | [ 2490 | "==", 2491 | "class", 2492 | "minor_rail" 2493 | ], 2494 | [ 2495 | "!in", 2496 | "structure", 2497 | "bridge", 2498 | "tunnel" 2499 | ] 2500 | ], 2501 | "source": "composite", 2502 | "source-layer": "road" 2503 | }, 2504 | { 2505 | "id": "road_minor_rail", 2506 | "paint": { 2507 | "line-color": "hsl(0, 83%, 37%)", 2508 | "line-width": { 2509 | "base": 1.4, 2510 | "stops": [ 2511 | [ 2512 | 14, 2513 | 0.4 2514 | ], 2515 | [ 2516 | 15, 2517 | 0.75 2518 | ], 2519 | [ 2520 | 20, 2521 | 2 2522 | ] 2523 | ] 2524 | } 2525 | }, 2526 | "metadata": { 2527 | "mapbox:group": "1444849345966.4436" 2528 | }, 2529 | "interactive": true, 2530 | "ref": "road_minor_rail_hatching" 2531 | }, 2532 | { 2533 | "interactive": true, 2534 | "layout": { 2535 | "line-join": "round" 2536 | }, 2537 | "metadata": { 2538 | "mapbox:group": "1444849334699.1902" 2539 | }, 2540 | "filter": [ 2541 | "all", 2542 | [ 2543 | "==", 2544 | "structure", 2545 | "bridge" 2546 | ], 2547 | [ 2548 | "==", 2549 | "class", 2550 | "motorway_link" 2551 | ] 2552 | ], 2553 | "type": "line", 2554 | "source": "composite", 2555 | "id": "bridge_motorway_link_casing", 2556 | "paint": { 2557 | "line-color": "hsl(17, 40%, 34%)", 2558 | "line-width": { 2559 | "base": 1.2, 2560 | "stops": [ 2561 | [ 2562 | 12, 2563 | 1 2564 | ], 2565 | [ 2566 | 13, 2567 | 3 2568 | ], 2569 | [ 2570 | 14, 2571 | 4 2572 | ], 2573 | [ 2574 | 20, 2575 | 15 2576 | ] 2577 | ] 2578 | }, 2579 | "line-opacity": 1 2580 | }, 2581 | "source-layer": "road" 2582 | }, 2583 | { 2584 | "interactive": true, 2585 | "layout": { 2586 | "line-join": "round" 2587 | }, 2588 | "metadata": { 2589 | "mapbox:group": "1444849334699.1902" 2590 | }, 2591 | "filter": [ 2592 | "all", 2593 | [ 2594 | "==", 2595 | "structure", 2596 | "bridge" 2597 | ], 2598 | [ 2599 | "in", 2600 | "class", 2601 | "service", 2602 | "track" 2603 | ] 2604 | ], 2605 | "type": "line", 2606 | "source": "composite", 2607 | "id": "bridge_service_track_casing", 2608 | "paint": { 2609 | "line-color": "hsl(45, 48%, 52%)", 2610 | "line-width": { 2611 | "base": 1.2, 2612 | "stops": [ 2613 | [ 2614 | 15, 2615 | 1 2616 | ], 2617 | [ 2618 | 16, 2619 | 4 2620 | ], 2621 | [ 2622 | 20, 2623 | 11 2624 | ] 2625 | ] 2626 | } 2627 | }, 2628 | "source-layer": "road" 2629 | }, 2630 | { 2631 | "interactive": true, 2632 | "layout": { 2633 | "line-join": "round" 2634 | }, 2635 | "metadata": { 2636 | "mapbox:group": "1444849334699.1902" 2637 | }, 2638 | "filter": [ 2639 | "all", 2640 | [ 2641 | "==", 2642 | "structure", 2643 | "bridge" 2644 | ], 2645 | [ 2646 | "==", 2647 | "class", 2648 | "link" 2649 | ] 2650 | ], 2651 | "type": "line", 2652 | "source": "composite", 2653 | "id": "bridge_link_casing", 2654 | "paint": { 2655 | "line-color": "hsl(17, 40%, 34%)", 2656 | "line-width": { 2657 | "base": 1.2, 2658 | "stops": [ 2659 | [ 2660 | 12, 2661 | 1 2662 | ], 2663 | [ 2664 | 13, 2665 | 3 2666 | ], 2667 | [ 2668 | 14, 2669 | 4 2670 | ], 2671 | [ 2672 | 20, 2673 | 15 2674 | ] 2675 | ] 2676 | }, 2677 | "line-opacity": 1 2678 | }, 2679 | "source-layer": "road" 2680 | }, 2681 | { 2682 | "interactive": true, 2683 | "layout": { 2684 | "line-join": "round" 2685 | }, 2686 | "metadata": { 2687 | "mapbox:group": "1444849334699.1902" 2688 | }, 2689 | "filter": [ 2690 | "all", 2691 | [ 2692 | "==", 2693 | "structure", 2694 | "bridge" 2695 | ], 2696 | [ 2697 | "in", 2698 | "class", 2699 | "street", 2700 | "street_limited" 2701 | ] 2702 | ], 2703 | "type": "line", 2704 | "source": "composite", 2705 | "id": "bridge_street_casing", 2706 | "paint": { 2707 | "line-color": "hsl(45, 48%, 52%)", 2708 | "line-width": { 2709 | "base": 1.2, 2710 | "stops": [ 2711 | [ 2712 | 12, 2713 | 0.5 2714 | ], 2715 | [ 2716 | 13, 2717 | 1 2718 | ], 2719 | [ 2720 | 14, 2721 | 4 2722 | ], 2723 | [ 2724 | 20, 2725 | 15 2726 | ] 2727 | ] 2728 | }, 2729 | "line-opacity": { 2730 | "stops": [ 2731 | [ 2732 | 12, 2733 | 0 2734 | ], 2735 | [ 2736 | 12.5, 2737 | 1 2738 | ] 2739 | ] 2740 | } 2741 | }, 2742 | "source-layer": "road" 2743 | }, 2744 | { 2745 | "interactive": true, 2746 | "layout": { 2747 | "line-join": "round" 2748 | }, 2749 | "metadata": { 2750 | "mapbox:group": "1444849334699.1902" 2751 | }, 2752 | "filter": [ 2753 | "all", 2754 | [ 2755 | "==", 2756 | "structure", 2757 | "bridge" 2758 | ], 2759 | [ 2760 | "in", 2761 | "class", 2762 | "secondary", 2763 | "tertiary" 2764 | ] 2765 | ], 2766 | "type": "line", 2767 | "source": "composite", 2768 | "id": "bridge_secondary_tertiary_casing", 2769 | "paint": { 2770 | "line-color": "hsl(17, 40%, 34%)", 2771 | "line-width": { 2772 | "base": 1.2, 2773 | "stops": [ 2774 | [ 2775 | 8, 2776 | 1.5 2777 | ], 2778 | [ 2779 | 20, 2780 | 17 2781 | ] 2782 | ] 2783 | }, 2784 | "line-opacity": 1 2785 | }, 2786 | "source-layer": "road" 2787 | }, 2788 | { 2789 | "interactive": true, 2790 | "layout": { 2791 | "line-join": "round" 2792 | }, 2793 | "metadata": { 2794 | "mapbox:group": "1444849334699.1902" 2795 | }, 2796 | "filter": [ 2797 | "all", 2798 | [ 2799 | "==", 2800 | "structure", 2801 | "bridge" 2802 | ], 2803 | [ 2804 | "in", 2805 | "class", 2806 | "trunk", 2807 | "primary" 2808 | ] 2809 | ], 2810 | "type": "line", 2811 | "source": "composite", 2812 | "id": "bridge_trunk_primary_casing", 2813 | "paint": { 2814 | "line-color": "hsl(17, 40%, 34%)", 2815 | "line-width": { 2816 | "base": 1.2, 2817 | "stops": [ 2818 | [ 2819 | 5, 2820 | 0.4 2821 | ], 2822 | [ 2823 | 6, 2824 | 0.6 2825 | ], 2826 | [ 2827 | 7, 2828 | 1.5 2829 | ], 2830 | [ 2831 | 20, 2832 | 22 2833 | ] 2834 | ] 2835 | } 2836 | }, 2837 | "source-layer": "road" 2838 | }, 2839 | { 2840 | "interactive": true, 2841 | "layout": { 2842 | "line-join": "round" 2843 | }, 2844 | "metadata": { 2845 | "mapbox:group": "1444849334699.1902" 2846 | }, 2847 | "filter": [ 2848 | "all", 2849 | [ 2850 | "==", 2851 | "structure", 2852 | "bridge" 2853 | ], 2854 | [ 2855 | "==", 2856 | "class", 2857 | "motorway" 2858 | ] 2859 | ], 2860 | "type": "line", 2861 | "source": "composite", 2862 | "id": "bridge_motorway_casing", 2863 | "paint": { 2864 | "line-color": "hsl(17, 40%, 34%)", 2865 | "line-width": { 2866 | "base": 1.2, 2867 | "stops": [ 2868 | [ 2869 | 5, 2870 | 0.4 2871 | ], 2872 | [ 2873 | 6, 2874 | 0.6 2875 | ], 2876 | [ 2877 | 7, 2878 | 1.5 2879 | ], 2880 | [ 2881 | 20, 2882 | 22 2883 | ] 2884 | ] 2885 | } 2886 | }, 2887 | "source-layer": "road" 2888 | }, 2889 | { 2890 | "interactive": true, 2891 | "metadata": { 2892 | "mapbox:group": "1444849334699.1902" 2893 | }, 2894 | "id": "bridge_motorway_link", 2895 | "paint": { 2896 | "line-color": "hsla(7, 71%, 39%, 0.9)", 2897 | "line-width": { 2898 | "base": 1.2, 2899 | "stops": [ 2900 | [ 2901 | 12.5, 2902 | 0 2903 | ], 2904 | [ 2905 | 13, 2906 | 1.5 2907 | ], 2908 | [ 2909 | 14, 2910 | 2.5 2911 | ], 2912 | [ 2913 | 20, 2914 | 11.5 2915 | ] 2916 | ] 2917 | } 2918 | }, 2919 | "ref": "bridge_motorway_link_casing" 2920 | }, 2921 | { 2922 | "interactive": true, 2923 | "metadata": { 2924 | "mapbox:group": "1444849334699.1902" 2925 | }, 2926 | "id": "bridge_service_track", 2927 | "paint": { 2928 | "line-color": "hsl(38, 82%, 72%)", 2929 | "line-width": { 2930 | "base": 1.2, 2931 | "stops": [ 2932 | [ 2933 | 15.5, 2934 | 0 2935 | ], 2936 | [ 2937 | 16, 2938 | 2 2939 | ], 2940 | [ 2941 | 20, 2942 | 7.5 2943 | ] 2944 | ] 2945 | } 2946 | }, 2947 | "ref": "bridge_service_track_casing" 2948 | }, 2949 | { 2950 | "interactive": true, 2951 | "metadata": { 2952 | "mapbox:group": "1444849334699.1902" 2953 | }, 2954 | "id": "bridge_link", 2955 | "paint": { 2956 | "line-color": "hsl(1, 36%, 46%)", 2957 | "line-width": { 2958 | "base": 1.2, 2959 | "stops": [ 2960 | [ 2961 | 12.5, 2962 | 0 2963 | ], 2964 | [ 2965 | 13, 2966 | 1.5 2967 | ], 2968 | [ 2969 | 14, 2970 | 2.5 2971 | ], 2972 | [ 2973 | 20, 2974 | 11.5 2975 | ] 2976 | ] 2977 | } 2978 | }, 2979 | "ref": "bridge_link_casing" 2980 | }, 2981 | { 2982 | "interactive": true, 2983 | "metadata": { 2984 | "mapbox:group": "1444849334699.1902" 2985 | }, 2986 | "id": "bridge_street", 2987 | "paint": { 2988 | "line-color": "hsl(38, 82%, 72%)", 2989 | "line-width": { 2990 | "base": 1.2, 2991 | "stops": [ 2992 | [ 2993 | 13.5, 2994 | 0 2995 | ], 2996 | [ 2997 | 14, 2998 | 2.5 2999 | ], 3000 | [ 3001 | 20, 3002 | 11.5 3003 | ] 3004 | ] 3005 | }, 3006 | "line-opacity": 1 3007 | }, 3008 | "ref": "bridge_street_casing" 3009 | }, 3010 | { 3011 | "interactive": true, 3012 | "metadata": { 3013 | "mapbox:group": "1444849334699.1902" 3014 | }, 3015 | "id": "bridge_secondary_tertiary", 3016 | "paint": { 3017 | "line-color": "hsl(1, 36%, 46%)", 3018 | "line-width": { 3019 | "base": 1.2, 3020 | "stops": [ 3021 | [ 3022 | 6.5, 3023 | 0 3024 | ], 3025 | [ 3026 | 7, 3027 | 0.5 3028 | ], 3029 | [ 3030 | 20, 3031 | 10 3032 | ] 3033 | ] 3034 | } 3035 | }, 3036 | "ref": "bridge_secondary_tertiary_casing" 3037 | }, 3038 | { 3039 | "interactive": true, 3040 | "metadata": { 3041 | "mapbox:group": "1444849334699.1902" 3042 | }, 3043 | "id": "bridge_trunk_primary", 3044 | "paint": { 3045 | "line-color": "hsl(1, 36%, 46%)", 3046 | "line-width": { 3047 | "base": 1.2, 3048 | "stops": [ 3049 | [ 3050 | 6.5, 3051 | 0 3052 | ], 3053 | [ 3054 | 7, 3055 | 0.5 3056 | ], 3057 | [ 3058 | 20, 3059 | 18 3060 | ] 3061 | ] 3062 | } 3063 | }, 3064 | "ref": "bridge_trunk_primary_casing" 3065 | }, 3066 | { 3067 | "interactive": true, 3068 | "metadata": { 3069 | "mapbox:group": "1444849334699.1902" 3070 | }, 3071 | "id": "bridge_motorway", 3072 | "paint": { 3073 | "line-color": "hsla(7, 71%, 39%, 0.9)", 3074 | "line-width": { 3075 | "base": 1.2, 3076 | "stops": [ 3077 | [ 3078 | 6.5, 3079 | 0 3080 | ], 3081 | [ 3082 | 7, 3083 | 0.5 3084 | ], 3085 | [ 3086 | 20, 3087 | 18 3088 | ] 3089 | ] 3090 | } 3091 | }, 3092 | "ref": "bridge_motorway_casing" 3093 | }, 3094 | { 3095 | "id": "bridge_major_rail", 3096 | "type": "line", 3097 | "source": "composite", 3098 | "source-layer": "road", 3099 | "filter": [ 3100 | "all", 3101 | [ 3102 | "==", 3103 | "structure", 3104 | "bridge" 3105 | ], 3106 | [ 3107 | "==", 3108 | "class", 3109 | "major_rail" 3110 | ] 3111 | ], 3112 | "paint": { 3113 | "line-color": "hsl(0, 83%, 37%)", 3114 | "line-width": { 3115 | "base": 1.4, 3116 | "stops": [ 3117 | [ 3118 | 14, 3119 | 0.4 3120 | ], 3121 | [ 3122 | 15, 3123 | 0.75 3124 | ], 3125 | [ 3126 | 20, 3127 | 2 3128 | ] 3129 | ] 3130 | } 3131 | }, 3132 | "metadata": { 3133 | "mapbox:group": "1444849334699.1902" 3134 | }, 3135 | "interactive": true 3136 | }, 3137 | { 3138 | "id": "bridge_major_rail_hatching", 3139 | "paint": { 3140 | "line-color": "hsl(0, 83%, 37%)", 3141 | "line-dasharray": [ 3142 | 0.2, 3143 | 8 3144 | ], 3145 | "line-width": { 3146 | "base": 1.4, 3147 | "stops": [ 3148 | [ 3149 | 14.5, 3150 | 0 3151 | ], 3152 | [ 3153 | 15, 3154 | 3 3155 | ], 3156 | [ 3157 | 20, 3158 | 8 3159 | ] 3160 | ] 3161 | } 3162 | }, 3163 | "metadata": { 3164 | "mapbox:group": "1444849334699.1902" 3165 | }, 3166 | "interactive": true, 3167 | "ref": "bridge_major_rail" 3168 | }, 3169 | { 3170 | "interactive": true, 3171 | "layout": { 3172 | "line-join": "round" 3173 | }, 3174 | "metadata": { 3175 | "mapbox:group": "1444849307123.581" 3176 | }, 3177 | "filter": [ 3178 | "all", 3179 | [ 3180 | ">=", 3181 | "admin_level", 3182 | 3 3183 | ], 3184 | [ 3185 | "==", 3186 | "maritime", 3187 | 0 3188 | ] 3189 | ], 3190 | "type": "line", 3191 | "source": "composite", 3192 | "id": "admin_level_3", 3193 | "paint": { 3194 | "line-color": "#9e9cab", 3195 | "line-dasharray": [ 3196 | 3, 3197 | 1, 3198 | 1, 3199 | 1 3200 | ], 3201 | "line-width": { 3202 | "base": 1, 3203 | "stops": [ 3204 | [ 3205 | 4, 3206 | 0.4 3207 | ], 3208 | [ 3209 | 5, 3210 | 1 3211 | ], 3212 | [ 3213 | 12, 3214 | 3 3215 | ] 3216 | ] 3217 | } 3218 | }, 3219 | "source-layer": "admin" 3220 | }, 3221 | { 3222 | "interactive": true, 3223 | "layout": { 3224 | "line-join": "round", 3225 | "line-cap": "round" 3226 | }, 3227 | "metadata": { 3228 | "mapbox:group": "1444849307123.581" 3229 | }, 3230 | "filter": [ 3231 | "all", 3232 | [ 3233 | "==", 3234 | "admin_level", 3235 | 2 3236 | ], 3237 | [ 3238 | "==", 3239 | "disputed", 3240 | 0 3241 | ], 3242 | [ 3243 | "==", 3244 | "maritime", 3245 | 0 3246 | ] 3247 | ], 3248 | "type": "line", 3249 | "source": "composite", 3250 | "id": "admin_level_2", 3251 | "paint": { 3252 | "line-color": "#9e9cab", 3253 | "line-width": { 3254 | "base": 1, 3255 | "stops": [ 3256 | [ 3257 | 4, 3258 | 1.4 3259 | ], 3260 | [ 3261 | 5, 3262 | 2 3263 | ], 3264 | [ 3265 | 12, 3266 | 8 3267 | ] 3268 | ] 3269 | } 3270 | }, 3271 | "source-layer": "admin" 3272 | }, 3273 | { 3274 | "interactive": true, 3275 | "layout": { 3276 | "line-cap": "round" 3277 | }, 3278 | "metadata": { 3279 | "mapbox:group": "1444849307123.581" 3280 | }, 3281 | "filter": [ 3282 | "all", 3283 | [ 3284 | "==", 3285 | "admin_level", 3286 | 2 3287 | ], 3288 | [ 3289 | "==", 3290 | "disputed", 3291 | 1 3292 | ], 3293 | [ 3294 | "==", 3295 | "maritime", 3296 | 0 3297 | ] 3298 | ], 3299 | "type": "line", 3300 | "source": "composite", 3301 | "id": "admin_level_2_disputed", 3302 | "paint": { 3303 | "line-color": "#9e9cab", 3304 | "line-dasharray": [ 3305 | 2, 3306 | 2 3307 | ], 3308 | "line-width": { 3309 | "base": 1, 3310 | "stops": [ 3311 | [ 3312 | 4, 3313 | 1.4 3314 | ], 3315 | [ 3316 | 5, 3317 | 2 3318 | ], 3319 | [ 3320 | 12, 3321 | 8 3322 | ] 3323 | ] 3324 | } 3325 | }, 3326 | "source-layer": "admin" 3327 | }, 3328 | { 3329 | "interactive": true, 3330 | "layout": { 3331 | "line-join": "round" 3332 | }, 3333 | "metadata": { 3334 | "mapbox:group": "1444849307123.581" 3335 | }, 3336 | "filter": [ 3337 | "all", 3338 | [ 3339 | ">=", 3340 | "admin_level", 3341 | 3 3342 | ], 3343 | [ 3344 | "==", 3345 | "maritime", 3346 | 1 3347 | ] 3348 | ], 3349 | "type": "line", 3350 | "source": "composite", 3351 | "id": "admin_level_3_maritime", 3352 | "paint": { 3353 | "line-color": "#a0c8f0", 3354 | "line-opacity": 0.5, 3355 | "line-dasharray": [ 3356 | 3, 3357 | 1, 3358 | 1, 3359 | 1 3360 | ], 3361 | "line-width": { 3362 | "base": 1, 3363 | "stops": [ 3364 | [ 3365 | 4, 3366 | 0.4 3367 | ], 3368 | [ 3369 | 5, 3370 | 1 3371 | ], 3372 | [ 3373 | 12, 3374 | 3 3375 | ] 3376 | ] 3377 | } 3378 | }, 3379 | "source-layer": "admin" 3380 | }, 3381 | { 3382 | "interactive": true, 3383 | "layout": { 3384 | "line-cap": "round" 3385 | }, 3386 | "metadata": { 3387 | "mapbox:group": "1444849307123.581" 3388 | }, 3389 | "filter": [ 3390 | "all", 3391 | [ 3392 | "==", 3393 | "admin_level", 3394 | 2 3395 | ], 3396 | [ 3397 | "==", 3398 | "maritime", 3399 | 1 3400 | ] 3401 | ], 3402 | "type": "line", 3403 | "source": "composite", 3404 | "id": "admin_level_2_maritime", 3405 | "paint": { 3406 | "line-color": "#a0c8f0", 3407 | "line-opacity": 0.5, 3408 | "line-width": { 3409 | "base": 1, 3410 | "stops": [ 3411 | [ 3412 | 4, 3413 | 1.4 3414 | ], 3415 | [ 3416 | 5, 3417 | 2 3418 | ], 3419 | [ 3420 | 12, 3421 | 8 3422 | ] 3423 | ] 3424 | } 3425 | }, 3426 | "source-layer": "admin" 3427 | }, 3428 | { 3429 | "interactive": true, 3430 | "layout": { 3431 | "text-font": [ 3432 | "Open Sans Italic", 3433 | "Arial Unicode MS Regular" 3434 | ], 3435 | "text-field": "{name}", 3436 | "text-max-width": 1.4, 3437 | "text-size": 12 3438 | }, 3439 | "metadata": { 3440 | "mapbox:group": "1444849320558.5054" 3441 | }, 3442 | "filter": [ 3443 | "==", 3444 | "$type", 3445 | "Point" 3446 | ], 3447 | "type": "symbol", 3448 | "source": "composite", 3449 | "id": "water_label", 3450 | "paint": { 3451 | "text-color": "#74aee9", 3452 | "text-halo-width": 1.5, 3453 | "text-halo-color": "rgba(255,255,255,0.7)" 3454 | }, 3455 | "source-layer": "water_label" 3456 | }, 3457 | { 3458 | "interactive": true, 3459 | "minzoom": 16, 3460 | "layout": { 3461 | "icon-image": "{maki}-11", 3462 | "text-font": [ 3463 | "Open Sans Semibold", 3464 | "Arial Unicode MS Bold" 3465 | ], 3466 | "text-field": "{name}", 3467 | "text-max-width": 9, 3468 | "text-padding": 2, 3469 | "text-offset": [ 3470 | 0, 3471 | 0.6 3472 | ], 3473 | "text-anchor": "top", 3474 | "text-size": 12 3475 | }, 3476 | "metadata": { 3477 | "mapbox:group": "1444849297111.495" 3478 | }, 3479 | "filter": [ 3480 | "all", 3481 | [ 3482 | "==", 3483 | "$type", 3484 | "Point" 3485 | ], 3486 | [ 3487 | "all", 3488 | [ 3489 | "==", 3490 | "scalerank", 3491 | 4 3492 | ], 3493 | [ 3494 | "!=", 3495 | "maki", 3496 | "marker" 3497 | ] 3498 | ] 3499 | ], 3500 | "type": "symbol", 3501 | "source": "composite", 3502 | "id": "poi_label_4", 3503 | "paint": { 3504 | "text-color": "hsl(0, 36%, 22%)", 3505 | "text-halo-color": "hsla(43, 59%, 78%, 0.8)", 3506 | "text-halo-blur": 0.5, 3507 | "text-halo-width": 1 3508 | }, 3509 | "source-layer": "poi_label" 3510 | }, 3511 | { 3512 | "interactive": true, 3513 | "minzoom": 15, 3514 | "layout": { 3515 | "icon-image": "{maki}-11", 3516 | "text-font": [ 3517 | "Open Sans Semibold", 3518 | "Arial Unicode MS Bold" 3519 | ], 3520 | "text-field": "{name}", 3521 | "text-max-width": 9, 3522 | "text-padding": 2, 3523 | "text-offset": [ 3524 | 0, 3525 | 0.6 3526 | ], 3527 | "text-anchor": "top", 3528 | "text-size": 12 3529 | }, 3530 | "metadata": { 3531 | "mapbox:group": "1444849297111.495" 3532 | }, 3533 | "filter": [ 3534 | "all", 3535 | [ 3536 | "==", 3537 | "$type", 3538 | "Point" 3539 | ], 3540 | [ 3541 | "==", 3542 | "scalerank", 3543 | 3 3544 | ] 3545 | ], 3546 | "type": "symbol", 3547 | "source": "composite", 3548 | "id": "poi_label_3", 3549 | "paint": { 3550 | "text-color": "hsl(0, 36%, 22%)", 3551 | "text-halo-color": "hsla(43, 59%, 78%, 0.8)", 3552 | "text-halo-blur": 0.5, 3553 | "text-halo-width": 1 3554 | }, 3555 | "source-layer": "poi_label" 3556 | }, 3557 | { 3558 | "interactive": true, 3559 | "minzoom": 14, 3560 | "layout": { 3561 | "icon-image": "{maki}-11", 3562 | "text-font": [ 3563 | "Open Sans Semibold", 3564 | "Arial Unicode MS Bold" 3565 | ], 3566 | "text-field": "{name}", 3567 | "text-max-width": 9, 3568 | "text-padding": 2, 3569 | "text-offset": [ 3570 | 0, 3571 | 0.6 3572 | ], 3573 | "text-anchor": "top", 3574 | "text-size": 12 3575 | }, 3576 | "metadata": { 3577 | "mapbox:group": "1444849297111.495" 3578 | }, 3579 | "filter": [ 3580 | "all", 3581 | [ 3582 | "==", 3583 | "$type", 3584 | "Point" 3585 | ], 3586 | [ 3587 | "==", 3588 | "scalerank", 3589 | 2 3590 | ] 3591 | ], 3592 | "type": "symbol", 3593 | "source": "composite", 3594 | "id": "poi_label_2", 3595 | "paint": { 3596 | "text-color": "hsl(0, 36%, 22%)", 3597 | "text-halo-color": "hsla(43, 59%, 78%, 0.8)", 3598 | "text-halo-blur": 0.5, 3599 | "text-halo-width": 1 3600 | }, 3601 | "source-layer": "poi_label" 3602 | }, 3603 | { 3604 | "layout": { 3605 | "text-size": 12, 3606 | "icon-image": "{maki}-11", 3607 | "text-font": [ 3608 | "Open Sans Semibold", 3609 | "Arial Unicode MS Bold" 3610 | ], 3611 | "text-padding": 2, 3612 | "visibility": "visible", 3613 | "text-offset": [ 3614 | 0, 3615 | 0.6 3616 | ], 3617 | "text-anchor": "top", 3618 | "text-field": "{name}", 3619 | "text-max-width": 9 3620 | }, 3621 | "metadata": { 3622 | "mapbox:group": "1444849297111.495" 3623 | }, 3624 | "type": "symbol", 3625 | "source": "composite", 3626 | "id": "rail_station_label", 3627 | "paint": { 3628 | "text-color": "hsl(0, 80%, 42%)", 3629 | "text-halo-color": "hsla(43, 71%, 79%, 0.8)", 3630 | "text-halo-width": 2, 3631 | "text-halo-blur": 0.5 3632 | }, 3633 | "source-layer": "rail_station_label", 3634 | "interactive": true 3635 | }, 3636 | { 3637 | "interactive": true, 3638 | "minzoom": 13, 3639 | "layout": { 3640 | "icon-image": "{maki}-11", 3641 | "text-font": [ 3642 | "Open Sans Semibold", 3643 | "Arial Unicode MS Bold" 3644 | ], 3645 | "text-field": "{name}", 3646 | "text-max-width": 9, 3647 | "text-padding": 2, 3648 | "text-offset": [ 3649 | 0, 3650 | 0.6 3651 | ], 3652 | "text-anchor": "top", 3653 | "text-size": 12 3654 | }, 3655 | "metadata": { 3656 | "mapbox:group": "1444849297111.495" 3657 | }, 3658 | "filter": [ 3659 | "all", 3660 | [ 3661 | "==", 3662 | "$type", 3663 | "Point" 3664 | ], 3665 | [ 3666 | "==", 3667 | "scalerank", 3668 | 1 3669 | ] 3670 | ], 3671 | "type": "symbol", 3672 | "source": "composite", 3673 | "id": "poi_label_1", 3674 | "paint": { 3675 | "text-color": "hsl(0, 36%, 22%)", 3676 | "text-halo-color": "hsla(43, 59%, 78%, 0.8)", 3677 | "text-halo-blur": 0.5, 3678 | "text-halo-width": 1 3679 | }, 3680 | "source-layer": "poi_label" 3681 | }, 3682 | { 3683 | "interactive": true, 3684 | "minzoom": 11, 3685 | "layout": { 3686 | "icon-image": "{maki}-11", 3687 | "text-font": [ 3688 | "Open Sans Semibold", 3689 | "Arial Unicode MS Bold" 3690 | ], 3691 | "text-field": "{name}", 3692 | "text-max-width": 9, 3693 | "text-padding": 2, 3694 | "text-offset": [ 3695 | 0, 3696 | 0.6 3697 | ], 3698 | "text-anchor": "top", 3699 | "text-size": 12 3700 | }, 3701 | "metadata": { 3702 | "mapbox:group": "1444849297111.495" 3703 | }, 3704 | "filter": [ 3705 | "all", 3706 | [ 3707 | "==", 3708 | "$type", 3709 | "Point" 3710 | ], 3711 | [ 3712 | "in", 3713 | "scalerank", 3714 | 1, 3715 | 2, 3716 | 3 3717 | ] 3718 | ], 3719 | "type": "symbol", 3720 | "source": "composite", 3721 | "id": "airport_label", 3722 | "paint": { 3723 | "text-color": "hsl(0, 80%, 42%)", 3724 | "text-halo-color": "hsla(43, 71%, 79%, 0.8)", 3725 | "text-halo-width": 2, 3726 | "text-halo-blur": 0.5 3727 | }, 3728 | "source-layer": "airport_label" 3729 | }, 3730 | { 3731 | "interactive": true, 3732 | "layout": { 3733 | "text-field": "{name}", 3734 | "text-font": [ 3735 | "Open Sans Regular", 3736 | "Arial Unicode MS Regular" 3737 | ], 3738 | "text-size": { 3739 | "base": 1, 3740 | "stops": [ 3741 | [ 3742 | 13, 3743 | 12 3744 | ], 3745 | [ 3746 | 14, 3747 | 13 3748 | ] 3749 | ] 3750 | }, 3751 | "symbol-placement": "line", 3752 | "text-transform": "none" 3753 | }, 3754 | "metadata": { 3755 | "mapbox:group": "1456163609504.0715" 3756 | }, 3757 | "filter": [ 3758 | "!=", 3759 | "class", 3760 | "ferry" 3761 | ], 3762 | "type": "symbol", 3763 | "source": "composite", 3764 | "id": "road_label", 3765 | "paint": { 3766 | "text-color": "hsl(0, 52%, 26%)", 3767 | "text-halo-color": "hsla(43, 71%, 79%, 0.8)", 3768 | "text-halo-blur": 1, 3769 | "text-halo-width": 2 3770 | }, 3771 | "source-layer": "road_label" 3772 | }, 3773 | { 3774 | "interactive": true, 3775 | "minzoom": 8, 3776 | "layout": { 3777 | "text-field": "{ref}", 3778 | "text-font": [ 3779 | "Open Sans Semibold", 3780 | "Arial Unicode MS Bold" 3781 | ], 3782 | "text-size": 11, 3783 | "icon-rotation-alignment": "viewport", 3784 | "symbol-placement": { 3785 | "base": 1, 3786 | "stops": [ 3787 | [ 3788 | 10, 3789 | "point" 3790 | ], 3791 | [ 3792 | 11, 3793 | "line" 3794 | ] 3795 | ] 3796 | }, 3797 | "symbol-spacing": 500, 3798 | "text-rotation-alignment": "viewport", 3799 | "icon-image": "motorway_{reflen}" 3800 | }, 3801 | "metadata": { 3802 | "mapbox:group": "1456163609504.0715" 3803 | }, 3804 | "filter": [ 3805 | "<=", 3806 | "reflen", 3807 | 6 3808 | ], 3809 | "type": "symbol", 3810 | "source": "composite", 3811 | "id": "road_label_highway_shield", 3812 | "paint": { 3813 | "text-color": "hsl(0, 100%, 14%)" 3814 | }, 3815 | "source-layer": "road_label" 3816 | }, 3817 | { 3818 | "interactive": true, 3819 | "layout": { 3820 | "text-font": [ 3821 | "Open Sans Bold", 3822 | "Arial Unicode MS Bold" 3823 | ], 3824 | "text-transform": "uppercase", 3825 | "text-letter-spacing": 0.1, 3826 | "text-field": "{name}", 3827 | "text-max-width": 9, 3828 | "text-size": { 3829 | "base": 1.2, 3830 | "stops": [ 3831 | [ 3832 | 12, 3833 | 10 3834 | ], 3835 | [ 3836 | 15, 3837 | 14 3838 | ] 3839 | ] 3840 | } 3841 | }, 3842 | "metadata": { 3843 | "mapbox:group": "1444849272561.29" 3844 | }, 3845 | "filter": [ 3846 | "in", 3847 | "type", 3848 | "hamlet", 3849 | "suburb", 3850 | "neighbourhood", 3851 | "island", 3852 | "islet" 3853 | ], 3854 | "type": "symbol", 3855 | "source": "composite", 3856 | "id": "place_label_other", 3857 | "paint": { 3858 | "text-color": "hsl(0, 87%, 26%)", 3859 | "text-halo-color": "hsla(43, 71%, 79%, 0.8)", 3860 | "text-halo-width": 2 3861 | }, 3862 | "source-layer": "place_label" 3863 | }, 3864 | { 3865 | "interactive": true, 3866 | "layout": { 3867 | "text-font": [ 3868 | "Open Sans Regular", 3869 | "Arial Unicode MS Regular" 3870 | ], 3871 | "text-field": "{name}", 3872 | "text-max-width": 8, 3873 | "text-size": { 3874 | "base": 1.2, 3875 | "stops": [ 3876 | [ 3877 | 10, 3878 | 12 3879 | ], 3880 | [ 3881 | 15, 3882 | 22 3883 | ] 3884 | ] 3885 | } 3886 | }, 3887 | "metadata": { 3888 | "mapbox:group": "1444849272561.29" 3889 | }, 3890 | "filter": [ 3891 | "==", 3892 | "type", 3893 | "village" 3894 | ], 3895 | "type": "symbol", 3896 | "source": "composite", 3897 | "id": "place_label_village", 3898 | "paint": { 3899 | "text-color": "hsl(0, 82%, 19%)", 3900 | "text-halo-color": "hsla(43, 71%, 79%, 0.8)", 3901 | "text-halo-width": 2 3902 | }, 3903 | "source-layer": "place_label" 3904 | }, 3905 | { 3906 | "interactive": true, 3907 | "layout": { 3908 | "text-font": [ 3909 | "Open Sans Regular", 3910 | "Arial Unicode MS Regular" 3911 | ], 3912 | "text-field": "{name}", 3913 | "text-max-width": 8, 3914 | "text-size": { 3915 | "base": 1.2, 3916 | "stops": [ 3917 | [ 3918 | 10, 3919 | 14 3920 | ], 3921 | [ 3922 | 15, 3923 | 24 3924 | ] 3925 | ] 3926 | } 3927 | }, 3928 | "metadata": { 3929 | "mapbox:group": "1444849272561.29" 3930 | }, 3931 | "filter": [ 3932 | "==", 3933 | "type", 3934 | "town" 3935 | ], 3936 | "type": "symbol", 3937 | "source": "composite", 3938 | "id": "place_label_town", 3939 | "paint": { 3940 | "text-color": "hsl(0, 82%, 19%)", 3941 | "text-halo-color": "hsla(43, 71%, 79%, 0.8)", 3942 | "text-halo-width": 2 3943 | }, 3944 | "source-layer": "place_label" 3945 | }, 3946 | { 3947 | "interactive": true, 3948 | "layout": { 3949 | "text-font": [ 3950 | "Open Sans Semibold", 3951 | "Arial Unicode MS Bold" 3952 | ], 3953 | "text-field": "{name}", 3954 | "text-max-width": 8, 3955 | "text-size": { 3956 | "base": 1.2, 3957 | "stops": [ 3958 | [ 3959 | 7, 3960 | 14 3961 | ], 3962 | [ 3963 | 11, 3964 | 24 3965 | ] 3966 | ] 3967 | } 3968 | }, 3969 | "metadata": { 3970 | "mapbox:group": "1444849272561.29" 3971 | }, 3972 | "filter": [ 3973 | "==", 3974 | "type", 3975 | "city" 3976 | ], 3977 | "type": "symbol", 3978 | "source": "composite", 3979 | "id": "place_label_city", 3980 | "paint": { 3981 | "text-color": "hsl(0, 82%, 19%)", 3982 | "text-halo-color": "hsla(43, 71%, 79%, 0.8)", 3983 | "text-halo-width": 2 3984 | }, 3985 | "source-layer": "place_label" 3986 | }, 3987 | { 3988 | "interactive": true, 3989 | "layout": { 3990 | "text-font": [ 3991 | "Open Sans Italic", 3992 | "Arial Unicode MS Regular" 3993 | ], 3994 | "text-field": "{name}", 3995 | "text-letter-spacing": 0.2, 3996 | "symbol-placement": "line", 3997 | "text-size": { 3998 | "stops": [ 3999 | [ 4000 | 3, 4001 | 11 4002 | ], 4003 | [ 4004 | 4, 4005 | 12 4006 | ] 4007 | ] 4008 | } 4009 | }, 4010 | "metadata": { 4011 | "mapbox:group": "1444849258897.3083" 4012 | }, 4013 | "filter": [ 4014 | "all", 4015 | [ 4016 | "==", 4017 | "$type", 4018 | "LineString" 4019 | ], 4020 | [ 4021 | ">=", 4022 | "labelrank", 4023 | 4 4024 | ] 4025 | ], 4026 | "type": "symbol", 4027 | "source": "composite", 4028 | "id": "marine_label_line_4", 4029 | "paint": { 4030 | "text-color": "#74aee9", 4031 | "text-halo-color": "rgba(255,255,255,0.7)", 4032 | "text-halo-width": 0.75, 4033 | "text-halo-blur": 0.75 4034 | }, 4035 | "source-layer": "marine_label" 4036 | }, 4037 | { 4038 | "interactive": true, 4039 | "layout": { 4040 | "text-font": [ 4041 | "Open Sans Italic", 4042 | "Arial Unicode MS Regular" 4043 | ], 4044 | "text-field": "{name}", 4045 | "text-max-width": 6, 4046 | "text-letter-spacing": 0.2, 4047 | "symbol-placement": "point", 4048 | "text-size": { 4049 | "stops": [ 4050 | [ 4051 | 3, 4052 | 11 4053 | ], 4054 | [ 4055 | 4, 4056 | 12 4057 | ] 4058 | ] 4059 | } 4060 | }, 4061 | "metadata": { 4062 | "mapbox:group": "1444849258897.3083" 4063 | }, 4064 | "filter": [ 4065 | "all", 4066 | [ 4067 | "==", 4068 | "$type", 4069 | "Point" 4070 | ], 4071 | [ 4072 | ">=", 4073 | "labelrank", 4074 | 4 4075 | ] 4076 | ], 4077 | "type": "symbol", 4078 | "source": "composite", 4079 | "id": "marine_label_4", 4080 | "paint": { 4081 | "text-color": "#74aee9", 4082 | "text-halo-color": "rgba(255,255,255,0.7)", 4083 | "text-halo-width": 0.75, 4084 | "text-halo-blur": 0.75 4085 | }, 4086 | "source-layer": "marine_label" 4087 | }, 4088 | { 4089 | "interactive": true, 4090 | "layout": { 4091 | "text-font": [ 4092 | "Open Sans Italic", 4093 | "Arial Unicode MS Regular" 4094 | ], 4095 | "text-field": "{name}", 4096 | "text-letter-spacing": 0.2, 4097 | "symbol-placement": "line", 4098 | "text-size": { 4099 | "stops": [ 4100 | [ 4101 | 3, 4102 | 11 4103 | ], 4104 | [ 4105 | 4, 4106 | 14 4107 | ] 4108 | ] 4109 | } 4110 | }, 4111 | "metadata": { 4112 | "mapbox:group": "1444849258897.3083" 4113 | }, 4114 | "filter": [ 4115 | "all", 4116 | [ 4117 | "==", 4118 | "$type", 4119 | "LineString" 4120 | ], 4121 | [ 4122 | "==", 4123 | "labelrank", 4124 | 3 4125 | ] 4126 | ], 4127 | "type": "symbol", 4128 | "source": "composite", 4129 | "id": "marine_label_line_3", 4130 | "paint": { 4131 | "text-color": "#74aee9", 4132 | "text-halo-color": "rgba(255,255,255,0.7)", 4133 | "text-halo-width": 0.75, 4134 | "text-halo-blur": 0.75 4135 | }, 4136 | "source-layer": "marine_label" 4137 | }, 4138 | { 4139 | "interactive": true, 4140 | "layout": { 4141 | "text-font": [ 4142 | "Open Sans Italic", 4143 | "Arial Unicode MS Regular" 4144 | ], 4145 | "text-field": "{name}", 4146 | "text-max-width": 1.4, 4147 | "text-letter-spacing": 0.2, 4148 | "symbol-placement": "point", 4149 | "text-size": { 4150 | "stops": [ 4151 | [ 4152 | 3, 4153 | 11 4154 | ], 4155 | [ 4156 | 4, 4157 | 14 4158 | ] 4159 | ] 4160 | } 4161 | }, 4162 | "metadata": { 4163 | "mapbox:group": "1444849258897.3083" 4164 | }, 4165 | "filter": [ 4166 | "all", 4167 | [ 4168 | "==", 4169 | "$type", 4170 | "Point" 4171 | ], 4172 | [ 4173 | "==", 4174 | "labelrank", 4175 | 3 4176 | ] 4177 | ], 4178 | "type": "symbol", 4179 | "source": "composite", 4180 | "id": "marine_label_point_3", 4181 | "paint": { 4182 | "text-color": "#74aee9", 4183 | "text-halo-color": "rgba(255,255,255,0.7)", 4184 | "text-halo-width": 0.75, 4185 | "text-halo-blur": 0.75 4186 | }, 4187 | "source-layer": "marine_label" 4188 | }, 4189 | { 4190 | "interactive": true, 4191 | "layout": { 4192 | "text-font": [ 4193 | "Open Sans Italic", 4194 | "Arial Unicode MS Regular" 4195 | ], 4196 | "text-field": "{name}", 4197 | "text-letter-spacing": 0.2, 4198 | "symbol-placement": "line", 4199 | "text-size": { 4200 | "stops": [ 4201 | [ 4202 | 3, 4203 | 14 4204 | ], 4205 | [ 4206 | 4, 4207 | 16 4208 | ] 4209 | ] 4210 | } 4211 | }, 4212 | "metadata": { 4213 | "mapbox:group": "1444849258897.3083" 4214 | }, 4215 | "filter": [ 4216 | "all", 4217 | [ 4218 | "==", 4219 | "$type", 4220 | "LineString" 4221 | ], 4222 | [ 4223 | "==", 4224 | "labelrank", 4225 | 2 4226 | ] 4227 | ], 4228 | "type": "symbol", 4229 | "source": "composite", 4230 | "id": "marine_label_line_2", 4231 | "paint": { 4232 | "text-color": "#74aee9", 4233 | "text-halo-color": "rgba(255,255,255,0.7)", 4234 | "text-halo-width": 0.75, 4235 | "text-halo-blur": 0.75 4236 | }, 4237 | "source-layer": "marine_label" 4238 | }, 4239 | { 4240 | "interactive": true, 4241 | "layout": { 4242 | "text-font": [ 4243 | "Open Sans Italic", 4244 | "Arial Unicode MS Regular" 4245 | ], 4246 | "text-field": "{name}", 4247 | "text-max-width": 1.4, 4248 | "text-letter-spacing": 0.2, 4249 | "symbol-placement": "point", 4250 | "text-size": { 4251 | "stops": [ 4252 | [ 4253 | 3, 4254 | 14 4255 | ], 4256 | [ 4257 | 4, 4258 | 16 4259 | ] 4260 | ] 4261 | } 4262 | }, 4263 | "metadata": { 4264 | "mapbox:group": "1444849258897.3083" 4265 | }, 4266 | "filter": [ 4267 | "all", 4268 | [ 4269 | "==", 4270 | "$type", 4271 | "Point" 4272 | ], 4273 | [ 4274 | "==", 4275 | "labelrank", 4276 | 2 4277 | ] 4278 | ], 4279 | "type": "symbol", 4280 | "source": "composite", 4281 | "id": "marine_label_point_2", 4282 | "paint": { 4283 | "text-color": "#74aee9", 4284 | "text-halo-color": "rgba(255,255,255,0.7)", 4285 | "text-halo-width": 0.75, 4286 | "text-halo-blur": 0.75 4287 | }, 4288 | "source-layer": "marine_label" 4289 | }, 4290 | { 4291 | "interactive": true, 4292 | "layout": { 4293 | "text-font": [ 4294 | "Open Sans Italic", 4295 | "Arial Unicode MS Regular" 4296 | ], 4297 | "text-field": "{name}", 4298 | "text-letter-spacing": 0.2, 4299 | "symbol-placement": "line", 4300 | "text-size": { 4301 | "stops": [ 4302 | [ 4303 | 3, 4304 | 18 4305 | ], 4306 | [ 4307 | 4, 4308 | 22 4309 | ] 4310 | ] 4311 | } 4312 | }, 4313 | "metadata": { 4314 | "mapbox:group": "1444849258897.3083" 4315 | }, 4316 | "filter": [ 4317 | "all", 4318 | [ 4319 | "==", 4320 | "$type", 4321 | "LineString" 4322 | ], 4323 | [ 4324 | "==", 4325 | "labelrank", 4326 | 1 4327 | ] 4328 | ], 4329 | "type": "symbol", 4330 | "source": "composite", 4331 | "id": "marine_label_line_1", 4332 | "paint": { 4333 | "text-color": "#74aee9", 4334 | "text-halo-color": "rgba(255,255,255,0.7)", 4335 | "text-halo-width": 0.75, 4336 | "text-halo-blur": 0.75 4337 | }, 4338 | "source-layer": "marine_label" 4339 | }, 4340 | { 4341 | "interactive": true, 4342 | "layout": { 4343 | "text-font": [ 4344 | "Open Sans Italic", 4345 | "Arial Unicode MS Regular" 4346 | ], 4347 | "text-field": "{name}", 4348 | "text-max-width": 1.4, 4349 | "text-letter-spacing": 0.2, 4350 | "text-line-height": 1.6, 4351 | "symbol-placement": "point", 4352 | "text-offset": [ 4353 | 0, 4354 | 2.4 4355 | ], 4356 | "text-size": { 4357 | "stops": [ 4358 | [ 4359 | 3, 4360 | 18 4361 | ], 4362 | [ 4363 | 4, 4364 | 22 4365 | ] 4366 | ] 4367 | } 4368 | }, 4369 | "metadata": { 4370 | "mapbox:group": "1444849258897.3083" 4371 | }, 4372 | "filter": [ 4373 | "all", 4374 | [ 4375 | "==", 4376 | "$type", 4377 | "Point" 4378 | ], 4379 | [ 4380 | "==", 4381 | "labelrank", 4382 | 1 4383 | ] 4384 | ], 4385 | "type": "symbol", 4386 | "source": "composite", 4387 | "id": "marine_label_point_1", 4388 | "paint": { 4389 | "text-color": "#74aee9", 4390 | "text-halo-color": "rgba(255,255,255,0.7)", 4391 | "text-halo-width": 0.75, 4392 | "text-halo-blur": 0.75 4393 | }, 4394 | "source-layer": "marine_label" 4395 | }, 4396 | { 4397 | "interactive": true, 4398 | "layout": { 4399 | "text-font": [ 4400 | "Open Sans Bold", 4401 | "Arial Unicode MS Bold" 4402 | ], 4403 | "text-field": "{name}", 4404 | "text-max-width": 1.4, 4405 | "text-transform": "uppercase", 4406 | "text-size": { 4407 | "stops": [ 4408 | [ 4409 | 4, 4410 | 11 4411 | ], 4412 | [ 4413 | 6, 4414 | 15 4415 | ] 4416 | ] 4417 | } 4418 | }, 4419 | "metadata": { 4420 | "mapbox:group": "1444849242106.713" 4421 | }, 4422 | "filter": [ 4423 | ">=", 4424 | "scalerank", 4425 | 4 4426 | ], 4427 | "type": "symbol", 4428 | "source": "composite", 4429 | "id": "country_label_4", 4430 | "paint": { 4431 | "text-color": "#334", 4432 | "text-halo-color": "hsla(43, 71%, 79%, 0.8)", 4433 | "text-halo-width": 2, 4434 | "text-halo-blur": 1 4435 | }, 4436 | "source-layer": "country_label" 4437 | }, 4438 | { 4439 | "interactive": true, 4440 | "layout": { 4441 | "text-font": [ 4442 | "Open Sans Bold", 4443 | "Arial Unicode MS Bold" 4444 | ], 4445 | "text-field": "{name}", 4446 | "text-max-width": 1.4, 4447 | "text-transform": "uppercase", 4448 | "text-size": { 4449 | "stops": [ 4450 | [ 4451 | 3, 4452 | 11 4453 | ], 4454 | [ 4455 | 7, 4456 | 17 4457 | ] 4458 | ] 4459 | } 4460 | }, 4461 | "metadata": { 4462 | "mapbox:group": "1444849242106.713" 4463 | }, 4464 | "filter": [ 4465 | "==", 4466 | "scalerank", 4467 | 3 4468 | ], 4469 | "type": "symbol", 4470 | "source": "composite", 4471 | "id": "country_label_3", 4472 | "paint": { 4473 | "text-color": "#334", 4474 | "text-halo-color": "hsla(43, 71%, 79%, 0.8)", 4475 | "text-halo-width": 2, 4476 | "text-halo-blur": 1 4477 | }, 4478 | "source-layer": "country_label" 4479 | }, 4480 | { 4481 | "interactive": true, 4482 | "layout": { 4483 | "text-font": [ 4484 | "Open Sans Bold", 4485 | "Arial Unicode MS Bold" 4486 | ], 4487 | "text-field": "{name}", 4488 | "text-max-width": 1.4, 4489 | "text-transform": "uppercase", 4490 | "text-size": { 4491 | "stops": [ 4492 | [ 4493 | 2, 4494 | 11 4495 | ], 4496 | [ 4497 | 5, 4498 | 17 4499 | ] 4500 | ] 4501 | } 4502 | }, 4503 | "metadata": { 4504 | "mapbox:group": "1444849242106.713" 4505 | }, 4506 | "filter": [ 4507 | "==", 4508 | "scalerank", 4509 | 2 4510 | ], 4511 | "type": "symbol", 4512 | "source": "composite", 4513 | "id": "country_label_2", 4514 | "paint": { 4515 | "text-color": "#334", 4516 | "text-halo-color": "hsla(43, 71%, 79%, 0.8)", 4517 | "text-halo-width": 2, 4518 | "text-halo-blur": 1 4519 | }, 4520 | "source-layer": "country_label" 4521 | }, 4522 | { 4523 | "interactive": true, 4524 | "layout": { 4525 | "text-font": [ 4526 | "Open Sans Bold", 4527 | "Arial Unicode MS Bold" 4528 | ], 4529 | "text-field": "{name}", 4530 | "text-max-width": 1.4, 4531 | "text-transform": "uppercase", 4532 | "text-size": { 4533 | "stops": [ 4534 | [ 4535 | 1, 4536 | 11 4537 | ], 4538 | [ 4539 | 4, 4540 | 17 4541 | ] 4542 | ] 4543 | } 4544 | }, 4545 | "metadata": { 4546 | "mapbox:group": "1444849242106.713" 4547 | }, 4548 | "filter": [ 4549 | "==", 4550 | "scalerank", 4551 | 1 4552 | ], 4553 | "type": "symbol", 4554 | "source": "composite", 4555 | "id": "country_label_1", 4556 | "paint": { 4557 | "text-color": "#334", 4558 | "text-halo-color": "hsla(43, 71%, 79%, 0.8)", 4559 | "text-halo-width": 2, 4560 | "text-halo-blur": 1 4561 | }, 4562 | "source-layer": "country_label" 4563 | } 4564 | ], 4565 | "created": "2016-04-01T20:50:22.965Z", 4566 | "id": "cimi6phf0007wcem3cyr9cl3o", 4567 | "modified": "2016-04-02T08:39:25.318Z", 4568 | "owner": "morgenkaffee", 4569 | "draft": false 4570 | } -------------------------------------------------------------------------------- /src/mapbox-studio/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:0.10 2 | 3 | RUN mkdir -p /usr/src/app 4 | RUN git clone https://github.com/mapbox/mapbox-studio-classic.git /usr/src/app 5 | WORKDIR /usr/src/app 6 | 7 | RUN npm install 8 | 9 | VOLUME /projects 10 | ENV PORT=3000 11 | EXPOSE 3000 12 | CMD ["npm", "start"] 13 | -------------------------------------------------------------------------------- /src/postgres/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mdillon/postgis:9.5 2 | MAINTAINER Lukas Martinelli 3 | 4 | # copy new initdb file which enables the hstore extension and Mapbox vt-util functions 5 | RUN rm -f /docker-entrypoint-initdb.d/postgis.sh 6 | COPY ./initdb-postgis.sh /docker-entrypoint-initdb.d/10_postgis.sh 7 | COPY ./initdb-database.sh /docker-entrypoint-initdb.d/20_database.sh 8 | -------------------------------------------------------------------------------- /src/postgres/initdb-database.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -o errexit 3 | set -o pipefail 4 | set -o nounset 5 | 6 | readonly DB_NAME=${DB_NAME:-noise} 7 | readonly DB_USER=${DB_USER:-noise} 8 | readonly DB_PASSWORD=${DB_PASSWORD:-noise} 9 | 10 | function create_db() { 11 | echo "Creating database $DB_NAME with owner $DB_USER" 12 | PGUSER="$POSTGRES_USER" psql --dbname="$POSTGRES_DB" <<-EOSQL 13 | CREATE USER $DB_USER WITH PASSWORD '$DB_PASSWORD'; 14 | CREATE DATABASE $DB_NAME WITH TEMPLATE template_postgis OWNER $DB_USER; 15 | EOSQL 16 | } 17 | 18 | create_db 19 | -------------------------------------------------------------------------------- /src/postgres/initdb-postgis.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -o errexit 3 | set -o pipefail 4 | set -o nounset 5 | 6 | function create_template_postgis() { 7 | PGUSER="$POSTGRES_USER" psql --dbname="$POSTGRES_DB" <<-'EOSQL' 8 | CREATE DATABASE template_postgis; 9 | UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template_postgis'; 10 | EOSQL 11 | } 12 | 13 | function execute_sql_into_template() { 14 | local sql_file="$1" 15 | PGUSER="$POSTGRES_USER" psql --dbname="template_postgis" -f "$sql_file" 16 | } 17 | 18 | function create_postgis_extensions() { 19 | cd "/usr/share/postgresql/$PG_MAJOR/contrib/postgis-$POSTGIS_MAJOR" 20 | local db 21 | for db in template_postgis "$POSTGRES_DB"; do 22 | echo "Loading PostGIS into $db" 23 | PGUSER="$POSTGRES_USER" psql --dbname="$db" <<-'EOSQL' 24 | CREATE EXTENSION postgis; 25 | EOSQL 26 | done 27 | } 28 | 29 | function main() { 30 | create_template_postgis 31 | create_postgis_extensions 32 | } 33 | 34 | main 35 | -------------------------------------------------------------------------------- /src/vector-datasource/data.yml: -------------------------------------------------------------------------------- 1 | _prefs: 2 | disabled: [] 3 | inspector: false 4 | mapid: morgenkaffee.c6677fff 5 | rev: s-18d7b4a8 6 | saveCenter: true 7 | attribution: '' 8 | center: 9 | - 8.5835 10 | - 47.3142 11 | - 10 12 | description: '' 13 | Layer: 14 | - id: noise_rail 15 | Datasource: 16 | dbname: noise 17 | extent: -20037508.34,-20037508.34,20037508.34,20037508.34 18 | geometry_field: '' 19 | geometry_table: '' 20 | host: postgres 21 | key_field: '' 22 | key_field_as_attribute: '' 23 | max_size: 512 24 | password: noise 25 | port: 5432 26 | srid: '' 27 | table: |- 28 | ( 29 | SELECT st_collect(st_buffer(geometry, 30)) AS geometry, 1 AS noise_level 30 | FROM osm_railway 31 | WHERE geometry && !bbox! 32 | UNION ALL 33 | SELECT st_collect(st_buffer(geometry, 60)) AS geometry, 2 AS noise_level 34 | FROM osm_railway 35 | WHERE geometry && !bbox! 36 | UNION ALL 37 | SELECT st_collect(st_buffer(geometry, 100)) AS geometry, 3 AS noise_level 38 | FROM osm_railway 39 | WHERE geometry && !bbox! 40 | UNION ALL 41 | 42 | SELECT st_collect(st_buffer(geometry, 30)) AS geometry, 2 AS noise_level 43 | FROM osm_light_railway 44 | WHERE geometry && !bbox! 45 | UNION ALL 46 | SELECT st_collect(st_buffer(geometry, 60)) AS geometry, 3 AS noise_level 47 | FROM osm_light_railway 48 | WHERE geometry && !bbox! 49 | ) AS t 50 | type: postgis 51 | user: noise 52 | description: '' 53 | fields: 54 | noise_level: Number 55 | properties: 56 | "buffer-size": 8 57 | srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over 58 | - id: noise_industrial 59 | Datasource: 60 | dbname: noise 61 | extent: -20037508.34,-20037508.34,20037508.34,20037508.34 62 | geometry_field: '' 63 | geometry_table: '' 64 | host: postgres 65 | key_field: '' 66 | key_field_as_attribute: '' 67 | max_size: 512 68 | password: noise 69 | port: 5432 70 | srid: '' 71 | table: |- 72 | ( 73 | SELECT st_buffer(geometry, 50) AS geometry, 2 AS noise_level 74 | FROM osm_industrial_zone 75 | WHERE geometry && !bbox! 76 | UNION ALL 77 | SELECT st_buffer(geometry, 100) AS geometry, 3 AS noise_level 78 | FROM osm_industrial_zone 79 | WHERE geometry && !bbox! 80 | ) AS t 81 | type: postgis 82 | user: noise 83 | description: '' 84 | fields: 85 | noise_level: Number 86 | properties: 87 | "buffer-size": 8 88 | srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over 89 | - id: noise_shop 90 | Datasource: 91 | dbname: noise 92 | extent: -20037508.34,-20037508.34,20037508.34,20037508.34 93 | geometry_field: '' 94 | geometry_table: '' 95 | host: postgres 96 | key_field: '' 97 | key_field_as_attribute: '' 98 | max_size: 512 99 | password: noise 100 | port: 5432 101 | srid: '' 102 | table: |- 103 | ( 104 | SELECT st_simplify(st_collect(st_buffer(geometry, 30)), 30) AS geometry, 2 AS noise_level 105 | FROM osm_shop 106 | WHERE geometry && !bbox! 107 | UNION ALL 108 | SELECT st_simplify(st_collect(st_buffer(geometry, 65)), 30) AS geometry, 3 AS noise_level 109 | FROM osm_shop 110 | WHERE geometry && !bbox! 111 | UNION ALL 112 | SELECT st_simplify(st_collect(st_buffer(geometry, 35)), 30) AS geometry, 2 AS noise_level 113 | FROM osm_food 114 | WHERE geometry && !bbox! 115 | UNION ALL 116 | SELECT st_simplify(st_collect(st_buffer(geometry, 75)), 30) AS geometry, 3 AS noise_level 117 | FROM osm_food 118 | WHERE geometry && !bbox! 119 | ) AS t 120 | type: postgis 121 | user: noise 122 | description: '' 123 | fields: 124 | noise_level: Number 125 | properties: 126 | "buffer-size": 8 127 | srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over 128 | - id: noise_nightlife 129 | Datasource: 130 | dbname: noise 131 | extent: -20037508.34,-20037508.34,20037508.34,20037508.34 132 | geometry_field: '' 133 | geometry_table: '' 134 | host: postgres 135 | key_field: '' 136 | key_field_as_attribute: '' 137 | max_size: 512 138 | password: noise 139 | port: 5432 140 | srid: '' 141 | table: |- 142 | ( 143 | SELECT st_collect(st_buffer(geometry, 40)) AS geometry, 1 AS noise_level 144 | FROM osm_party 145 | WHERE geometry && !bbox! 146 | UNION ALL 147 | SELECT st_collect(st_buffer(geometry, 70)) AS geometry, 2 AS noise_level 148 | FROM osm_party 149 | WHERE geometry && !bbox! 150 | UNION ALL 151 | SELECT st_collect(st_buffer(geometry, 150)) AS geometry, 3 AS noise_level 152 | FROM osm_party 153 | WHERE geometry && !bbox! 154 | ) AS t 155 | type: postgis 156 | user: noise 157 | description: '' 158 | fields: 159 | noise_level: Number 160 | properties: 161 | "buffer-size": 8 162 | srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over 163 | - id: noise_sport 164 | Datasource: 165 | dbname: noise 166 | extent: -20037508.34,-20037508.34,20037508.34,20037508.34 167 | geometry_field: '' 168 | geometry_table: '' 169 | host: postgres 170 | key_field: '' 171 | key_field_as_attribute: '' 172 | max_size: 512 173 | password: noise 174 | port: 5432 175 | srid: '' 176 | table: |- 177 | ( 178 | SELECT st_buffer(geometry, 40) AS geometry, 1 AS noise_level 179 | FROM osm_sport 180 | WHERE geometry && !bbox! 181 | UNION ALL 182 | SELECT st_buffer(geometry, 60) AS geometry, 2 AS noise_level 183 | FROM osm_sport 184 | WHERE geometry && !bbox! 185 | UNION ALL 186 | SELECT st_buffer(geometry, 80) AS geometry, 3 AS noise_level 187 | FROM osm_sport 188 | WHERE geometry && !bbox! 189 | ) AS t 190 | type: postgis 191 | user: noise 192 | description: '' 193 | fields: 194 | noise_level: Number 195 | properties: 196 | "buffer-size": 8 197 | srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over 198 | - id: noise_leisure 199 | Datasource: 200 | dbname: noise 201 | extent: -20037508.34,-20037508.34,20037508.34,20037508.34 202 | geometry_field: '' 203 | geometry_table: '' 204 | host: postgres 205 | key_field: '' 206 | key_field_as_attribute: '' 207 | max_size: 512 208 | password: noise 209 | port: 5432 210 | srid: '' 211 | table: |- 212 | ( 213 | SELECT st_buffer(geometry, 35) AS geometry, 1 AS noise_level 214 | FROM osm_leisure 215 | WHERE geometry && !bbox! 216 | UNION ALL 217 | SELECT st_buffer(geometry, 55) AS geometry, 2 AS noise_level 218 | FROM osm_leisure 219 | WHERE geometry && !bbox! 220 | UNION ALL 221 | SELECT st_buffer(geometry, 75) AS geometry, 3 AS noise_level 222 | FROM osm_leisure 223 | WHERE geometry && !bbox! 224 | ) AS t 225 | type: postgis 226 | user: noise 227 | description: '' 228 | fields: 229 | noise_level: Number 230 | properties: 231 | "buffer-size": 8 232 | srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over 233 | - id: noise_retail 234 | Datasource: 235 | dbname: noise 236 | extent: -20037508.34,-20037508.34,20037508.34,20037508.34 237 | geometry_field: '' 238 | geometry_table: '' 239 | host: postgres 240 | key_field: '' 241 | key_field_as_attribute: '' 242 | max_size: 512 243 | password: noise 244 | port: 5432 245 | srid: '' 246 | table: |- 247 | ( 248 | SELECT st_buffer(geometry, 70) AS geometry, 2 AS noise_level 249 | FROM osm_retail_zone 250 | WHERE geometry && !bbox! 251 | UNION ALL 252 | SELECT st_buffer(geometry, 180) AS geometry, 3 AS noise_level 253 | FROM osm_retail_zone 254 | WHERE geometry && !bbox! 255 | ) AS t 256 | type: postgis 257 | user: noise 258 | description: '' 259 | fields: 260 | noise_level: Number 261 | properties: 262 | "buffer-size": 8 263 | srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over 264 | - id: noise_road 265 | Datasource: 266 | dbname: noise 267 | extent: -20037508.34,-20037508.34,20037508.34,20037508.34 268 | geometry_field: '' 269 | geometry_table: '' 270 | host: postgres 271 | key_field: '' 272 | key_field_as_attribute: '' 273 | max_size: 512 274 | password: noise 275 | port: 5432 276 | srid: '' 277 | table: |- 278 | ( 279 | SELECT st_collect(st_buffer(geometry, 100)) AS geometry, 1 AS noise_level 280 | FROM osm_motorway 281 | WHERE geometry && !bbox! 282 | UNION ALL 283 | SELECT st_collect(st_buffer(geometry, 220)) AS geometry, 2 AS noise_level 284 | FROM osm_motorway 285 | WHERE geometry && !bbox! 286 | UNION ALL 287 | SELECT st_collect(st_buffer(geometry, 500)) AS geometry, 3 AS noise_level 288 | FROM osm_motorway 289 | WHERE geometry && !bbox! 290 | UNION ALL 291 | 292 | SELECT st_collect(st_buffer(geometry, 50)) AS geometry, 1 AS noise_level 293 | FROM osm_trunk 294 | WHERE geometry && !bbox! 295 | UNION ALL 296 | SELECT st_collect(st_buffer(geometry, 190)) AS geometry, 2 AS noise_level 297 | FROM osm_trunk 298 | WHERE geometry && !bbox! 299 | UNION ALL 300 | SELECT st_collect(st_buffer(geometry, 400)) AS geometry, 3 AS noise_level 301 | FROM osm_trunk 302 | WHERE geometry && !bbox! 303 | UNION ALL 304 | 305 | SELECT st_collect(st_buffer(geometry, 35)) AS geometry, 1 AS noise_level 306 | FROM osm_primary_road 307 | WHERE geometry && !bbox! 308 | UNION ALL 309 | SELECT st_collect(st_buffer(geometry, 160)) AS geometry, 2 AS noise_level 310 | FROM osm_primary_road 311 | WHERE geometry && !bbox! 312 | UNION ALL 313 | SELECT st_collect(st_buffer(geometry, 300)) AS geometry, 3 AS noise_level 314 | FROM osm_primary_road 315 | WHERE geometry && !bbox! 316 | UNION ALL 317 | 318 | SELECT st_collect(st_buffer(geometry, 80)) AS geometry, 2 AS noise_level 319 | FROM osm_secondary_road 320 | WHERE geometry && !bbox! 321 | UNION ALL 322 | SELECT st_collect(st_buffer(geometry, 125)) AS geometry, 3 AS noise_level 323 | FROM osm_secondary_road 324 | WHERE geometry && !bbox! 325 | UNION ALL 326 | 327 | SELECT st_collect(st_buffer(geometry, 35)) AS geometry, 2 AS noise_level 328 | FROM osm_tertiary_road 329 | WHERE geometry && !bbox! 330 | UNION ALL 331 | SELECT st_collect(st_buffer(geometry, 65)) AS geometry, 3 AS noise_level 332 | FROM osm_tertiary_road 333 | WHERE geometry && !bbox! 334 | ) AS t 335 | type: postgis 336 | user: noise 337 | description: '' 338 | fields: 339 | noise_level: Number 340 | properties: 341 | "buffer-size": 8 342 | srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over 343 | maxzoom: 10 344 | minzoom: 10 345 | name: OSM noise pollution 346 | --------------------------------------------------------------------------------