diff --git a/Gemfile b/Gemfile
index 8ac290dc6..ad8c4a59b 100644
--- a/Gemfile
+++ b/Gemfile
@@ -25,6 +25,7 @@ gem 'devise' # Gestion des comptes utilisateurs
gem 'devise-async'
gem 'discard'
gem 'dotenv-rails', require: 'dotenv/rails-now' # dotenv should always be loaded before rails
+gem 'ffi-geos', require: false
gem 'flipper'
gem 'flipper-active_record'
gem 'flipper-ui'
diff --git a/Gemfile.lock b/Gemfile.lock
index 622f366fb..0958a8495 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -215,6 +215,8 @@ GEM
faraday (0.15.4)
multipart-post (>= 1.2, < 3)
ffi (1.12.2)
+ ffi-geos (2.1.0)
+ ffi (>= 1.0.0)
flipper (0.17.2)
flipper-active_record (0.17.2)
activerecord (>= 4.2, < 7)
@@ -751,6 +753,7 @@ DEPENDENCIES
discard
dotenv-rails
factory_bot
+ ffi-geos
flipper
flipper-active_record
flipper-ui
diff --git a/app/javascript/components/MapEditor/MapEditor.js b/app/javascript/components/MapEditor/MapEditor.js
new file mode 100644
index 000000000..6a219fa62
--- /dev/null
+++ b/app/javascript/components/MapEditor/MapEditor.js
@@ -0,0 +1,199 @@
+import React, { useState, useRef, useEffect } from 'react';
+import PropTypes from 'prop-types';
+import mapboxgl from 'mapbox-gl';
+import ReactMapboxGl, { GeoJSONLayer, ZoomControl } from 'react-mapbox-gl';
+import DrawControl from 'react-mapbox-gl-draw';
+import area from '@turf/area';
+import SwitchMapStyle from './SwitchMapStyle';
+import SearchInput from './SearchInput';
+import { fire } from '@utils';
+import ortho from './styles/ortho.json';
+import vector from './styles/vector.json';
+import {
+ createFeatureCollection,
+ polygonCadastresFill,
+ polygonCadastresLine,
+ ERROR_GEO_JSON
+} from './utils';
+import '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css';
+
+const Map = ReactMapboxGl({});
+
+const MapEditor = ({ featureCollection: { features, bbox, id } }) => {
+ const drawControl = useRef(null);
+ const [style, setStyle] = useState('ortho');
+ const [coords, setCoords] = useState([1.7, 46.9]);
+ const [zoom, setZoom] = useState([5]);
+ const [currentMap, setCurrentMap] = useState({});
+ let input = document.querySelector(
+ `input[data-feature-collection-id="${id}"]`
+ );
+
+ let userSelections = features.filter(
+ feature => feature.properties.source === 'selection_utilisateur'
+ );
+
+ let cadastresFeatureCollection = {
+ type: 'FeatureCollection',
+ features: []
+ };
+
+ const constructCadastresFeatureCollection = features => {
+ for (let feature of features) {
+ switch (feature.properties.source) {
+ case 'cadastre':
+ cadastresFeatureCollection.features.push(feature);
+ break;
+ }
+ }
+ };
+ constructCadastresFeatureCollection(features);
+
+ const mapStyle = style === 'ortho' ? ortho : vector;
+
+ const saveFeatureCollection = featuresToSave => {
+ const featuresCollection = createFeatureCollection(featuresToSave);
+ if (area(featuresCollection) < 300000) {
+ input.value = JSON.stringify(featuresCollection);
+ } else {
+ input.value = ERROR_GEO_JSON;
+ }
+ fire(input, 'change');
+ };
+
+ const onDrawCreate = ({ features }) => {
+ const draw = drawControl.current.draw;
+ const featureId = features[0].id;
+ draw.setFeatureProperty(featureId, 'id', featureId);
+ draw.setFeatureProperty(featureId, 'source', 'selection_utilisateur');
+ userSelections.push(draw.get(featureId));
+ saveFeatureCollection(userSelections);
+ };
+
+ const onDrawUpdate = ({ features }) => {
+ let featureId = features[0].properties.id;
+ userSelections = userSelections.map(selection => {
+ if (selection.properties.id === featureId) {
+ selection = features[0];
+ }
+ return selection;
+ });
+ saveFeatureCollection(userSelections);
+ };
+
+ const onDrawDelete = ({ features }) => {
+ userSelections = userSelections.filter(
+ selection => selection.properties.id !== features[0].properties.id
+ );
+ saveFeatureCollection(userSelections);
+ };
+
+ const onMapLoad = map => {
+ setCurrentMap(map);
+ if (userSelections.length > 0) {
+ userSelections.map((selection, index) => {
+ selection.properties.id = index + 1;
+ drawControl.current.draw.add(selection);
+ });
+ }
+ };
+
+ const onMapUpdate = evt => {
+ if (currentMap) {
+ cadastresFeatureCollection.features = [];
+ constructCadastresFeatureCollection(
+ evt.detail.featureCollection.features
+ );
+ currentMap
+ .getSource('cadastres-layer')
+ .setData(cadastresFeatureCollection);
+ }
+ };
+
+ useEffect(() => {
+ addEventListener('map:update', onMapUpdate);
+ return () => removeEventListener('map:update', onMapUpdate);
+ });
+
+ if (!mapboxgl.supported()) {
+ return (
+
+ Nous ne pouvons pas afficher notre éditeur de carte car il est
+ imcompatible avec votre navigateur. Nous vous conseillons de le mettre à
+ jour ou utiliser les dernières versions de Chrome, Firefox ou Safari
+
+ );
+ }
+
+ return (
+ <>
+
+ {
+ setCoords(searchTerm);
+ setZoom([17]);
+ }}
+ />
+
+
+ >
+ );
+};
+
+MapEditor.propTypes = {
+ featureCollection: PropTypes.shape({
+ bbox: PropTypes.array,
+ features: PropTypes.array,
+ id: PropTypes.number
+ })
+};
+
+export default MapEditor;
diff --git a/app/javascript/components/MapEditor/SearchInput.js b/app/javascript/components/MapEditor/SearchInput.js
new file mode 100644
index 000000000..65d050103
--- /dev/null
+++ b/app/javascript/components/MapEditor/SearchInput.js
@@ -0,0 +1,99 @@
+import React, { useState, useEffect } from 'react';
+import { getJSON } from '@utils';
+import {
+ Combobox,
+ ComboboxInput,
+ ComboboxPopover,
+ ComboboxList,
+ ComboboxOption
+} from '@reach/combobox';
+import '@reach/combobox/styles.css';
+import PropTypes from 'prop-types';
+
+let cache = {};
+const useAddressSearch = searchTerm => {
+ const [addresses, setAddresses] = useState([]);
+ useEffect(() => {
+ if (searchTerm.trim() !== '') {
+ let isFresh = true;
+ fetchAddresses(searchTerm).then(addresses => {
+ if (isFresh) setAddresses(addresses);
+ });
+ return () => (isFresh = false);
+ }
+ }, [searchTerm]);
+ return addresses;
+};
+
+const fetchAddresses = value => {
+ if (cache[value]) {
+ return Promise.resolve(cache[value]);
+ }
+ const url = `https://api-adresse.data.gouv.fr/search/`;
+ return getJSON(url, { q: value, limit: 5 }, 'get').then(result => {
+ if (result) {
+ cache[value] = result;
+ }
+ return result;
+ });
+};
+
+const SearchInput = ({ getCoords }) => {
+ const [searchTerm, setSearchTerm] = useState('');
+ const addresses = useAddressSearch(searchTerm);
+ const handleSearchTermChange = event => {
+ setSearchTerm(event.target.value);
+ };
+ return (
+
+
+ {addresses.features && (
+
+ {addresses.features.length > 0 ? (
+
+ {addresses.features.map(feature => {
+ const str = `${feature.properties.name}, ${feature.properties.city}`;
+ return (
+ getCoords(feature.geometry.coordinates)}
+ key={str}
+ value={str}
+ />
+ );
+ })}
+
+ ) : (
+ Aucun résultat
+ )}
+
+ )}
+
+ );
+};
+
+SearchInput.propTypes = {
+ getCoords: PropTypes.func
+};
+
+export default SearchInput;
diff --git a/app/javascript/components/MapEditor/SwitchMapStyle.js b/app/javascript/components/MapEditor/SwitchMapStyle.js
new file mode 100644
index 000000000..4a9cf3eff
--- /dev/null
+++ b/app/javascript/components/MapEditor/SwitchMapStyle.js
@@ -0,0 +1,40 @@
+import React from 'react';
+import ortho from './images/preview-ortho.png';
+import vector from './images/preview-vector.png';
+import PropTypes from 'prop-types';
+
+const SwitchMapStyle = ({ isVector }) => {
+ const style = isVector ? 'Satellite' : 'Vectoriel';
+ const source = `${isVector ? ortho : vector}`;
+
+ const imgStyle = {
+ width: '100%',
+ height: '100%'
+ };
+
+ const textStyle = {
+ position: 'relative',
+ bottom: '26px',
+ left: '4px',
+ color: `${isVector ? '#fff' : '#000'}`
+ };
+ return (
+
+
+
+ {style}
+
+
+
+ );
+};
+
+SwitchMapStyle.propTypes = {
+ isVector: PropTypes.bool
+};
+
+export default SwitchMapStyle;
diff --git a/app/javascript/components/MapEditor/images/preview-ortho.png b/app/javascript/components/MapEditor/images/preview-ortho.png
new file mode 100644
index 000000000..46db7e467
Binary files /dev/null and b/app/javascript/components/MapEditor/images/preview-ortho.png differ
diff --git a/app/javascript/components/MapEditor/images/preview-vector.png b/app/javascript/components/MapEditor/images/preview-vector.png
new file mode 100644
index 000000000..730fc77d2
Binary files /dev/null and b/app/javascript/components/MapEditor/images/preview-vector.png differ
diff --git a/app/javascript/components/MapEditor/styles/ortho.json b/app/javascript/components/MapEditor/styles/ortho.json
new file mode 100644
index 000000000..296c3c8dc
--- /dev/null
+++ b/app/javascript/components/MapEditor/styles/ortho.json
@@ -0,0 +1,2292 @@
+{
+ "version": 8,
+ "name": "Cadastre sur photographies aériennes",
+ "metadata": {
+ "mapbox:autocomposite": false,
+ "mapbox:groups": {
+ "1444849242106.713": {"collapsed": false, "name": "Places"},
+ "1444849334699.1902": {"collapsed": true, "name": "Bridges"},
+ "1444849345966.4436": {"collapsed": false, "name": "Roads"},
+ "1444849354174.1904": {"collapsed": true, "name": "Tunnels"},
+ "1444849364238.8171": {"collapsed": false, "name": "Buildings"},
+ "1444849382550.77": {"collapsed": false, "name": "Water"},
+ "1444849388993.3071": {"collapsed": false, "name": "Land"}
+ },
+ "mapbox:type": "template",
+ "openmaptiles:mapbox:owner": "openmaptiles",
+ "openmaptiles:mapbox:source:url": "mapbox://openmaptiles.4qljc88t",
+ "openmaptiles:version": "3.x",
+ "maputnik:renderer": "mbgljs"
+ },
+ "center": [0, 0],
+ "zoom": 1,
+ "bearing": 0,
+ "pitch": 0,
+ "sources": {
+ "cadastre": {
+ "type": "vector",
+ "url": "https://openmaptiles.geo.data.gouv.fr/data/cadastre.json"
+ },
+ "decoupage-administratif": {
+ "type": "vector",
+ "url": "https://openmaptiles.geo.data.gouv.fr/data/decoupage-administratif.json"
+ },
+ "openmaptiles": {
+ "type": "vector",
+ "url": "https://openmaptiles.geo.data.gouv.fr/data/france-vector.json"
+ },
+ "photographies-aeriennes": {
+ "type": "raster",
+ "tiles": [
+ "https://tiles.geo.api.gouv.fr/photographies-aeriennes/tiles/{z}/{x}/{y}"
+ ],
+ "tileSize": 256,
+ "attribution": "Images aériennes © IGN",
+ "minzoom": 0,
+ "maxzoom": 19
+ }
+ },
+ "sprite": "https://openmaptiles.github.io/osm-bright-gl-style/sprite",
+ "glyphs": "https://openmaptiles.geo.data.gouv.fr/fonts/{fontstack}/{range}.pbf",
+ "layers": [
+ {
+ "id": "photographies-aeriennes",
+ "type": "raster",
+ "source": "photographies-aeriennes",
+ "paint": {"raster-resampling": "linear"}
+ },
+ {
+ "id": "batiments-line",
+ "type": "line",
+ "source": "cadastre",
+ "source-layer": "batiments",
+ "minzoom": 16,
+ "maxzoom": 22,
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "line-opacity": 1,
+ "line-color": "rgba(0, 0, 0, 1)",
+ "line-width": 1
+ }
+ },
+ {
+ "id": "batiments-fill",
+ "type": "fill",
+ "source": "cadastre",
+ "source-layer": "batiments",
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "fill-color": "rgba(150, 150, 150, 1)",
+ "fill-opacity": {"stops": [[16, 0], [17, 0.6]]},
+ "fill-antialias": true
+ }
+ },
+ {
+ "id": "parcelles",
+ "type": "line",
+ "source": "cadastre",
+ "source-layer": "parcelles",
+ "minzoom": 15.5,
+ "maxzoom": 24,
+ "layout": {
+ "visibility": "visible",
+ "line-cap": "butt",
+ "line-join": "miter",
+ "line-miter-limit": 2
+ },
+ "paint": {
+ "line-color": "rgba(255, 255, 255, 1)",
+ "line-opacity": 0.8,
+ "line-width": {"stops": [[16, 1.5], [17, 2]]},
+ "line-offset": 0,
+ "line-blur": 0,
+ "line-translate": [0, 1],
+ "line-dasharray": [1],
+ "line-gap-width": 0
+ }
+ },
+ {
+ "id": "parcelles-fill",
+ "type": "fill",
+ "source": "cadastre",
+ "source-layer": "parcelles",
+ "layout": {
+ "visibility": "visible"
+ },
+ "paint": {
+ "fill-color": "rgba(129, 123, 0, 1)",
+ "fill-opacity": [
+ "case",
+ [
+ "boolean",
+ [
+ "feature-state",
+ "hover"
+ ],
+ false
+ ],
+ 0.7,
+ 0.1
+ ]
+ }
+ },
+ {
+ "id": "parcelle-highlighted",
+ "type": "fill",
+ "source": "cadastre",
+ "source-layer": "parcelles",
+ "filter": ["==", "id", ""],
+ "paint": {
+ "fill-color": "rgba(1, 129, 0, 1)",
+ "fill-opacity": 0.7
+ }
+ },
+ {
+ "id": "sections",
+ "type": "line",
+ "source": "cadastre",
+ "source-layer": "sections",
+ "minzoom": 12,
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "line-color": "rgba(0, 0, 0, 1)",
+ "line-opacity": 0.7,
+ "line-width": 2,
+ "line-dasharray": [3, 3],
+ "line-translate": [0, 0]
+ }
+ },
+ {
+ "id": "communes",
+ "type": "line",
+ "source": "decoupage-administratif",
+ "source-layer": "communes",
+ "minzoom": 10,
+ "maxzoom": 24,
+ "filter": ["all"],
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "line-color": "rgba(0, 0, 0, 1)",
+ "line-width": 1.5,
+ "line-opacity": 1,
+ "line-blur": 0
+ }
+ },
+ {
+ "id": "departements",
+ "type": "line",
+ "source": "decoupage-administratif",
+ "source-layer": "departements",
+ "minzoom": 0,
+ "maxzoom": 24,
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "line-color": "rgba(0, 0, 0, 1)",
+ "line-width": 1,
+ "line-opacity": 1
+ }
+ },
+ {
+ "id": "regions",
+ "type": "line",
+ "source": "decoupage-administratif",
+ "source-layer": "regions",
+ "minzoom": 0,
+ "maxzoom": 24,
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "line-color": "rgba(0, 0, 0, 1)",
+ "line-width": 1,
+ "line-opacity": 1
+ }
+ },
+ {
+ "id": "waterway_tunnel",
+ "type": "line",
+ "source": "openmaptiles",
+ "source-layer": "waterway",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ ["in", "class", "river", "stream", "canal"],
+ ["==", "brunnel", "tunnel"]
+ ],
+ "layout": {"line-cap": "round", "visibility": "none"},
+ "paint": {
+ "line-color": "#a0c8f0",
+ "line-dasharray": [2, 4],
+ "line-width": {"base": 1.3, "stops": [[13, 0.5], [20, 6]]}
+ }
+ },
+ {
+ "id": "waterway-other",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849382550.77"},
+ "source": "openmaptiles",
+ "source-layer": "waterway",
+ "filter": [
+ "all",
+ ["!in", "class", "canal", "river", "stream"],
+ ["==", "intermittent", 0]
+ ],
+ "layout": {"line-cap": "round", "visibility": "none"},
+ "paint": {
+ "line-color": "#a0c8f0",
+ "line-width": {"base": 1.3, "stops": [[13, 0.5], [20, 2]]}
+ }
+ },
+ {
+ "id": "waterway-other-intermittent",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849382550.77"},
+ "source": "openmaptiles",
+ "source-layer": "waterway",
+ "filter": [
+ "all",
+ ["!in", "class", "canal", "river", "stream"],
+ ["==", "intermittent", 1]
+ ],
+ "layout": {"line-cap": "round", "visibility": "none"},
+ "paint": {
+ "line-color": "#a0c8f0",
+ "line-width": {"base": 1.3, "stops": [[13, 0.5], [20, 2]]},
+ "line-dasharray": [4, 3]
+ }
+ },
+ {
+ "id": "waterway-stream-canal",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849382550.77"},
+ "source": "openmaptiles",
+ "source-layer": "waterway",
+ "filter": [
+ "all",
+ ["in", "class", "canal", "stream"],
+ ["!=", "brunnel", "tunnel"],
+ ["==", "intermittent", 0]
+ ],
+ "layout": {"line-cap": "round", "visibility": "none"},
+ "paint": {
+ "line-color": "#a0c8f0",
+ "line-width": {"base": 1.3, "stops": [[13, 0.5], [20, 6]]}
+ }
+ },
+ {
+ "id": "waterway-stream-canal-intermittent",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849382550.77"},
+ "source": "openmaptiles",
+ "source-layer": "waterway",
+ "filter": [
+ "all",
+ ["in", "class", "canal", "stream"],
+ ["!=", "brunnel", "tunnel"],
+ ["==", "intermittent", 1]
+ ],
+ "layout": {"line-cap": "round", "visibility": "none"},
+ "paint": {
+ "line-color": "#a0c8f0",
+ "line-width": {"base": 1.3, "stops": [[13, 0.5], [20, 6]]},
+ "line-dasharray": [4, 3]
+ }
+ },
+ {
+ "id": "waterway-river",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849382550.77"},
+ "source": "openmaptiles",
+ "source-layer": "waterway",
+ "filter": [
+ "all",
+ ["==", "class", "river"],
+ ["!=", "brunnel", "tunnel"],
+ ["==", "intermittent", 0]
+ ],
+ "layout": {"line-cap": "round", "visibility": "none"},
+ "paint": {
+ "line-color": "#a0c8f0",
+ "line-width": {"base": 1.2, "stops": [[10, 0.8], [20, 6]]}
+ }
+ },
+ {
+ "id": "waterway-river-intermittent",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849382550.77"},
+ "source": "openmaptiles",
+ "source-layer": "waterway",
+ "filter": [
+ "all",
+ ["==", "class", "river"],
+ ["!=", "brunnel", "tunnel"],
+ ["==", "intermittent", 1]
+ ],
+ "layout": {"line-cap": "round", "visibility": "none"},
+ "paint": {
+ "line-color": "#a0c8f0",
+ "line-width": {"base": 1.2, "stops": [[10, 0.8], [20, 6]]},
+ "line-dasharray": [3, 2.5]
+ }
+ },
+ {
+ "id": "tunnel-service-track-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "tunnel"],
+ ["in", "class", "service", "track"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#cfcdca",
+ "line-dasharray": [0.5, 0.25],
+ "line-width": {"base": 1.2, "stops": [[15, 1], [16, 4], [20, 11]]}
+ }
+ },
+ {
+ "id": "tunnel-minor-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": ["all", ["==", "brunnel", "tunnel"], ["==", "class", "minor"]],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#cfcdca",
+ "line-opacity": {"stops": [[12, 0], [12.5, 1]]},
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12, 0.5], [13, 1], [14, 4], [20, 15]]
+ }
+ }
+ },
+ {
+ "id": "tunnel-secondary-tertiary-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "tunnel"],
+ ["in", "class", "secondary", "tertiary"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": 1,
+ "line-width": {"base": 1.2, "stops": [[8, 1.5], [20, 17]]}
+ }
+ },
+ {
+ "id": "tunnel-trunk-primary-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "tunnel"],
+ ["in", "class", "primary", "trunk"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-width": {
+ "base": 1.2,
+ "stops": [[5, 0.4], [6, 0.6], [7, 1.5], [20, 22]]
+ }
+ }
+ },
+ {
+ "id": "tunnel-motorway-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "tunnel"],
+ ["==", "class", "motorway"]
+ ],
+ "layout": {"line-join": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-dasharray": [0.5, 0.25],
+ "line-width": {
+ "base": 1.2,
+ "stops": [[5, 0.4], [6, 0.6], [7, 1.5], [20, 22]]
+ }
+ }
+ },
+ {
+ "id": "tunnel-path",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ ["all", ["==", "brunnel", "tunnel"], ["==", "class", "path"]]
+ ],
+ "paint": {
+ "line-color": "#cba",
+ "line-dasharray": [1.5, 0.75],
+ "line-width": {"base": 1.2, "stops": [[15, 1.2], [20, 4]]}
+ }
+ },
+ {
+ "id": "tunnel-service-track",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "tunnel"],
+ ["in", "class", "service", "track"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#fff",
+ "line-width": {"base": 1.2, "stops": [[15.5, 0], [16, 2], [20, 7.5]]}
+ }
+ },
+ {
+ "id": "tunnel-minor",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "tunnel"],
+ ["==", "class", "minor_road"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#fff",
+ "line-opacity": 1,
+ "line-width": {"base": 1.2, "stops": [[13.5, 0], [14, 2.5], [20, 11.5]]}
+ }
+ },
+ {
+ "id": "tunnel-secondary-tertiary",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "tunnel"],
+ ["in", "class", "secondary", "tertiary"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#fff4c6",
+ "line-width": {"base": 1.2, "stops": [[6.5, 0], [7, 0.5], [20, 10]]}
+ }
+ },
+ {
+ "id": "tunnel-trunk-primary",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "tunnel"],
+ ["in", "class", "primary", "trunk"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#fff4c6",
+ "line-width": {"base": 1.2, "stops": [[6.5, 0], [7, 0.5], [20, 18]]}
+ }
+ },
+ {
+ "id": "tunnel-motorway",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "tunnel"],
+ ["==", "class", "motorway"]
+ ],
+ "layout": {"line-join": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "#ffdaa6",
+ "line-width": {"base": 1.2, "stops": [[6.5, 0], [7, 0.5], [20, 18]]}
+ }
+ },
+ {
+ "id": "tunnel-railway",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": ["all", ["==", "brunnel", "tunnel"], ["==", "class", "rail"]],
+ "paint": {
+ "line-color": "#bbb",
+ "line-dasharray": [2, 2],
+ "line-width": {"base": 1.4, "stops": [[14, 0.4], [15, 0.75], [20, 2]]}
+ }
+ },
+ {
+ "id": "ferry",
+ "type": "line",
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": ["all", ["in", "class", "ferry"]],
+ "layout": {"line-join": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "rgba(108, 159, 182, 1)",
+ "line-dasharray": [2, 2],
+ "line-width": 1.1
+ }
+ },
+ {
+ "id": "aeroway-taxiway-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "aeroway",
+ "minzoom": 12,
+ "filter": ["all", ["in", "class", "taxiway"]],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "rgba(153, 153, 153, 1)",
+ "line-opacity": 1,
+ "line-width": {"base": 1.5, "stops": [[11, 2], [17, 12]]}
+ }
+ },
+ {
+ "id": "aeroway-runway-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "aeroway",
+ "minzoom": 12,
+ "filter": ["all", ["in", "class", "runway"]],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "rgba(153, 153, 153, 1)",
+ "line-opacity": 0.2,
+ "line-width": {"base": 1.5, "stops": [[11, 5], [17, 55]]}
+ }
+ },
+ {
+ "id": "aeroway-taxiway",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "aeroway",
+ "minzoom": 4,
+ "filter": [
+ "all",
+ ["in", "class", "taxiway"],
+ ["==", "$type", "LineString"]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "rgba(255, 255, 255, 1)",
+ "line-opacity": {"base": 1, "stops": [[11, 0], [12, 1]]},
+ "line-width": {"base": 1.5, "stops": [[11, 1], [17, 10]]}
+ }
+ },
+ {
+ "id": "aeroway-runway",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "aeroway",
+ "minzoom": 4,
+ "filter": [
+ "all",
+ ["in", "class", "runway"],
+ ["==", "$type", "LineString"]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "rgba(255, 255, 255, 1)",
+ "line-opacity": {"base": 1, "stops": [[11, 0], [12, 0.2]]},
+ "line-width": {"base": 1.5, "stops": [[11, 4], [17, 50]]}
+ }
+ },
+ {
+ "id": "road_area_pier",
+ "type": "fill",
+ "metadata": {},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": ["all", ["==", "$type", "Polygon"], ["==", "class", "pier"]],
+ "layout": {"visibility": "visible"},
+ "paint": {"fill-antialias": true, "fill-color": "#f8f4f0"}
+ },
+ {
+ "id": "road_pier",
+ "type": "line",
+ "metadata": {},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": ["all", ["==", "$type", "LineString"], ["in", "class", "pier"]],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#f8f4f0",
+ "line-width": {"base": 1.2, "stops": [[15, 1], [17, 4]]}
+ }
+ },
+ {
+ "id": "highway-area",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": ["all", ["==", "$type", "Polygon"], ["!in", "class", "pier"]],
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "fill-antialias": false,
+ "fill-color": "hsla(0, 0%, 89%, 0.56)",
+ "fill-opacity": {"stops": [[15, 0], [16, 0.9]]},
+ "fill-outline-color": "#cfcdca"
+ }
+ },
+ {
+ "id": "highway-motorway-link-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["==", "class", "motorway_link"]
+ ],
+ "layout": {"line-cap": "round", "line-join": "round"},
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": 1,
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12, 1], [13, 3], [14, 4], [20, 15]]
+ }
+ }
+ },
+ {
+ "id": "highway-link-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ [
+ "in",
+ "class",
+ "primary_link",
+ "secondary_link",
+ "tertiary_link",
+ "trunk_link"
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": 1,
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12, 1], [13, 3], [14, 4], [20, 15]]
+ }
+ }
+ },
+ {
+ "id": "highway-minor-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ [
+ "all",
+ ["!=", "brunnel", "tunnel"],
+ ["in", "class", "minor", "service", "track"]
+ ]
+ ],
+ "layout": {"line-cap": "round", "line-join": "round"},
+ "paint": {
+ "line-color": "#cfcdca",
+ "line-opacity": {"stops": [[14, 0], [15, 0.5]]},
+ "line-width": {"base": 1.2, "stops": [[15, 0.5], [16, 5]]}
+ }
+ },
+ {
+ "id": "highway-secondary-tertiary-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["in", "class", "secondary", "tertiary"]
+ ],
+ "layout": {
+ "line-cap": "butt",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": {"stops": [[15, 0], [16, 0.3]]},
+ "line-width": {"base": 1.2, "stops": [[8, 1.5], [20, 17]]}
+ }
+ },
+ {
+ "id": "highway-primary-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 5,
+ "filter": [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["in", "class", "primary"]
+ ],
+ "layout": {
+ "line-cap": "butt",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": {"stops": [[16, 0], [17, 0.3]]},
+ "line-width": {
+ "base": 1.2,
+ "stops": [[7, 0], [8, 0.6], [9, 1.5], [20, 22]]
+ }
+ }
+ },
+ {
+ "id": "highway-trunk-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 5,
+ "filter": [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["in", "class", "trunk"]
+ ],
+ "layout": {
+ "line-cap": "butt",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": {"stops": [[16, 0], [17, 0.3]]},
+ "line-width": {
+ "base": 1.2,
+ "stops": [[5, 0], [6, 0.6], [7, 1.5], [20, 22]]
+ }
+ }
+ },
+ {
+ "id": "highway-motorway-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 4,
+ "filter": [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["==", "class", "motorway"]
+ ],
+ "layout": {
+ "line-cap": "butt",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": {"stops": [[8, 0], [9, 0.2]]},
+ "line-width": {
+ "base": 1.2,
+ "stops": [[4, 0], [5, 0.4], [6, 0.6], [7, 1.5], [20, 22]]
+ }
+ }
+ },
+ {
+ "id": "highway-path",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ ["all", ["!in", "brunnel", "bridge", "tunnel"], ["==", "class", "path"]]
+ ],
+ "layout": {"visibility": "none"},
+ "paint": {
+ "line-color": "#cba",
+ "line-dasharray": [1.5, 0.75],
+ "line-width": {"base": 1.2, "stops": [[15, 1.2], [20, 4]]}
+ }
+ },
+ {
+ "id": "highway-motorway-link",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["==", "class", "motorway_link"]
+ ],
+ "layout": {"line-cap": "round", "line-join": "round"},
+ "paint": {
+ "line-color": "#fc8",
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12.5, 0], [13, 1.5], [14, 2.5], [20, 11.5]]
+ }
+ }
+ },
+ {
+ "id": "highway-link",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ [
+ "in",
+ "class",
+ "primary_link",
+ "secondary_link",
+ "tertiary_link",
+ "trunk_link"
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#fea",
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12.5, 0], [13, 1.5], [14, 2.5], [20, 11.5]]
+ }
+ }
+ },
+ {
+ "id": "highway-minor",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ [
+ "all",
+ ["!=", "brunnel", "tunnel"],
+ ["in", "class", "minor", "service", "track"]
+ ]
+ ],
+ "layout": {"line-cap": "round", "line-join": "round"},
+ "paint": {
+ "line-color": "#fff",
+ "line-opacity": {"stops": [[16, 0], [17, 0.4]]},
+ "line-width": {"base": 1.2, "stops": [[16, 0], [17, 2.5]]}
+ }
+ },
+ {
+ "id": "highway-secondary-tertiary",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["in", "class", "secondary", "tertiary"]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#fea",
+ "line-width": {"base": 1.2, "stops": [[6.5, 0], [8, 0.5], [20, 13]]},
+ "line-opacity": {"stops": [[11, 0], [13, 0.3]]}
+ }
+ },
+ {
+ "id": "highway-primary",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["in", "class", "primary"]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#fea",
+ "line-width": {"base": 1.2, "stops": [[8.5, 0], [9, 0.5], [20, 18]]},
+ "line-opacity": {"stops": [[8, 0], [9, 0.3]]}
+ }
+ },
+ {
+ "id": "highway-trunk",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["in", "class", "trunk"]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#fea",
+ "line-width": {"base": 1.2, "stops": [[6.5, 0], [7, 0.5], [20, 18]]},
+ "line-opacity": {"stops": [[16, 0], [17, 0.3]]}
+ }
+ },
+ {
+ "id": "highway-motorway",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 5,
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["==", "class", "motorway"]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#fc8",
+ "line-width": {"base": 1.2, "stops": [[6.5, 0], [7, 0.5], [20, 18]]},
+ "line-opacity": {"stops": [[8, 0], [9, 0.2]]}
+ }
+ },
+ {
+ "id": "railway-transit",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ ["all", ["==", "class", "transit"], ["!in", "brunnel", "tunnel"]]
+ ],
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "line-color": "hsla(0, 0%, 73%, 0.77)",
+ "line-width": {"base": 1.4, "stops": [[14, 0.4], [20, 1]]}
+ }
+ },
+ {
+ "id": "railway-transit-hatching",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ ["all", ["==", "class", "transit"], ["!in", "brunnel", "tunnel"]]
+ ],
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "line-color": "hsla(0, 0%, 73%, 0.68)",
+ "line-dasharray": [0.2, 8],
+ "line-width": {"base": 1.4, "stops": [[14.5, 0], [15, 2], [20, 6]]}
+ }
+ },
+ {
+ "id": "railway-service",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ ["all", ["==", "class", "rail"], ["has", "service"]]
+ ],
+ "paint": {
+ "line-color": "hsla(0, 0%, 73%, 0.77)",
+ "line-width": {"base": 1.4, "stops": [[14, 0.4], [20, 1]]}
+ }
+ },
+ {
+ "id": "railway-service-hatching",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ ["all", ["==", "class", "rail"], ["has", "service"]]
+ ],
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "line-color": "hsla(0, 0%, 73%, 0.68)",
+ "line-dasharray": [0.2, 8],
+ "line-width": {"base": 1.4, "stops": [[14.5, 0], [15, 2], [20, 6]]}
+ }
+ },
+ {
+ "id": "railway",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ [
+ "all",
+ ["!has", "service"],
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["==", "class", "rail"]
+ ]
+ ],
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "line-color": "#bbb",
+ "line-width": {"base": 1.4, "stops": [[14, 0.4], [15, 0.75], [20, 2]]},
+ "line-opacity": {"stops": [[11, 0], [13, 1]]}
+ }
+ },
+ {
+ "id": "railway-hatching",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ [
+ "all",
+ ["!has", "service"],
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["==", "class", "rail"]
+ ]
+ ],
+ "paint": {
+ "line-color": "#bbb",
+ "line-dasharray": [0.2, 8],
+ "line-width": {"base": 1.4, "stops": [[14.5, 0], [15, 3], [20, 8]]}
+ }
+ },
+ {
+ "id": "bridge-motorway-link-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ ["==", "class", "motorway_link"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": 1,
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12, 1], [13, 3], [14, 4], [20, 15]]
+ }
+ }
+ },
+ {
+ "id": "bridge-link-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ [
+ "in",
+ "class",
+ "primary_link",
+ "secondary_link",
+ "tertiary_link",
+ "trunk_link"
+ ]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": 1,
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12, 1], [13, 3], [14, 4], [20, 15]]
+ }
+ }
+ },
+ {
+ "id": "bridge-secondary-tertiary-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ ["in", "class", "secondary", "tertiary"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": 0.3,
+ "line-width": {"base": 1.2, "stops": [[8, 1.5], [20, 28]]}
+ }
+ },
+ {
+ "id": "bridge-trunk-primary-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ ["in", "class", "primary", "trunk"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "hsl(28, 76%, 67%)",
+ "line-width": {
+ "base": 1.2,
+ "stops": [[5, 0.4], [6, 0.6], [7, 1.5], [20, 26]]
+ },
+ "line-opacity": 0.3
+ }
+ },
+ {
+ "id": "bridge-motorway-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ ["==", "class", "motorway"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-width": {
+ "base": 1.2,
+ "stops": [[5, 0.4], [6, 0.6], [7, 1.5], [20, 22]]
+ },
+ "line-opacity": {"stops": [[16, 0], [17, 0.3]]}
+ }
+ },
+ {
+ "id": "bridge-path-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ ["all", ["==", "brunnel", "bridge"], ["==", "class", "path"]]
+ ],
+ "paint": {
+ "line-color": "#f8f4f0",
+ "line-width": {"base": 1.2, "stops": [[15, 1.2], [20, 18]]}
+ }
+ },
+ {
+ "id": "bridge-path",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ ["all", ["==", "brunnel", "bridge"], ["==", "class", "path"]]
+ ],
+ "paint": {
+ "line-color": "#cba",
+ "line-dasharray": [1.5, 0.75],
+ "line-width": {"base": 1.2, "stops": [[15, 1.2], [20, 4]]}
+ }
+ },
+ {
+ "id": "bridge-motorway-link",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ ["==", "class", "motorway_link"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#fc8",
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12.5, 0], [13, 1.5], [14, 2.5], [20, 11.5]]
+ }
+ }
+ },
+ {
+ "id": "bridge-link",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ [
+ "in",
+ "class",
+ "primary_link",
+ "secondary_link",
+ "tertiary_link",
+ "trunk_link"
+ ]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#fea",
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12.5, 0], [13, 1.5], [14, 2.5], [20, 11.5]]
+ }
+ }
+ },
+ {
+ "id": "bridge-secondary-tertiary",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ ["in", "class", "secondary", "tertiary"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#fea",
+ "line-width": {"base": 1.2, "stops": [[6.5, 0], [7, 0.5], [20, 20]]},
+ "line-opacity": {"stops": [[16, 0], [17, 0.3]]}
+ }
+ },
+ {
+ "id": "bridge-trunk-primary",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ ["in", "class", "primary", "trunk"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#fea",
+ "line-width": {"base": 1.2, "stops": [[6.5, 0], [7, 0.5], [20, 18]]},
+ "line-opacity": 0.3
+ }
+ },
+ {
+ "id": "bridge-motorway",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ ["==", "class", "motorway"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#fc8",
+ "line-width": {"base": 1.2, "stops": [[6.5, 0], [7, 0.5], [20, 18]]},
+ "line-opacity": 0.3
+ }
+ },
+ {
+ "id": "bridge-railway",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": ["all", ["==", "brunnel", "bridge"], ["==", "class", "rail"]],
+ "paint": {
+ "line-color": "#bbb",
+ "line-width": {"base": 1.4, "stops": [[14, 0.4], [15, 0.75], [20, 2]]}
+ }
+ },
+ {
+ "id": "bridge-railway-hatching",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": ["all", ["==", "brunnel", "bridge"], ["==", "class", "rail"]],
+ "paint": {
+ "line-color": "#bbb",
+ "line-dasharray": [0.2, 8],
+ "line-width": {"base": 1.4, "stops": [[14.5, 0], [15, 3], [20, 8]]}
+ }
+ },
+ {
+ "id": "cablecar",
+ "type": "line",
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 13,
+ "filter": ["==", "class", "cable_car"],
+ "layout": {"line-cap": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "hsl(0, 0%, 70%)",
+ "line-width": {"base": 1, "stops": [[11, 1], [19, 2.5]]}
+ }
+ },
+ {
+ "id": "cablecar-dash",
+ "type": "line",
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 13,
+ "filter": ["==", "class", "cable_car"],
+ "layout": {"line-cap": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "hsl(0, 0%, 70%)",
+ "line-dasharray": [2, 3],
+ "line-width": {"base": 1, "stops": [[11, 3], [19, 5.5]]}
+ }
+ },
+ {
+ "id": "boundary-land-level-4",
+ "type": "line",
+ "source": "openmaptiles",
+ "source-layer": "boundary",
+ "filter": [
+ "all",
+ [">=", "admin_level", 4],
+ ["<=", "admin_level", 8],
+ ["!=", "maritime", 1]
+ ],
+ "layout": {"line-join": "round", "visibility": "none"},
+ "paint": {
+ "line-color": "#9e9cab",
+ "line-dasharray": [3, 1, 1, 1],
+ "line-width": {"base": 1.4, "stops": [[4, 0.4], [5, 1], [12, 3]]}
+ }
+ },
+ {
+ "id": "boundary-land-level-2",
+ "type": "line",
+ "source": "openmaptiles",
+ "source-layer": "boundary",
+ "filter": [
+ "all",
+ ["==", "admin_level", 2],
+ ["!=", "maritime", 1],
+ ["!=", "disputed", 1]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "none"
+ },
+ "paint": {
+ "line-color": "hsl(248, 7%, 66%)",
+ "line-width": {
+ "base": 1,
+ "stops": [[0, 0.6], [4, 1.4], [5, 2], [12, 8]]
+ }
+ }
+ },
+ {
+ "id": "boundary-land-disputed",
+ "type": "line",
+ "source": "openmaptiles",
+ "source-layer": "boundary",
+ "filter": ["all", ["!=", "maritime", 1], ["==", "disputed", 1]],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "none"
+ },
+ "paint": {
+ "line-color": "hsl(248, 7%, 70%)",
+ "line-dasharray": [1, 3],
+ "line-width": {
+ "base": 1,
+ "stops": [[0, 0.6], [4, 1.4], [5, 2], [12, 8]]
+ }
+ }
+ },
+ {
+ "id": "boundary-water",
+ "type": "line",
+ "source": "openmaptiles",
+ "source-layer": "boundary",
+ "filter": ["all", ["in", "admin_level", 2, 4], ["==", "maritime", 1]],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "rgba(154, 189, 214, 1)",
+ "line-opacity": {"stops": [[6, 0.6], [10, 1]]},
+ "line-width": {
+ "base": 1,
+ "stops": [[0, 0.6], [4, 1.4], [5, 2], [12, 8]]
+ }
+ }
+ },
+ {
+ "id": "water-name-lakeline",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "water_name",
+ "filter": ["==", "$type", "LineString"],
+ "layout": {
+ "symbol-placement": "line",
+ "symbol-spacing": 350,
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Italic"],
+ "text-letter-spacing": 0.2,
+ "text-max-width": 5,
+ "text-rotation-alignment": "map",
+ "text-size": 14
+ },
+ "paint": {
+ "text-color": "#74aee9",
+ "text-halo-color": "rgba(255,255,255,0.7)",
+ "text-halo-width": 1.5
+ }
+ },
+ {
+ "id": "water-name-ocean",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "water_name",
+ "filter": ["all", ["==", "$type", "Point"], ["==", "class", "ocean"]],
+ "layout": {
+ "symbol-placement": "point",
+ "symbol-spacing": 350,
+ "text-field": "{name:latin}",
+ "text-font": ["Noto Sans Italic"],
+ "text-letter-spacing": 0.2,
+ "text-max-width": 5,
+ "text-rotation-alignment": "map",
+ "text-size": 14
+ },
+ "paint": {
+ "text-color": "#74aee9",
+ "text-halo-color": "rgba(255,255,255,0.7)",
+ "text-halo-width": 1.5
+ }
+ },
+ {
+ "id": "water-name-other",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "water_name",
+ "filter": ["all", ["==", "$type", "Point"], ["!in", "class", "ocean"]],
+ "layout": {
+ "symbol-placement": "point",
+ "symbol-spacing": 350,
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Italic"],
+ "text-letter-spacing": 0.2,
+ "text-max-width": 5,
+ "text-rotation-alignment": "map",
+ "text-size": {"stops": [[0, 10], [6, 14]]},
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "rgba(0, 51, 178, 1)",
+ "text-halo-color": "rgba(255, 255, 255, 1)",
+ "text-halo-width": 1.5
+ }
+ },
+ {
+ "id": "road_oneway",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["==", "oneway", 1],
+ [
+ "in",
+ "class",
+ "motorway",
+ "trunk",
+ "primary",
+ "secondary",
+ "tertiary",
+ "minor",
+ "service"
+ ]
+ ],
+ "layout": {
+ "icon-image": "oneway",
+ "icon-padding": 2,
+ "icon-rotate": 90,
+ "icon-rotation-alignment": "map",
+ "icon-size": {"stops": [[15, 0.5], [19, 1]]},
+ "symbol-placement": "line",
+ "symbol-spacing": 75,
+ "visibility": "visible"
+ },
+ "paint": {"icon-opacity": 0.5}
+ },
+ {
+ "id": "road_oneway_opposite",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["==", "oneway", -1],
+ [
+ "in",
+ "class",
+ "motorway",
+ "trunk",
+ "primary",
+ "secondary",
+ "tertiary",
+ "minor",
+ "service"
+ ]
+ ],
+ "layout": {
+ "icon-image": "oneway",
+ "icon-padding": 2,
+ "icon-rotate": -90,
+ "icon-rotation-alignment": "map",
+ "icon-size": {"stops": [[15, 0.5], [19, 1]]},
+ "symbol-placement": "line",
+ "symbol-spacing": 75,
+ "visibility": "visible"
+ },
+ "paint": {"icon-opacity": 0.5}
+ },
+ {
+ "id": "highway-name-path",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "transportation_name",
+ "minzoom": 15.5,
+ "filter": ["==", "class", "path"],
+ "layout": {
+ "symbol-placement": "line",
+ "text-field": "{name:latin} {name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-rotation-alignment": "map",
+ "text-size": {"base": 1, "stops": [[13, 12], [14, 13]]}
+ },
+ "paint": {
+ "text-color": "rgba(171, 86, 0, 1)",
+ "text-halo-color": "#f8f4f0",
+ "text-halo-width": 2
+ }
+ },
+ {
+ "id": "highway-name-minor",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "transportation_name",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ ["in", "class", "minor", "service", "track"]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "text-field": "{name:latin} {name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-rotation-alignment": "map",
+ "text-size": {"base": 1, "stops": [[13, 12], [14, 13]]},
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "rgba(143, 69, 0, 1)",
+ "text-halo-blur": 0.5,
+ "text-halo-width": 2,
+ "text-halo-color": "rgba(255, 255, 255, 1)"
+ }
+ },
+ {
+ "id": "highway-name-major",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "transportation_name",
+ "minzoom": 12.2,
+ "filter": ["in", "class", "primary", "secondary", "tertiary", "trunk"],
+ "layout": {
+ "symbol-placement": "line",
+ "text-field": "{name:latin} {name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-rotation-alignment": "map",
+ "text-size": {"base": 1, "stops": [[13, 12], [14, 13]]},
+ "visibility": "visible",
+ "symbol-z-order": "source"
+ },
+ "paint": {
+ "text-color": "rgba(0, 0, 0, 1)",
+ "text-halo-blur": 0.5,
+ "text-halo-width": 1,
+ "text-halo-color": "rgba(255, 255, 255, 1)"
+ }
+ },
+ {
+ "id": "highway-shield-us-interstate",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "transportation_name",
+ "minzoom": 7,
+ "filter": [
+ "all",
+ ["<=", "ref_length", 6],
+ ["==", "$type", "LineString"],
+ ["in", "network", "us-interstate"]
+ ],
+ "layout": {
+ "icon-image": "{network}_{ref_length}",
+ "icon-rotation-alignment": "viewport",
+ "icon-size": 1,
+ "symbol-placement": {
+ "base": 1,
+ "stops": [[7, "point"], [7, "line"], [8, "line"]]
+ },
+ "symbol-spacing": 200,
+ "text-field": "{ref}",
+ "text-font": ["Noto Sans Regular"],
+ "text-rotation-alignment": "viewport",
+ "text-size": 10
+ },
+ "paint": {"text-color": "rgba(0, 0, 0, 1)"}
+ },
+ {
+ "id": "highway-shield-us-other",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "transportation_name",
+ "minzoom": 9,
+ "filter": [
+ "all",
+ ["<=", "ref_length", 6],
+ ["==", "$type", "LineString"],
+ ["in", "network", "us-highway", "us-state"]
+ ],
+ "layout": {
+ "icon-image": "{network}_{ref_length}",
+ "icon-rotation-alignment": "viewport",
+ "icon-size": 1,
+ "symbol-placement": {"base": 1, "stops": [[10, "point"], [11, "line"]]},
+ "symbol-spacing": 200,
+ "text-field": "{ref}",
+ "text-font": ["Noto Sans Regular"],
+ "text-rotation-alignment": "viewport",
+ "text-size": 10
+ },
+ "paint": {"text-color": "rgba(0, 0, 0, 1)"}
+ },
+ {
+ "id": "highway-shield",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "transportation_name",
+ "minzoom": 8,
+ "filter": [
+ "all",
+ ["<=", "ref_length", 6],
+ ["==", "$type", "LineString"],
+ ["!in", "network", "us-interstate", "us-highway", "us-state"]
+ ],
+ "layout": {
+ "icon-image": "road_{ref_length}",
+ "icon-rotation-alignment": "viewport",
+ "icon-size": 1,
+ "symbol-placement": {"base": 1, "stops": [[10, "point"], [11, "line"]]},
+ "symbol-spacing": 200,
+ "text-field": "{ref}",
+ "text-font": ["Noto Sans Regular"],
+ "text-rotation-alignment": "viewport",
+ "text-size": 10,
+ "visibility": "visible"
+ },
+ "paint": {
+ "icon-opacity": {"stops": [[8, 0], [9, 1]]},
+ "text-opacity": {"stops": [[8, 0], [9, 1]]}
+ }
+ },
+ {
+ "id": "waterway-name",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "waterway",
+ "minzoom": 13,
+ "filter": ["all", ["==", "$type", "LineString"], ["has", "name"]],
+ "layout": {
+ "symbol-placement": "line",
+ "symbol-spacing": 350,
+ "text-field": "{name:latin} {name:nonlatin}",
+ "text-font": ["Noto Sans Italic"],
+ "text-letter-spacing": 0.2,
+ "text-max-width": 5,
+ "text-rotation-alignment": "map",
+ "text-size": 14,
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "rgba(2, 72, 255, 1)",
+ "text-halo-color": "rgba(255,255,255,1)",
+ "text-halo-width": 1.5,
+ "text-halo-blur": 0
+ }
+ },
+ {
+ "id": "airport-label-major",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "aerodrome_label",
+ "minzoom": 10,
+ "filter": ["all", ["has", "iata"]],
+ "layout": {
+ "icon-image": "airport_11",
+ "icon-size": 1,
+ "text-anchor": "top",
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-max-width": 9,
+ "text-offset": [0, 0.6],
+ "text-optional": true,
+ "text-padding": 2,
+ "text-size": 12,
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#666",
+ "text-halo-blur": 0.5,
+ "text-halo-color": "#ffffff",
+ "text-halo-width": 1
+ }
+ },
+ {
+ "id": "poi-level-3",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "poi",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ ["==", "$type", "Point"],
+ [">=", "rank", 25],
+ ["any", ["!has", "level"], ["==", "level", 0]]
+ ],
+ "layout": {
+ "icon-image": "{class}_11",
+ "text-anchor": "top",
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-max-width": 9,
+ "text-offset": [0, 0.6],
+ "text-padding": 20,
+ "text-size": 12,
+ "visibility": "visible",
+ "symbol-spacing": 250,
+ "symbol-avoid-edges": false,
+ "text-letter-spacing": 0,
+ "icon-padding": 2,
+ "symbol-placement": "point",
+ "symbol-z-order": "auto",
+ "text-line-height": 1.2,
+ "text-allow-overlap": false,
+ "text-ignore-placement": false,
+ "icon-allow-overlap": false,
+ "icon-ignore-placement": false,
+ "icon-optional": false
+ },
+ "paint": {
+ "text-color": "rgba(2, 2, 3, 1)",
+ "text-halo-blur": 0.5,
+ "text-halo-color": "rgba(232, 227, 227, 1)",
+ "text-halo-width": 2,
+ "text-translate-anchor": "map",
+ "text-opacity": 1
+ }
+ },
+ {
+ "id": "poi-level-2",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "poi",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["==", "$type", "Point"],
+ ["<=", "rank", 24],
+ [">=", "rank", 15],
+ ["any", ["!has", "level"], ["==", "level", 0]]
+ ],
+ "layout": {
+ "icon-image": "{class}_11",
+ "text-anchor": "top",
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-max-width": 9,
+ "text-offset": [0, 0.6],
+ "text-padding": 2,
+ "text-size": 12,
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "rgba(2, 2, 3, 1)",
+ "text-halo-blur": 0.5,
+ "text-halo-color": "rgba(232, 227, 227, 1)",
+ "text-halo-width": 1
+ }
+ },
+ {
+ "id": "poi-level-1",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "poi",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ ["==", "$type", "Point"],
+ ["<=", "rank", 14],
+ ["has", "name"],
+ ["any", ["!has", "level"], ["==", "level", 0]]
+ ],
+ "layout": {
+ "icon-image": "{class}_11",
+ "text-anchor": "top",
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-max-width": 9,
+ "text-offset": [0, 0.6],
+ "text-padding": 2,
+ "text-size": 12,
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "rgba(2, 2, 3, 1)",
+ "text-halo-blur": 0.5,
+ "text-halo-color": "rgba(232, 227, 227, 1)",
+ "text-halo-width": 2
+ }
+ },
+ {
+ "id": "poi-railway",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "poi",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["==", "$type", "Point"],
+ ["has", "name"],
+ ["==", "class", "railway"],
+ ["==", "subclass", "station"]
+ ],
+ "layout": {
+ "icon-allow-overlap": false,
+ "icon-ignore-placement": false,
+ "icon-image": "{class}_11",
+ "icon-optional": false,
+ "text-allow-overlap": false,
+ "text-anchor": "top",
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-ignore-placement": false,
+ "text-max-width": 9,
+ "text-offset": [0, 0.6],
+ "text-optional": true,
+ "text-padding": 2,
+ "text-size": 12
+ },
+ "paint": {
+ "text-color": "rgba(0, 0, 0, 1)",
+ "text-halo-blur": 0.5,
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 1
+ }
+ },
+ {
+ "id": "place-village",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "filter": ["==", "class", "village"],
+ "layout": {
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-max-width": 8,
+ "text-size": {"base": 1.2, "stops": [[10, 12], [15, 22]]},
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "rgba(0, 0, 0, 1)",
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 1.2
+ }
+ },
+ {
+ "id": "place-town",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "filter": ["==", "class", "town"],
+ "layout": {
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-max-width": 8,
+ "text-size": {"base": 1.2, "stops": [[10, 14], [15, 24]]},
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "rgba(0, 0, 0, 1)",
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 1.2
+ }
+ },
+ {
+ "id": "place-city",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "filter": ["all", ["!=", "capital", 2], ["==", "class", "city"]],
+ "layout": {
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-max-width": 8,
+ "text-size": {"base": 1.2, "stops": [[7, 14], [11, 24]]},
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "rgba(0, 0, 0, 1)",
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 1.2
+ }
+ },
+ {
+ "id": "place-city-capital",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "filter": ["all", ["==", "capital", 2], ["==", "class", "city"]],
+ "layout": {
+ "icon-image": "star_11",
+ "icon-size": 0.8,
+ "text-anchor": "left",
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-max-width": 8,
+ "text-offset": [0.4, 0],
+ "text-size": {"base": 1.2, "stops": [[7, 14], [11, 24]]},
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#333",
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 1.2
+ }
+ },
+ {
+ "id": "place-country-other",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "filter": [
+ "all",
+ ["==", "class", "country"],
+ [">=", "rank", 3],
+ ["!has", "iso_a2"]
+ ],
+ "layout": {
+ "text-field": "{name:latin}",
+ "text-font": ["Noto Sans Italic"],
+ "text-max-width": 6.25,
+ "text-size": {"stops": [[3, 11], [7, 17]]},
+ "text-transform": "uppercase",
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#334",
+ "text-halo-blur": 1,
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 2
+ }
+ },
+ {
+ "id": "place-country-3",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "filter": [
+ "all",
+ ["==", "class", "country"],
+ [">=", "rank", 3],
+ ["has", "iso_a2"]
+ ],
+ "layout": {
+ "text-field": "{name:latin}",
+ "text-font": ["Noto Sans Bold"],
+ "text-max-width": 6.25,
+ "text-size": {"stops": [[3, 11], [7, 17]]},
+ "text-transform": "uppercase",
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#334",
+ "text-halo-blur": 1,
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 2
+ }
+ },
+ {
+ "id": "place-country-2",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "filter": [
+ "all",
+ ["==", "class", "country"],
+ ["==", "rank", 2],
+ ["has", "iso_a2"]
+ ],
+ "layout": {
+ "text-field": "{name:latin}",
+ "text-font": ["Noto Sans Bold"],
+ "text-max-width": 6.25,
+ "text-size": {"stops": [[2, 11], [5, 17]]},
+ "text-transform": "uppercase",
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#334",
+ "text-halo-blur": 1,
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 2
+ }
+ },
+ {
+ "id": "place-country-1",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "filter": [
+ "all",
+ ["==", "class", "country"],
+ ["==", "rank", 1],
+ ["has", "iso_a2"]
+ ],
+ "layout": {
+ "text-field": "{name:latin}",
+ "text-font": ["Noto Sans Bold"],
+ "text-max-width": 6.25,
+ "text-size": {"stops": [[1, 11], [4, 17]]},
+ "text-transform": "uppercase",
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#334",
+ "text-halo-blur": 1,
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 2
+ }
+ },
+ {
+ "id": "place-continent",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "maxzoom": 1,
+ "filter": ["==", "class", "continent"],
+ "layout": {
+ "text-field": "{name:latin}",
+ "text-font": ["Noto Sans Bold"],
+ "text-max-width": 6.25,
+ "text-size": 14,
+ "text-transform": "uppercase",
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#334",
+ "text-halo-blur": 1,
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 2
+ }
+ },
+ {
+ "id": "sections-symbol",
+ "type": "symbol",
+ "source": "cadastre",
+ "source-layer": "sections",
+ "minzoom": 13,
+ "maxzoom": 16,
+ "layout": {
+ "visibility": "visible",
+ "text-field": "{code}",
+ "text-font": ["Lato Bold"],
+ "text-optional": false,
+ "text-size": 14
+ },
+ "paint": {
+ "text-color": "rgba(0, 0, 0, 1)",
+ "text-halo-color": "rgba(200, 214, 248, 1)",
+ "text-halo-width": 1,
+ "text-halo-blur": 0,
+ "text-translate-anchor": "map",
+ "icon-halo-color": "rgba(255, 255, 255, 1)",
+ "icon-halo-width": 5,
+ "text-opacity": 1
+ }
+ },
+ {
+ "id": "parcelles-labels",
+ "type": "symbol",
+ "source": "cadastre",
+ "source-layer": "parcelles",
+ "minzoom": 16,
+ "layout": {
+ "visibility": "visible",
+ "text-field": "{numero}",
+ "text-font": ["Lato Bold"],
+ "text-size": 12,
+ "text-optional": false,
+ "text-allow-overlap": false,
+ "text-ignore-placement": false,
+ "text-keep-upright": true,
+ "symbol-z-order": "auto",
+ "symbol-avoid-edges": false,
+ "icon-allow-overlap": false
+ },
+ "paint": {
+ "text-color": "rgba(0, 0, 0, 1)",
+ "text-halo-color": "#fff6f1",
+ "text-halo-width": 1,
+ "text-halo-blur": 0,
+ "icon-opacity": 1,
+ "text-opacity": 1,
+ "icon-halo-color": "rgba(255, 255, 255, 1)",
+ "icon-color": "rgba(0, 0, 0, 1)",
+ "icon-halo-width": 0
+ }
+ }
+ ],
+ "id": "etalab-cadastre-aerial"
+}
diff --git a/app/javascript/components/MapEditor/styles/vector.json b/app/javascript/components/MapEditor/styles/vector.json
new file mode 100644
index 000000000..05bab6a1d
--- /dev/null
+++ b/app/javascript/components/MapEditor/styles/vector.json
@@ -0,0 +1,2460 @@
+{
+ "version": 8,
+ "name": "Bright",
+ "metadata": {
+ "mapbox:autocomposite": false,
+ "mapbox:groups": {
+ "1444849242106.713": {"collapsed": false, "name": "Places"},
+ "1444849334699.1902": {"collapsed": true, "name": "Bridges"},
+ "1444849345966.4436": {"collapsed": false, "name": "Roads"},
+ "1444849354174.1904": {"collapsed": true, "name": "Tunnels"},
+ "1444849364238.8171": {"collapsed": false, "name": "Buildings"},
+ "1444849382550.77": {"collapsed": false, "name": "Water"},
+ "1444849388993.3071": {"collapsed": false, "name": "Land"}
+ },
+ "mapbox:type": "template",
+ "openmaptiles:mapbox:owner": "openmaptiles",
+ "openmaptiles:mapbox:source:url": "mapbox://openmaptiles.4qljc88t",
+ "openmaptiles:version": "3.x",
+ "maputnik:renderer": "mbgljs"
+ },
+ "center": [0, 0],
+ "zoom": 1,
+ "bearing": 0,
+ "pitch": 0,
+ "sources": {
+ "openmaptiles": {
+ "type": "vector",
+ "url": "https://openmaptiles.geo.data.gouv.fr/data/france-vector.json"
+ },
+ "cadastre": {
+ "type": "vector",
+ "url": "https://openmaptiles.geo.data.gouv.fr/data/cadastre.json"
+ },
+ "decoupage-administratif": {
+ "type": "vector",
+ "url": "https://openmaptiles.geo.data.gouv.fr/data/decoupage-administratif.json"
+ }
+ },
+ "sprite": "https://openmaptiles.github.io/osm-bright-gl-style/sprite",
+ "glyphs": "https://openmaptiles.geo.data.gouv.fr/fonts/{fontstack}/{range}.pbf",
+ "layers": [
+ {
+ "id": "background",
+ "type": "background",
+ "minzoom": 0,
+ "maxzoom": 24,
+ "layout": {"visibility": "visible"},
+ "paint": {"background-color": "rgba(255, 246, 241, 1)"}
+ },
+ {
+ "id": "landcover-glacier",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849388993.3071"},
+ "source": "openmaptiles",
+ "source-layer": "landcover",
+ "filter": ["==", "subclass", "glacier"],
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "fill-color": "#fff",
+ "fill-opacity": {"base": 1, "stops": [[0, 0.9], [10, 0.3]]}
+ }
+ },
+ {
+ "id": "batiments-fill",
+ "type": "fill",
+ "source": "cadastre",
+ "source-layer": "batiments",
+ "minzoom": 16,
+ "paint": {"fill-opacity": 0.3}
+ },
+ {
+ "id": "batiments-line",
+ "type": "line",
+ "source": "cadastre",
+ "source-layer": "batiments",
+ "minzoom": 16,
+ "maxzoom": 22,
+ "layout": {"visibility": "visible"},
+ "paint": {"line-opacity": 1, "line-color": "rgba(0, 0, 0, 1)"}
+ },
+ {
+ "id": "landuse-residential",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849388993.3071"},
+ "source": "openmaptiles",
+ "source-layer": "landuse",
+ "filter": [
+ "all",
+ ["in", "class", "residential", "suburb", "neighbourhood"]
+ ],
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "fill-color": {
+ "base": 1,
+ "stops": [
+ [12, "hsla(30, 19%, 90%, 0.4)"],
+ [16, "hsla(30, 19%, 90%, 0.2)"]
+ ]
+ }
+ }
+ },
+ {
+ "id": "landuse-commercial",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849388993.3071"},
+ "source": "openmaptiles",
+ "source-layer": "landuse",
+ "filter": [
+ "all",
+ ["==", "$type", "Polygon"],
+ ["==", "class", "commercial"]
+ ],
+ "layout": {"visibility": "visible"},
+ "paint": {"fill-color": "hsla(0, 60%, 87%, 0.23)"}
+ },
+ {
+ "id": "landuse-industrial",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849388993.3071"},
+ "source": "openmaptiles",
+ "source-layer": "landuse",
+ "filter": [
+ "all",
+ ["==", "$type", "Polygon"],
+ ["==", "class", "industrial"]
+ ],
+ "paint": {"fill-color": "hsla(49, 100%, 88%, 0.34)"}
+ },
+ {
+ "id": "landuse-cemetery",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849388993.3071"},
+ "source": "openmaptiles",
+ "source-layer": "landuse",
+ "filter": ["==", "class", "cemetery"],
+ "paint": {"fill-color": "#e0e4dd"}
+ },
+ {
+ "id": "landuse-hospital",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849388993.3071"},
+ "source": "openmaptiles",
+ "source-layer": "landuse",
+ "filter": ["==", "class", "hospital"],
+ "paint": {"fill-color": "#fde"}
+ },
+ {
+ "id": "landuse-school",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849388993.3071"},
+ "source": "openmaptiles",
+ "source-layer": "landuse",
+ "filter": ["==", "class", "school"],
+ "paint": {"fill-color": "#f0e8f8"}
+ },
+ {
+ "id": "landuse-railway",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849388993.3071"},
+ "source": "openmaptiles",
+ "source-layer": "landuse",
+ "filter": ["==", "class", "railway"],
+ "paint": {"fill-color": "hsla(30, 19%, 90%, 0.4)"}
+ },
+ {
+ "id": "landcover-wood",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849388993.3071"},
+ "source": "openmaptiles",
+ "source-layer": "landcover",
+ "filter": ["==", "class", "wood"],
+ "paint": {
+ "fill-antialias": {"base": 1, "stops": [[0, false], [9, true]]},
+ "fill-color": "#6a4",
+ "fill-opacity": 0.1,
+ "fill-outline-color": "hsla(0, 0%, 0%, 0.03)"
+ }
+ },
+ {
+ "id": "landcover-grass",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849388993.3071"},
+ "source": "openmaptiles",
+ "source-layer": "landcover",
+ "filter": ["==", "class", "grass"],
+ "paint": {"fill-color": "#d8e8c8", "fill-opacity": 1}
+ },
+ {
+ "id": "landcover-grass-park",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849388993.3071"},
+ "source": "openmaptiles",
+ "source-layer": "park",
+ "filter": ["==", "class", "public_park"],
+ "paint": {"fill-color": "#d8e8c8", "fill-opacity": 0.8}
+ },
+ {
+ "id": "waterway_tunnel",
+ "type": "line",
+ "source": "openmaptiles",
+ "source-layer": "waterway",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ ["in", "class", "river", "stream", "canal"],
+ ["==", "brunnel", "tunnel"]
+ ],
+ "layout": {"line-cap": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "#a0c8f0",
+ "line-dasharray": [2, 4],
+ "line-width": {"base": 1.3, "stops": [[13, 0.5], [20, 6]]}
+ }
+ },
+ {
+ "id": "waterway-other",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849382550.77"},
+ "source": "openmaptiles",
+ "source-layer": "waterway",
+ "filter": [
+ "all",
+ ["!in", "class", "canal", "river", "stream"],
+ ["==", "intermittent", 0]
+ ],
+ "layout": {"line-cap": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "#a0c8f0",
+ "line-width": {"base": 1.3, "stops": [[13, 0.5], [20, 2]]}
+ }
+ },
+ {
+ "id": "waterway-other-intermittent",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849382550.77"},
+ "source": "openmaptiles",
+ "source-layer": "waterway",
+ "filter": [
+ "all",
+ ["!in", "class", "canal", "river", "stream"],
+ ["==", "intermittent", 1]
+ ],
+ "layout": {"line-cap": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "#a0c8f0",
+ "line-width": {"base": 1.3, "stops": [[13, 0.5], [20, 2]]},
+ "line-dasharray": [4, 3]
+ }
+ },
+ {
+ "id": "waterway-stream-canal",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849382550.77"},
+ "source": "openmaptiles",
+ "source-layer": "waterway",
+ "filter": [
+ "all",
+ ["in", "class", "canal", "stream"],
+ ["!=", "brunnel", "tunnel"],
+ ["==", "intermittent", 0]
+ ],
+ "layout": {"line-cap": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "#a0c8f0",
+ "line-width": {"base": 1.3, "stops": [[13, 0.5], [20, 6]]}
+ }
+ },
+ {
+ "id": "waterway-stream-canal-intermittent",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849382550.77"},
+ "source": "openmaptiles",
+ "source-layer": "waterway",
+ "filter": [
+ "all",
+ ["in", "class", "canal", "stream"],
+ ["!=", "brunnel", "tunnel"],
+ ["==", "intermittent", 1]
+ ],
+ "layout": {"line-cap": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "#a0c8f0",
+ "line-width": {"base": 1.3, "stops": [[13, 0.5], [20, 6]]},
+ "line-dasharray": [4, 3]
+ }
+ },
+ {
+ "id": "waterway-river",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849382550.77"},
+ "source": "openmaptiles",
+ "source-layer": "waterway",
+ "filter": [
+ "all",
+ ["==", "class", "river"],
+ ["!=", "brunnel", "tunnel"],
+ ["==", "intermittent", 0]
+ ],
+ "layout": {"line-cap": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "#a0c8f0",
+ "line-width": {"base": 1.2, "stops": [[10, 0.8], [20, 6]]}
+ }
+ },
+ {
+ "id": "waterway-river-intermittent",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849382550.77"},
+ "source": "openmaptiles",
+ "source-layer": "waterway",
+ "filter": [
+ "all",
+ ["==", "class", "river"],
+ ["!=", "brunnel", "tunnel"],
+ ["==", "intermittent", 1]
+ ],
+ "layout": {"line-cap": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "#a0c8f0",
+ "line-width": {"base": 1.2, "stops": [[10, 0.8], [20, 6]]},
+ "line-dasharray": [3, 2.5]
+ }
+ },
+ {
+ "id": "water-offset",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849382550.77"},
+ "source": "openmaptiles",
+ "source-layer": "water",
+ "maxzoom": 8,
+ "filter": ["==", "$type", "Polygon"],
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "fill-color": "#a0c8f0",
+ "fill-opacity": 1,
+ "fill-translate": {"base": 1, "stops": [[6, [2, 0]], [8, [0, 0]]]}
+ }
+ },
+ {
+ "id": "water",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849382550.77"},
+ "source": "openmaptiles",
+ "source-layer": "water",
+ "filter": ["all", ["!=", "intermittent", 1]],
+ "layout": {"visibility": "visible"},
+ "paint": {"fill-color": "hsl(210, 67%, 85%)"}
+ },
+ {
+ "id": "water-intermittent",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849382550.77"},
+ "source": "openmaptiles",
+ "source-layer": "water",
+ "filter": ["all", ["==", "intermittent", 1]],
+ "layout": {"visibility": "visible"},
+ "paint": {"fill-color": "hsl(210, 67%, 85%)", "fill-opacity": 0.7}
+ },
+ {
+ "id": "water-pattern",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849382550.77"},
+ "source": "openmaptiles",
+ "source-layer": "water",
+ "filter": ["all"],
+ "layout": {"visibility": "visible"},
+ "paint": {"fill-pattern": "wave", "fill-translate": [0, 2.5]}
+ },
+ {
+ "id": "landcover-ice-shelf",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849382550.77"},
+ "source": "openmaptiles",
+ "source-layer": "landcover",
+ "filter": ["==", "subclass", "ice_shelf"],
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "fill-color": "#fff",
+ "fill-opacity": {"base": 1, "stops": [[0, 0.9], [10, 0.3]]}
+ }
+ },
+ {
+ "id": "landcover-sand",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849382550.77"},
+ "source": "openmaptiles",
+ "source-layer": "landcover",
+ "filter": ["all", ["==", "class", "sand"]],
+ "layout": {"visibility": "visible"},
+ "paint": {"fill-color": "rgba(245, 238, 188, 1)", "fill-opacity": 1}
+ },
+ {
+ "id": "building",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849364238.8171"},
+ "source": "openmaptiles",
+ "source-layer": "building",
+ "layout": {"visibility": "none"},
+ "paint": {
+ "fill-antialias": true,
+ "fill-color": {"base": 1, "stops": [[15.5, "#f2eae2"], [16, "#dfdbd7"]]}
+ }
+ },
+ {
+ "id": "building-top",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849364238.8171"},
+ "source": "openmaptiles",
+ "source-layer": "building",
+ "layout": {"visibility": "none"},
+ "paint": {
+ "fill-color": "#f2eae2",
+ "fill-opacity": {"base": 1, "stops": [[13, 0], [16, 1]]},
+ "fill-outline-color": "#dfdbd7",
+ "fill-translate": {"base": 1, "stops": [[14, [0, 0]], [16, [-2, -2]]]}
+ }
+ },
+ {
+ "id": "tunnel-service-track-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "tunnel"],
+ ["in", "class", "service", "track"]
+ ],
+ "layout": {"line-join": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "#cfcdca",
+ "line-dasharray": [0.5, 0.25],
+ "line-width": {"base": 1.2, "stops": [[15, 1], [16, 4], [20, 11]]}
+ }
+ },
+ {
+ "id": "tunnel-minor-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": ["all", ["==", "brunnel", "tunnel"], ["==", "class", "minor"]],
+ "layout": {"line-join": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "#cfcdca",
+ "line-opacity": {"stops": [[12, 0], [12.5, 1]]},
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12, 0.5], [13, 1], [14, 4], [20, 15]]
+ }
+ }
+ },
+ {
+ "id": "tunnel-secondary-tertiary-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "tunnel"],
+ ["in", "class", "secondary", "tertiary"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": 1,
+ "line-width": {"base": 1.2, "stops": [[8, 1.5], [20, 17]]}
+ }
+ },
+ {
+ "id": "tunnel-trunk-primary-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "tunnel"],
+ ["in", "class", "primary", "trunk"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-width": {
+ "base": 1.2,
+ "stops": [[5, 0.4], [6, 0.6], [7, 1.5], [20, 22]]
+ }
+ }
+ },
+ {
+ "id": "tunnel-motorway-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "tunnel"],
+ ["==", "class", "motorway"]
+ ],
+ "layout": {"line-join": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-dasharray": [0.5, 0.25],
+ "line-width": {
+ "base": 1.2,
+ "stops": [[5, 0.4], [6, 0.6], [7, 1.5], [20, 22]]
+ }
+ }
+ },
+ {
+ "id": "tunnel-path",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ ["all", ["==", "brunnel", "tunnel"], ["==", "class", "path"]]
+ ],
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "line-color": "#cba",
+ "line-dasharray": [1.5, 0.75],
+ "line-width": {"base": 1.2, "stops": [[15, 1.2], [20, 4]]}
+ }
+ },
+ {
+ "id": "tunnel-service-track",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "tunnel"],
+ ["in", "class", "service", "track"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#fff",
+ "line-width": {"base": 1.2, "stops": [[15.5, 0], [16, 2], [20, 7.5]]}
+ }
+ },
+ {
+ "id": "tunnel-minor",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "tunnel"],
+ ["==", "class", "minor_road"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#fff",
+ "line-opacity": 1,
+ "line-width": {"base": 1.2, "stops": [[13.5, 0], [14, 2.5], [20, 11.5]]}
+ }
+ },
+ {
+ "id": "tunnel-secondary-tertiary",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "tunnel"],
+ ["in", "class", "secondary", "tertiary"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#fff4c6",
+ "line-width": {"base": 1.2, "stops": [[6.5, 0], [7, 0.5], [20, 10]]}
+ }
+ },
+ {
+ "id": "tunnel-trunk-primary",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "tunnel"],
+ ["in", "class", "primary", "trunk"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#fff4c6",
+ "line-width": {"base": 1.2, "stops": [[6.5, 0], [7, 0.5], [20, 18]]}
+ }
+ },
+ {
+ "id": "tunnel-motorway",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "tunnel"],
+ ["==", "class", "motorway"]
+ ],
+ "layout": {"line-join": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "#ffdaa6",
+ "line-width": {"base": 1.2, "stops": [[6.5, 0], [7, 0.5], [20, 18]]}
+ }
+ },
+ {
+ "id": "tunnel-railway",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849354174.1904"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": ["all", ["==", "brunnel", "tunnel"], ["==", "class", "rail"]],
+ "paint": {
+ "line-color": "#bbb",
+ "line-dasharray": [2, 2],
+ "line-width": {"base": 1.4, "stops": [[14, 0.4], [15, 0.75], [20, 2]]}
+ }
+ },
+ {
+ "id": "ferry",
+ "type": "line",
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": ["all", ["in", "class", "ferry"]],
+ "layout": {"line-join": "round", "visibility": "none"},
+ "paint": {
+ "line-color": "rgba(108, 159, 182, 1)",
+ "line-dasharray": [2, 2],
+ "line-width": 1.1
+ }
+ },
+ {
+ "id": "aeroway-taxiway-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "aeroway",
+ "minzoom": 12,
+ "filter": ["all", ["in", "class", "taxiway"]],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "rgba(153, 153, 153, 1)",
+ "line-opacity": 1,
+ "line-width": {"base": 1.5, "stops": [[11, 2], [17, 12]]}
+ }
+ },
+ {
+ "id": "aeroway-runway-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "aeroway",
+ "minzoom": 12,
+ "filter": ["all", ["in", "class", "runway"]],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "rgba(153, 153, 153, 1)",
+ "line-opacity": 1,
+ "line-width": {"base": 1.5, "stops": [[11, 5], [17, 55]]}
+ }
+ },
+ {
+ "id": "aeroway-area",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "aeroway",
+ "minzoom": 4,
+ "filter": [
+ "all",
+ ["==", "$type", "Polygon"],
+ ["in", "class", "runway", "taxiway"]
+ ],
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "fill-color": "rgba(255, 255, 255, 1)",
+ "fill-opacity": {"base": 1, "stops": [[13, 0], [14, 1]]}
+ }
+ },
+ {
+ "id": "aeroway-taxiway",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "aeroway",
+ "minzoom": 4,
+ "filter": [
+ "all",
+ ["in", "class", "taxiway"],
+ ["==", "$type", "LineString"]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "rgba(255, 255, 255, 1)",
+ "line-opacity": {"base": 1, "stops": [[11, 0], [12, 1]]},
+ "line-width": {"base": 1.5, "stops": [[11, 1], [17, 10]]}
+ }
+ },
+ {
+ "id": "aeroway-runway",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "aeroway",
+ "minzoom": 4,
+ "filter": [
+ "all",
+ ["in", "class", "runway"],
+ ["==", "$type", "LineString"]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "rgba(255, 255, 255, 1)",
+ "line-opacity": {"base": 1, "stops": [[11, 0], [12, 1]]},
+ "line-width": {"base": 1.5, "stops": [[11, 4], [17, 50]]}
+ }
+ },
+ {
+ "id": "road_area_pier",
+ "type": "fill",
+ "metadata": {},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": ["all", ["==", "$type", "Polygon"], ["==", "class", "pier"]],
+ "layout": {"visibility": "none"},
+ "paint": {"fill-antialias": true, "fill-color": "#f8f4f0"}
+ },
+ {
+ "id": "road_pier",
+ "type": "line",
+ "metadata": {},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 0,
+ "filter": ["all", ["==", "$type", "LineString"], ["in", "class", "pier"]],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "none"
+ },
+ "paint": {
+ "line-color": "#f8f4f0",
+ "line-width": {"base": 1.2, "stops": [[15, 1], [17, 4]]}
+ }
+ },
+ {
+ "id": "highway-area",
+ "type": "fill",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": ["all", ["==", "$type", "Polygon"], ["!in", "class", "pier"]],
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "fill-antialias": false,
+ "fill-color": "hsla(0, 0%, 89%, 0.56)",
+ "fill-opacity": 0.9,
+ "fill-outline-color": "#cfcdca"
+ }
+ },
+ {
+ "id": "highway-motorway-link-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["==", "class", "motorway_link"]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": 1,
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12, 1], [13, 3], [14, 4], [20, 15]]
+ }
+ }
+ },
+ {
+ "id": "highway-link-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ [
+ "in",
+ "class",
+ "primary_link",
+ "secondary_link",
+ "tertiary_link",
+ "trunk_link"
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": 1,
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12, 1], [13, 3], [14, 4], [20, 15]]
+ }
+ }
+ },
+ {
+ "id": "highway-minor-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ [
+ "all",
+ ["!=", "brunnel", "tunnel"],
+ ["in", "class", "minor", "service", "track"]
+ ]
+ ],
+ "layout": {"line-cap": "round", "line-join": "round"},
+ "paint": {
+ "line-color": "#cfcdca",
+ "line-opacity": {"stops": [[12, 0], [12.5, 1]]},
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12, 0.5], [13, 1], [14, 4], [20, 15]]
+ }
+ }
+ },
+ {
+ "id": "highway-secondary-tertiary-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["in", "class", "secondary", "tertiary"]
+ ],
+ "layout": {
+ "line-cap": "butt",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": 1,
+ "line-width": {"base": 1.2, "stops": [[8, 1.5], [20, 17]]}
+ }
+ },
+ {
+ "id": "highway-primary-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 5,
+ "filter": [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["in", "class", "primary"]
+ ],
+ "layout": {
+ "line-cap": "butt",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": {"stops": [[7, 0], [8, 1]]},
+ "line-width": {
+ "base": 1.2,
+ "stops": [[7, 0], [8, 0.6], [9, 1.5], [20, 22]]
+ }
+ }
+ },
+ {
+ "id": "highway-trunk-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 5,
+ "filter": [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["in", "class", "trunk"]
+ ],
+ "layout": {
+ "line-cap": "butt",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": {"stops": [[5, 0], [6, 1]]},
+ "line-width": {
+ "base": 1.2,
+ "stops": [[5, 0], [6, 0.6], [7, 1.5], [20, 22]]
+ }
+ }
+ },
+ {
+ "id": "highway-motorway-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 4,
+ "filter": [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["==", "class", "motorway"]
+ ],
+ "layout": {
+ "line-cap": "butt",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": {"stops": [[4, 0], [5, 1]]},
+ "line-width": {
+ "base": 1.2,
+ "stops": [[4, 0], [5, 0.4], [6, 0.6], [7, 1.5], [20, 22]]
+ }
+ }
+ },
+ {
+ "id": "highway-path",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ ["all", ["!in", "brunnel", "bridge", "tunnel"], ["==", "class", "path"]]
+ ],
+ "paint": {
+ "line-color": "#cba",
+ "line-dasharray": [1.5, 0.75],
+ "line-width": {"base": 1.2, "stops": [[15, 1.2], [20, 4]]}
+ }
+ },
+ {
+ "id": "highway-motorway-link",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 12,
+ "filter": [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["==", "class", "motorway_link"]
+ ],
+ "layout": {"line-cap": "round", "line-join": "round"},
+ "paint": {
+ "line-color": "#fc8",
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12.5, 0], [13, 1.5], [14, 2.5], [20, 11.5]]
+ }
+ }
+ },
+ {
+ "id": "highway-link",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ [
+ "in",
+ "class",
+ "primary_link",
+ "secondary_link",
+ "tertiary_link",
+ "trunk_link"
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#fea",
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12.5, 0], [13, 1.5], [14, 2.5], [20, 11.5]]
+ }
+ }
+ },
+ {
+ "id": "highway-minor",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ [
+ "all",
+ ["!=", "brunnel", "tunnel"],
+ ["in", "class", "minor", "service", "track"]
+ ]
+ ],
+ "layout": {"line-cap": "round", "line-join": "round"},
+ "paint": {
+ "line-color": "#fff",
+ "line-opacity": 1,
+ "line-width": {"base": 1.2, "stops": [[13.5, 0], [14, 2.5], [20, 11.5]]}
+ }
+ },
+ {
+ "id": "highway-secondary-tertiary",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["in", "class", "secondary", "tertiary"]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#fea",
+ "line-width": {"base": 1.2, "stops": [[6.5, 0], [8, 0.5], [20, 13]]}
+ }
+ },
+ {
+ "id": "highway-primary",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["in", "class", "primary"]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#fea",
+ "line-width": {"base": 1.2, "stops": [[8.5, 0], [9, 0.5], [20, 18]]}
+ }
+ },
+ {
+ "id": "highway-trunk",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["in", "class", "trunk"]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#fea",
+ "line-width": {"base": 1.2, "stops": [[6.5, 0], [7, 0.5], [20, 18]]}
+ }
+ },
+ {
+ "id": "highway-motorway",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 5,
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ [
+ "all",
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["==", "class", "motorway"]
+ ]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "#fc8",
+ "line-width": {"base": 1.2, "stops": [[6.5, 0], [7, 0.5], [20, 18]]}
+ }
+ },
+ {
+ "id": "railway-transit",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ ["all", ["==", "class", "transit"], ["!in", "brunnel", "tunnel"]]
+ ],
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "line-color": "hsla(0, 0%, 73%, 0.77)",
+ "line-width": {"base": 1.4, "stops": [[14, 0.4], [20, 1]]}
+ }
+ },
+ {
+ "id": "railway-transit-hatching",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ ["all", ["==", "class", "transit"], ["!in", "brunnel", "tunnel"]]
+ ],
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "line-color": "hsla(0, 0%, 73%, 0.68)",
+ "line-dasharray": [0.2, 8],
+ "line-width": {"base": 1.4, "stops": [[14.5, 0], [15, 2], [20, 6]]}
+ }
+ },
+ {
+ "id": "railway-service",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ ["all", ["==", "class", "rail"], ["has", "service"]]
+ ],
+ "paint": {
+ "line-color": "hsla(0, 0%, 73%, 0.77)",
+ "line-width": {"base": 1.4, "stops": [[14, 0.4], [20, 1]]}
+ }
+ },
+ {
+ "id": "railway-service-hatching",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ ["all", ["==", "class", "rail"], ["has", "service"]]
+ ],
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "line-color": "hsla(0, 0%, 73%, 0.68)",
+ "line-dasharray": [0.2, 8],
+ "line-width": {"base": 1.4, "stops": [[14.5, 0], [15, 2], [20, 6]]}
+ }
+ },
+ {
+ "id": "railway",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ [
+ "all",
+ ["!has", "service"],
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["==", "class", "rail"]
+ ]
+ ],
+ "paint": {
+ "line-color": "#bbb",
+ "line-width": {"base": 1.4, "stops": [[14, 0.4], [15, 0.75], [20, 2]]}
+ }
+ },
+ {
+ "id": "railway-hatching",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849345966.4436"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ [
+ "all",
+ ["!has", "service"],
+ ["!in", "brunnel", "bridge", "tunnel"],
+ ["==", "class", "rail"]
+ ]
+ ],
+ "paint": {
+ "line-color": "#bbb",
+ "line-dasharray": [0.2, 8],
+ "line-width": {"base": 1.4, "stops": [[14.5, 0], [15, 3], [20, 8]]}
+ }
+ },
+ {
+ "id": "bridge-motorway-link-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ ["==", "class", "motorway_link"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": 1,
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12, 1], [13, 3], [14, 4], [20, 15]]
+ }
+ }
+ },
+ {
+ "id": "bridge-link-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ [
+ "in",
+ "class",
+ "primary_link",
+ "secondary_link",
+ "tertiary_link",
+ "trunk_link"
+ ]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": 1,
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12, 1], [13, 3], [14, 4], [20, 15]]
+ }
+ }
+ },
+ {
+ "id": "bridge-secondary-tertiary-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ ["in", "class", "secondary", "tertiary"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-opacity": 1,
+ "line-width": {"base": 1.2, "stops": [[8, 1.5], [20, 28]]}
+ }
+ },
+ {
+ "id": "bridge-trunk-primary-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ ["in", "class", "primary", "trunk"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "hsl(28, 76%, 67%)",
+ "line-width": {
+ "base": 1.2,
+ "stops": [[5, 0.4], [6, 0.6], [7, 1.5], [20, 26]]
+ }
+ }
+ },
+ {
+ "id": "bridge-motorway-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ ["==", "class", "motorway"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#e9ac77",
+ "line-width": {
+ "base": 1.2,
+ "stops": [[5, 0.4], [6, 0.6], [7, 1.5], [20, 22]]
+ }
+ }
+ },
+ {
+ "id": "bridge-path-casing",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ ["all", ["==", "brunnel", "bridge"], ["==", "class", "path"]]
+ ],
+ "paint": {
+ "line-color": "#f8f4f0",
+ "line-width": {"base": 1.2, "stops": [[15, 1.2], [20, 18]]}
+ }
+ },
+ {
+ "id": "bridge-path",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ ["all", ["==", "brunnel", "bridge"], ["==", "class", "path"]]
+ ],
+ "paint": {
+ "line-color": "#cba",
+ "line-dasharray": [1.5, 0.75],
+ "line-width": {"base": 1.2, "stops": [[15, 1.2], [20, 4]]}
+ }
+ },
+ {
+ "id": "bridge-motorway-link",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ ["==", "class", "motorway_link"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#fc8",
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12.5, 0], [13, 1.5], [14, 2.5], [20, 11.5]]
+ }
+ }
+ },
+ {
+ "id": "bridge-link",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ [
+ "in",
+ "class",
+ "primary_link",
+ "secondary_link",
+ "tertiary_link",
+ "trunk_link"
+ ]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#fea",
+ "line-width": {
+ "base": 1.2,
+ "stops": [[12.5, 0], [13, 1.5], [14, 2.5], [20, 11.5]]
+ }
+ }
+ },
+ {
+ "id": "bridge-secondary-tertiary",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ ["in", "class", "secondary", "tertiary"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#fea",
+ "line-width": {"base": 1.2, "stops": [[6.5, 0], [7, 0.5], [20, 20]]}
+ }
+ },
+ {
+ "id": "bridge-trunk-primary",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ ["in", "class", "primary", "trunk"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#fea",
+ "line-width": {"base": 1.2, "stops": [[6.5, 0], [7, 0.5], [20, 18]]}
+ }
+ },
+ {
+ "id": "bridge-motorway",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": [
+ "all",
+ ["==", "brunnel", "bridge"],
+ ["==", "class", "motorway"]
+ ],
+ "layout": {"line-join": "round"},
+ "paint": {
+ "line-color": "#fc8",
+ "line-width": {"base": 1.2, "stops": [[6.5, 0], [7, 0.5], [20, 18]]}
+ }
+ },
+ {
+ "id": "bridge-railway",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": ["all", ["==", "brunnel", "bridge"], ["==", "class", "rail"]],
+ "paint": {
+ "line-color": "#bbb",
+ "line-width": {"base": 1.4, "stops": [[14, 0.4], [15, 0.75], [20, 2]]}
+ }
+ },
+ {
+ "id": "bridge-railway-hatching",
+ "type": "line",
+ "metadata": {"mapbox:group": "1444849334699.1902"},
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "filter": ["all", ["==", "brunnel", "bridge"], ["==", "class", "rail"]],
+ "paint": {
+ "line-color": "#bbb",
+ "line-dasharray": [0.2, 8],
+ "line-width": {"base": 1.4, "stops": [[14.5, 0], [15, 3], [20, 8]]}
+ }
+ },
+ {
+ "id": "cablecar",
+ "type": "line",
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 13,
+ "filter": ["==", "class", "cable_car"],
+ "layout": {"line-cap": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "hsl(0, 0%, 70%)",
+ "line-width": {"base": 1, "stops": [[11, 1], [19, 2.5]]}
+ }
+ },
+ {
+ "id": "cablecar-dash",
+ "type": "line",
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 13,
+ "filter": ["==", "class", "cable_car"],
+ "layout": {"line-cap": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "hsl(0, 0%, 70%)",
+ "line-dasharray": [2, 3],
+ "line-width": {"base": 1, "stops": [[11, 3], [19, 5.5]]}
+ }
+ },
+ {
+ "id": "boundary-land-level-4",
+ "type": "line",
+ "source": "openmaptiles",
+ "source-layer": "boundary",
+ "filter": [
+ "all",
+ [">=", "admin_level", 4],
+ ["<=", "admin_level", 8],
+ ["!=", "maritime", 1]
+ ],
+ "layout": {"line-join": "round", "visibility": "visible"},
+ "paint": {
+ "line-color": "#9e9cab",
+ "line-dasharray": [3, 1, 1, 1],
+ "line-width": {"base": 1.4, "stops": [[4, 0.4], [5, 1], [12, 3]]}
+ }
+ },
+ {
+ "id": "boundary-land-level-2",
+ "type": "line",
+ "source": "openmaptiles",
+ "source-layer": "boundary",
+ "filter": [
+ "all",
+ ["==", "admin_level", 2],
+ ["!=", "maritime", 1],
+ ["!=", "disputed", 1]
+ ],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "hsl(248, 7%, 66%)",
+ "line-width": {
+ "base": 1,
+ "stops": [[0, 0.6], [4, 1.4], [5, 2], [12, 8]]
+ }
+ }
+ },
+ {
+ "id": "boundary-land-disputed",
+ "type": "line",
+ "source": "openmaptiles",
+ "source-layer": "boundary",
+ "filter": ["all", ["!=", "maritime", 1], ["==", "disputed", 1]],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "hsl(248, 7%, 70%)",
+ "line-dasharray": [1, 3],
+ "line-width": {
+ "base": 1,
+ "stops": [[0, 0.6], [4, 1.4], [5, 2], [12, 8]]
+ }
+ }
+ },
+ {
+ "id": "boundary-water",
+ "type": "line",
+ "source": "openmaptiles",
+ "source-layer": "boundary",
+ "filter": ["all", ["in", "admin_level", 2, 4], ["==", "maritime", 1]],
+ "layout": {
+ "line-cap": "round",
+ "line-join": "round",
+ "visibility": "visible"
+ },
+ "paint": {
+ "line-color": "rgba(154, 189, 214, 1)",
+ "line-opacity": {"stops": [[6, 0.6], [10, 1]]},
+ "line-width": {
+ "base": 1,
+ "stops": [[0, 0.6], [4, 1.4], [5, 2], [12, 8]]
+ }
+ }
+ },
+ {
+ "id": "waterway-name",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "waterway",
+ "minzoom": 13,
+ "filter": ["all", ["==", "$type", "LineString"], ["has", "name"]],
+ "layout": {
+ "symbol-placement": "line",
+ "symbol-spacing": 350,
+ "text-field": "{name:latin} {name:nonlatin}",
+ "text-font": ["Noto Sans Italic"],
+ "text-letter-spacing": 0.2,
+ "text-max-width": 5,
+ "text-rotation-alignment": "map",
+ "text-size": 14,
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#74aee9",
+ "text-halo-color": "rgba(255,255,255,0.7)",
+ "text-halo-width": 1.5
+ }
+ },
+ {
+ "id": "parcelles",
+ "type": "line",
+ "source": "cadastre",
+ "source-layer": "parcelles",
+ "minzoom": 16,
+ "maxzoom": 24,
+ "layout": {"visibility": "visible", "line-cap": "butt"},
+ "paint": {
+ "line-color": "#0053b3",
+ "line-opacity": 0.9,
+ "line-width": {"stops": [[16, 1], [17, 2]]}
+ }
+ },
+ {
+ "id": "parcelles-fill",
+ "type": "fill",
+ "source": "cadastre",
+ "source-layer": "parcelles",
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "fill-color": "rgba(129, 123, 0, 1)",
+ "fill-opacity": [
+ "case",
+ ["boolean", ["feature-state", "hover"], false],
+ 0.7,
+ 0.1
+ ]
+ }
+ },
+ {
+ "id": "parcelle-highlighted",
+ "type": "fill",
+ "source": "cadastre",
+ "source-layer": "parcelles",
+ "filter": ["==", "id", ""],
+ "paint": {
+ "fill-color": "rgba(1, 129, 0, 1)",
+ "fill-opacity": 0.7
+ }
+ },
+ {
+ "id": "sections",
+ "type": "line",
+ "source": "cadastre",
+ "source-layer": "sections",
+ "minzoom": 12,
+ "maxzoom": 24,
+ "layout": {"visibility": "visible"},
+ "paint": {
+ "line-color": "rgba(116, 134, 241, 1)",
+ "line-opacity": 0.9,
+ "line-width": 2
+ }
+ },
+ {
+ "id": "communes",
+ "type": "line",
+ "source": "decoupage-administratif",
+ "source-layer": "communes",
+ "minzoom": 10,
+ "maxzoom": 24,
+ "layout": {"visibility": "visible"}
+ },
+ {
+ "id": "departements",
+ "type": "line",
+ "source": "decoupage-administratif",
+ "source-layer": "departements",
+ "layout": {"visibility": "visible"}
+ },
+ {
+ "id": "regions",
+ "type": "line",
+ "source": "decoupage-administratif",
+ "source-layer": "regions",
+ "layout": {"visibility": "visible"}
+ },
+ {
+ "id": "water-name-lakeline",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "water_name",
+ "filter": ["==", "$type", "LineString"],
+ "layout": {
+ "symbol-placement": "line",
+ "symbol-spacing": 350,
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Italic"],
+ "text-letter-spacing": 0.2,
+ "text-max-width": 5,
+ "text-rotation-alignment": "map",
+ "text-size": 14
+ },
+ "paint": {
+ "text-color": "#74aee9",
+ "text-halo-color": "rgba(255,255,255,0.7)",
+ "text-halo-width": 1.5
+ }
+ },
+ {
+ "id": "water-name-ocean",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "water_name",
+ "filter": ["all", ["==", "$type", "Point"], ["==", "class", "ocean"]],
+ "layout": {
+ "symbol-placement": "point",
+ "symbol-spacing": 350,
+ "text-field": "{name:latin}",
+ "text-font": ["Noto Sans Italic"],
+ "text-letter-spacing": 0.2,
+ "text-max-width": 5,
+ "text-rotation-alignment": "map",
+ "text-size": 14
+ },
+ "paint": {
+ "text-color": "#74aee9",
+ "text-halo-color": "rgba(255,255,255,0.7)",
+ "text-halo-width": 1.5
+ }
+ },
+ {
+ "id": "water-name-other",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "water_name",
+ "filter": ["all", ["==", "$type", "Point"], ["!in", "class", "ocean"]],
+ "layout": {
+ "symbol-placement": "point",
+ "symbol-spacing": 350,
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Italic"],
+ "text-letter-spacing": 0.2,
+ "text-max-width": 5,
+ "text-rotation-alignment": "map",
+ "text-size": {"stops": [[0, 10], [6, 14]]},
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#74aee9",
+ "text-halo-color": "rgba(255,255,255,0.7)",
+ "text-halo-width": 1.5
+ }
+ },
+ {
+ "id": "road_oneway",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["==", "oneway", 1],
+ [
+ "in",
+ "class",
+ "motorway",
+ "trunk",
+ "primary",
+ "secondary",
+ "tertiary",
+ "minor",
+ "service"
+ ]
+ ],
+ "layout": {
+ "icon-image": "oneway",
+ "icon-padding": 2,
+ "icon-rotate": 90,
+ "icon-rotation-alignment": "map",
+ "icon-size": {"stops": [[15, 0.5], [19, 1]]},
+ "symbol-placement": "line",
+ "symbol-spacing": 75,
+ "visibility": "visible"
+ },
+ "paint": {"icon-opacity": 0.5}
+ },
+ {
+ "id": "road_oneway_opposite",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "transportation",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["==", "oneway", -1],
+ [
+ "in",
+ "class",
+ "motorway",
+ "trunk",
+ "primary",
+ "secondary",
+ "tertiary",
+ "minor",
+ "service"
+ ]
+ ],
+ "layout": {
+ "icon-image": "oneway",
+ "icon-padding": 2,
+ "icon-rotate": -90,
+ "icon-rotation-alignment": "map",
+ "icon-size": {"stops": [[15, 0.5], [19, 1]]},
+ "symbol-placement": "line",
+ "symbol-spacing": 75,
+ "visibility": "visible"
+ },
+ "paint": {"icon-opacity": 0.5}
+ },
+ {
+ "id": "highway-name-path",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "transportation_name",
+ "minzoom": 15.5,
+ "filter": ["==", "class", "path"],
+ "layout": {
+ "symbol-placement": "line",
+ "text-field": "{name:latin} {name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-rotation-alignment": "map",
+ "text-size": {"base": 1, "stops": [[13, 12], [14, 13]]}
+ },
+ "paint": {
+ "text-color": "hsl(30, 23%, 62%)",
+ "text-halo-color": "#f8f4f0",
+ "text-halo-width": 0.5
+ }
+ },
+ {
+ "id": "highway-name-minor",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "transportation_name",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["==", "$type", "LineString"],
+ ["in", "class", "minor", "service", "track"]
+ ],
+ "layout": {
+ "symbol-placement": "line",
+ "text-field": "{name:latin} {name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-rotation-alignment": "map",
+ "text-size": {"base": 1, "stops": [[13, 12], [14, 13]]}
+ },
+ "paint": {
+ "text-color": "#765",
+ "text-halo-blur": 0.5,
+ "text-halo-width": 1
+ }
+ },
+ {
+ "id": "highway-name-major",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "transportation_name",
+ "minzoom": 12.2,
+ "filter": ["in", "class", "primary", "secondary", "tertiary", "trunk"],
+ "layout": {
+ "symbol-placement": "line",
+ "text-field": "{name:latin} {name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-rotation-alignment": "map",
+ "text-size": {"base": 1, "stops": [[13, 12], [14, 13]]}
+ },
+ "paint": {
+ "text-color": "#765",
+ "text-halo-blur": 0.5,
+ "text-halo-width": 1
+ }
+ },
+ {
+ "id": "highway-shield",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "transportation_name",
+ "minzoom": 8,
+ "filter": [
+ "all",
+ ["<=", "ref_length", 6],
+ ["==", "$type", "LineString"],
+ ["!in", "network", "us-interstate", "us-highway", "us-state"]
+ ],
+ "layout": {
+ "icon-image": "road_{ref_length}",
+ "icon-rotation-alignment": "viewport",
+ "icon-size": 1,
+ "symbol-placement": {"base": 1, "stops": [[10, "point"], [11, "line"]]},
+ "symbol-spacing": 200,
+ "text-field": "{ref}",
+ "text-font": ["Noto Sans Regular"],
+ "text-rotation-alignment": "viewport",
+ "text-size": 10
+ },
+ "paint": {}
+ },
+ {
+ "id": "highway-shield-us-interstate",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "transportation_name",
+ "minzoom": 7,
+ "filter": [
+ "all",
+ ["<=", "ref_length", 6],
+ ["==", "$type", "LineString"],
+ ["in", "network", "us-interstate"]
+ ],
+ "layout": {
+ "icon-image": "{network}_{ref_length}",
+ "icon-rotation-alignment": "viewport",
+ "icon-size": 1,
+ "symbol-placement": {
+ "base": 1,
+ "stops": [[7, "point"], [7, "line"], [8, "line"]]
+ },
+ "symbol-spacing": 200,
+ "text-field": "{ref}",
+ "text-font": ["Noto Sans Regular"],
+ "text-rotation-alignment": "viewport",
+ "text-size": 10
+ },
+ "paint": {"text-color": "rgba(0, 0, 0, 1)"}
+ },
+ {
+ "id": "highway-shield-us-other",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "transportation_name",
+ "minzoom": 9,
+ "filter": [
+ "all",
+ ["<=", "ref_length", 6],
+ ["==", "$type", "LineString"],
+ ["in", "network", "us-highway", "us-state"]
+ ],
+ "layout": {
+ "icon-image": "{network}_{ref_length}",
+ "icon-rotation-alignment": "viewport",
+ "icon-size": 1,
+ "symbol-placement": {"base": 1, "stops": [[10, "point"], [11, "line"]]},
+ "symbol-spacing": 200,
+ "text-field": "{ref}",
+ "text-font": ["Noto Sans Regular"],
+ "text-rotation-alignment": "viewport",
+ "text-size": 10
+ },
+ "paint": {"text-color": "rgba(0, 0, 0, 1)"}
+ },
+ {
+ "id": "airport-label-major",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "aerodrome_label",
+ "minzoom": 10,
+ "filter": ["all", ["has", "iata"]],
+ "layout": {
+ "icon-image": "airport_11",
+ "icon-size": 1,
+ "text-anchor": "top",
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-max-width": 9,
+ "text-offset": [0, 0.6],
+ "text-optional": true,
+ "text-padding": 2,
+ "text-size": 12,
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#666",
+ "text-halo-blur": 0.5,
+ "text-halo-color": "#ffffff",
+ "text-halo-width": 1
+ }
+ },
+ {
+ "id": "poi-level-3",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "poi",
+ "minzoom": 16,
+ "filter": [
+ "all",
+ ["==", "$type", "Point"],
+ [">=", "rank", 25],
+ ["any", ["!has", "level"], ["==", "level", 0]]
+ ],
+ "layout": {
+ "icon-image": "{class}_11",
+ "text-anchor": "top",
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-max-width": 9,
+ "text-offset": [0, 0.6],
+ "text-padding": 2,
+ "text-size": 12,
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#666",
+ "text-halo-blur": 0.5,
+ "text-halo-color": "#ffffff",
+ "text-halo-width": 1
+ }
+ },
+ {
+ "id": "poi-level-2",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "poi",
+ "minzoom": 15,
+ "filter": [
+ "all",
+ ["==", "$type", "Point"],
+ ["<=", "rank", 24],
+ [">=", "rank", 15],
+ ["any", ["!has", "level"], ["==", "level", 0]]
+ ],
+ "layout": {
+ "icon-image": "{class}_11",
+ "text-anchor": "top",
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-max-width": 9,
+ "text-offset": [0, 0.6],
+ "text-padding": 2,
+ "text-size": 12,
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#666",
+ "text-halo-blur": 0.5,
+ "text-halo-color": "#ffffff",
+ "text-halo-width": 1
+ }
+ },
+ {
+ "id": "poi-level-1",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "poi",
+ "minzoom": 14,
+ "filter": [
+ "all",
+ ["==", "$type", "Point"],
+ ["<=", "rank", 14],
+ ["has", "name"],
+ ["any", ["!has", "level"], ["==", "level", 0]]
+ ],
+ "layout": {
+ "icon-image": "{class}_11",
+ "text-anchor": "top",
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-max-width": 9,
+ "text-offset": [0, 0.6],
+ "text-padding": 2,
+ "text-size": 12,
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#666",
+ "text-halo-blur": 0.5,
+ "text-halo-color": "#ffffff",
+ "text-halo-width": 1
+ }
+ },
+ {
+ "id": "poi-railway",
+ "type": "symbol",
+ "source": "openmaptiles",
+ "source-layer": "poi",
+ "minzoom": 13,
+ "filter": [
+ "all",
+ ["==", "$type", "Point"],
+ ["has", "name"],
+ ["==", "class", "railway"],
+ ["==", "subclass", "station"]
+ ],
+ "layout": {
+ "icon-allow-overlap": false,
+ "icon-ignore-placement": false,
+ "icon-image": "{class}_11",
+ "icon-optional": false,
+ "text-allow-overlap": false,
+ "text-anchor": "top",
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-ignore-placement": false,
+ "text-max-width": 9,
+ "text-offset": [0, 0.6],
+ "text-optional": true,
+ "text-padding": 2,
+ "text-size": 12
+ },
+ "paint": {
+ "text-color": "#666",
+ "text-halo-blur": 0.5,
+ "text-halo-color": "#ffffff",
+ "text-halo-width": 1
+ }
+ },
+ {
+ "id": "place-other",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "filter": [
+ "!in",
+ "class",
+ "city",
+ "town",
+ "village",
+ "country",
+ "continent"
+ ],
+ "layout": {
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Bold"],
+ "text-letter-spacing": 0.1,
+ "text-max-width": 9,
+ "text-size": {"base": 1.2, "stops": [[12, 10], [15, 14]]},
+ "text-transform": "uppercase",
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#633",
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 1.2
+ }
+ },
+ {
+ "id": "place-village",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "filter": ["==", "class", "village"],
+ "layout": {
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-max-width": 8,
+ "text-size": {"base": 1.2, "stops": [[10, 12], [15, 22]]},
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#333",
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 1.2
+ }
+ },
+ {
+ "id": "place-town",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "filter": ["==", "class", "town"],
+ "layout": {
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-max-width": 8,
+ "text-size": {"base": 1.2, "stops": [[10, 14], [15, 24]]},
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#333",
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 1.2
+ }
+ },
+ {
+ "id": "place-city",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "filter": ["all", ["!=", "capital", 2], ["==", "class", "city"]],
+ "layout": {
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-max-width": 8,
+ "text-size": {"base": 1.2, "stops": [[7, 14], [11, 24]]},
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#333",
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 1.2
+ }
+ },
+ {
+ "id": "place-city-capital",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "filter": ["all", ["==", "capital", 2], ["==", "class", "city"]],
+ "layout": {
+ "icon-image": "star_11",
+ "icon-size": 0.8,
+ "text-anchor": "left",
+ "text-field": "{name:latin}\n{name:nonlatin}",
+ "text-font": ["Noto Sans Regular"],
+ "text-max-width": 8,
+ "text-offset": [0.4, 0],
+ "text-size": {"base": 1.2, "stops": [[7, 14], [11, 24]]},
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#333",
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 1.2
+ }
+ },
+ {
+ "id": "place-country-other",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "filter": [
+ "all",
+ ["==", "class", "country"],
+ [">=", "rank", 3],
+ ["!has", "iso_a2"]
+ ],
+ "layout": {
+ "text-field": "{name:latin}",
+ "text-font": ["Noto Sans Italic"],
+ "text-max-width": 6.25,
+ "text-size": {"stops": [[3, 11], [7, 17]]},
+ "text-transform": "uppercase",
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#334",
+ "text-halo-blur": 1,
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 2
+ }
+ },
+ {
+ "id": "place-country-3",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "filter": [
+ "all",
+ ["==", "class", "country"],
+ [">=", "rank", 3],
+ ["has", "iso_a2"]
+ ],
+ "layout": {
+ "text-field": "{name:latin}",
+ "text-font": ["Noto Sans Bold"],
+ "text-max-width": 6.25,
+ "text-size": {"stops": [[3, 11], [7, 17]]},
+ "text-transform": "uppercase",
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#334",
+ "text-halo-blur": 1,
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 2
+ }
+ },
+ {
+ "id": "place-country-2",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "filter": [
+ "all",
+ ["==", "class", "country"],
+ ["==", "rank", 2],
+ ["has", "iso_a2"]
+ ],
+ "layout": {
+ "text-field": "{name:latin}",
+ "text-font": ["Noto Sans Bold"],
+ "text-max-width": 6.25,
+ "text-size": {"stops": [[2, 11], [5, 17]]},
+ "text-transform": "uppercase",
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#334",
+ "text-halo-blur": 1,
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 2
+ }
+ },
+ {
+ "id": "place-country-1",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "filter": [
+ "all",
+ ["==", "class", "country"],
+ ["==", "rank", 1],
+ ["has", "iso_a2"]
+ ],
+ "layout": {
+ "text-field": "{name:latin}",
+ "text-font": ["Noto Sans Bold"],
+ "text-max-width": 6.25,
+ "text-size": {"stops": [[1, 11], [4, 17]]},
+ "text-transform": "uppercase",
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#334",
+ "text-halo-blur": 1,
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 2
+ }
+ },
+ {
+ "id": "place-continent",
+ "type": "symbol",
+ "metadata": {"mapbox:group": "1444849242106.713"},
+ "source": "openmaptiles",
+ "source-layer": "place",
+ "maxzoom": 1,
+ "filter": ["==", "class", "continent"],
+ "layout": {
+ "text-field": "{name:latin}",
+ "text-font": ["Noto Sans Bold"],
+ "text-max-width": 6.25,
+ "text-size": 14,
+ "text-transform": "uppercase",
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-color": "#334",
+ "text-halo-blur": 1,
+ "text-halo-color": "rgba(255,255,255,0.8)",
+ "text-halo-width": 2
+ }
+ },
+ {
+ "id": "code-section",
+ "type": "symbol",
+ "source": "cadastre",
+ "source-layer": "sections",
+ "minzoom": 12.5,
+ "maxzoom": 16,
+ "layout": {
+ "text-field": "{code}",
+ "text-font": ["Lato Bold"],
+ "visibility": "visible"
+ },
+ "paint": {
+ "text-halo-color": "rgba(255, 246, 241, 1)",
+ "text-halo-width": 1.5
+ }
+ },
+ {
+ "id": "code-parcelles",
+ "type": "symbol",
+ "source": "cadastre",
+ "source-layer": "parcelles",
+ "minzoom": 16,
+ "filter": ["all"],
+ "layout": {
+ "text-field": "{numero}",
+ "text-font": ["Lato Bold"],
+ "text-allow-overlap": false,
+ "visibility": "visible",
+ "text-size": 16
+ },
+ "paint": {
+ "text-halo-color": "#fff6f1",
+ "text-halo-width": 1.5,
+ "text-translate-anchor": "map"
+ }
+ }
+ ],
+ "id": "bright"
+}
diff --git a/app/javascript/components/MapEditor/utils.js b/app/javascript/components/MapEditor/utils.js
new file mode 100644
index 000000000..9be234855
--- /dev/null
+++ b/app/javascript/components/MapEditor/utils.js
@@ -0,0 +1,18 @@
+export const ERROR_GEO_JSON = '';
+export const createFeatureCollection = selectionsUtilisateur => {
+ return {
+ type: 'FeatureCollection',
+ features: selectionsUtilisateur
+ };
+};
+
+export const polygonCadastresFill = {
+ 'fill-color': '#EC3323',
+ 'fill-opacity': 0.3
+};
+
+export const polygonCadastresLine = {
+ 'line-color': 'rgba(255, 0, 0, 1)',
+ 'line-width': 4,
+ 'line-dasharray': [1, 1]
+};
diff --git a/app/javascript/loaders/MapEditor.js b/app/javascript/loaders/MapEditor.js
new file mode 100644
index 000000000..7f9acce8c
--- /dev/null
+++ b/app/javascript/loaders/MapEditor.js
@@ -0,0 +1,3 @@
+import Loadable from '../components/Loadable';
+
+export default Loadable(() => import('../components/MapEditor/MapEditor'));
diff --git a/app/views/champs/carte/show.js.erb b/app/views/champs/carte/show.js.erb
index a34b4d2b4..f36252efc 100644
--- a/app/views/champs/carte/show.js.erb
+++ b/app/views/champs/carte/show.js.erb
@@ -4,5 +4,8 @@
partial: 'shared/champs/carte/geo_areas',
locals: { champ: @champ, error: @error }) %>
-<%= fire_event('carte:update', { selector: @selector, data: @champ.to_render_data }.to_json) %>
-<%= fire_event('map:update', { featureCollection: @champ.to_feature_collection }.to_json) %>
+<% if feature_enabled?(:new_map_editor) %>
+ <%= fire_event('map:update', { featureCollection: @champ.to_feature_collection }.to_json) %>
+<% else %>
+ <%= fire_event('carte:update', { selector: @selector, data: @champ.to_render_data }.to_json) %>
+<% end %>
diff --git a/app/views/dossier_mailer/notify_near_deletion_to_user.html.haml b/app/views/dossier_mailer/notify_near_deletion_to_user.html.haml
index 83455024a..a4af7f504 100644
--- a/app/views/dossier_mailer/notify_near_deletion_to_user.html.haml
+++ b/app/views/dossier_mailer/notify_near_deletion_to_user.html.haml
@@ -15,5 +15,8 @@
%p
= sanitize(t('.footer', count: @dossiers.count))
+%p
+ - if @state == Dossier.states.fetch(:en_construction)
+ = sanitize(t('.footer_en_construction', count: @dossiers.count))
= render partial: "layouts/mailers/signature"
diff --git a/app/views/shared/dossiers/editable_champs/_carte.html.haml b/app/views/shared/dossiers/editable_champs/_carte.html.haml
index e15e1f6c6..4399929b6 100644
--- a/app/views/shared/dossiers/editable_champs/_carte.html.haml
+++ b/app/views/shared/dossiers/editable_champs/_carte.html.haml
@@ -1,11 +1,13 @@
-.toolbar
- %button.button.primary.new-area Ajouter une zone
- %select.select2.adresse{ data: { address: true }, placeholder: 'Saisissez une adresse ou positionner la carte' }
-
-.carte.edit{ data: { geo: geo_data(champ) }, class: "carte-#{form.index}" }
+- if feature_enabled?(:new_map_editor)
+ = react_component("MapEditor", { featureCollection: champ.to_feature_collection }, class: "carte-#{form.index}")
+- else
+ .toolbar
+ %button.button.primary.new-area Ajouter une zone
+ %select.select2.adresse{ data: { address: true }, placeholder: 'Saisissez une adresse ou positionner la carte' }
+ .carte.edit{ data: { geo: geo_data(champ) }, class: "carte-#{form.index}" }
.geo-areas
= render partial: 'shared/champs/carte/geo_areas', locals: { champ: champ, error: false }
= form.hidden_field :value,
- data: { remote: true, url: champs_carte_path(form.index), params: champ_carte_params(champ).to_query, method: 'post' }
+ data: { remote: true, feature_collection_id: champ.type_de_champ.stable_id, url: champs_carte_path(form.index), params: champ_carte_params(champ).to_query, method: 'post' }
diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb
index 82025de9c..df78f48c1 100644
--- a/config/initializers/assets.rb
+++ b/config/initializers/assets.rb
@@ -7,6 +7,8 @@ Rails.application.config.assets.version = '1.0'
Rails.application.config.assets.paths << Rails.root.join('node_modules', 'trix', 'dist')
Rails.application.config.assets.paths << Rails.root.join('node_modules', 'select2', 'dist', 'css')
Rails.application.config.assets.paths << Rails.root.join('node_modules', 'mapbox-gl', 'dist')
+Rails.application.config.assets.paths << Rails.root.join('node_modules', '@reach', 'combobox')
+Rails.application.config.assets.paths << Rails.root.join('node_modules', '@mapbox', 'mapbox-gl-draw', 'dist')
# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb
index 4c0a47886..f33a119f6 100644
--- a/config/initializers/content_security_policy.rb
+++ b/config/initializers/content_security_policy.rb
@@ -8,7 +8,7 @@ Rails.application.config.content_security_policy do |policy|
# c'est trop compliqué pour être rectifié immédiatement (et sans valeur ajoutée:
# c'est hardcodé dans les vues, donc pas injectable).
policy.style_src :self, "*.crisp.chat", "crisp.chat", :unsafe_inline
- policy.connect_src :self, "wss://*.crisp.chat", "*.crisp.chat", "*.demarches-simplifiees.fr", "in-automate.sendinblue.com", "app.franceconnect.gouv.fr", "sentry.io", "geo.api.gouv.fr", "api-adresse.data.gouv.fr", "openmaptiles.geo.data.gouv.fr", "openmaptiles.github.io"
+ policy.connect_src :self, "wss://*.crisp.chat", "*.crisp.chat", "*.demarches-simplifiees.fr", "in-automate.sendinblue.com", "app.franceconnect.gouv.fr", "sentry.io", "geo.api.gouv.fr", "api-adresse.data.gouv.fr", "openmaptiles.geo.data.gouv.fr", "openmaptiles.github.io", "tiles.geo.api.gouv.fr"
# Pour tout le reste, par défaut on accepte uniquement ce qui vient de chez nous
# et dans la notification on inclue la source de l'erreur
policy.default_src :self, :data, :report_sample, "fonts.gstatic.com", "in-automate.sendinblue.com", "player.vimeo.com", "app.franceconnect.gouv.fr", "sentry.io", "static.demarches-simplifiees.fr", "*.crisp.chat", "crisp.chat", "*.crisp.help", "*.sibautomation.com", "sibautomation.com", "data"
diff --git a/config/initializers/flipper.rb b/config/initializers/flipper.rb
index e19f6e978..14bb0105a 100644
--- a/config/initializers/flipper.rb
+++ b/config/initializers/flipper.rb
@@ -32,6 +32,7 @@ features = [
:instructeur_bypass_email_login_token,
:autosave_dossier_draft,
:autoupload_dossier_attachments,
+ :new_map_editor,
:maintenance_mode,
:mini_profiler,
:operation_log_serialize_subject,
diff --git a/config/locales/views/dossier_mailer/notify_near_deletion_to_user/fr.yml b/config/locales/views/dossier_mailer/notify_near_deletion_to_user/fr.yml
index 3a0098335..f410d7658 100644
--- a/config/locales/views/dossier_mailer/notify_near_deletion_to_user/fr.yml
+++ b/config/locales/views/dossier_mailer/notify_near_deletion_to_user/fr.yml
@@ -16,3 +16,6 @@ fr:
footer:
one: "Vous pouvez retrouver votre dossier pendant encore un mois. Vous n’avez rien à faire."
other: "Vous pouvez retrouver vos dossiers pendant encore un mois. Vous n’avez rien à faire."
+ footer_en_construction:
+ one: "Si vous souhaitez conserver votre dossier plus longtemps, vous pouvez prolonger sa durée de conservation dans l'interface."
+ other: "Si vous souhaitez conserver vos dossiers plus longtemps, vous pouvez prolonger leur durée de conservation au cas par cas dans l'interface."
diff --git a/db/schema.rb b/db/schema.rb
index 2f59b5fe7..bc2fec001 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -255,10 +255,10 @@ ActiveRecord::Schema.define(version: 2020_04_22_090426) do
t.datetime "brouillon_close_to_expiration_notice_sent_at"
t.datetime "groupe_instructeur_updated_at"
t.datetime "en_construction_close_to_expiration_notice_sent_at"
+ t.interval "en_construction_conservation_extension", default: "PT0S"
+ t.datetime "termine_close_to_expiration_notice_sent_at"
t.index "to_tsvector('french'::regconfig, (search_terms || private_search_terms))", name: "index_dossiers_on_search_terms_private_search_terms", using: :gin
t.index "to_tsvector('french'::regconfig, search_terms)", name: "index_dossiers_on_search_terms", using: :gin
- t.interval "en_construction_conservation_extension", default: "00:00:00"
- t.datetime "termine_close_to_expiration_notice_sent_at"
t.index ["archived"], name: "index_dossiers_on_archived"
t.index ["groupe_instructeur_id"], name: "index_dossiers_on_groupe_instructeur_id"
t.index ["hidden_at"], name: "index_dossiers_on_hidden_at"
diff --git a/package.json b/package.json
index 5cfd2b229..091c8f193 100644
--- a/package.json
+++ b/package.json
@@ -4,10 +4,12 @@
"@fortawesome/fontawesome-svg-core": "^1.2.26",
"@fortawesome/free-solid-svg-icons": "^5.12.0",
"@fortawesome/react-fontawesome": "^0.1.8",
+ "@mapbox/mapbox-gl-draw": "^1.1.2",
"@rails/actiontext": "^6.0.2-1",
"@rails/activestorage": "^6.0.2-1",
"@rails/ujs": "^6.0.2-1",
"@rails/webpacker": "4.2.2",
+ "@reach/combobox": "^0.10.0",
"@sentry/browser": "^5.11.2",
"@turf/area": "^6.0.1",
"babel-plugin-macros": "^2.8.0",
@@ -29,6 +31,7 @@
"react-intersection-observer": "^8.25.2",
"react-loadable": "^5.5.0",
"react-mapbox-gl": "^4.8.3",
+ "react-mapbox-gl-draw": "^2.0.4",
"react-scroll-to-component": "^1.0.2",
"react-sortable-hoc": "^1.11.0",
"react_ujs": "^2.6.1",
diff --git a/spec/mailers/dossier_mailer_spec.rb b/spec/mailers/dossier_mailer_spec.rb
index d7ab78474..b2d577feb 100644
--- a/spec/mailers/dossier_mailer_spec.rb
+++ b/spec/mailers/dossier_mailer_spec.rb
@@ -165,6 +165,7 @@ RSpec.describe DossierMailer, type: :mailer do
it { expect(subject.body).to include(dossier.procedure.libelle) }
it { expect(subject.body).to include("PDF") }
it { expect(subject.body).to include("Vous pouvez retrouver votre dossier pendant encore un mois. Vous n’avez rien à faire.") }
+ it { expect(subject.body).to include("Si vous souhaitez conserver votre dossier plus longtemps, vous pouvez prolonger sa durée de conservation dans l'interface.") }
end
describe 'termine' do
diff --git a/yarn.lock b/yarn.lock
index 3dddf088a..e7093e5ab 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -957,13 +957,41 @@
dependencies:
prop-types "^15.5.10"
-"@mapbox/geojson-area@0.2.2":
+"@mapbox/extent@0.4.0":
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/@mapbox/extent/-/extent-0.4.0.tgz#3e591f32e1f0c3981c864239f7b0ac06e610f8a9"
+ integrity sha1-PlkfMuHww5gchkI597CsBuYQ+Kk=
+
+"@mapbox/geojson-area@0.2.2", "@mapbox/geojson-area@^0.2.1":
version "0.2.2"
resolved "https://registry.yarnpkg.com/@mapbox/geojson-area/-/geojson-area-0.2.2.tgz#18d7814aa36bf23fbbcc379f8e26a22927debf10"
integrity sha1-GNeBSqNr8j+7zDefjiaiKSfevxA=
dependencies:
wgs84 "0.0.0"
+"@mapbox/geojson-coords@0.0.0":
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/@mapbox/geojson-coords/-/geojson-coords-0.0.0.tgz#4847a5b96059666e527a2139e75e35d84fd58f50"
+ integrity sha1-SEeluWBZZm5SeiE551412E/Vj1A=
+ dependencies:
+ "@mapbox/geojson-normalize" "0.0.1"
+ geojson-flatten "~0.2.1"
+
+"@mapbox/geojson-extent@^0.3.2":
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/@mapbox/geojson-extent/-/geojson-extent-0.3.2.tgz#a1bdb2015afd0e031c18c3f29f7eb229e4e1950f"
+ integrity sha1-ob2yAVr9DgMcGMPyn36yKeThlQ8=
+ dependencies:
+ "@mapbox/extent" "0.4.0"
+ "@mapbox/geojson-coords" "0.0.0"
+ rw "~0.1.4"
+ traverse "~0.6.6"
+
+"@mapbox/geojson-normalize@0.0.1":
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/@mapbox/geojson-normalize/-/geojson-normalize-0.0.1.tgz#1da1e6b3a7add3ad29909b30f438f60581b7cd80"
+ integrity sha1-HaHms6et060pkJsw9Dj2BYG3zYA=
+
"@mapbox/geojson-rewind@^0.4.0":
version "0.4.1"
resolved "https://registry.yarnpkg.com/@mapbox/geojson-rewind/-/geojson-rewind-0.4.1.tgz#357d79300adb7fec7c1f091512988bca6458f068"
@@ -979,11 +1007,36 @@
resolved "https://registry.yarnpkg.com/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz#9aecf642cb00eab1080a57c4f949a65b4a5846d6"
integrity sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==
+"@mapbox/geojsonhint@^2.0.0":
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/@mapbox/geojsonhint/-/geojsonhint-2.2.0.tgz#75ca94706e9a56e6debf4e1c78fabdc67978b883"
+ integrity sha512-8qQYRB+/2z2JsN5s6D0WAnpo69+3V3nvJsSFLwMB1dsaWz1V4oZeuoje9srbYAxxL8PXCwIywfhYa3GxOkBv5Q==
+ dependencies:
+ concat-stream "^1.6.1"
+ jsonlint-lines "1.7.1"
+ minimist "1.2.0"
+ vfile "^4.0.0"
+ vfile-reporter "^5.1.1"
+
"@mapbox/jsonlint-lines-primitives@^2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234"
integrity sha1-zlblOfg1UrWNENZy6k1vya3HsjQ=
+"@mapbox/mapbox-gl-draw@^1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-draw/-/mapbox-gl-draw-1.1.2.tgz#247b3f0727db34c2641ab718df5eebeee69a2585"
+ integrity sha512-DWtATUAnJaGZYoH/y2O+QTRybxrp5y3w3eV5FXHFNVcKsCAojKEMB8ALKUG2IsiCKqV/JCAguK9AlPWR7Bjafw==
+ dependencies:
+ "@mapbox/geojson-area" "^0.2.1"
+ "@mapbox/geojson-extent" "^0.3.2"
+ "@mapbox/geojson-normalize" "0.0.1"
+ "@mapbox/geojsonhint" "^2.0.0"
+ "@mapbox/point-geometry" "0.1.0"
+ hat "0.0.3"
+ lodash.isequal "^4.2.0"
+ xtend "^4.0.1"
+
"@mapbox/mapbox-gl-supported@^1.4.0":
version "1.5.0"
resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz#f60b6a55a5d8e5ee908347d2ce4250b15103dc8e"
@@ -1086,6 +1139,78 @@
webpack-cli "^3.3.10"
webpack-sources "^1.4.3"
+"@reach/auto-id@^0.10.0":
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/@reach/auto-id/-/auto-id-0.10.0.tgz#72b70b9bb3f7d0f39b9fae0dcb412168ee139762"
+ integrity sha512-Uwsd4eNFa5YteZ7DKCVIbhE3c8x9DYVwtLy6ZCl1jo6bXAF6Di1dYm/XnkTmo+OYoKOZlVTu7umONDeezY33rQ==
+ dependencies:
+ "@reach/utils" "^0.10.0"
+ tslib "^1.10.0"
+
+"@reach/combobox@^0.10.0":
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/@reach/combobox/-/combobox-0.10.0.tgz#5735a0f8c32019402dad7590562e5ccdb92e760a"
+ integrity sha512-UMgPPF3s8pcO+GQ8lT1qmyxZri2NuEX/HLPhNJlog7V7yBCdCRrFT5KdLDlIqg6I3jHy52n9Q4DrxMJiLp1ZJw==
+ dependencies:
+ "@reach/auto-id" "^0.10.0"
+ "@reach/descendants" "^0.10.0"
+ "@reach/popover" "^0.10.0"
+ "@reach/portal" "^0.10.0"
+ "@reach/utils" "^0.10.0"
+ highlight-words-core "1.2.2"
+ prop-types "^15.7.2"
+ tslib "^1.10.0"
+
+"@reach/descendants@^0.10.0":
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/@reach/descendants/-/descendants-0.10.0.tgz#43eeba4aea10ffc62fe5144248c1455ab317964b"
+ integrity sha512-G7wm0poMVR+aT9W5O8C6cnrZBYskIAfgBfPwByOY7F6TwEj7HqHDs7tZ/3Paj6UIZZ9lkVfhHPEGGvfOpEXhlg==
+ dependencies:
+ "@reach/utils" "^0.10.0"
+ tslib "^1.10.0"
+
+"@reach/observe-rect@^1.1.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@reach/observe-rect/-/observe-rect-1.1.0.tgz#4e967a93852b6004c3895d9ed8d4e5b41895afde"
+ integrity sha512-kE+jvoj/OyJV24C03VvLt5zclb9ArJi04wWXMMFwQvdZjdHoBlN4g0ZQFjyy/ejPF1Z/dpUD5dhRdBiUmIGZTA==
+
+"@reach/popover@^0.10.0":
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/@reach/popover/-/popover-0.10.0.tgz#054601f98ef1616a0d439be4dafd8cf7ac172da6"
+ integrity sha512-Iff9qHuJypxdG7a6IiAZFFgpbfQK9v3FH+GDsdZiKLbtmRDIMC3AM8ebkBTKUAnEsumHekBrk8cf9WAIJVz1jg==
+ dependencies:
+ "@reach/portal" "^0.10.0"
+ "@reach/rect" "^0.10.0"
+ "@reach/utils" "^0.10.0"
+ tabbable "^4.0.0"
+ tslib "^1.10.0"
+
+"@reach/portal@^0.10.0":
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/@reach/portal/-/portal-0.10.0.tgz#ed119d796de1b5ea7c975007fa6b2e507bc7567e"
+ integrity sha512-soXCiLDWcyXMgs1pArjdt67d+IARu1rpkOmHWD3c7XDE2hanWVeQiGC4L8UVNrm51pWrCDtLH1R446tG6uNz2Q==
+ dependencies:
+ "@reach/utils" "^0.10.0"
+ tslib "^1.10.0"
+
+"@reach/rect@^0.10.0":
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/@reach/rect/-/rect-0.10.0.tgz#5e9310592f1a9413382c4a8a80e96ca167d2f32d"
+ integrity sha512-fZLZiBDc/ZDSNnNFZCQFHOw4v8QLI/DjWbX+JecXVGIhgwBUl4+3cJVmlthk/FUrndO7cQ8vjFWzEhB4o2mOnw==
+ dependencies:
+ "@reach/observe-rect" "^1.1.0"
+ "@reach/utils" "^0.10.0"
+ prop-types "^15.7.2"
+ tslib "^1.10.0"
+
+"@reach/utils@^0.10.0":
+ version "0.10.0"
+ resolved "https://registry.yarnpkg.com/@reach/utils/-/utils-0.10.0.tgz#480332433f9d0232aff2c36374cf9a2fe559990b"
+ integrity sha512-qPiwjw8jcT7JYrVT+ZO7bLTVEdp9KyvY0RO1emyCxqpYVr4s9oSZ3XG6n7G+bvnKeyjpbpIfCVfxYvPF1Uq2DQ==
+ dependencies:
+ tslib "^1.10.0"
+ warning "^4.0.3"
+
"@sentry/browser@^5.11.2":
version "5.15.4"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.15.4.tgz#5a7e7bad088556665ed8e69bceb0e18784e4f6c7"
@@ -1226,6 +1351,11 @@
dependencies:
"@types/geojson" "*"
+"@types/unist@^2.0.0", "@types/unist@^2.0.2":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
+ integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==
+
"@webassemblyjs/ast@1.9.0":
version "1.9.0"
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964"
@@ -1381,6 +1511,11 @@
resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
+"JSV@>= 4.0.x":
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/JSV/-/JSV-4.0.2.tgz#d077f6825571f82132f9dffaed587b4029feff57"
+ integrity sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=
+
abbrev@1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
@@ -1550,6 +1685,11 @@ ansi-styles@^4.1.0:
"@types/color-name" "^1.1.1"
color-convert "^2.0.1"
+ansi-styles@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178"
+ integrity sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=
+
ansi-wrap@0.1.0, ansi-wrap@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf"
@@ -2279,6 +2419,15 @@ chalk@^3.0.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
+chalk@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f"
+ integrity sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=
+ dependencies:
+ ansi-styles "~1.0.0"
+ has-color "~0.1.0"
+ strip-ansi "~0.1.0"
+
chardet@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
@@ -2613,7 +2762,7 @@ concat-map@0.0.1:
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-concat-stream@^1.5.0, concat-stream@~1.6.0:
+concat-stream@^1.5.0, concat-stream@^1.6.1, concat-stream@~1.6.0:
version "1.6.2"
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
@@ -4199,6 +4348,14 @@ gensync@^1.0.0-beta.1:
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
+geojson-flatten@~0.2.1:
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/geojson-flatten/-/geojson-flatten-0.2.4.tgz#8f3396f31a0f5b747e39c9e6a14088f43ba4ecfb"
+ integrity sha512-LiX6Jmot8adiIdZ/fthbcKKPOfWjTQchX/ggHnwMZ2e4b0I243N1ANUos0LvnzepTEsj0+D4fIJ5bKhBrWnAHA==
+ dependencies:
+ get-stdin "^6.0.0"
+ minimist "1.2.0"
+
geojson-vt@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.1.tgz#f8adb614d2c1d3f6ee7c4265cad4bbf3ad60c8b7"
@@ -4490,6 +4647,11 @@ has-ansi@^2.0.0:
dependencies:
ansi-regex "^2.0.0"
+has-color@~0.1.0:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f"
+ integrity sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=
+
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
@@ -4564,6 +4726,11 @@ hash.js@^1.0.0, hash.js@^1.0.3:
inherits "^2.0.3"
minimalistic-assert "^1.0.1"
+hat@0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/hat/-/hat-0.0.3.tgz#bb014a9e64b3788aed8005917413d4ff3d502d8a"
+ integrity sha1-uwFKnmSzeIrtgAWRdBPU/z1QLYo=
+
hex-color-regex@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
@@ -4574,6 +4741,11 @@ highcharts@^8.0.0:
resolved "https://registry.yarnpkg.com/highcharts/-/highcharts-8.0.0.tgz#fcf77a511d6ea477b9d8447afd9dedbfc85e2727"
integrity sha512-jRKLiP0i29zKSEgMDASyrfpivrM3e8V8yTv8YUZtRzB2mXR+hsBNHWZw2hNRZVxqq1QCVmW/9Z/BLFvYlJELqA==
+highlight-words-core@1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/highlight-words-core/-/highlight-words-core-1.2.2.tgz#1eff6d7d9f0a22f155042a00791237791b1eeaaa"
+ integrity sha512-BXUKIkUuh6cmmxzi5OIbUJxrG8OAk2MqoL1DtO3Wo9D2faJg2ph5ntyuQeLqaHJmzER6H5tllCDA9ZnNe9BVGg==
+
highlight.js@~9.12.0:
version "9.12.0"
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e"
@@ -4969,6 +5141,11 @@ is-buffer@^1.1.5:
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+is-buffer@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623"
+ integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==
+
is-buffer@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725"
@@ -5338,6 +5515,14 @@ jsonfile@^4.0.0:
optionalDependencies:
graceful-fs "^4.1.6"
+jsonlint-lines@1.7.1:
+ version "1.7.1"
+ resolved "https://registry.yarnpkg.com/jsonlint-lines/-/jsonlint-lines-1.7.1.tgz#507de680d3fb8c4be1641cc57d6f679f29f178ff"
+ integrity sha1-UH3mgNP7jEvhZBzFfW9nnynxeP8=
+ dependencies:
+ JSV ">= 4.0.x"
+ nomnom ">= 1.5.x"
+
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
@@ -5566,6 +5751,11 @@ lodash.has@^4.0:
resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862"
integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=
+lodash.isequal@^4.2.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
+ integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA=
+
lodash.memoize@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
@@ -5908,7 +6098,7 @@ minimist@0.0.8:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
-minimist@^1.1.3, minimist@^1.2.0:
+minimist@1.2.0, minimist@^1.1.3, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
@@ -6164,6 +6354,14 @@ node-sass@^4.13.0:
stdout-stream "^1.4.0"
"true-case-path" "^1.0.2"
+"nomnom@>= 1.5.x":
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7"
+ integrity sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=
+ dependencies:
+ chalk "~0.4.0"
+ underscore "~1.6.0"
+
"nopt@2 || 3":
version "3.0.6"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
@@ -7695,6 +7893,11 @@ react-loadable@^5.5.0:
dependencies:
prop-types "^15.5.0"
+react-mapbox-gl-draw@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/react-mapbox-gl-draw/-/react-mapbox-gl-draw-2.0.4.tgz#476d70a6efc07c329fa61c11022bcdab60ac4b91"
+ integrity sha512-oaBdIlyu+g7PhLUvwnCsl/wvu+5tGB9I3RLjcrYLt6U1sUMzQJqplKtVxXRv9TZqRdNaAU5qNOP+dRs55QKjsA==
+
react-mapbox-gl@^4.8.3:
version "4.8.3"
resolved "https://registry.yarnpkg.com/react-mapbox-gl/-/react-mapbox-gl-4.8.3.tgz#11f5901fe26a4c704a6a22e797bd69404c320e47"
@@ -7917,7 +8120,7 @@ repeat-element@^1.1.2:
resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
-repeat-string@^1.6.1:
+repeat-string@^1.5.0, repeat-string@^1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
@@ -7929,7 +8132,7 @@ repeating@^2.0.0:
dependencies:
is-finite "^1.0.0"
-replace-ext@^1.0.0:
+replace-ext@1.0.0, replace-ext@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=
@@ -8114,6 +8317,11 @@ rw@^1.3.3:
resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=
+rw@~0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/rw/-/rw-0.1.4.tgz#4903cbd80248ae0ede685bf58fd236a7a9b29a3e"
+ integrity sha1-SQPL2AJIrg7eaFv1j9I2p6mymj4=
+
rxjs@^6.5.3:
version "6.5.4"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c"
@@ -8768,6 +8976,11 @@ strip-ansi@^6.0.0:
dependencies:
ansi-regex "^5.0.0"
+strip-ansi@~0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991"
+ integrity sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=
+
strip-bom@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
@@ -8828,7 +9041,7 @@ supports-color@^2.0.0:
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
-supports-color@^5.3.0:
+supports-color@^5.0.0, supports-color@^5.3.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
@@ -8861,6 +9074,11 @@ svgo@^1.0.0:
unquote "~1.1.1"
util.promisify "~1.0.0"
+tabbable@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-4.0.0.tgz#5bff1d1135df1482cf0f0206434f15eadbeb9261"
+ integrity sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ==
+
table@^5.2.3:
version "5.4.6"
resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
@@ -9073,6 +9291,11 @@ tough-cookie@~2.5.0:
psl "^1.1.28"
punycode "^2.1.1"
+traverse@~0.6.6:
+ version "0.6.6"
+ resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137"
+ integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=
+
trim-newlines@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
@@ -9105,7 +9328,7 @@ ts-pnp@^1.1.6:
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
-tslib@^1.9.0, tslib@^1.9.3:
+tslib@^1.10.0, tslib@^1.9.0, tslib@^1.9.3:
version "1.11.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==
@@ -9179,6 +9402,11 @@ unc-path-regex@^0.1.2:
resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo=
+underscore@~1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8"
+ integrity sha1-izixDKze9jM3uLJOT/htRa6lKag=
+
unicode-canonical-property-names-ecmascript@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818"
@@ -9244,6 +9472,13 @@ unique-stream@^2.0.2:
json-stable-stringify-without-jsonify "^1.0.1"
through2-filter "^3.0.0"
+unist-util-stringify-position@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da"
+ integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==
+ dependencies:
+ "@types/unist" "^2.0.2"
+
universalify@^0.1.0:
version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@@ -9391,6 +9626,47 @@ verror@1.10.0:
core-util-is "1.0.2"
extsprintf "^1.2.0"
+vfile-message@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a"
+ integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ unist-util-stringify-position "^2.0.0"
+
+vfile-reporter@^5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/vfile-reporter/-/vfile-reporter-5.1.2.tgz#80f1db5cbe8f9c12f2f30cce3e2cd18353a48519"
+ integrity sha512-b15sTuss1wOPWVlyWOvu+n6wGJ/eTYngz3uqMLimQvxZ+Q5oFQGYZZP1o3dR9sk58G5+wej0UPCZSwQBX/mzrQ==
+ dependencies:
+ repeat-string "^1.5.0"
+ string-width "^2.0.0"
+ supports-color "^5.0.0"
+ unist-util-stringify-position "^2.0.0"
+ vfile-sort "^2.1.2"
+ vfile-statistics "^1.1.0"
+
+vfile-sort@^2.1.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/vfile-sort/-/vfile-sort-2.2.2.tgz#720fe067ce156aba0b411a01bb0dc65596aa1190"
+ integrity sha512-tAyUqD2R1l/7Rn7ixdGkhXLD3zsg+XLAeUDUhXearjfIcpL1Hcsj5hHpCoy/gvfK/Ws61+e972fm0F7up7hfYA==
+
+vfile-statistics@^1.1.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/vfile-statistics/-/vfile-statistics-1.1.4.tgz#b99fd15ecf0f44ba088cc973425d666cb7a9f245"
+ integrity sha512-lXhElVO0Rq3frgPvFBwahmed3X03vjPF8OcjKMy8+F1xU/3Q3QU3tKEDp743SFtb74PdF0UWpxPvtOP0GCLheA==
+
+vfile@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.1.0.tgz#d79248957f43225d57ff67a56effc67bef08946e"
+ integrity sha512-BaTPalregj++64xbGK6uIlsurN3BCRNM/P2Pg8HezlGzKd1O9PrwIac6bd9Pdx2uTb0QHoioZ+rXKolbVXEgJg==
+ dependencies:
+ "@types/unist" "^2.0.0"
+ is-buffer "^2.0.0"
+ replace-ext "1.0.0"
+ unist-util-stringify-position "^2.0.0"
+ vfile-message "^2.0.0"
+
vinyl-fs@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7"
@@ -9453,6 +9729,13 @@ vt-pbf@^3.1.1:
"@mapbox/vector-tile" "^1.3.1"
pbf "^3.0.5"
+warning@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
+ integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
+ dependencies:
+ loose-envify "^1.0.0"
+
watchpack@^1.6.0:
version "1.6.1"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.1.tgz#280da0a8718592174010c078c7585a74cd8cd0e2"
@@ -9718,7 +10001,7 @@ xmlbuilder@^10.0.0:
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-10.1.1.tgz#8cae6688cc9b38d850b7c8d3c0a4161dcaf475b0"
integrity sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==
-xtend@^4.0.0, xtend@~4.0.1:
+xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==