diff --git a/package.json b/package.json
index eda9587d..483de1ad 100644
--- a/package.json
+++ b/package.json
@@ -23,6 +23,7 @@
"element-plus": "~1.0.2-beta.71",
"lib-flexible": "^0.3.2",
"lodash": "^4.17.21",
+ "maplibre-gl": "3.6.2",
"mockjs": "^1.1.0",
"moment-timezone": "^0.5.33",
"node-sass": "~4.14.0",
diff --git a/public/config.js b/public/config.js
index 8e863370..3bbcf976 100644
--- a/public/config.js
+++ b/public/config.js
@@ -11,6 +11,7 @@ const DEFAULT_TIME_FILTER_RANGE = {
trafficLine: 60,
subscriberKpi: 60,
subscriberTopApp: 60,
+ subscriberMap: 60,
informationAggregation: 0,
relatedEntity: 60 * 24 * 7,
openPort: 60 * 24 * 7,
diff --git a/public/images/entity-detail/track-point.png b/public/images/entity-detail/track-point.png
new file mode 100644
index 00000000..e2d3c388
Binary files /dev/null and b/public/images/entity-detail/track-point.png differ
diff --git a/src/assets/css/components/index.scss b/src/assets/css/components/index.scss
index f11f1771..622ea081 100644
--- a/src/assets/css/components/index.scss
+++ b/src/assets/css/components/index.scss
@@ -85,6 +85,8 @@
@import 'views/charts2/entityDetailLine';
@import 'views/charts2/EntityDetailSubscriberKpi.scss';
@import 'views/charts2/EntityDetailSubscriberTopApp.scss';
+@import 'views/charts2/entityDetailSubscriberMap.scss';
+
@import 'views/charts2/entityDetailTabs';
@import 'views/charts2/digitalCertificate';
@import 'views/charts2/entityDetailBasicInfo';
diff --git a/src/assets/css/components/views/charts2/entityDetailSubscriberMap.scss b/src/assets/css/components/views/charts2/entityDetailSubscriberMap.scss
new file mode 100644
index 00000000..1732e126
--- /dev/null
+++ b/src/assets/css/components/views/charts2/entityDetailSubscriberMap.scss
@@ -0,0 +1,31 @@
+.subscriber-map {
+ height: 100%;
+
+ .subscriber-map-header {
+ height: 34px;
+ padding-bottom: 10px;
+ font-size: 14px;
+ color: #353636;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+
+ .subscriber-map-title {
+ height: 24px;
+ overflow: hidden;
+ }
+ }
+ .subscriber-map-body {
+ border: 1px solid #E2E5EC;
+ border-radius: 4px;
+ height: calc(100% - 34px);
+
+ .subscriber-map {
+ height: 100%;
+ width: 100%;
+ }
+ .panel-chart__no-data {
+ height: calc(100% - 46px);
+ }
+ }
+}
diff --git a/src/utils/api.js b/src/utils/api.js
index d3a0b3bb..aeece9e9 100644
--- a/src/utils/api.js
+++ b/src/utils/api.js
@@ -284,6 +284,7 @@ export const api = {
informationAggregation: apiVersion + '/entity/detail/kb/intelligence/list',
deviceInformation: apiVersion + '/entity/detail/subscribe/device', // 暂时写的值
accountInformation: apiVersion + '/entity/detail/subscribe/account', // 暂时写的值
+ locationTrack: apiVersion + '/entity/detail/subscribe/track',
// 实体关系
entityGraph: {
basicInfo: apiVersion + '/entity/graph/relation/basic',
diff --git a/src/views/charts2/charts/entityDetail/EntityDetailMap.vue b/src/views/charts2/charts/entityDetail/EntityDetailMap.vue
index 8e462e91..019a3bc1 100644
--- a/src/views/charts2/charts/entityDetail/EntityDetailMap.vue
+++ b/src/views/charts2/charts/entityDetail/EntityDetailMap.vue
@@ -1,12 +1,233 @@
+
diff --git a/src/views/charts2/charts/entityDetail/mapStyle.js b/src/views/charts2/charts/entityDetail/mapStyle.js
new file mode 100644
index 00000000..6c4390cd
--- /dev/null
+++ b/src/views/charts2/charts/entityDetail/mapStyle.js
@@ -0,0 +1,909 @@
+export default {
+ version: 8,
+ id: '784b0675-dce5-4a4f-b16c-0d8e06442314',
+ name: 'Maptiler.com: Basic',
+ sources: {
+ openmaptiles: {
+ url: '/tiles/tiles.json',
+ type: 'vector'
+ },
+
+ maptiler_attribution: {
+ attribution: '© MapTiler © OpenStreetMap contributors',
+ type: 'vector'
+ }
+ },
+
+ layers: [
+ {
+ id: 'background',
+ type: 'background',
+ layout: { visibility: 'visible' },
+ paint: { 'background-color': { stops: [[6, '#EFEFEF'], [14, 'hsl(355, 0%, 93%)']] } }
+ },
+ {
+ id: 'aeroway_fill',
+ type: 'fill',
+ source: 'openmaptiles',
+ 'source-layer': 'aeroway',
+ minzoom: 11,
+ layout: { visibility: 'visible' },
+ paint: { 'fill-color': 'hsl(313, 0%, 93%)', 'fill-opacity': 1 },
+ metadata: {},
+ filter: ['==', '$type', 'Polygon']
+ },
+ {
+ id: 'landcover',
+ type: 'fill',
+ source: 'openmaptiles',
+ 'source-layer': 'landcover',
+ layout: { visibility: 'visible' },
+ paint: { 'fill-color': ['match', ['get', 'class'], 'wood', 'hsl(1, 0%, 88%)', 'grass', 'hsl(5, 0%, 92%)', 'sand', 'hsl(314, 0%, 94%)', 'hsl(262, 0%, 100%)'], 'fill-opacity': 0.5, 'fill-antialias': false },
+ metadata: {},
+ filter: ['all', ['in', 'class', 'grass', 'sand', 'wood']]
+ },
+ {
+ id: 'landuse_industrial',
+ type: 'fill',
+ source: 'openmaptiles',
+ 'source-layer': 'landuse',
+ maxzoom: 24,
+ layout: { visibility: 'visible' },
+ paint: { 'fill-color': { stops: [[9, 'hsl(353, 0%, 90%)'], [16, 'hsl(2, 0%, 90%)']] } },
+ metadata: {},
+ filter: ['all', ['in', 'class', 'industrial']]
+ },
+ {
+ id: 'landuse_residential',
+ type: 'fill',
+ source: 'openmaptiles',
+ 'source-layer': 'landuse',
+ maxzoom: 24,
+ layout: { visibility: 'visible' },
+ paint: { 'fill-color': { base: 1, stops: [[4, 'hsl(357, 0%, 87%)'], [16, 'hsl(7, 0%, 91%)']] } },
+ metadata: {},
+ filter: ['all', ['in', 'class', 'residential', 'suburbs', 'neighbourhood']]
+ },
+ {
+ id: 'road_area_pedestrian',
+ type: 'fill',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ layout: { visibility: 'visible' },
+ paint: { 'fill-color': 'hsl(356, 0%, 99%)', 'fill-opacity': 0.7 },
+ metadata: {},
+ filter: ['all', ['==', '$type', 'Polygon'], ['!has', 'brunnel'], ['!in', 'class', 'bridge', 'pier'], ['in', 'subclass', 'pedestrian', 'platform']]
+ },
+ {
+ id: 'landuse',
+ type: 'fill',
+ source: 'openmaptiles',
+ 'source-layer': 'landuse',
+ minzoom: 9,
+ maxzoom: 24,
+ layout: { visibility: 'visible' },
+ paint: {
+ 'fill-color': ['match', ['get', 'class'], ['school', 'college', 'university'], 'hsl(147, 0%, 94%)', ['stadium', 'pitch'], 'hsl(47, 0%, 88%)', 'hospital', 'hsl(325, 0%, 94%)', 'cemetery', 'hsl(313, 0%, 88%)', 'garages', 'hsl(313, 0%, 93%)', 'dam', 'hsl(21, 0%, 79%)', 'hsl(313, 0%, 100%)'],
+ 'fill-opacity': { stops: [[9, 0.25], [16, 1]] },
+ 'fill-antialias': true
+ },
+ metadata: {},
+ filter: ['all', ['in', 'class', 'cemetery', 'college', 'dam', 'hospital', 'garages', 'pitch', 'school', 'stadium', 'university']]
+ },
+ {
+ id: 'waterway_tunnel',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'waterway',
+ minzoom: 14,
+ layout: { 'line-cap': 'round', visibility: 'visible' },
+ paint: {
+ 'line-color': '#CAD2D3',
+ 'line-width': { base: 1.3, stops: [[12, 0.5], [20, 6]] },
+ 'line-opacity': 0.5,
+ 'line-dasharray': [2, 4]
+ },
+ filter: ['all', ['==', 'brunnel', 'tunnel']]
+ },
+ {
+ id: 'waterway_river',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'waterway',
+ layout: { 'line-cap': 'round', visibility: 'visible' },
+ paint: { 'line-color': '#CAD2D3', 'line-width': { stops: [[12, 0.5], [20, 6]] } },
+ metadata: {},
+ filter: ['all', ['!=', 'brunnel', 'tunnel']]
+ },
+ {
+ id: 'water',
+ type: 'fill',
+ source: 'openmaptiles',
+ 'source-layer': 'water',
+ layout: { visibility: 'visible' },
+ paint: { 'fill-color': ['match', ['get', 'intermittent'], 1, 'hsl(1, 0%, 87%)', '#CAD2D3'], 'fill-opacity': ['match', ['get', 'intermittent'], 1, 0.85, 1], 'fill-antialias': true },
+ metadata: {},
+ filter: ['all']
+ },
+ {
+ id: 'aeroway',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'aeroway',
+ minzoom: 11,
+ layout: { visibility: 'visible' },
+ paint: { 'line-color': 'hsl(312, 0%, 100%)', 'line-width': ['interpolate', ['linear', 1], ['zoom'], 11, ['match', ['get', 'class'], ['runway'], 3, 0.5], 20, ['match', ['get', 'class'], ['runway'], 16, 6]] },
+ metadata: {},
+ filter: ['all', ['==', '$type', 'LineString']]
+ },
+ {
+ id: 'aeroway_runway',
+ type: 'fill',
+ source: 'openmaptiles',
+ 'source-layer': 'aeroway',
+ minzoom: 11,
+ layout: { visibility: 'visible' },
+ paint: { 'fill-color': 'hsl(312, 0%, 100%)', 'fill-opacity': 1 },
+ metadata: {},
+ filter: ['all', ['in', 'class', 'runway']]
+ },
+ {
+ id: 'aeroway_helipad',
+ type: 'fill',
+ source: 'openmaptiles',
+ 'source-layer': 'aeroway',
+ minzoom: 11,
+ layout: { visibility: 'visible' },
+ paint: { 'fill-color': 'hsl(312, 0%, 100%)', 'fill-opacity': 1 },
+ metadata: {},
+ filter: ['all', ['in', 'class', 'helipad']]
+ },
+ {
+ id: 'ferry_line',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ layout: { 'line-join': 'round', visibility: 'visible' },
+ paint: {
+ 'line-color': { stops: [[10, 'hsl(1, 0%, 72%)'], [16, 'hsl(1, 0%, 60%)']] },
+ 'line-width': 1.1,
+ 'line-dasharray': [2, 2]
+ },
+ filter: ['all', ['in', 'class', 'ferry']]
+ },
+ {
+ id: 'tunnel-casing',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 4,
+ layout: { 'line-cap': 'butt', 'line-join': 'round', visibility: 'visible' },
+ paint: { 'line-color': ['match', ['get', 'class'], 'motorway', 'hsl(340, 0%, 100%)', ['trunk', 'primary'], 'hsl(340, 0%, 100%)', 'hsl(348, 0%, 100%)'], 'line-width': ['interpolate', ['linear', 2], ['zoom'], 6, 0, 7, 0.5, 10, ['match', ['get', 'class'], ['motorway'], ['match', ['get', 'ramp'], 1, 0, 2.5], ['trunk', 'primary'], 2, 0], 12, ['match', ['get', 'class'], ['motorway'], ['match', ['get', 'ramp'], 1, 2, 6], ['trunk', 'primary'], 3, ['secondary', 'tertiary'], 2, ['minor', 'service', 'track'], 1, 0.5], 14, ['match', ['get', 'class'], ['motorway'], ['match', ['get', 'ramp'], 1, 5, 8], ['trunk'], 4, ['primary'], 6, ['secondary'], 6, ['tertiary'], 4, ['minor', 'service', 'track'], 3, 3], 16, ['match', ['get', 'class'], ['motorway', 'trunk', 'primary'], 10, ['secondary'], 8, ['tertiary'], 8, ['minor', 'service', 'track'], 4, 4], 20, ['match', ['get', 'class'], ['motorway', 'trunk', 'primary'], 26, ['secondary'], 26, ['tertiary'], 26, ['minor', 'service', 'track'], 18, 18]], 'line-dasharray': [0.5, 0.25] },
+ metadata: {},
+ filter: ['all', ['==', 'brunnel', 'tunnel'], ['!in', 'class', 'bridge', 'ferry', 'rail', 'transit', 'pier', 'path', 'aerialway', 'motorway_construction', 'trunk_construction', 'primary_construction', 'secondary_construction', 'tertiary_construction', 'minor_construction', 'service_construction', 'track_construction']]
+ },
+ {
+ id: 'tunnel',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 4,
+ layout: { 'line-cap': 'butt', 'line-join': 'round', visibility: 'visible' },
+ paint: { 'line-color': ['match', ['get', 'class'], 'motorway', 'hsl(347, 0%, 100%)', ['trunk', 'primary'], 'hsl(0, 0%, 100%)', 'hsl(312, 0%, 100%)'], 'line-width': ['interpolate', ['linear', 2], ['zoom'], 5, 0, 6, ['match', ['get', 'class'], ['motorway'], ['match', ['get', 'brunnel'], ['bridge'], 0, 1], ['trunk', 'primary'], 0, 0], 10, ['match', ['get', 'class'], ['motorway'], ['match', ['get', 'ramp'], 1, 0, 2.5], ['trunk', 'primary'], 1.5, 1], 12, ['match', ['get', 'class'], ['motorway'], ['match', ['get', 'ramp'], 1, 1, 4], ['trunk'], 2.5, ['primary'], 2.5, ['secondary', 'tertiary'], 1.5, ['minor', 'service', 'track'], 1, 1], 14, ['match', ['get', 'class'], ['motorway'], ['match', ['get', 'ramp'], 1, 5, 6], ['trunk'], 3, ['primary'], 5, ['secondary'], 4, ['tertiary'], 3, ['minor', 'service', 'track'], 2, 2], 16, ['match', ['get', 'class'], ['motorway', 'trunk', 'primary'], 8, ['secondary'], 7, ['tertiary'], 6, ['minor', 'service', 'track'], 4, 4], 20, ['match', ['get', 'class'], ['motorway', 'trunk', 'primary'], 24, ['secondary'], 24, ['tertiary'], 24, ['minor', 'service', 'track'], 16, 16]], 'line-opacity': 1 },
+ metadata: {},
+ filter: ['all', ['==', 'brunnel', 'tunnel'], ['!in', 'class', 'ferry', 'rail', 'transit', 'pier', 'bridge', 'path', 'aerialway', 'motorway_construction', 'trunk_construction', 'primary_construction', 'secondary_construction', 'tertiary_construction', 'minor_construction', 'service_construction', 'track_construction']]
+ },
+ {
+ id: 'tunnel_rail',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ layout: { visibility: 'visible' },
+ paint: {
+ 'line-color': 'hsl(312, 0%, 100%)',
+ 'line-width': { base: 1.4, stops: [[14, 0.4], [15, 0.75], [20, 2]] },
+ 'line-opacity': 0.5
+ },
+ metadata: {},
+ filter: ['all', ['==', 'brunnel', 'tunnel'], ['in', 'class', 'rail']]
+ },
+ {
+ id: 'tunnel_rail-hatching',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ layout: { visibility: 'visible' },
+ paint: {
+ 'line-color': 'hsl(312, 0%, 100%)',
+ 'line-width': { base: 1.4, stops: [[14.5, 0], [15, 3], [20, 8]] },
+ 'line-opacity': 0.5,
+ 'line-dasharray': [0.2, 8]
+ },
+ metadata: {},
+ filter: ['all', ['==', 'brunnel', 'tunnel'], ['==', 'class', 'rail']]
+ },
+ {
+ id: 'tunnel_footway-casing',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 12,
+ layout: { 'line-cap': 'round', 'line-join': 'miter', visibility: 'visible' },
+ paint: {
+ 'line-color': 'hsl(312, 0%, 100%)',
+ 'line-width': { base: 1.2, stops: [[14, 0], [16, 0], [18, 4], [22, 8]] },
+ 'line-opacity': 1
+ },
+ metadata: {},
+ filter: ['all', ['==', '$type', 'LineString'], ['in', 'class', 'path', 'pedestrian'], ['==', 'brunnel', 'tunnel']]
+ },
+ {
+ id: 'tunnel_footway',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 12,
+ layout: { 'line-cap': 'butt', 'line-join': 'round', visibility: 'visible' },
+ paint: {
+ 'line-color': 'hsl(312, 0%, 100%)',
+ 'line-width': { base: 1.2, stops: [[14, 0.5], [16, 1], [18, 2], [22, 5]] },
+ 'line-opacity': 0.4,
+ 'line-dasharray': { stops: [[14, [1, 0.5]], [18, [1, 0.25]]] }
+ },
+ metadata: {},
+ filter: ['all', ['==', '$type', 'LineString'], ['in', 'class', 'path', 'pedestrian'], ['==', 'brunnel', 'tunnel']]
+ },
+ {
+ id: 'road_area_pier',
+ type: 'fill',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ layout: { visibility: 'visible' },
+ paint: { 'fill-color': 'hsl(355, 0%, 93%)', 'fill-antialias': true },
+ metadata: {},
+ filter: ['all', ['==', '$type', 'Polygon'], ['==', 'class', 'pier']]
+ },
+ {
+ id: 'road_pier',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ layout: { 'line-cap': 'round', 'line-join': 'round', visibility: 'visible' },
+ paint: { 'line-color': 'hsl(355, 0%, 93%)', 'line-width': { base: 1.2, stops: [[15, 1], [17, 4]] } },
+ metadata: {},
+ filter: ['all', ['==', '$type', 'LineString'], ['in', 'class', 'pier']]
+ },
+ {
+ id: 'road_area_bridge',
+ type: 'fill',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ layout: { visibility: 'visible' },
+ paint: { 'fill-color': 'hsl(355, 0%, 93%)', 'fill-opacity': 0.6, 'fill-antialias': true },
+ metadata: {},
+ filter: ['all', ['==', '$type', 'Polygon'], ['==', 'brunnel', 'bridge']]
+ },
+ {
+ id: 'road_network-casing',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 4,
+ layout: { 'line-cap': 'butt', 'line-join': 'round', visibility: 'visible' },
+ paint: { 'line-color': ['match', ['get', 'class'], 'motorway', 'hsl(340, 0%, 100%)', ['trunk', 'primary'], 'hsl(340, 0%, 100%)', 'hsl(348, 0%, 100%)'], 'line-width': ['interpolate', ['linear', 2], ['zoom'], 6, 0, 7, 0.5, 10, ['match', ['get', 'class'], ['motorway'], ['match', ['get', 'ramp'], 1, 0, 2.5], ['trunk', 'primary'], 2.4, 0], 12, ['match', ['get', 'class'], ['motorway'], ['match', ['get', 'ramp'], 1, 2, 6], ['trunk', 'primary'], 3, ['secondary', 'tertiary'], 2, ['minor', 'service', 'track'], 1, 0.5], 14, ['match', ['get', 'class'], ['motorway'], ['match', ['get', 'ramp'], 1, 5, 8], ['trunk'], 4, ['primary'], 6, ['secondary'], 6, ['tertiary'], 4, ['minor', 'service', 'track'], 3, 3], 16, ['match', ['get', 'class'], ['motorway', 'trunk', 'primary'], 10, ['secondary'], 8, ['tertiary'], 8, ['minor', 'service', 'track'], 4, 4], 20, ['match', ['get', 'class'], ['motorway', 'trunk', 'primary'], 26, ['secondary'], 26, ['tertiary'], 26, ['minor', 'service', 'track'], 18, 18]], 'line-opacity': 1 },
+ metadata: {},
+ filter: ['all', ['!in', 'brunnel', 'tunnel'], ['!in', 'class', 'bridge', 'ferry', 'rail', 'transit', 'pier', 'path', 'aerialway', 'motorway_construction', 'trunk_construction', 'primary_construction', 'secondary_construction', 'tertiary_construction', 'minor_construction', 'service_construction', 'track_construction']]
+ },
+ {
+ id: 'road_network_construction',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 4,
+ layout: { 'line-cap': 'square', 'line-join': 'round', visibility: 'visible' },
+ paint: { 'line-color': ['match', ['get', 'class'], 'motorway_construction', 'hsl(347, 0%, 100%)', ['trunk_construction', 'primary_construction'], 'hsl(0, 0%, 100%)', 'hsl(312, 0%, 100%)'], 'line-width': ['interpolate', ['linear', 2], ['zoom'], 5, 0, 6, ['match', ['get', 'class'], ['motorway_construction'], ['match', ['get', 'brunnel'], ['bridge'], 0, 1], ['trunk_construction', 'primary_construction'], 0, 0], 10, ['match', ['get', 'class'], ['motorway_construction'], ['match', ['get', 'ramp'], 1, 0, 2.5], ['trunk_construction', 'primary_construction'], 1.5, 1], 12, ['match', ['get', 'class'], ['motorway_construction'], ['match', ['get', 'ramp'], 1, 1, 4], ['trunk_construction'], 2.5, ['primary_construction'], 2.5, ['secondary_construction', 'tertiary_construction'], 1.5, ['minor_construction', 'service_construction', 'track_construction'], 1, 1], 14, ['match', ['get', 'class'], ['motorway_construction'], ['match', ['get', 'ramp'], 1, 5, 6], ['trunk_construction'], 3, ['primary_construction'], 5, ['secondary_construction'], 4, ['tertiary_construction'], 3, ['minor_construction', 'service_construction', 'track_construction'], 2, 2], 16, ['match', ['get', 'class'], ['motorway_construction', 'trunk_construction', 'primary_construction'], 8, ['secondary_construction'], 7, ['tertiary_construction'], 6, ['minor_construction', 'service_construction', 'track_construction'], 4, 4], 20, ['match', ['get', 'class'], ['motorway_construction', 'trunk_construction', 'primary_construction'], 24, ['secondary_construction'], 24, ['tertiary_construction'], 24, ['minor_construction', 'service_construction', 'track_construction'], 16, 16]], 'line-opacity': ['case', ['<=', ['get', 'brunnel'], 'tunnel'], 0.7, 1], 'line-dasharray': [2, 2] },
+ metadata: {},
+ filter: ['all', ['in', 'class', 'motorway_construction', 'trunk_construction', 'primary_construction', 'secondary_construction', 'tertiary_construction', 'minor_construction', 'service_construction', 'track_construction']]
+ },
+ {
+ id: 'road_network',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 4,
+ layout: { 'line-cap': 'butt', 'line-join': 'round', visibility: 'visible' },
+ paint: { 'line-color': ['match', ['get', 'class'], 'motorway', 'hsl(347, 0%, 100%)', ['trunk', 'primary'], 'hsl(0, 0%, 100%)', 'hsl(312, 0%, 100%)'], 'line-width': ['interpolate', ['linear', 2], ['zoom'], 5, 0.5, 6, ['match', ['get', 'class'], ['motorway'], ['match', ['get', 'brunnel'], ['bridge'], 0, 1], ['trunk', 'primary'], 0, 0], 10, ['match', ['get', 'class'], ['motorway'], ['match', ['get', 'ramp'], 1, 0, 2.5], ['trunk', 'primary'], 1.5, 1], 12, ['match', ['get', 'class'], ['motorway'], ['match', ['get', 'ramp'], 1, 1, 4], ['trunk'], 2.5, ['primary'], 2.5, ['secondary', 'tertiary'], 1.5, ['minor', 'service', 'track'], 1, 1], 14, ['match', ['get', 'class'], ['motorway'], ['match', ['get', 'ramp'], 1, 5, 6], ['trunk'], 3, ['primary'], 5, ['secondary'], 4, ['tertiary'], 3, ['minor', 'service', 'track'], 2, 2], 16, ['match', ['get', 'class'], ['motorway', 'trunk', 'primary'], 8, ['secondary'], 7, ['tertiary'], 6, ['minor', 'service', 'track'], 4, 4], 20, ['match', ['get', 'class'], ['motorway', 'trunk', 'primary'], 24, ['secondary'], 24, ['tertiary'], 24, ['minor', 'service', 'track'], 16, 16]] },
+ metadata: {},
+ filter: ['all', ['!=', 'brunnel', 'tunnel'], ['!in', 'class', 'ferry', 'rail', 'transit', 'pier', 'bridge', 'path', 'aerialway', 'motorway_construction', 'trunk_construction', 'primary_construction', 'secondary_construction', 'tertiary_construction', 'minor_construction', 'service_construction', 'track_construction']]
+ },
+ {
+ id: 'road_path_pedestrian-casing',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 12,
+ layout: { 'line-cap': 'round', 'line-join': 'miter', visibility: 'visible' },
+ paint: { 'line-color': 'hsl(312, 0%, 100%)', 'line-width': { base: 1.2, stops: [[14, 0], [16, 0], [18, 4], [22, 8]] } },
+ metadata: {},
+ filter: ['all', ['==', '$type', 'LineString'], ['in', 'class', 'path', 'pedestrian'], ['!=', 'brunnel', 'tunnel']]
+ },
+ {
+ id: 'road_path_pedestrian',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 12,
+ layout: { 'line-cap': 'butt', 'line-join': 'round', visibility: 'visible' },
+ paint: {
+ 'line-color': 'hsl(312, 0%, 100%)',
+ 'line-width': { base: 1.2, stops: [[14, 0.5], [16, 1], [18, 2], [22, 5]] },
+ 'line-dasharray': { stops: [[14, [1, 0.5]], [18, [1, 0.25]]] }
+ },
+ metadata: {},
+ filter: ['all', ['==', '$type', 'LineString'], ['in', 'class', 'path', 'pedestrian'], ['!=', 'brunnel', 'tunnel']]
+ },
+ {
+ id: 'rail_major',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ layout: { visibility: 'visible' },
+ paint: {
+ 'line-color': { stops: [[8, 'hsl(312, 0%, 100%)'], [16, 'hsl(312, 0%, 100%)']] },
+ 'line-width': { base: 1.4, stops: [[14, 0.4], [15, 0.75], [20, 2]] },
+ 'line-opacity': ['match', ['get', 'service'], 'yard', 0.5, 1]
+ },
+ metadata: {},
+ filter: ['all', ['!in', 'brunnel', 'tunnel'], ['==', 'class', 'rail']]
+ },
+ {
+ id: 'rail_major-hatching',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ layout: { visibility: 'visible' },
+ paint: {
+ 'line-color': 'hsl(312, 0%, 100%)',
+ 'line-width': { base: 1.4, stops: [[14.5, 0], [15, 3], [20, 8]] },
+ 'line-opacity': ['match', ['get', 'service'], 'yard', 0.5, 1],
+ 'line-dasharray': [0.2, 9]
+ },
+ metadata: {},
+ filter: ['all', ['!in', 'brunnel', 'tunnel'], ['==', 'class', 'rail']]
+ },
+ {
+ id: 'rail_minor',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ layout: { visibility: 'visible' },
+ paint: { 'line-color': 'hsl(312, 0%, 100%)', 'line-width': { base: 1.4, stops: [[14, 0.4], [15, 0.75], [20, 2]] } },
+ metadata: {},
+ filter: ['all', ['in', 'subclass', 'tram', 'light_rail']]
+ },
+ {
+ id: 'rail_minor-hatching',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ layout: { visibility: 'visible' },
+ paint: {
+ 'line-color': 'hsl(312, 0%, 100%)',
+ 'line-width': { base: 1.4, stops: [[14.5, 0], [15, 2], [20, 6]] },
+ 'line-dasharray': [0.2, 4]
+ },
+ metadata: {},
+ filter: ['all', ['in', 'subclass', 'tram', 'light_rail']]
+ },
+ {
+ id: 'building',
+ type: 'fill',
+ source: 'openmaptiles',
+ 'source-layer': 'building',
+ minzoom: 13,
+ maxzoom: 15,
+ layout: { visibility: 'visible' },
+ paint: { 'fill-color': 'hsl(0, 0%, 100%)', 'fill-opacity': 0.3, 'fill-outline-color': { base: 1, stops: [[13, 'hsla(5, 0%, 100%, 0.57)'], [14, 'hsl(5, 0%, 100%)']] } },
+ metadata: {}
+ },
+ {
+ id: 'building-3d',
+ type: 'fill-extrusion',
+ source: 'openmaptiles',
+ 'source-layer': 'building',
+ minzoom: 15,
+ layout: { visibility: 'visible' },
+ paint: {
+ 'fill-extrusion-base': { type: 'identity', property: 'render_min_height' },
+ 'fill-extrusion-color': 'hsl(14, 0%, 100%)',
+ 'fill-extrusion-height': { type: 'identity', property: 'render_height' },
+ 'fill-extrusion-opacity': 0.4
+ },
+ metadata: {},
+ filter: ['all', ['!has', 'hide_3d']]
+ },
+ {
+ id: 'aqueduct-casing',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'waterway',
+ layout: { 'line-cap': 'round', 'line-join': 'round', visibility: 'visible' },
+ paint: { 'line-color': 'hsl(156, 0%, 63%)', 'line-width': { base: 1.3, stops: [[14, 1], [20, 6]] } },
+ filter: ['all', ['==', '$type', 'LineString'], ['==', 'brunnel', 'bridge']]
+ },
+ {
+ id: 'aqueduct',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'waterway',
+ layout: { 'line-cap': 'round', 'line-join': 'round', visibility: 'visible' },
+ paint: { 'line-color': 'hsl(0, 0%, 81%)', 'line-width': { base: 1.3, stops: [[12, 0.5], [20, 5]] } },
+ filter: ['all', ['==', '$type', 'LineString'], ['==', 'brunnel', 'bridge']]
+ },
+ {
+ id: 'cablecar',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 13,
+ layout: { 'line-cap': 'round', visibility: 'visible' },
+ paint: { 'line-blur': 1, 'line-color': 'hsl(312, 0%, 100%)', 'line-width': { base: 1, stops: [[13, 2], [19, 4]] } },
+ filter: ['==', 'class', 'aerialway']
+ },
+ {
+ id: 'cablecar-dash',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 13,
+ layout: { 'line-cap': 'round', 'line-join': 'bevel', visibility: 'visible' },
+ paint: {
+ 'line-color': 'hsl(312, 0%, 100%)',
+ 'line-width': { base: 1, stops: [[13, 1], [19, 2]] },
+ 'line-dasharray': [2, 2]
+ },
+ filter: ['==', 'class', 'aerialway']
+ },
+ {
+ id: 'border_other',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'boundary',
+ minzoom: 3,
+ maxzoom: 13,
+ layout: { visibility: 'none' },
+ paint: {
+ 'line-color': ['match', ['get', 'maritime'], 1, 'hsla(210, 52%, 80%, 0)', 'hsla(0, 0%, 78%, 0.5)'],
+ 'line-width': { stops: [[3, 0.75], [4, 1.25], [11, 1.75], [18, 3]] },
+ 'line-dasharray': [2, 1]
+ },
+ filter: ['all', ['>=', 'admin_level', 3], ['==', 'maritime', 0], ['<', 'admin_level', 10]]
+ },
+ {
+ id: 'border_disputed',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'boundary',
+ minzoom: 0,
+ layout: { 'line-cap': 'round', 'line-join': 'round', visibility: 'visible' },
+ paint: {
+ 'line-color': ['match', ['get', 'maritime'], 1, 'hsla(210, 52%, 80%, 0)', 'hsl(0, 0%, 80%)'],
+ 'line-width': { stops: [[1, 0.5], [5, 1.5], [10, 2]] },
+ 'line-dasharray': [2, 2]
+ },
+ filter: ['all', ['<=', 'admin_level', 2], ['==', '$type', 'LineString'], ['==', 'disputed', 1]]
+ },
+ {
+ id: 'border_country',
+ type: 'line',
+ source: 'openmaptiles',
+ 'source-layer': 'boundary',
+ minzoom: 0,
+ layout: { 'line-cap': 'round', 'line-join': 'round', visibility: 'visible' },
+ paint: { 'line-blur': 0, 'line-color': ['match', ['get', 'maritime'], 1, 'hsla(210, 52%, 80%, 0)', 'hsl(0, 0%, 75%)'], 'line-width': { stops: [[1, 0.5], [5, 1.5], [10, 2]] } },
+ filter: ['all', ['<=', 'admin_level', 2], ['==', '$type', 'LineString'], ['==', 'disputed', 0]]
+ },
+ {
+ id: 'water_line',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'waterway',
+ minzoom: 13,
+ layout: {
+ 'text-font': ['Roboto Italic', 'Open Sans Italic'],
+ 'text-size': { stops: [[12, 8], [16, 14], [22, 20]] },
+ 'text-field': ['concat', ['get', 'name:latin'], ' ', ['get', 'name:nonlatin']],
+ visibility: 'visible',
+ 'text-offset': [0, 0],
+ 'symbol-spacing': 400,
+ 'text-max-width': 5,
+ 'symbol-placement': 'line',
+ 'text-letter-spacing': 0.2,
+ 'text-rotation-alignment': 'map'
+ },
+ paint: { 'text-color': 'hsl(1, 0%, 54%)', 'text-halo-blur': 1, 'text-halo-color': 'hsl(358, 0%, 86%)', 'text-halo-width': { stops: [[10, 1], [18, 2]] } },
+ filter: ['all', ['==', '$type', 'LineString'], ['has', 'name']]
+ },
+ {
+ id: 'water_point',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'water_name',
+ minzoom: 0,
+ layout: { 'text-font': ['Roboto Italic', 'Open Sans Italic'], 'text-size': ['interpolate', ['linear', 1], ['zoom'], 1, ['match', ['get', 'class'], ['ocean'], 13, 10], 3, ['match', ['get', 'class'], ['ocean'], 16, 14], 9, ['match', ['get', 'class'], ['ocean'], 22, 18], 14, ['match', ['get', 'class'], ['lake'], 14, ['sea'], 20, 26]], 'text-field': ['concat', ['get', 'name:latin'], '\n', ['get', 'name:nonlatin']], visibility: 'visible', 'text-max-width': 5, 'symbol-placement': 'point' },
+ paint: {
+ 'text-color': 'hsl(359, 0%, 54%)',
+ 'text-opacity': ['step', ['zoom'], 0, 1, ['match', ['get', 'class'], ['ocean'], 1, 0], 3, 1],
+ 'text-halo-blur': 1,
+ 'text-halo-color': { stops: [[1, 'hsla(352, 0%, 85%, 0.05)'], [3, 'hsla(356, 0%, 91%, 0.75)']] },
+ 'text-halo-width': 1
+ },
+ metadata: {},
+ filter: ['all', ['==', '$type', 'Point'], ['has', 'name'], ['!=', 'class', 'lake']]
+ },
+ {
+ id: 'housenumber',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'housenumber',
+ minzoom: 18,
+ layout: { 'text-font': ['Roboto Regular', 'Open Sans Regular'], 'text-size': 10, 'text-field': '{housenumber}', visibility: 'visible' },
+ paint: { 'text-color': 'hsl(26, 10%, 65%)', 'text-halo-blur': 1, 'text-halo-color': 'hsl(21, 64%, 98%)', 'text-halo-width': 1 }
+ },
+ {
+ id: 'gondola',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation_name',
+ minzoom: 13,
+ layout: {
+ 'text-font': ['Roboto Italic', 'Open Sans Italic'],
+ 'text-size': { base: 1, stops: [[13, 11], [15, 12], [18, 13], [22, 14]] },
+ 'text-field': ['concat', ['get', 'name:latin'], '\n', ['get', 'name:nonlatin']],
+ visibility: 'visible',
+ 'text-anchor': 'center',
+ 'text-offset': [0.8, 0.8],
+ 'symbol-placement': 'line'
+ },
+ paint: { 'text-color': 'hsl(0, 0%, 63%)', 'text-halo-blur': 1, 'text-halo-color': 'hsl(0, 0%, 100%)', 'text-halo-width': 1 },
+ metadata: {},
+ filter: ['all', ['in', 'subclass', 'gondola', 'cable_car']]
+ },
+ {
+ id: 'ferry',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation_name',
+ minzoom: 12,
+ layout: {
+ 'text-font': ['Roboto Italic', 'Open Sans Italic'],
+ 'text-size': { base: 1, stops: [[13, 11], [15, 12]] },
+ 'text-field': ['concat', ['get', 'name:latin'], '\n', ['get', 'name:nonlatin']],
+ visibility: 'visible',
+ 'text-anchor': 'center',
+ 'text-offset': [0.8, 0.8],
+ 'symbol-placement': 'line'
+ },
+ paint: { 'text-color': 'hsl(1, 0%, 54%)', 'text-halo-blur': 0.5, 'text-halo-color': 'hsla(156, 0%, 100%, 0.15)', 'text-halo-width': 1 },
+ filter: ['all', ['==', 'subclass', 'ferry']]
+ },
+ {
+ id: 'oneway',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation',
+ minzoom: 16,
+ layout: {
+ 'icon-size': { stops: [[16, 0.7], [18, 1]] },
+ 'text-font': ['Roboto Regular', 'Open Sans Regular'],
+ 'icon-image': 'oneway',
+ visibility: 'visible',
+ 'icon-rotate': ['match', ['get', 'oneway'], 1, 90, -90],
+ 'icon-padding': 2,
+ 'symbol-spacing': 75,
+ 'symbol-placement': 'line',
+ 'icon-rotation-alignment': 'map'
+ },
+ paint: { 'icon-opacity': 0.5 },
+ filter: ['all', ['has', 'oneway'], ['in', 'class', 'motorway', 'trunk', 'primary', 'secondary', 'tertiary', 'minor', 'service']]
+ },
+ {
+ id: 'road',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation_name',
+ minzoom: 8,
+ layout: {
+ 'text-font': ['Roboto Regular', 'Open Sans Regular'],
+ 'text-size': { base: 1, stops: [[13, 10], [14, 11], [18, 13], [22, 15]] },
+ 'text-field': ['coalesce', ['match', ['get', 'class'], ['tertiary'], ['get', 'ref'], ['concat', ['get', 'name:latin'], '\n', ['get', 'name:nonlatin']]], ['concat', ['get', 'name:latin'], '\n', ['get', 'name:nonlatin']]],
+ visibility: 'visible',
+ 'text-anchor': 'center',
+ 'text-offset': [0, 0.15],
+ 'text-justify': 'center',
+ 'text-optional': false,
+ 'text-max-width': 10,
+ 'symbol-placement': 'line',
+ 'icon-keep-upright': false,
+ 'icon-allow-overlap': false,
+ 'text-allow-overlap': false,
+ 'icon-ignore-placement': false,
+ 'text-ignore-placement': false
+ },
+ paint: { 'text-color': 'hsl(19, 0%, 48%)', 'text-halo-blur': 0.5, 'text-halo-color': 'hsl(0, 0%, 100%)', 'text-halo-width': 1 },
+ metadata: {},
+ filter: ['all', ['!in', 'subclass', 'ferry', 'gondola', 'cable_car'], ['!in', 'class', 'service']]
+ },
+ {
+ id: 'highway-junction',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation_name',
+ minzoom: 16,
+ layout: { 'icon-size': 1, 'text-font': ['Roboto Regular', 'Open Sans Regular'], 'text-size': 9, 'icon-image': 'exit_{ref_length}', 'text-field': '{ref}', visibility: 'none', 'text-offset': [0, 0.1], 'symbol-spacing': 200, 'symbol-z-order': 'auto', 'symbol-placement': 'point', 'symbol-avoid-edges': true, 'icon-rotation-alignment': 'viewport', 'text-rotation-alignment': 'viewport' },
+ paint: { 'text-color': 'hsl(0,0%,21%)', 'text-halo-color': 'hsl(0,0%,100%)', 'text-halo-width': 1 },
+ filter: ['all', ['>', 'ref_length', 0], ['==', '$type', 'Point'], ['==', 'subclass', 'junction']]
+ },
+ {
+ id: 'highway-shield',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation_name',
+ minzoom: 8,
+ layout: {
+ 'icon-size': 1,
+ 'text-font': ['match', ['get', 'class'], 'motorway', ['literal', ['Roboto Bold']], ['literal', ['Roboto Regular']]],
+ 'text-size': 10,
+ 'icon-image': 'road_{ref_length}',
+ 'text-field': '{ref}',
+ visibility: 'none',
+ 'text-offset': [0, 0.1],
+ 'text-padding': 2,
+ 'symbol-spacing': { stops: [[10, 200], [18, 400]] },
+ 'text-transform': 'uppercase',
+ 'symbol-placement': 'line',
+ 'symbol-avoid-edges': true,
+ 'icon-rotation-alignment': 'viewport',
+ 'text-rotation-alignment': 'viewport'
+ },
+ paint: { 'text-color': 'hsl(0,0%,18%)' },
+ filter: ['all', ['<=', 'ref_length', 6], ['==', '$type', 'LineString'], ['!in', 'network', 'us-interstate', 'us-highway', 'us-state'], ['!in', 'class', 'path']]
+ },
+ {
+ id: 'highway-shield-us',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'transportation_name',
+ minzoom: 7,
+ layout: {
+ 'icon-size': 1.1,
+ 'text-font': ['match', ['get', 'class'], 'motorway', ['literal', ['Roboto Bold']], ['literal', ['Roboto Regular']]],
+ 'text-size': 9,
+ 'icon-image': '{network}_{ref_length}',
+ 'text-field': '{ref}',
+ visibility: 'none',
+ 'text-offset': [0, 0.2],
+ 'symbol-spacing': 200,
+ 'symbol-placement': { base: 1, stops: [[7, 'point'], [7, 'line'], [8, 'line']] },
+ 'symbol-avoid-edges': true,
+ 'icon-rotation-alignment': 'viewport',
+ 'text-rotation-alignment': 'viewport'
+ },
+ paint: { 'text-color': ['match', ['get', 'network'], 'us-interstate', 'hsl(0,0%,100%)', 'hsl(0,0%,14%)'] },
+ filter: ['all', ['<=', 'ref_length', 6], ['==', '$type', 'LineString'], ['in', 'network', 'us-interstate', 'us-highway', 'us-state']]
+ },
+ {
+ id: 'poi',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'poi',
+ minzoom: 13,
+ layout: {
+ 'icon-size': 1,
+ 'text-font': ['Roboto Regular', 'Open Sans Regular'],
+ 'text-size': { stops: [[12, 10], [16, 12], [22, 14]] },
+ 'icon-image': ['coalesce', ['image', ['get', 'subclass']], ['image', ['get', 'class']], ['image', 'dot']],
+ 'text-field': ['concat', ['get', 'name:latin'], '\n', ['get', 'name:nonlatin']],
+ visibility: 'none',
+ 'text-anchor': 'top',
+ 'text-offset': [0, 0.8],
+ 'text-padding': 2,
+ 'text-max-width': 8,
+ 'icon-allow-overlap': false
+ },
+ paint: { 'text-color': ['match', ['get', 'class'], ['aerialway', 'bus', 'bicycle_rental', 'entrance', 'ferry_terminal', 'harbor'], 'hsl(215,83%,53%)', ['park', 'golf'], 'hsl(82,83%,25%)', ['hospital'], 'hsl(6,94%,35%)', 'hsl(17,17%,38%)'], 'icon-opacity': ['step', ['zoom'], 0, 15, ['match', ['get', 'class'], ['aerialway', 'castle', 'cemetery', 'diplomatic', 'ferry_terminal', 'golf', 'harbor', 'hospital', 'stadium', 'park', 'place_of_worship', 'zoo'], 1, 0], 16, ['match', ['get', 'class'], ['castle', 'cemetery', 'town_hall', 'diplomatic', 'golf', 'ferry_terminal', 'hospital', 'stadium', 'park', 'college', 'university', 'place_of_worship', 'zoo', 'museum', 'school', 'parking', 'lodging'], 1, 0], 17, 1, 22, 1], 'text-opacity': ['step', ['zoom'], 0, 15, ['match', ['get', 'class'], ['castle', 'courthouse', 'diplomatic', 'golf', 'ferry_terminal', 'aerialway', 'harbor', 'stadium', 'park', 'university', 'hospital', 'place_of_worship', 'zoo'], 1, 0], 16, ['match', ['get', 'class'], ['castle', 'cemetery', 'town_hall', 'diplomatic', 'golf', 'harbor', 'college', 'university', 'ferry_terminal', 'hospital', 'stadium', 'park', 'place_of_worship', 'zoo', 'museum', 'school', 'lodging'], 1, 0], 17, 1, 22, 1], 'text-halo-blur': 0.5, 'text-halo-color': 'hsl(0,0%,100%)', 'text-halo-width': 1 },
+ metadata: {},
+ filter: ['all', ['has', 'name'], ['!=', 'class', 'railway']]
+ },
+ {
+ id: 'place',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'place',
+ minzoom: 4,
+ layout: {
+ 'icon-size': { stops: [[6, 0.5], [8.9, 0.8], [9, 0]] },
+ 'text-font': ['Roboto Regular', 'Open Sans Regular'],
+ 'text-size': ['interpolate', ['linear', 1], ['zoom'], 3, 11, 8, 13, 11, ['match', ['get', 'class'], 'village', 12, ['suburb', 'neighbourhood', 'quarter', 'hamlet', 'isolated_dwelling'], 9, 'island', 8, 12], 16, ['match', ['get', 'class'], 'village', 18, ['suburb', 'neighbourhood', 'quarter', 'hamlet', 'isolated_dwelling'], 15, 'island', 11, 16]],
+ 'text-field': ['concat', ['get', 'name:latin'], '\n', ['get', 'name:nonlatin']],
+ visibility: 'visible',
+ 'text-anchor': 'bottom',
+ 'text-offset': [0, 0],
+ 'text-padding': 2,
+ 'icon-optional': false,
+ 'text-max-width': ['match', ['get', 'class'], ['island'], 6, 8],
+ 'text-transform': ['match', ['get', 'class'], ['suburb', 'neighborhood', 'neighbourhood', 'quarter', 'island'], 'uppercase', 'none'],
+ 'icon-allow-overlap': true,
+ 'text-letter-spacing': ['match', ['get', 'class'], ['suburb', 'neighborhood', 'neighbourhood', 'quarter', 'island'], 0.2, 0]
+ },
+ paint: { 'text-color': ['match', ['get', 'class'], ['suburb', 'neighborhood', 'neighbourhood', 'quarter'], 'hsl(0, 0%, 58%)', 'hsl(0, 0%, 50%)'], 'icon-opacity': 1, 'text-opacity': ['step', ['zoom'], 1, 8, ['match', ['get', 'class'], ['island'], 0, 1], 9, ['match', ['get', 'class'], ['island'], 1, 1]], 'text-halo-color': 'hsl(0, 0%, 100%)', 'text-halo-width': 1.2 },
+ metadata: {},
+ filter: ['all', ['!in', 'class', 'continent', 'country', 'state', 'region', 'province', 'city', 'town']]
+ },
+ {
+ id: 'station',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'poi',
+ minzoom: 12,
+ layout: {
+ 'icon-size': { stops: [[13, 0.8], [18, 1]] },
+ 'text-font': ['Roboto Medium', 'Open Sans Semibold'],
+ 'text-size': { stops: [[12, 10], [16, 12], [22, 15]] },
+ 'icon-image': ['match', ['get', 'subclass'], ['station'], 'railway', ['subway', 'halt'], 'subway', ['tram_stop'], 'tramway', ''],
+ 'text-field': ['concat', ['get', 'name:latin'], '\n', ['get', 'name:nonlatin']],
+ visibility: 'none',
+ 'text-anchor': 'top',
+ 'text-offset': [0, 0.9],
+ 'text-padding': 2,
+ 'text-max-width': 9,
+ 'text-line-height': 0.9
+ },
+ paint: { 'text-color': 'hsl(215,83%,53%)', 'icon-opacity': ['step', ['zoom'], 0, 12, ['match', ['get', 'subclass'], ['station'], 1, 0], 14, ['match', ['get', 'subclass'], ['station', 'subway'], 1, 0], 15, ['match', ['get', 'subclass'], ['station', 'halt', 'subway', 'tram_stop'], 1, 0], 17, 1, 22, 1], 'text-opacity': ['step', ['zoom'], 0, 12, ['match', ['get', 'subclass'], ['station'], 1, 0], 14, ['match', ['get', 'subclass'], ['station', 'subway'], 1, 0], 15, ['match', ['get', 'subclass'], ['station', 'subway', 'halt', 'tram_stop'], 1, 0], 17, 1, 22, 1], 'text-halo-blur': 0.5, 'text-halo-color': 'hsl(0,0%,100%)', 'text-halo-width': 1 },
+ metadata: {},
+ filter: ['all', ['==', 'class', 'railway'], ['has', 'name']]
+ },
+ {
+ id: 'airport',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'aerodrome_label',
+ minzoom: 8,
+ layout: {
+ 'icon-size': ['interpolate', ['linear'], ['zoom'], 8, 0.6, 10, ['match', ['get', 'class'], 'international', 0.8, 0.6], 16, ['match', ['get', 'class'], 'international', 1, 0.8]],
+ 'text-font': ['Roboto Medium', 'Open Sans Semibold'],
+ 'text-size': ['interpolate', ['linear'], ['zoom'], 9, 9, 10, ['match', ['get', 'class'], 'international', 10, 7], 14, ['match', ['get', 'class'], 'international', 13, 11]],
+ 'icon-image': ['match', ['get', 'class'], 'international', 'airport', 'airfield'],
+ 'text-field': { stops: [[8, ' '], [9, '{iata}'], [12, '{name:latin}']] },
+ visibility: 'none',
+ 'text-anchor': 'top',
+ 'text-offset': [0, 0.8],
+ 'text-padding': 2,
+ 'text-optional': true,
+ 'text-max-width': 9,
+ 'text-line-height': 1.4
+ },
+ paint: { 'text-color': 'hsl(215,83%,53%)', 'icon-opacity': 1, 'text-halo-blur': 0.5, 'text-halo-color': 'hsl(0,0%,100%)', 'text-halo-width': 1 },
+ filter: ['all', ['has', 'iata'], ['!=', 'class', 'public']]
+ },
+ {
+ id: 'airport_gate',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'aeroway',
+ minzoom: 15,
+ layout: {
+ 'text-font': ['Roboto Medium', 'Open Sans Semibold'],
+ 'text-size': { stops: [[15, 10], [22, 18]] },
+ 'text-field': '{ref}',
+ visibility: 'visible'
+ },
+ paint: { 'text-color': 'hsl(0, 0%, 63%)', 'text-halo-blur': 0.5, 'text-halo-color': 'hsl(0, 0%, 100%)', 'text-halo-width': 1 },
+ filter: ['all', ['==', 'class', 'gate']]
+ },
+ {
+ id: 'state',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'place',
+ minzoom: 3,
+ maxzoom: 9,
+ layout: {
+ 'text-font': ['Roboto Medium', 'Open Sans Semibold'],
+ 'text-size': { stops: [[3, 9], [5, 10], [6, 11]] },
+ 'text-field': ['concat', ['get', 'name:latin'], '\n', ['get', 'name:nonlatin']],
+ visibility: 'visible',
+ 'text-padding': 2,
+ 'text-max-width': 8,
+ 'text-transform': 'uppercase',
+ 'text-letter-spacing': 0.1
+ },
+ paint: { 'text-color': 'hsl(48, 4%, 65%)', 'text-halo-color': 'hsla(0, 0%, 100%, 0.75)', 'text-halo-width': 0.8 },
+ metadata: {},
+ filter: ['all', ['in', 'class', 'state', 'province'], ['<=', 'rank', 6]]
+ },
+ {
+ id: 'town',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'place',
+ minzoom: 4,
+ maxzoom: 16,
+ layout: {
+ 'icon-size': { stops: [[6, 0.5], [14, 0.8]] },
+ 'text-font': { stops: [[6, ['Roboto Regular', 'Open Sans Regular']], [12, ['Roboto Medium', 'Open Sans Semibold']]] },
+ 'text-size': ['interpolate', ['linear', 1], ['zoom'], 6, ['case', ['<=', ['get', 'rank'], 12], 11, 10], 9, ['case', ['<=', ['get', 'rank'], 15], 13, 12], 16, ['case', ['<=', ['get', 'rank'], 15], 22, 20]],
+ 'icon-image': { stops: [[6, 'circle'], [12, ' ']] },
+ 'text-field': ['concat', ['get', 'name:latin'], '\n', ['get', 'name:nonlatin']],
+ visibility: 'visible',
+ 'text-anchor': 'bottom',
+ 'text-offset': [0, 0],
+ 'icon-optional': false,
+ 'text-max-width': 8,
+ 'icon-allow-overlap': true
+ },
+ paint: { 'text-color': 'hsl(0, 0%, 50%)', 'text-halo-blur': 0.5, 'text-halo-color': 'hsl(0, 0%, 100%)', 'text-halo-width': 1 },
+ metadata: {},
+ filter: ['all', ['==', 'class', 'town']]
+ },
+ {
+ id: 'city',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'place',
+ minzoom: 4,
+ maxzoom: 16,
+ layout: { 'icon-size': ['interpolate', ['linear', 1], ['zoom'], 4, ['case', ['==', ['get', 'capital'], 2], 1, 0.8], 8, ['case', ['==', ['get', 'capital'], 2], 1, 0.8], 12.9, ['case', ['==', ['get', 'capital'], 2], 1.2, 1], 13, 0], 'text-font': ['Roboto Medium', 'Open Sans Semibold'], 'text-size': ['interpolate', ['linear', 1], ['zoom'], 4, ['case', ['<=', ['get', 'rank'], 2], 14, 12], 8, ['case', ['<=', ['get', 'rank'], 4], 18, 14], 12, ['case', ['<=', ['get', 'rank'], 4], 24, 18], 16, ['case', ['<=', ['get', 'rank'], 4], 32, 26]], 'icon-image': ['step', ['zoom'], 'circle-stroke', 13, ''], 'text-field': ['concat', ['get', 'name:latin'], '\n', ['get', 'name:nonlatin']], visibility: 'visible', 'text-anchor': 'bottom', 'text-offset': [0, 0], 'icon-optional': false, 'text-max-width': 8, 'icon-allow-overlap': true },
+ paint: { 'text-color': 'hsl(0, 0%, 50%)', 'text-halo-blur': 0.5, 'text-halo-color': 'hsl(0, 0%, 100%)', 'text-halo-width': 0.8 },
+ metadata: {},
+ filter: ['all', ['==', 'class', 'city']]
+ },
+ {
+ id: 'country',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'place',
+ minzoom: 1,
+ maxzoom: 12,
+ layout: {
+ 'text-font': ['Roboto Medium', 'Open Sans Semibold'],
+ 'text-size': ['interpolate', ['linear', 1], ['zoom'], 0, 8, 1, 10, 4, ['case', ['>', ['get', 'rank'], 2], 15, 17], 8, ['case', ['>', ['get', 'rank'], 2], 19, 23]],
+ 'text-field': '{name:latin}',
+ visibility: 'visible',
+ 'text-padding': 1,
+ 'text-max-width': { stops: [[1, 5], [5, 8]] },
+ 'text-transform': 'none',
+ 'text-allow-overlap': false,
+ 'text-letter-spacing': 0.07
+ },
+ paint: { 'text-color': 'hsl(0, 0%, 50%)', 'text-opacity': ['interpolate', ['linear', 1], ['zoom'], 4, ['case', ['>', ['get', 'rank'], 4], 0, 1], 5.9, ['case', ['>', ['get', 'rank'], 4], 0, 1], 6, ['case', ['>', ['get', 'rank'], 4], 1, 1]], 'text-halo-blur': 0.8, 'text-halo-color': 'hsl(0, 0%, 100%)', 'text-halo-width': 1 },
+ metadata: {},
+ filter: ['all', ['==', 'class', 'country'], ['has', 'iso_a2']]
+ },
+ {
+ id: 'continent',
+ type: 'symbol',
+ source: 'openmaptiles',
+ 'source-layer': 'place',
+ maxzoom: 1,
+ layout: {
+ 'text-font': ['Roboto Medium', 'Open Sans Semibold'],
+ 'text-size': { stops: [[0, 12], [2, 13]] },
+ 'text-field': '{name:latin}',
+ visibility: 'visible',
+ 'text-justify': 'center',
+ 'text-transform': 'uppercase'
+ },
+ paint: { 'text-color': 'hsl(0, 0%, 49%)', 'text-halo-blur': 1, 'text-halo-color': 'hsl(0, 0%, 100%)', 'text-halo-width': 1 },
+ metadata: {},
+ filter: ['all', ['==', 'class', 'continent']]
+ }],
+ metadata: { 'maptiler:copyright': 'This style was generated on MapTiler Cloud. Usage outside of MapTiler Cloud or MapTiler Server requires valid MapTiler Data package: https://www.maptiler.com/data/ -- please contact us.' },
+
+ glyphs: '/tiles/fonts/{fontstack}/{range}.pbf?key=rB2y2a2rG8i9SEjOXQXl',
+ sprite: 'https://www.maptiler.com/tiles/sprite',
+ bearing: 0,
+ pitch: 0,
+ center: [130, -20],
+ zoom: 4
+}