This is an automated email from the ASF dual-hosted git repository.

bchapuis pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git


The following commit(s) were added to refs/heads/main by this push:
     new 01e378ab Improve icons and legends (#822)
01e378ab is described below

commit 01e378ab9e41a8b125f9e09a1cbeb515cf3ea831
Author: Bertil Chapuis <[email protected]>
AuthorDate: Wed Jan 10 13:28:59 2024 +0100

    Improve icons and legends (#822)
---
 basemap/layers/highway/highway_label.js           |    9 +-
 basemap/layers/point/icon.js                      | 2307 ++++++++++++++++-----
 basemap/layers/point/{point_label.js => place.js} |   49 +-
 basemap/style.js                                  |    4 +-
 basemap/themes/default.js                         |  314 +--
 basemap/utils/utils.js                            |  113 +-
 6 files changed, 1839 insertions(+), 957 deletions(-)

diff --git a/basemap/layers/highway/highway_label.js 
b/basemap/layers/highway/highway_label.js
index e024a677..d8f2f90d 100644
--- a/basemap/layers/highway/highway_label.js
+++ b/basemap/layers/highway/highway_label.js
@@ -26,7 +26,14 @@ export default {
         'text-anchor': 'center',
         'text-field': ['get', 'name'],
         'text-font': ['Noto Sans Regular'],
-        'text-size': ['interpolate', ['exponential', 1], ['zoom'], 13, 10, 14, 
12],
+        'text-size': [
+            'interpolate',
+            ['linear'],
+            ['zoom'],
+            0, 0,
+            10, 6,
+            24, 24
+        ],
         visibility: 'visible',
     },
     paint: {
diff --git a/basemap/layers/point/icon.js b/basemap/layers/point/icon.js
index 946a86a0..aa2df6b7 100644
--- a/basemap/layers/point/icon.js
+++ b/basemap/layers/point/icon.js
@@ -3,879 +3,2038 @@
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to you under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
+ (the 'License'); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at
 
  http://www.apache.org/licenses/LICENSE-2.0
 
  Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
+ distributed under the License is distributed on an 'AS IS' BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
  **/
-import {asLayerObject, withSortKeys} from "../../utils/utils.js";
-import theme from "../../theme.js";
+import {asLayerObject, withSortKeys} from '../../utils/utils.js';
+import theme from '../../theme.js';
 
+/**
+ * These directives are based on the following source:
+ * https://wiki.openstreetmap.org/wiki/OpenStreetMap_Carto/Symbols
+ */
 let directives = [
-    // Amenity: sustenance
+
+    // Gastronomy
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'amenity'], 'restaurant'],
+            ['==', ['get', 'amenity'], 'food_court']
+        ],
+        'icon-image': 'restaurant',
+        'icon-color': theme.gastronomyIconColor,
+        'text-color': theme.gastronomyIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'cafe'],
+        'icon-image': 'cafe',
+        'icon-color': theme.gastronomyIconColor,
+        'text-color': theme.gastronomyIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'fast_food'],
+        'icon-image': 'fast_food',
+        'icon-color': theme.gastronomyIconColor,
+        'text-color': theme.gastronomyIconColor
+    },
     {
-        filter: ['==', ['get', 'amenity'], 'bar'],
+        'filter': ['==', ['get', 'amenity'], 'bar'],
         'icon-image': 'bar',
-        'icon-color': theme.pointIconBarIconColor,
-        'text-color': theme.pointIconBarTextColor,
+        'icon-color': theme.gastronomyIconColor,
+        'text-color': theme.gastronomyIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'pub'],
+        'icon-image': 'pub',
+        'icon-color': theme.gastronomyIconColor,
+        'text-color': theme.gastronomyIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'biergarten'],
+        'filter': ['==', ['get', 'amenity'], 'ice_cream'],
+        'icon-image': 'ice_cream',
+        'icon-color': theme.gastronomyIconColor,
+        'text-color': theme.gastronomyIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'biergarten'],
         'icon-image': 'biergarten',
-        'icon-color': theme.pointIconBiergartenIconColor,
-        'text-color': theme.pointIconBiergartenTextColor,
+        'icon-color': theme.gastronomyIconColor,
+        'text-color': theme.gastronomyIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'cafe'],
-        'icon-image': 'cafe',
-        'icon-color': theme.pointIconCafeIconColor,
-        'text-color': theme.pointIconCafeTextColor,
+        'filter': ['==', ['get', 'leisure'], 'outdoor_seating'],
+        'icon-image': 'outdoor_seating',
+        'icon-color': theme.leisureIconColor,
+        'text-color': theme.leisureIconColor,
     },
+
+    // Culture, entertainment, and arts
     {
-        filter: ['==', ['get', 'amenity'], 'fast_food'],
-        'icon-image': 'fast_food',
-        'icon-color': theme.pointIconFastFoodIconColor,
-        'text-color': theme.pointIconFastFoodTextColor,
+        'filter': ['==', ['get', 'tourism'], 'artwork'],
+        'icon-image': 'artwork',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'food_court'],
-        'icon-image': 'food_court',
-        'icon-color': theme.pointIconFoodCourtIconColor,
-        'text-color': theme.pointIconFoodCourtTextColor,
+        'filter': ['==', ['get', 'amenity'], 'community_centre'],
+        'icon-image': 'community_centre',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'ice_cream'],
-        'icon-image': 'ice_cream',
-        'icon-color': theme.pointIconIceCreamIconColor,
-        'text-color': theme.pointIconIceCreamTextColor,
+        'filter': ['==', ['get', 'amenity'], 'library'],
+        'icon-image': 'library',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'pub'],
-        'icon-image': 'pub',
-        'icon-color': theme.pointIconPubIconColor,
-        'text-color': theme.pointIconPubTextColor,
+        'filter': ['==', ['get', 'tourism'], 'museum'],
+        'icon-image': 'museum',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'restaurant'],
-        'icon-image': 'restaurant',
-        'icon-color': theme.pointIconRestaurantIconColor,
-        'text-color': theme.pointIconRestaurantTextColor,
+        'filter': ['==', ['get', 'amenity'], 'theatre'],
+        'icon-image': 'theatre',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'cinema'],
+        'icon-image': 'cinema',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'nightclub'],
+        'icon-image': 'nightclub',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'arts_centre'],
+        'icon-image': 'arts_centre',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
+    },
+    {
+        'filter': ['==', ['get', 'tourism'], 'gallery'],
+        'icon-image': 'art',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'internet_cafe'],
+        'icon-image': 'internet_cafe',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'casino'],
+        'icon-image': 'casino',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'public_bookcase'],
+        'icon-image': 'public_bookcase',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
+    },
+    {
+        'filter': ['==', ['get', 'leisure'], 'amusement_arcade'],
+        'icon-image': 'amusement_arcade',
+        'icon-color': theme.leisureIconColor,
+        'text-color': theme.leisureIconColor,
     },
 
-    // Amenity: education
+    // Historical objects
+    {
+        'filter': ['==', ['get', 'historic'], 'memorial'],
+        'icon-image': 'memorial',
+        'icon-color': theme.historyIconColor,
+        'text-color': theme.historyIconColor
+    },
+    {
+        'filter': ['==', ['get', 'historic'], 'archaeological_site'],
+        'icon-image': 'archaeological_site',
+        'icon-color': theme.historyIconColor,
+        'text-color': theme.historyIconColor
+    },
+    {
+        'filter': ['==', ['get', 'historic'], 'wayside_shrine'],
+        'icon-image': 'wayside_shrine',
+        'icon-color': theme.historyIconColor,
+        'text-color': theme.historyIconColor
+    },
+    {
+        'filter': ['==', ['get', 'historic'], 'monument'],
+        'icon-image': 'monument',
+        'icon-color': theme.historyIconColor,
+        'text-color': theme.historyIconColor
+    },
+    {
+        'filter': ['==', ['get', 'historic'], 'castle'],
+        'icon-image': 'castle',
+        'icon-color': theme.historyIconColor,
+        'text-color': theme.historyIconColor
+    },
+    {
+        'filter': [
+            'any',
+            [
+                'all',
+                ['==', ['get', 'historic'], 'memorial'],
+                ['==', ['get', 'memorial'], 'plaque']
+            ],
+            [
+                'all',
+                ['==', ['get', 'historic'], 'memorial'],
+                ['==', ['get', 'memorial'], 'blue_plaque']
+            ]
+        ],
+        'icon-image': 'plaque',
+        'icon-color': theme.historyIconColor,
+        'text-color': theme.historyIconColor
+    },
+    {
+        'filter': [
+            'any',
+            [
+                'all',
+                ['==', ['get', 'historic'], 'memorial'],
+                ['==', ['get', 'memorial'], 'statue']
+            ],
+            [
+                'all',
+                ['==', ['get', 'tourism'], 'artwork'],
+                ['==', ['get', 'artwork_type'], 'statue']
+            ]
+        ],
+        'icon-image': 'statue',
+        'icon-color': theme.historyIconColor,
+        'text-color': theme.historyIconColor
+    },
+    {
+        'filter': [
+            'any',
+            ['==', ['get', 'historic'], 'memorial'],
+            ['==', ['get', 'memorial'], 'stone']
+        ],
+        'icon-image': 'stone',
+        'icon-color': theme.historyIconColor,
+        'text-color': theme.historyIconColor
+    },
+    {
+        'filter': [
+            'any',
+            [
+                'all',
+                ['==', ['get', 'historic'], 'castle'],
+                ['==', ['get', 'castle_type'], 'palace']
+            ],
+            [
+                'all',
+                ['==', ['get', 'historic'], 'castle'],
+                ['==', ['get', 'castle_type'], 'stately']
+            ]
+        ],
+        'icon-image': 'palace',
+        'icon-color': theme.historyIconColor,
+        'text-color': theme.historyIconColor
+    },
     // {
-    //     filter: ['==', ['get', 'amenity'], 'driving_school'],
-    //     'icon-image': 'driving_school',
-    //     'icon-color': colorScheme.pointIconDrivingSchoolIconColor,
-    //     'text-color': colorScheme.pointIconDrivingSchoolTextColor,
+    //     'filter': ['==', ['get', 'historic'], 'castle'], =>defensive / 
=>fortress / =>castrum / =>shiro / =>kremlin
+    //     'icon-image': 'fortress',
+    //     'icon-color': theme.historyIconColor,
+    //     'text-color': theme.historyIconColor
     // },
     {
-        filter: ['==', ['get', 'amenity'], 'library'],
-        'icon-image': 'library',
-        'icon-color': theme.pointIconLibraryIconColor,
-        'text-color': theme.pointIconLibraryTextColor,
+        'filter': ['==', ['get', 'historic'], 'fort'],
+        'icon-image': 'historic_fort',
+        'icon-color': theme.historyIconColor,
+        'text-color': theme.historyIconColor
+    },
+    {
+        'filter': [
+            'any',
+            [
+                'all',
+                ['==', ['get', 'historic'], 'memorial'],
+                ['==', ['get', 'memorial'], 'bust']
+            ],
+            [
+                'all',
+                ['==', ['get', 'tourism'], 'artwork'],
+                ['==', ['get', 'artwork_type'], 'bust']
+            ]
+        ],
+        'icon-image': 'bust',
+        'icon-color': theme.historyIconColor,
+        'text-color': theme.historyIconColor
+    },
+    {
+        'filter': ['==', ['get', 'historic'], 'city_gate'],
+        'icon-image': 'city_gate',
+        'icon-color': theme.historyIconColor,
+        'text-color': theme.historyIconColor
+    },
+    {
+        'filter': [
+            'any',
+            ['==', ['get', 'historic'], 'manor'],
+            [
+                'all',
+                ['==', ['get', 'historic'], 'castle'],
+                ['==', ['get', 'castle_type'], 'manor']
+            ]
+        ],
+        'icon-image': 'manor',
+        'icon-color': theme.historyIconColor,
+        'text-color': theme.historyIconColor
+    },
+    {
+        'filter': ['==', ['get', 'man_made'], 'obelisk'],
+        'icon-image': 'obelisk',
+        'icon-color': theme.historyIconColor,
+        'text-color': theme.historyIconColor
     },
 
-    // Amenity: transportation
+    // Leisure, recreation, and sport
     {
-        filter: ['==', ['get', 'amenity'], 'bicycle_parking'],
-        'icon-image': 'bicycle_parking',
-        'icon-color': theme.pointIconBicycleParkingIconColor,
-        'text-color': theme.pointIconBicycleParkingTextColor,
+        'filter': ['==', ['get', 'leisure'], 'playground'],
+        'icon-image': 'playground',
+        'icon-color': theme.leisureIconColor,
+        'text-color': theme.leisureIconColor,
+    },
+    {
+        'filter': [
+            'any',
+            ['==', ['get', 'leisure'], 'fitness_centre'],
+            ['==', ['get', 'leisure'], 'fitness_station']
+        ],
+        'icon-image': 'fitness',
+        'icon-color': theme.leisureIconColor,
+        'text-color': theme.leisureIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'leisure'], 'golf_course'],
+        'icon-image': 'golf',
+        'icon-color': theme.leisureIconColor,
+        'text-color': theme.leisureIconColor,
+    },
+    {
+        'filter': [
+            'any',
+            ['==', ['get', 'leisure'], 'water_park'],
+            ['==', ['get', 'leisure'], 'swimming_area'],
+            [
+                'all',
+                ['==', ['get', 'leisure'], 'sports_centre'],
+                ['==', ['get', 'sport'], 'swimming']
+            ]
+        ],
+        'icon-image': 'water_park',
+        'icon-color': theme.leisureIconColor,
+        'text-color': theme.leisureIconColor,
     },
     {
-        filter: ['==', ['get', 'amenity'], 'bicycle_repair_station'],
-        'icon-image': 'bicycle_repair_station',
-        'icon-color': theme.pointIconBicycleRepairStationIconColor,
-        'text-color': theme.pointIconBicycleRepairStationTextColor,
+        'filter': ['==', ['get', 'shop'], 'massage'],
+        'icon-image': 'massage',
+        'icon-color': theme.leisureIconColor,
+        'text-color': theme.leisureIconColor,
     },
     {
-        filter: ['==', ['get', 'amenity'], 'bicycle_rental'],
-        'icon-image': 'rental_bicycle',
-        'icon-color': theme.pointIconBicycleRentalIconColor,
-        'text-color': theme.pointIconBicycleRentalTextColor,
+        'filter': ['==', ['get', 'leisure'], 'sauna'],
+        'icon-image': 'sauna',
+        'icon-color': theme.leisureIconColor,
+        'text-color': theme.leisureIconColor,
     },
     {
-        filter: ['==', ['get', 'amenity'], 'boat_rental'],
-        'icon-image': 'boat_rental',
-        'icon-color': theme.pointIconBoatRentalIconColor,
-        'text-color': theme.pointIconBoatRentalTextColor,
+        'filter': ['==', ['get', 'amenity'], 'public_bath'],
+        'icon-image': 'public_bath',
+        'icon-color': theme.pointIconPublicBathIconColor,
+        'text-color': theme.pointIconPublicBathTextColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'bus_station'],
-        'icon-image': 'bus_station',
-        'icon-color': theme.pointIconBusStationIconColor,
-        'text-color': theme.pointIconBusStationTextColor,
+        'filter': ['==', ['get', 'leisure'], 'miniature_golf'],
+        'icon-image': 'miniature_golf',
+        'icon-color': theme.leisureIconColor,
+        'text-color': theme.leisureIconColor,
     },
     {
-        filter: ['==', ['get', 'amenity'], 'car_rental'],
-        'icon-image': 'rental_car',
-        'icon-color': theme.pointIconCarRentalIconColor,
-        'text-color': theme.pointIconCarRentalTextColor,
+        'filter': ['==', ['get', 'leisure'], 'beach_resort'],
+        'icon-image': 'beach_resort',
+        'icon-color': theme.leisureIconColor,
+        'text-color': theme.leisureIconColor,
     },
     {
-        filter: ['==', ['get', 'amenity'], 'car_wash'],
-        'icon-image': 'car_wash',
-        'icon-color': theme.pointIconCarWashIconColor,
-        'text-color': theme.pointIconCarWashTextColor,
+        'filter': ['==', ['get', 'leisure'], 'fishing'],
+        'icon-image': 'fishing',
+        'icon-color': theme.leisureIconColor,
+        'text-color': theme.leisureIconColor,
     },
     {
-        filter: ['==', ['get', 'amenity'], 'vehicle_inspection'],
-        'icon-image': 'vehicle_inspection',
-        'icon-color': theme.pointIconVehicleInspectionIconColor,
-        'text-color': theme.pointIconVehicleInspectionTextColor,
+        'filter': ['==', ['get', 'leisure'], 'bowling_alley'],
+        'icon-image': 'bowling_alley',
+        'icon-color': theme.leisureIconColor,
+        'text-color': theme.leisureIconColor,
     },
     {
-        filter: ['==', ['get', 'amenity'], 'charging_station'],
-        'icon-image': 'charging_station',
-        'icon-color': theme.pointIconChargingStationIconColor,
-        'text-color': theme.pointIconChargingStationTextColor,
+        'filter': ['==', ['get', 'leisure'], 'dog_park'],
+        'icon-image': 'dog_park',
+        'icon-color': theme.leisureIconColor,
+        'text-color': theme.leisureIconColor,
     },
     {
-        filter: ['==', ['get', 'amenity'], 'ferry_terminal'],
-        'icon-image': 'ferry',
-        'icon-color': theme.pointIconFerryTerminalIconColor,
-        'text-color': theme.pointIconFerryTerminalTextColor,
+        'filter': ['==', ['get', 'golf'], 'pin'],
+        'icon-image': 'leisure_golf_pin',
+        'icon-color': theme.leisureIconColor,
+        'text-color': theme.leisureIconColor,
     },
+
+    // Waste management
     {
-        filter: ['==', ['get', 'amenity'], 'fuel'],
-        'icon-image': 'fuel',
-        'icon-color': theme.pointIconFuelIconColor,
-        'text-color': theme.pointIconFuelTextColor,
+        'filter': ['==', ['get', 'amenity'], 'toilets'],
+        'icon-image': 'toilets',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'motorcycle_parking'],
-        'icon-image': 'motorcycle_parking',
-        'icon-color': theme.pointIconMotorcycleParkingIconColor,
-        'text-color': theme.pointIconMotorcycleParkingTextColor,
+        'filter': ['==', ['get', 'amenity'], 'recycling'],
+        'icon-image': 'recycling',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'parking'],
-        'icon-image': 'parking',
-        'icon-color': theme.pointIconParkingIconColor,
-        'text-color': theme.pointIconParkingTextColor,
+        'filter': ['==', ['get', 'amenity'], 'waste_basket'],
+        'icon-image': 'waste_basket',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'parking_entrance'],
-        'icon-image': 'entrance',
-        'icon-color': theme.pointIconParkingEntranceIconColor,
-        'text-color': theme.pointIconParkingEntranceTextColor,
+        'filter': ['==', ['get', 'amenity'], 'waste_disposal'],
+        'icon-image': 'waste_disposal',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'taxi'],
-        'icon-image': 'taxi',
-        'icon-color': theme.pointIconTaxiIconColor,
-        'text-color': theme.pointIconTaxiTextColor,
+        'filter': [
+            'all',
+            ['==', ['get', 'amenity'], 'vending_machine'],
+            ['==', ['get', 'vending'], 'excrement_bags']
+        ],
+        'icon-image': 'excrement_bags',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
+
+    // Outdoor
     {
-        filter: ['==', ['get', 'highway'], 'bus_stop'],
-        'icon-image': 'bus_stop',
-        'icon-color': theme.pointIconBusStopIconColor,
-        'text-color': theme.pointIconBusStopTextColo,
+        'filter': ['==', ['get', 'amenity'], 'bench'],
+        'icon-image': 'bench',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'shelter'],
+        'icon-image': 'shelter',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'drinking_water'],
+        'icon-image': 'drinking_water',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
+    },
+    {
+        'filter': ['==', ['get', 'tourism'], 'picnic_site'],
+        'icon-image': 'picnic',
+        'icon-color': theme.leisureIconColor,
+        'text-color': theme.leisureIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'fountain'],
+        'icon-image': 'fountain',
+        'icon-color': theme.waterIconColor,
+        'text-color': theme.waterIconColor
+    },
+    {
+        'filter': ['==', ['get', 'tourism'], 'camp_site'],
+        'icon-image': 'camping',
+        'icon-color': theme.accommodationIconColor,
+        'text-color': theme.accommodationIconColor
+    },
+    {
+        'filter': ['==', ['get', 'leisure'], 'picnic_table'],
+        'icon-image': 'picnic',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'tourism'], 'caravan_site'],
+        'icon-image': 'caravan_park',
+        'icon-color': theme.accommodationIconColor,
+        'text-color': theme.accommodationIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'bbq'],
+        'icon-image': 'bbq',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'shower'],
+        'icon-image': 'shower',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
+    },
+    {
+        'filter': ['==', ['get', 'leisure'], 'firepit'],
+        'icon-image': 'firepit',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'leisure'], 'bird_hide'],
+        'icon-image': 'bird_hide',
+        'icon-color': theme.leisureIconColor,
+        'text-color': theme.leisureIconColor,
     },
 
-    // Amenity: financial
+    // Tourism and accommodation
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'tourism'], 'information'],
+            ['==', ['get', 'information'], 'guidepost']
+        ],
+        'icon-image': 'guidepost',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'tourism'], 'information'],
+            ['==', ['get', 'information'], 'board']
+        ],
+        'icon-image': 'board',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
+    },
+    {
+        'filter': [
+            'any',
+            [
+                'all',
+                ['==', ['get', 'tourism'], 'information'],
+                ['==', ['get', 'information'], 'map']
+            ],
+            [
+                'all',
+                ['==', ['get', 'tourism'], 'information'],
+                ['==', ['get', 'information'], 'tactile_map']
+            ]
+        ],
+        'icon-image': 'map',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
+    },
+    {
+        'filter': [
+            'any',
+            ['==', ['get', 'tourism'], 'information'],
+            ['==', ['get', 'information'], 'office']
+        ],
+        'icon-image': 'office',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
+    },
+    {
+        'filter': [
+            'any',
+            ['==', ['get', 'tourism'], 'information'],
+            ['==', ['get', 'information'], 'terminal']
+        ],
+        'icon-image': 'terminal',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
+    },
+    {
+        'filter': [
+            'any',
+            ['==', ['get', 'tourism'], 'information'],
+            ['==', ['get', 'information'], 'audioguide']
+        ],
+        'icon-image': 'audioguide',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
+    },
+    {
+        'filter': ['==', ['get', 'tourism'], 'viewpoint'],
+        'icon-image': 'viewpoint',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
+    },
     {
-        filter: ['==', ['get', 'amenity'], 'atm'],
-        'icon-image': 'atm',
-        'icon-color': theme.pointIconAtmIconColor,
-        'text-color': theme.pointIconAtmTextColor,
+        'filter': ['==', ['get', 'tourism'], 'hotel'],
+        'icon-image': 'hotel',
+        'icon-color': theme.accommodationIconColor,
+        'text-color': theme.accommodationIconColor
+    },
+    {
+        'filter': ['==', ['get', 'tourism'], 'guest_house'],
+        'icon-image': 'guest_house',
+        'icon-color': theme.accommodationIconColor,
+        'text-color': theme.accommodationIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'bank'],
+        'filter': ['==', ['get', 'tourism'], 'hostel'],
+        'icon-image': 'hostel',
+        'icon-color': theme.accommodationIconColor,
+        'text-color': theme.accommodationIconColor
+    },
+    {
+        'filter': ['==', ['get', 'tourism'], 'chalet'],
+        'icon-image': 'chalet',
+        'icon-color': theme.accommodationIconColor,
+        'text-color': theme.accommodationIconColor
+    },
+    {
+        'filter': ['==', ['get', 'tourism'], 'motel'],
+        'icon-image': 'motel',
+        'icon-color': theme.accommodationIconColor,
+        'text-color': theme.accommodationIconColor
+    },
+    {
+        'filter': ['==', ['get', 'tourism'], 'apartment'],
+        'icon-image': 'apartment',
+        'icon-color': theme.accommodationIconColor,
+        'text-color': theme.accommodationIconColor
+    },
+    {
+        'filter': ['==', ['get', 'tourism'], 'alpine_hut'],
+        'icon-image': 'alpinehut',
+        'icon-color': theme.accommodationIconColor,
+        'text-color': theme.accommodationIconColor
+    },
+    {
+        'filter': ['==', ['get', 'tourism'], 'wilderness_hut'],
+        'icon-image': 'wilderness_hut',
+        'icon-color': theme.accommodationIconColor,
+        'text-color': theme.accommodationIconColor
+    },
+
+    // Finance
+    {
+        'filter': ['==', ['get', 'amenity'], 'bank'],
         'icon-image': 'bank',
-        'icon-color': theme.pointIconBankIconColor,
-        'text-color': theme.pointIconBankTextColor,
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'atm'],
+        'icon-image': 'atm',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'bureau_de_change'],
+        'filter': ['==', ['get', 'amenity'], 'bureau_de_change'],
         'icon-image': 'bureau_de_change',
-        'icon-color': theme.pointIconBureauDeChangeIconColor,
-        'text-color': theme.pointIconBureauDeChangeTextColor,
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
 
-    // Amenity: healthcare
+    // Healthcare
     {
-        filter: ['==', ['get', 'amenity'], 'clinic'],
-        'icon-image': 'hospital',
-        'icon-color': theme.pointIconCliniqueIconColor,
-        'text-color': theme.pointIconCliniqueTextColor,
+        'filter': ['==', ['get', 'amenity'], 'pharmacy'],
+        'icon-image': 'pharmacy',
+        'icon-color': theme.healthIconColor,
+        'text-color': theme.healthIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'dentist'],
-        'icon-image': 'dentist',
-        'icon-color': theme.pointIconDentistIconColor,
-        'text-color': theme.pointIconDentistTextColor,
+        'filter': ['==', ['get', 'amenity'], 'hospital'],
+        'icon-image': 'hospital',
+        'icon-color': theme.healthIconColor,
+        'text-color': theme.healthIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'doctors'],
+        'filter': [
+            'any',
+            ['==', ['get', 'amenity'], 'clinic'],
+            ['==', ['get', 'amenity'], 'doctors']
+        ],
         'icon-image': 'doctors',
-        'icon-color': theme.pointIconDoctorIconColor,
-        'text-color': theme.pointIconDoctorTextColor,
+        'icon-color': theme.healthIconColor,
+        'text-color': theme.healthIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'hospital'],
-        'icon-image': 'hospital',
-        'icon-color': theme.pointIconHospitalIconColor,
-        'text-color': theme.pointIconHospitalTextColor,
+        'filter': ['==', ['get', 'amenity'], 'dentist'],
+        'icon-image': 'dentist',
+        'icon-color': theme.healthIconColor,
+        'text-color': theme.healthIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'nursing_home'],
-        'icon-image': 'nursing_home',
-        'icon-color': theme.pointIconNursingHomeIconColor,
-        'text-color': theme.pointIconNursingHomeTextColor,
+        'filter': ['==', ['get', 'amenity'], 'veterinary'],
+        'icon-image': 'veterinary',
+        'icon-color': theme.healthIconColor,
+        'text-color': theme.healthIconColor
     },
+
+    // Communication
     {
-        filter: ['==', ['get', 'amenity'], 'pharmacy'],
-        'icon-image': 'pharmacy',
-        'icon-color': theme.pointIconPharmacieIconColor,
-        'text-color': theme.pointIconPharmacieTextColor,
+        'filter': ['==', ['get', 'amenity'], 'post_box'],
+        'icon-image': 'post_box',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'social_facility'],
-        'icon-image': 'social_facility',
-        'icon-color': theme.pointIconSocialFacilityIconColor,
-        'text-color': theme.pointIconSocialFacilityTextColor,
+        'filter': ['==', ['get', 'amenity'], 'post_office'],
+        'icon-image': 'post_office',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
+    },
+    // {
+    //     'filter': ['==', ['get', 'amenity'], 'parcel_locker'],
+    //     'icon-image': 'parcel_locker',
+    //     'icon-color': theme.amenityIconColor,
+    //     'text-color': theme.amenityIconColor
+    // },
+    {
+        'filter': ['==', ['get', 'amenity'], 'telephone'],
+        'icon-image': 'telephone',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'veterinary'],
-        'icon-image': 'veterinary',
-        'icon-color': theme.pointIconVeterinaryIconColor,
-        'text-color': theme.pointIconVeterinaryTextColor,
+        'filter': ['==', ['get', 'emergency'], 'phone'],
+        'icon-image': 'emergency_phone',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
 
-    // Amenity: entertainment, arts & culture
+    // Transportation
     {
-        filter: ['==', ['get', 'amenity'], 'arts_centre'],
-        'icon-image': 'arts_centre',
-        'icon-color': theme.pointIconArtsCentreIconColor,
-        'text-color': theme.pointIconArtsCentreTextColor,
+        'filter': ['==', ['get', 'amenity'], 'parking'],
+        'icon-image': 'parking',
+        'icon-color': theme.transportationIconColor,
+        'text-color': theme.transportationIconColor
+    },
+    {
+        'filter': [
+            'any',
+            ['all',
+                ['==', ['get', 'amenity'], 'parking'],
+                ['==', ['get', 'parking'], 'lane'],
+            ],
+            ['all',
+                ['==', ['get', 'amenity'], 'parking'],
+                ['==', ['get', 'parking'], 'street_side']
+            ]
+        ],
+        'icon-image': 'parking_subtle',
+        'icon-color': theme.transportationIconColor,
+        'text-color': theme.transportationIconColor
+    },
+    {
+        'filter': ['==', ['get', 'highway'], 'bus_stop'],
+        'icon-image': 'bus_stop',
+        'icon-color': theme.transportationIconColor,
+        'text-color': theme.transportationIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'casino'],
-        'icon-image': 'casino',
-        'icon-color': theme.pointIconCasinoIconColor,
-        'text-color': theme.pointIconCasinoTextColor,
+        'filter': ['==', ['get', 'amenity'], 'fuel'],
+        'icon-image': 'fuel',
+        'icon-color': theme.transportationIconColor,
+        'text-color': theme.transportationIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'cinema'],
-        'icon-image': 'cinema',
-        'icon-color': theme.pointIconCinemaIconColor,
-        'text-color': theme.pointIconCinemaTextColor,
+        'filter': ['==', ['get', 'amenity'], 'bicycle_parking'],
+        'icon-image': 'bicycle_parking',
+        'icon-color': theme.transportationIconColor,
+        'text-color': theme.transportationIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'community_centre'],
-        'icon-image': 'community_centre',
-        'icon-color': theme.pointIconCommunityCentreIconColor,
-        'text-color': theme.pointIconCommunityCentreTextColor,
+        'filter': [
+            'any',
+            ['==', ['get', 'railway'], 'station'],
+            ['==', ['get', 'railway'], 'halt'],
+            ['==', ['get', 'railway'], 'tram_stop']
+        ],
+        'icon-image': 'place-6',
+        'icon-color': theme.transportationIconColor,
+        'text-color': theme.transportationIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'fountain'],
-        'icon-image': 'fountain',
-        'icon-color': theme.pointIconFountainIconColor,
-        'text-color': theme.pointIconFountainTextColor,
+        'filter': ['==', ['get', 'amenity'], 'bus_station'],
+        'icon-image': 'bus_station',
+        'icon-color': theme.transportationIconColor,
+        'text-color': theme.transportationIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'nightclub'],
-        'icon-image': 'nightclub',
-        'icon-color': theme.pointIconNigthclubIconColor,
-        'text-color': theme.pointIconNightclubTextColor,
+        'filter': ['==', ['get', 'aeroway'], 'helipad'],
+        'icon-image': 'helipad',
+        'icon-color': theme.otherTransportIconColor,
+        'text-color': theme.otherTransportIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'public_bookcase'],
-        'icon-image': 'public_bookcase',
-        'icon-color': theme.pointIconPublicBookcaseIconColor,
-        'text-color': theme.pointIconPublicBookCaseTextColor,
+        'filter': ['==', ['get', 'aeroway'], 'aerodrome'],
+        'icon-image': 'aerodrome',
+        'icon-color': theme.otherTransportIconColor,
+        'text-color': theme.otherTransportIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'theatre'],
-        'icon-image': 'theatre',
-        'icon-color': theme.pointIconTheatreIconColor,
-        'text-color': theme.pointIconTheatreTextColor,
+        'filter': ['==', ['get', 'amenity'], 'bicycle_rental'],
+        'icon-image': 'rental_bicycle',
+        'icon-color': theme.transportationIconColor,
+        'text-color': theme.transportationIconColor
     },
-
-    // Amenity: public service
     {
-        filter: ['==', ['get', 'amenity'], 'courthouse'],
-        'icon-image': 'courthouse',
-        'icon-color': theme.pointIconCourthouseIconColor,
-        'text-color': theme.pointIconCourthouseTextColor,
+        'filter': ['==', ['get', 'leisure'], 'slipway'],
+        'icon-image': 'slipway',
+        'icon-color': theme.transportationIconColor,
+        'text-color': theme.transportationIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'fire_station'],
-        'icon-image': 'firestation',
-        'icon-color': theme.pointIconFireStationIconColor,
-        'text-color': theme.pointIconFireStationTextColor,
+        'filter': ['==', ['get', 'amenity'], 'taxi'],
+        'icon-image': 'taxi',
+        'icon-color': theme.transportationIconColor,
+        'text-color': theme.transportationIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'police'],
-        'icon-image': 'police',
-        'icon-color': theme.pointIconPoliceIconColor,
-        'text-color': theme.pointIconPoliceTextColor,
+        'filter': [
+            'all',
+            ['==', ['get', 'amenity'], 'vending_machine'],
+            ['==', ['get', 'vending'], 'parking_tickets']
+        ],
+        'icon-image': 'parking_tickets',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'post_box'],
-        'icon-image': 'post_box',
-        'icon-color': theme.pointIconPostBoxIconColor,
-        'text-color': theme.pointIconPostBoxTextColor,
+        'filter': ['==', ['get', 'railway'], 'subway_entrance'],
+        'icon-image': 'entrance',
+        'icon-color': theme.transportationIconColor,
+        'text-color': theme.transportationIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'post_office'],
-        'icon-image': 'post_office',
-        'icon-color': theme.pointIconPostOfficeIconColor,
-        'text-color': theme.pointIconPostOfficeTextColor,
+        'filter': ['==', ['get', 'amenity'], 'charging_station'],
+        'icon-image': 'charging_station',
+        'icon-color': theme.transportationIconColor,
+        'text-color': theme.transportationIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'prison'],
-        'icon-image': 'prison',
-        'icon-color': theme.pointIconPrisonIconColor,
-        'text-color': theme.pointIconPrisonTextColor,
+        'filter': ['==', ['get', 'highway'], 'elevator'],
+        'icon-image': 'elevator',
+        'icon-color': theme.transportationIconColor,
+        'text-color': theme.transportationIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'townhall'],
-        'icon-image': 'town_hall',
-        'icon-color': theme.pointIconTownhallIconColor,
-        'text-color': theme.pointIconTowmhallTextColor,
+        'filter': ['==', ['get', 'amenity'], 'car_rental'],
+        'icon-image': 'rental_car',
+        'icon-color': theme.transportationIconColor,
+        'text-color': theme.transportationIconColor
     },
-
-    // Amenity: facilities
     {
-        filter: ['==', ['get', 'amenity'], 'bbq'],
-        'icon-image': 'bbq',
-        'icon-color': theme.pointIconBbqIconColor,
-        'text-color': theme.pointIconBbqTextColor,
+        'filter': [
+            'all',
+            ['==', ['get', 'amenity'], 'parking_entrance'],
+            ['==', ['get', 'parking'], 'underground']
+        ],
+        'icon-image': 'parking_entrance_underground',
+        'icon-color': theme.transportationIconColor,
+        'text-color': theme.transportationIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'bench'],
-        'icon-image': 'bench',
-        'icon-color': theme.pointIconBenchIconColor,
-        'text-color': theme.pointIconBenchTextColor,
+        'filter': [
+            'all',
+            ['==', ['get', 'amenity'], 'vending_machine'],
+            ['==', ['get', 'vending'], 'public_transport_tickets']
+        ],
+        'icon-image': 'public_transport_tickets',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'drinking_water'],
-        'icon-image': 'drinking_water',
-        'icon-color': theme.pointIconDrinkingWaterIconColor,
-        'text-color': theme.pointIconDrinkingWaterTextColor,
+        'filter': ['==', ['get', 'amenity'], 'ferry_terminal'],
+        'icon-image': 'ferry',
+        'icon-color': theme.otherTransportIconColor,
+        'text-color': theme.otherTransportIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'shelter'],
-        'icon-image': 'shelter',
-        'icon-color': theme.pointIconShelterIconColor,
-        'text-color': theme.pointIconShelterTextColor,
+        'filter': ['==', ['get', 'amenity'], 'motorcycle_parking'],
+        'icon-image': 'motorcycle_parking',
+        'icon-color': theme.transportationIconColor,
+        'text-color': theme.transportationIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'shower'],
-        'icon-image': 'shower',
-        'icon-color': theme.pointIconShowerIconColor,
-        'text-color': theme.pointIconShowerTextColor,
+        'filter': ['==', ['get', 'amenity'], 'bicycle_repair_station'],
+        'icon-image': 'bicycle_repair_station',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'telephone'],
-        'icon-image': 'telephone',
-        'icon-color': theme.pointIconTelephoneIconColor,
-        'text-color': theme.pointIconTelephoneTextColor,
+        'filter': ['==', ['get', 'amenity'], 'boat_rental'],
+        'icon-image': 'boat_rental',
+        'icon-color': theme.transportationIconColor,
+        'text-color': theme.transportationIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'toilets'],
-        'icon-image': 'toilets',
-        'icon-color': theme.pointIconToiletsIconColor,
-        'text-color': theme.pointIconToiletsTextColor,
+        'filter': [
+            'all',
+            ['==', ['get', 'amenity'], 'parking_entrance'],
+            ['==', ['get', 'parking'], 'multi-storey']
+        ],
+        'icon-image': 'parking_entrance_multistorey',
+        'icon-color': theme.transportationIconColor,
+        'text-color': theme.transportationIconColor
     },
 
-    // Amenity: waste management
+    // Road features
+    // {
+    //     'filter': ['==', ['get', 'oneway'], 'yes'],
+    //     'icon-image': 'oneway',
+    //     'icon-color': theme.otherIconColor,
+    //     'text-color': theme.otherIconColor
+    // },
     {
-        filter: ['==', ['get', 'amenity'], 'recycling'],
-        'icon-image': 'recycling',
-        'icon-color': theme.pointIconRecyclingIconColor,
-        'text-color': theme.pointIconRecyclingTextColor,
+        'filter': ['==', ['get', 'barrier'], 'gate'],
+        'icon-image': 'gate',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'waste_basket'],
-        'icon-image': 'waste_basket',
-        'icon-color': theme.pointIconWasteBasketIconColor,
-        'text-color': theme.pointIconWasteBasketTextColor,
+        'filter': ['==', ['get', 'highway'], 'traffic_signals'],
+        'icon-image': 'traffic_light',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
     },
+    // {
+    //     'filter': [
+    //         'any',
+    //         ['==', ['get', 'railway'], 'level_crossing'],
+    //         ['==', ['get', 'railway'], 'crossing']
+    //     ],
+    //     'icon-image': 'level_crossing2',
+    //     'icon-color': theme.otherIconColor,
+    //     'text-color': theme.otherIconColor
+    // },
     {
-        filter: ['==', ['get', 'amenity'], 'waste_disposal'],
-        'icon-image': 'waste_disposal',
-        'icon-color': theme.pointIconWasteDisposalIconColor,
-        'text-color': theme.pointIconWasteDisposalTextColor,
+        'filter': [
+            'any',
+            ['==', ['get', 'railway'], 'level_crossing'],
+            ['==', ['get', 'railway'], 'crossing']
+        ],
+        'icon-image': 'level_crossing',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
     },
-
-    // Amenity: Others
     {
-        filter: ['==', ['get', 'amenity'], 'childcare'],
-        'icon-image': 'place-6',
-        'icon-color': theme.pointIconChildcareIconColor,
-        'text-color': theme.pointIconChildcareTextColor,
+        'filter': [
+            'any',
+            ['==', ['get', 'barrier'], 'bollard'],
+            ['==', ['get', 'barrier'], 'block'],
+            ['==', ['get', 'barrier'], 'turnstile'],
+            ['==', ['get', 'barrier'], 'log']
+        ],
+        'icon-image': 'gate',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'hunting_stand'],
-        'icon-image': 'hunting_stand',
-        'icon-color': theme.pointIconHuntingStandIconColor,
-        'text-color': theme.pointIconHuntingStandTextColor,
+        'filter': [
+            'any',
+            ['==', ['get', 'barrier'], 'lift_gate'],
+            ['==', ['get', 'barrier'], 'swing_gate']
+        ],
+        'icon-image': 'lift_gate',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'internet_cafe'],
-        'icon-image': 'internet_cafe',
-        'icon-color': theme.pointIconInternetCafeIconColor,
-        'text-color': theme.pointIconInternetCafeTextColor,
+        'filter': ['==', ['get', 'barrier'], 'cycle_barrier'],
+        'icon-image': 'cycle_barrier',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'marketplace'],
-        'icon-image': 'marketplace',
-        'icon-color': theme.pointIconMarketplaceIconColor,
-        'text-color': theme.pointIconMarketplaceTextColor,
+        'filter': ['==', ['get', 'barrier'], 'stile'],
+        'icon-image': 'stile',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
     },
+    // {
+    //     'filter': ['==', ['get', 'highway'], 'mini_roundabout'],
+    //     'icon-image': 'highway_mini_roundabout',
+    //     'icon-color': theme.otherIconColor,
+    //     'text-color': theme.otherIconColor
+    // },
     {
-        filter: ['==', ['get', 'amenity'], 'place_of_worship'],
-        'icon-image': 'place_of_worship',
-        'icon-color': theme.pointIconPlaceOfWorkshipIconColor,
-        'text-color': theme.pointIconPlaceOfWorkshipTextColor,
+        'filter': ['==', ['get', 'barrier'], 'toll_booth'],
+        'icon-image': 'toll_booth',
+        'icon-color': theme.accommodationIconColor,
+        'text-color': theme.accommodationIconColor
     },
     {
-        filter: ['==', ['get', 'amenity'], 'public_bath'],
-        'icon-image': 'public_bath',
-        'icon-color': theme.pointIconPublicBathIconColor,
-        'text-color': theme.pointIconPublicBathTextColor,
+        'filter': ['==', ['get', 'barrier'], 'cattle_grid'],
+        'icon-image': 'barrier_cattle_grid',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
     },
+    {
+        'filter': ['==', ['get', 'barrier'], 'kissing_gate'],
+        'icon-image': 'kissing_gate',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
+    },
+    {
+        'filter': ['==', ['get', 'barrier'], 'full-height_turnstile'],
+        'icon-image': 'full-height_turnstile',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
+    },
+    {
+        'filter': ['==', ['get', 'barrier'], 'motorcycle_barrier'],
+        'icon-image': 'motorcycle_barrier',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
+    },
+    {
+        'filter': [
+            'any',
+            ['==', ['get', 'ford'], 'yes'],
+            ['==', ['get', 'ford'], 'stepping_stones']
+        ],
+        'icon-image': 'ford',
+        'icon-color': theme.waterIconColor,
+        'text-color': theme.waterwayLabelTextColor
+    },
+    // {
+    //     'filter': ['==', ['get', 'mountain_pass'], 'yes'],
+    //     'icon-image': 'mountain_pass',
+    //     'icon-color': theme.transportationIconColor,
+    //     'text-color': theme.transportationIconColor
+    // },
+    {
+        'filter': ['==', ['get', 'waterway'], 'dam'],
+        'icon-image': 'place-6',
+        'icon-color': theme.pointIconWaterIconColor,
+        'text-color': theme.pointIconWaterTextColor
+    },
+    {
+        'filter': ['==', ['get', 'waterway'], 'weir'],
+        'icon-image': 'place-6',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
+    },
+    {
+        'filter': ['==', ['get', 'waterway'], 'lock_gate'],
+        'icon-image': 'place-6',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
+    },
+    // {
+    //     'filter': ['==', ['get', 'Node with highway'], 'turning_circle at 
way with highway'],
+    //     'icon-image': 'turning_circle_on_highway_track',
+    //     'icon-color': theme.otherIconColor,
+    //     'text-color': theme.otherIconColor
+    // },
 
-    // Historic
+    // Nature
     {
-        filter: ['==', ['get', 'historic'], 'archaeological_site'],
-        'icon-image': 'archaeological_site',
-        'icon-color': theme.pointIconArchaeologicalSiteIconColor,
-        'text-color': theme.pointIconArchaeologicalSiteTextColor,
+        'filter': ['==', ['get', 'natural'], 'peak'],
+        'icon-image': 'peak',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
     },
     {
-        filter: ['==', ['get', 'historic'], 'castle'],
-        'icon-image': 'castle',
-        'icon-color': theme.pointIconCastleIconColor,
-        'text-color': theme.pointIconCastleTextColor,
+        'filter': ['==', ['get', 'natural'], 'spring'],
+        'icon-image': 'spring',
+        'icon-color': theme.waterIconColor,
+        'text-color': theme.waterIconColor
     },
     {
-        filter: ['==', ['get', 'historic'], 'city_gate'],
-        'icon-image': 'city_gate',
-        'icon-color': theme.pointIconCityGateIconColor,
-        'text-color': theme.pointIconCityGateTextColor,
+        'filter': ['==', ['get', 'natural'], 'cave_entrance'],
+        'icon-image': 'cave',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
     },
     {
-        filter: ['==', ['get', 'historic'], 'fort'],
-        'icon-image': 'fort',
-        'icon-color': theme.pointIconFortIconColor,
-        'text-color': theme.pointIconFortTextColor,
+        'filter': ['==', ['get', 'waterway'], 'waterfall'],
+        'icon-image': 'waterfall',
+        'icon-color': theme.waterIconColor,
+        'text-color': theme.waterIconColor
     },
     {
-        filter: ['==', ['get', 'historic'], 'manor'],
-        'icon-image': 'manor',
-        'icon-color': theme.pointIconManorIconColor,
-        'text-color': theme.pointIconManorTextColor,
+        'filter': ['==', ['get', 'natural'], 'saddle'],
+        'icon-image': 'saddle',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
     },
     {
-        filter: ['==', ['get', 'historic'], 'memorial'],
-        'icon-image': 'memorial',
-        'icon-color': theme.pointIconMemorialIconColor,
-        'text-color': theme.pointIconMemorialTextColor,
+        'filter': ['==', ['get', 'natural'], 'volcano'],
+        'icon-image': 'peak',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
     },
+
+    // Administrative facilities
     {
-        filter: ['==', ['get', 'historic'], 'monument'],
-        'icon-image': 'monument',
-        'icon-color': theme.pointIconMonumentIconColor,
-        'text-color': theme.pointIconMonumentTextColor,
+        'filter': ['==', ['get', 'amenity'], 'police'],
+        'icon-image': 'police',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
     {
-        filter: ['==', ['get', 'historic'], 'wayside_cross'],
-        'icon-image': 'wayside_cross',
-        'icon-color': theme.pointIconWaysideCrossIconColor,
-        'text-color': theme.pointIconWaysideCrossTextColor,
+        'filter': ['==', ['get', 'amenity'], 'townhall'],
+        'icon-image': 'town_hall',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
     {
-        filter: ['==', ['get', 'historic'], 'wayside_shrine'],
-        'icon-image': 'wayside_shrine',
-        'icon-color': theme.pointIconWayShrineIconColor,
-        'text-color': theme.pointIconWaysideShrineTextColor,
+        'filter': ['==', ['get', 'amenity'], 'fire_station'],
+        'icon-image': 'firestation',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'social_facility'],
+        'icon-image': 'social_facility',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'courthouse'],
+        'icon-image': 'courthouse',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'office'], 'diplomatic'],
+            ['==', ['get', 'diplomatic'], 'embassy']
+        ],
+        'icon-image': 'diplomatic',
+        'icon-color': theme.officeIconColor,
+        'text-color': theme.officeIconColor
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'office'], 'diplomatic'],
+            ['==', ['get', 'diplomatic'], 'consulate']
+        ],
+        'icon-image': 'consulate',
+        'icon-color': theme.officeIconColor,
+        'text-color': theme.officeIconColor
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'prison'],
+        'icon-image': 'prison',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor
     },
 
-    // Leisure
+    // Religious place
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'amenity'], 'place_of_worship'],
+            ['==', ['get', 'religion'], 'christian']
+        ],
+        'icon-image': 'christian',
+        'icon-color': theme.religionIconColor,
+        'text-color': theme.religionIconColor
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'amenity'], 'place_of_worship'],
+            ['==', ['get', 'religion'], 'jewish']
+        ],
+        'icon-image': 'jewish',
+        'icon-color': theme.religionIconColor,
+        'text-color': theme.religionIconColor
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'amenity'], 'place_of_worship'],
+            ['==', ['get', 'religion'], 'muslim']
+        ],
+        'icon-image': 'muslim',
+        'icon-color': theme.religionIconColor,
+        'text-color': theme.religionIconColor
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'amenity'], 'place_of_worship'],
+            ['==', ['get', 'religion'], 'taoist']
+        ],
+        'icon-image': 'taoist',
+        'icon-color': theme.religionIconColor,
+        'text-color': theme.religionIconColor
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'amenity'], 'place_of_worship'],
+            ['==', ['get', 'religion'], 'hindu']
+        ],
+        'icon-image': 'hinduist',
+        'icon-color': theme.religionIconColor,
+        'text-color': theme.religionIconColor
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'amenity'], 'place_of_worship'],
+            ['==', ['get', 'religion'], 'buddhist']
+        ],
+        'icon-image': 'buddhist',
+        'icon-color': theme.religionIconColor,
+        'text-color': theme.religionIconColor
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'amenity'], 'place_of_worship'],
+            ['==', ['get', 'religion'], 'shinto']
+        ],
+        'icon-image': 'shintoist',
+        'icon-color': theme.religionIconColor,
+        'text-color': theme.religionIconColor
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'amenity'], 'place_of_worship'],
+            ['==', ['get', 'religion'], 'sikh']
+        ],
+        'icon-image': 'sikhist',
+        'icon-color': theme.religionIconColor,
+        'text-color': theme.religionIconColor
+    },
+    // {
+    //     'filter': [
+    //         'all',
+    //         ['==', ['get', 'amenity'], 'place_of_worship'],
+    //         ['==', ['get', 'without or other religion'], '* value']
+    //     ],
+    //     'icon-image': 'place_of_worship',
+    //     'icon-color': theme.religionIconColor,
+    //     'text-color': theme.religionIconColor
+    // },
+
+    // Shop and services
     {
-        filter: ['==', ['get', 'leisure'], 'amusement_arcade'],
-        'icon-image': 'amusement_arcade',
-        'icon-color': theme.pointIconAmusementArcadeIconColor,
-        'text-color': theme.pointIconAmusementArcadeTextColor,
+        'filter': ['==', ['get', 'amenity'], 'marketplace'],
+        'icon-image': 'marketplace',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor
     },
     {
-        filter: ['==', ['get', 'leisure'], 'beach_resort'],
-        'icon-image': 'beach_resort',
-        'icon-color': theme.pointIconBeachResortIconColor,
-        'text-color': theme.pointIconBeachResortTextColor,
+        'filter': ['==', ['get', 'shop'], 'convenience'],
+        'icon-image': 'convenience',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'leisure'], 'bird_hide'],
-        'icon-image': 'bird_hide',
-        'icon-color': theme.pointIconBirdHideIconColor,
-        'text-color': theme.pointIconBirdHideTextColor,
+        'filter': ['==', ['get', 'shop'], 'supermarket'],
+        'icon-image': 'supermarket',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'leisure'], 'bowling_alley'],
-        'icon-image': 'bowling_alley',
-        'icon-color': theme.pointIconBowlingAlleyIconColor,
-        'text-color': theme.pointIconBowlingAlleyTextColor,
+        'filter': [
+            'any',
+            ['==', ['get', 'shop'], 'clothes'],
+            ['==', ['get', 'shop'], 'fashion']
+        ],
+        'icon-image': 'clothes',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'leisure'], 'firepit'],
-        'icon-image': 'firepit',
-        'icon-color': theme.pointIconFirepitIconColor,
-        'text-color': theme.pointIconFirepitTextColor,
+        'filter': ['==', ['get', 'shop'], 'hairdresser'],
+        'icon-image': 'hairdresser',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'leisure'], 'fishing'],
-        'icon-image': 'fishing',
-        'icon-color': theme.pointIconFishingIconColor,
-        'text-color': theme.pointIconFishingTextColor,
+        'filter': ['==', ['get', 'shop'], 'bakery'],
+        'icon-image': 'bakery',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'leisure'], 'fitness_centre'],
-        'icon-image': 'sports',
-        'icon-color': theme.pointIconFitnessCentreIconColor,
-        'text-color': theme.pointIconFitnessCentreTextColor,
+        'filter': ['==', ['get', 'shop'], 'car_repair'],
+        'icon-image': 'car_repair',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'leisure'], 'fitness_station'],
-        'icon-image': 'sports',
-        'icon-color': theme.pointIconFitnessStationIconColor,
-        'text-color': theme.pointIconFitnessStationTextColor,
+        'filter': ['any',
+            ['==', ['get', 'shop'], 'doityourself'],
+            ['==', ['get', 'shop'], 'hardware']
+        ],
+        'icon-image': 'diy',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'leisure'], 'golf_course'],
-        'icon-image': 'golf_course',
-        'icon-color': theme.pointIconGolfCourseIconColor,
-        'text-color': theme.pointIconGolfCourseTextColor,
+        'filter': ['==', ['get', 'shop'], 'car'],
+        'icon-image': 'car',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'leisure'], 'miniature_golf'],
-        'icon-image': 'miniature_golf',
-        'icon-color': theme.pointIconMiniatureGolfIconColor,
-        'text-color': theme.pointIconMiniatureGolfTextColor,
+        'filter': ['any',
+            ['==', ['get', 'shop'], 'kiosk'],
+            ['==', ['get', 'shop'], 'newsagent']
+        ],
+        'icon-image': 'newsagent',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'leisure'], 'outdoor_seating'],
-        'icon-image': 'outdoor_seating',
-        'icon-color': theme.pointIconOutdoorSeatingIconColor,
-        'text-color': theme.pointIconOutdoorSeatingTextColor,
+        'filter': ['==', ['get', 'shop'], 'beauty'],
+        'icon-image': 'beauty',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'leisure'], 'picnic_table'],
-        'icon-image': 'picnic',
-        'icon-color': theme.pointIconPicnicTableIconColor,
-        'text-color': theme.pointIconPicnicTableTextColor,
+        'filter': ['==', ['get', 'amenity'], 'car_wash'],
+        'icon-image': 'car_wash',
+        'icon-color': theme.amenityIconColor,
+        'text-color': theme.amenityIconColor,
     },
     {
-        filter: ['==', ['get', 'leisure'], 'playground'],
-        'icon-image': 'playground',
-        'icon-color': theme.pointIconPlaygroundIconColor,
-        'text-color': theme.pointIconPlaygroundTextColor,
+        'filter': ['==', ['get', 'shop'], 'butcher'],
+        'icon-image': 'butcher',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'leisure'], 'sauna'],
-        'icon-image': 'sauna',
-        'icon-color': theme.pointIconSaunaIconColor,
-        'text-color': theme.pointIconSaunaTextColor,
+        'filter': ['any',
+            ['==', ['get', 'shop'], 'alcohol'],
+            ['==', ['get', 'shop'], 'wine']
+        ],
+        'icon-image': 'alcohol',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'leisure'], 'slipway'],
-        'icon-image': 'slipway',
-        'icon-color': theme.pointIconSlipwayIconColor,
-        'text-color': theme.pointIconSlipwayTextColor,
+        'filter': ['==', ['get', 'shop'], 'furniture'],
+        'icon-image': 'furniture',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'leisure'], 'swimming_area'],
-        'icon-image': 'swimming_area',
-        'icon-color': theme.pointIconSwimmingAreaIconColor,
-        'text-color': theme.pointIconSwimmingAreaTextColor,
+        'filter': ['==', ['get', 'shop'], 'florist'],
+        'icon-image': 'florist',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'leisure'], 'water_park'],
-        'icon-image': 'water_park',
-        'icon-color': theme.pointIconWaterParkIconColor,
-        'text-color': theme.pointIconWaterParkTextColor,
+        'filter': ['==', ['get', 'shop'], 'mobile_phone'],
+        'icon-image': 'mobile_phone',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
-
-    // Man-made
     {
-        filter: ['==', ['get', 'man_made'], 'chimney'],
-        'icon-image': 'chimney',
-        'icon-color': theme.pointIconChimneyIconColor,
-        'text-color': theme.pointIconChimneyTextColor,
+        'filter': ['==', ['get', 'shop'], 'electronics'],
+        'icon-image': 'electronics',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'man_made'], 'communications_tower'],
-        'icon-image': 'communications_tower',
-        'icon-color': theme.pointIconCommunicationTowerIconColor,
-        'text-color': theme.pointIconCommunicationTowerTextColor,
+        'filter': ['==', ['get', 'shop'], 'shoes'],
+        'icon-image': 'shoes',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'man_made'], 'crane'],
-        'icon-image': 'crane',
-        'icon-color': theme.pointIconCraneIconColor,
-        'text-color': theme.pointIconCraneTextColor,
+        'filter': ['==', ['get', 'shop'], 'car_parts'],
+        'icon-image': 'car_parts',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'man_made'], 'cross'],
-        'icon-image': 'cross',
-        'icon-color': theme.pointIconCrossIconColor,
-        'text-color': theme.pointIconCrossTextColor,
+        'filter': [
+            'any',
+            ['==', ['get', 'shop'], 'greengrocer'],
+            ['==', ['get', 'shop'], 'farm']
+        ],
+        'icon-image': 'greengrocer',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'man_made'], 'lighthouse'],
-        'icon-image': 'lighthouse',
-        'icon-color': theme.pointIconLighthouseIconColor,
-        'text-color': theme.pointIconLightHouseTextColor,
+        'filter': [
+            'any',
+            ['==', ['get', 'shop'], 'laundry'],
+            ['==', ['get', 'shop'], 'dry_cleaning']
+        ],
+        'icon-image': 'laundry',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'man_made'], 'mast'],
-        'icon-image': 'mast',
-        'icon-color': theme.pointIconMastIconColor,
-        'text-color': theme.pointIconMastTextColor,
+        'filter': ['==', ['get', 'shop'], 'optician'],
+        'icon-image': 'optician',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'man_made'], 'obelisk'],
-        'icon-image': 'obelisk',
-        'icon-color': theme.pointIconObeliskIconColor,
-        'text-color': theme.pointIconObeliskTextColor,
+        'filter': [
+            'any',
+            ['==', ['get', 'shop'], 'jewelry'],
+            ['==', ['get', 'shop'], 'jewellery']
+        ],
+        'icon-image': 'jewelry',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'man_made'], 'silo'],
-        'icon-image': 'silo',
-        'icon-color': theme.pointIconSiloIconColor,
-        'text-color': theme.pointIconSiloTextColor,
+        'filter': ['==', ['get', 'shop'], 'books'],
+        'icon-image': 'library',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'man_made'], 'storage_tank'],
-        'icon-image': 'storage_tank',
-        'icon-color': theme.pointIconStorageTankIconColor,
-        'text-color': theme.pointIconStorageTankTextColor,
+        'filter': ['==', ['get', 'shop'], 'gift'],
+        'icon-image': 'gift',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'man_made'], 'telescope'],
-        'icon-image': 'telescope',
-        'icon-color': theme.pointIconTelescopeIconColor,
-        'text-color': theme.pointIconTelescopeTextColor,
+        'filter': ['==', ['get', 'shop'], 'department_store'],
+        'icon-image': 'department_store',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'man_made'], 'tower'],
-        'icon-image': 'tower_generic',
-        'icon-color': theme.pointIconTowerIconColor,
-        'text-color': theme.pointIconTowerTextColor,
+        'filter': ['==', ['get', 'shop'], 'bicycle'],
+        'icon-image': 'bicycle',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'man_made'], 'water_tower'],
-        'icon-image': 'water_tower',
-        'icon-color': theme.pointIconWaterTowerIconColor,
-        'text-color': theme.pointIconWaterTowerTextColor,
+        'filter': [
+            'any',
+            ['==', ['get', 'shop'], 'confectionery'],
+            ['==', ['get', 'shop'], 'chocolate'],
+            ['==', ['get', 'shop'], 'pastry']
+        ],
+        'icon-image': 'confectionery',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'man_made'], 'windmill'],
-        'icon-image': 'windmill',
-        'icon-color': theme.pointIconWindmillIconColor,
-        'text-color': theme.pointIconWindmillTextColor,
+        'filter': ['==', ['get', 'shop'], 'variety_store'],
+        'icon-image': 'variety_store',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
-
-    // Military
     {
-        filter: ['==', ['get', 'military'], 'bunker'],
-        'icon-image': 'bunker',
-        'icon-color': theme.pointIconBunkerIconColor,
-        'text-color': theme.pointIconBunkerTextColor,
+        'filter': ['==', ['get', 'shop'], 'travel_agency'],
+        'icon-image': 'travel_agency',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
-
-    // Natural
     {
-        filter: ['==', ['get', 'natural'], 'spring'],
-        'icon-image': 'spring',
-        'icon-color': theme.pointIconSpringIconColor,
-        'text-color': theme.pointIconSpringTextColor,
+        'filter': ['==', ['get', 'shop'], 'sports'],
+        'icon-image': 'sports',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'natural'], 'cave_entrance'],
-        'icon-image': 'entrance',
-        'icon-color': theme.pointIconCaveEntranceIconColor,
-        'text-color': theme.pointIconCaveEntranceTextColor,
+        'filter': ['==', ['get', 'shop'], 'chemist'],
+        'icon-image': 'chemist',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'natural'], 'peak'],
-        'icon-image': 'peak',
-        'icon-color': theme.pointIconPeakIconColor,
-        'text-color': theme.pointIconPeakTextColor,
+        'filter': ['==', ['get', 'shop'], 'computer'],
+        'icon-image': 'computer',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'natural'], 'saddle'],
-        'icon-image': 'saddle',
-        'icon-color': theme.pointIconSaddleIconColor,
-        'text-color': theme.pointIconSaddleTextColor,
+        'filter': ['==', ['get', 'shop'], 'stationery'],
+        'icon-image': 'stationery',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'natural'], 'volcano'],
-        'icon-image': 'volcano',
-        'icon-color': theme.pointIconVolcanoIconColor,
-        'text-color': theme.pointIconVolcanoTextColor,
+        'filter': ['==', ['get', 'shop'], 'pet'],
+        'icon-image': 'pet',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
-
-    // Railway: stations and stops
     {
-        filter: ['==', ['get', 'railway'], 'halt'],
-        'icon-image': 'place-6',
-        'icon-color': theme.pointIconHaltIconColor,
-        'text-color': theme.pointIconHaltTextColor,
+        'filter': ['==', ['get', 'shop'], 'beverages'],
+        'icon-image': 'beverages',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'railway'], 'station'],
-        'icon-image': 'place-6',
-        'icon-color': theme.pointIconStationIconColor,
-        'text-color': theme.pointIconStationTextColor,
+        'filter': [
+            'any',
+            ['==', ['get', 'shop'], 'cosmetics'],
+            ['==', ['get', 'shop'], 'perfumery']
+        ],
+        'icon-image': 'perfumery',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'railway'], 'subway_entrance'],
-        'icon-image': 'entrance',
-        'icon-color': theme.pointIconSubwayEntranceIconColor,
-        'text-color': theme.pointIconSubwayEntranceTextColor,
+        'filter': ['==', ['get', 'shop'], 'tyres'],
+        'icon-image': 'tyres',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'railway'], 'tram_stop'],
-        'icon-image': 'tram_stop',
-        'icon-color': theme.pointIconTramStopIconColor,
-        'text-color': theme.pointIconTramStopTextColor,
+        'filter': ['==', ['get', 'shop'], 'motorcycle'],
+        'icon-image': 'motorcycle',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
-
-    // Railway: other railways
     {
-        filter: ['==', ['get', 'railway'], 'crossing'],
-        'icon-image': 'level_crossing',
-        'icon-color': theme.pointIconCrossingIconColor,
-        'text-color': theme.pointIconCrossingTextColor,
+        'filter': ['==', ['get', 'shop'], 'garden_centre'],
+        'icon-image': 'garden_centre',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'railway'], 'level_crossing'],
-        'icon-image': 'level_crossing',
-        'icon-color': theme.pointIconLevelCrossingIconColor,
-        'text-color': theme.pointIconLevelCrossingTextColor,
+        'filter': ['==', ['get', 'shop'], 'copyshop'],
+        'icon-image': 'copyshop',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
-
-    // Tourism
     {
-        filter: ['==', ['get', 'tourism'], 'alpine_hut'],
-        'icon-image': 'alpine_hut',
-        'icon-color': theme.pointIconAlpineHutIconColor,
-        'text-color': theme.pointIconAlpineHutTextColor,
+        'filter': ['==', ['get', 'shop'], 'toys'],
+        'icon-image': 'toys',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'tourism'], 'apartment'],
-        'icon-image': 'apartment',
-        'icon-color': theme.pointIconApartmentIconColor,
-        'text-color': theme.pointIconApartmentTextColor,
+        'filter': ['==', ['get', 'shop'], 'deli'],
+        'icon-image': 'deli',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'tourism'], 'artwork'],
-        'icon-image': 'artwork',
-        'icon-color': theme.pointIconArtworkIconColor,
-        'text-color': theme.pointIconArtworkTextColor,
+        'filter': ['==', ['get', 'shop'], 'tobacco'],
+        'icon-image': 'tobacco',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'tourism'], 'camp_site'],
-        'icon-image': 'camping',
-        'icon-color': theme.pointIconCampSiteIconColor,
-        'text-color': theme.pointIconCampSiteTextColor,
+        'filter': ['==', ['get', 'shop'], 'seafood'],
+        'icon-image': 'seafood',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'tourism'], 'caravan_site'],
-        'icon-image': 'caravan_park',
-        'icon-color': theme.pointIconCaravaneSiteIconColor,
-        'text-color': theme.pointIconCaravaneSiteTextColor,
+        'filter': ['==', ['get', 'shop'], 'interior_decoration'],
+        'icon-image': 'interior_decoration',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'tourism'], 'chalet'],
-        'icon-image': 'chalet',
-        'icon-color': theme.pointIconChaletIconColor,
-        'text-color': theme.pointIconChaletTextColor,
+        'filter': ['==', ['get', 'shop'], 'ticket'],
+        'icon-image': 'ticket',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
+    },
+    {
+        'filter': [
+            'any',
+            ['==', ['get', 'shop'], 'photo'],
+            ['==', ['get', 'shop'], 'photo_studio'],
+            ['==', ['get', 'shop'], 'photography']
+        ],
+        'icon-image': 'photo',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
+    },
+    {
+        'filter': [
+            'any',
+            ['==', ['get', 'shop'], 'trade'],
+            ['==', ['get', 'shop'], 'wholesale']
+        ],
+        'icon-image': 'trade',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'shop'], 'outdoor'],
+        'icon-image': 'outdoor',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'tourism'], 'gallery'],
+        'filter': ['==', ['get', 'shop'], 'houseware'],
+        'icon-image': 'houseware',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'shop'], 'art'],
         'icon-image': 'art',
-        'icon-color': theme.pointIconGalleryIconColor,
-        'text-color': theme.pointIconGalleryTextColor,
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'tourism'], 'guest_house'],
-        'icon-image': 'guest_house',
-        'icon-color': theme.pointIconGuestHouseIconColor,
-        'text-color': theme.pointIconGuestHouseextColor,
+        'filter': ['==', ['get', 'shop'], 'paint'],
+        'icon-image': 'paint',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'tourism'], 'hostel'],
-        'icon-image': 'hostel',
-        'icon-color': theme.pointIconHostelIconColor,
-        'text-color': theme.pointIconHostelTextColor,
+        'filter': ['==', ['get', 'shop'], 'fabric'],
+        'icon-image': 'fabric',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'tourism'], 'motel'],
-        'icon-image': 'motel',
-        'icon-color': theme.pointIconMotelIconColor,
-        'text-color': theme.pointIconMotelTextColor,
+        'filter': ['==', ['get', 'shop'], 'bookmaker'],
+        'icon-image': 'bookmaker',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'tourism'], 'museum'],
-        'icon-image': 'museum',
-        'icon-color': theme.pointIconMuseumIconColor,
-        'text-color': theme.pointIconMuseumTextColor,
+        'filter': ['==', ['get', 'shop'], 'second_hand'],
+        'icon-image': 'second_hand',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'tourism'], 'picnic_site'],
-        'icon-image': 'picnic',
-        'icon-color': theme.pointIconPicnicSiteIconColor,
-        'text-color': theme.pointIconPicnicSiteTextColor,
+        'filter': ['==', ['get', 'shop'], 'charity'],
+        'icon-image': 'charity',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'tourism'], 'viewpoint'],
-        'icon-image': 'viewpoint',
-        'icon-color': theme.pointIconViewpointIconColor,
-        'text-color': theme.pointIconViewpointTextColor,
+        'filter': ['==', ['get', 'shop'], 'bed'],
+        'icon-image': 'bed',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
     },
     {
-        filter: ['==', ['get', 'tourism'], 'wilderness_hut'],
-        'icon-image': 'wilderness_hut',
-        'icon-color': theme.pointIconWildernessHutIconColor,
-        'text-color': theme.pointIconWildernessHutTextColor,
+        'filter': ['==', ['get', 'shop'], 'medical_supply'],
+        'icon-image': 'medical_supply',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'shop'], 'hifi'],
+        'icon-image': 'hifi',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'shop'], 'music'],
+        'icon-image': 'music',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'shop'], 'coffee'],
+        'icon-image': 'coffee',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'shop'], 'musical_instrument'],
+        'icon-image': 'musical_instrument',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'shop'], 'tea'],
+        'icon-image': 'tea',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'shop'], 'video'],
+        'icon-image': 'video',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'shop'], 'bag'],
+        'icon-image': 'bag',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'shop'], 'carpet'],
+        'icon-image': 'carpet',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'shop'], 'video_games'],
+        'icon-image': 'video_games',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'vehicle_inspection'],
+        'icon-image': 'vehicle_inspection',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'shop'], 'dairy'],
+        'icon-image': 'dairy',
+        'icon-color': theme.shopIconColor,
+        'text-color': theme.shopIconColor,
+    },
+    // {
+    //     'filter': ['!=', ['get', 'shop'], 'yes'],
+    //     'icon-image': 'place-4',
+    // 'icon-color': theme.shopIconColor,
+    // 'text-color': theme.shopIconColor,
+    // },
+    {
+        'filter': ['==', ['get', 'office'], '*'],
+        'icon-image': 'office',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
+    },
+    {
+        'filter': [
+            'any',
+            ['==', ['get', 'amenity'], 'nursing_home'],
+            ['==', ['get', 'amenity'], 'childcare']
+        ],
+        'icon-image': 'place-6',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor
     },
 
-    // Waterway: barriers on waterways
+    // Landmarks, man-made infrastructure, masts and towers
+    {
+        'filter': ['any', ['==', ['get', 'man_made'], 'storage_tank'], ['==', 
['get', 'man_made'], 'silo']],
+        'icon-image': 'storage_tank',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
     {
-        filter: ['==', ['get', 'waterway'], 'dam'],
-        'icon-image': 'dam',
-        'icon-color': theme.pointIconDamIconColor,
-        'text-color': theme.pointIconDamTextColor,
+        'filter': ['==', ['get', 'man_made'], 'tower'],
+        'icon-image': 'tower_generic',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
     },
     {
-        filter: ['==', ['get', 'waterway'], 'weir'],
-        'icon-image': 'weir',
-        'icon-color': theme.pointIconWeirIconColor,
-        'text-color': theme.pointIconWeirTextColor,
+        'filter': ['all', ['==', ['get', 'man_made'], 'tower'], ['==', ['get', 
'tower:type'], 'communication']],
+        'icon-image': 'tower_cantilever_communication',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
     },
     {
-        filter: ['==', ['get', 'waterway'], 'waterfall'],
-        'icon-image': 'waterfall',
-        'icon-color': theme.pointIconWaterfallIconColor,
-        'text-color': theme.pointIconWaterfallTextColor,
+        'filter': [
+            'all',
+            ['==', ['get', 'power'], 'generator'],
+            ['any',
+                ['==', ['get', 'generator:source'], 'wind'],
+                ['==', ['get', 'generator:method'], 'wind_turbine)']
+            ]
+        ],
+        'icon-image': 'generator_wind',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'amenity'], 'hunting_stand'],
+        'icon-image': 'hunting_stand',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': ['any', ['==', ['get', 'historic'], 'wayside_cross'], ['==', 
['get', 'man_made'], 'cross']],
+        'icon-image': 'christian',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'man_made'], 'water_tower'],
+        'icon-image': 'water_tower',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'man_made'], 'mast'],
+        'icon-image': 'mast',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
     },
     {
-        filter: ['==', ['get', 'waterway'], 'lock_gate'],
-        'icon-image': 'lock_gate',
-        'icon-color': theme.pointIconLockGateIconColor,
-        'text-color': theme.pointIconLockGateTextColor,
+        filter: ['==', ['get', 'military'], 'bunker'],
+        'icon-image': 'bunker',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'man_made'], 'chimney'],
+        'icon-image': 'chimney',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': [
+            'any',
+            [
+                'all',
+                ['==', ['get', 'man_made'], 'tower'],
+                ['==', ['get', 'tower:type'], 'observation']
+            ],
+            [
+                'all',
+                ['==', ['get', 'man_made'], 'tower'],
+                ['==', ['get', 'tower:type'], 'watchtower']
+            ]
+        ],
+        'icon-image': 'tower_observation',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'man_made'], 'tower'],
+            ['==', ['get', 'tower:type'], 'bell_tower']
+        ],
+        'icon-image': 'tower_bell_tower',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'man_made'], 'tower'],
+            ['==', ['get', 'tower:type'], 'lighting']
+        ],
+        'icon-image': 'tower_lighting',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'man_made'], 'lighthouse'],
+        'icon-image': 'lighthouse',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'advertising'], 'column'],
+        'icon-image': 'column',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'man_made'], 'crane'],
+        'icon-image': 'crane',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'man_made'], 'windmill'],
+        'icon-image': 'windmill',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'man_made'], 'tower'],
+            ['==', ['get', 'tower:type'], 'communication'],
+            ['==', ['get', 'tower:construction'], 'lattice']
+        ],
+        'icon-image': 'tower_lattice_communication',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'man_made'], 'mast'],
+            ['==', ['get', 'tower:type'], 'lighting']
+        ],
+        'icon-image': 'mast_lighting',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'man_made'], 'mast'],
+            ['==', ['get', 'tower:type'], 'communication']
+        ],
+        'icon-image': 'mast_communications',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': ['==', ['get', 'man_made'], 'communications_tower'],
+        'icon-image': 'communication_tower',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'man_made'], 'tower'],
+            ['==', ['get', 'tower:type'], 'defensive']
+        ],
+        'icon-image': 'tower_defensive',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'man_made'], 'tower'],
+            ['==', ['get', 'tower:type'], 'cooling']
+        ],
+        'icon-image': 'tower_cooling',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'man_made'], 'tower'],
+            ['==', ['get', 'tower:construction'], 'lattice']
+        ],
+        'icon-image': 'tower_lattice',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'man_made'], 'tower'],
+            ['==', ['get', 'tower:type'], 'lighting'],
+            ['==', ['get', 'tower:construction'], 'lattice']
+        ],
+        'icon-image': 'tower_lattice_lighting',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'man_made'], 'tower'],
+            ['==', ['get', 'tower:construction'], 'dish']
+        ],
+        'icon-image': 'tower_dish',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'man_made'], 'tower'],
+            ['==', ['get', 'tower:construction'], 'dome']
+        ],
+        'icon-image': 'tower_dome',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'man_made'], 'telescope'],
+            ['==', ['get', 'telescope:type'], 'radio']
+        ],
+        'icon-image': 'telescope_dish',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+    {
+        'filter': [
+            'all',
+            ['==', ['get', 'man_made'], 'telescope'],
+            ['==', ['get', 'telescope:type'], 'optical']
+        ],
+        'icon-image': 'telescope_dome',
+        'icon-color': theme.manMadeIconColor,
+        'text-color': theme.manMadeIconColor,
+    },
+
+    // Electricity
+    // {
+    //     'filter': ['==', ['get', 'power'], 'tower'],
+    //     'icon-image': 'power_tower',
+    //     'icon-color': theme.powerIconColor,
+    //     'text-color': theme.powerIconColor,
+    // },
+    // {
+    //     'filter': ['==', ['get', 'power'], 'pole'],
+    //     'icon-image': 'place-6',
+    //     'icon-color': theme.powerIconColor,
+    //     'text-color': theme.powerIconColor,
+    // },
+
+    // Places
+    {
+        'filter': ['==', ['get', 'place'], 'city'],
+        'icon-image': 'place-6',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor,
+    },
+    // {
+    //     'filter': ['has', 'capital'],
+    //     'icon-image': 'place_capital',
+    //     'icon-color': theme.otherIconColor,
+    //     'text-color': theme.otherIconColor,
+    // },
+    // {
+    //     'filter': ['==', ['get', 'entrance'], 'yes'],
+    //     'icon-image': 'entrance',
+    //     'icon-color': theme.otherIconColor,
+    //     'text-color': theme.otherIconColor,
+    // },
+    // {
+    //     'filter': ['==', ['get', 'entrance'], 'main'],
+    //     'icon-image': 'entrance',
+    //     'icon-color': theme.otherIconColor,
+    //     'text-color': theme.otherIconColor,
+    // },
+    // {
+    //     'filter': ['==', ['get', 'entrance'], 'service'],
+    //     'icon-image': 'entrance',
+    //     'icon-color': theme.otherIconColor,
+    //     'text-color': theme.otherIconColor,
+    // },
+    {
+        'filter': [
+            'all',
+            ['has', 'entrance'],
+            ['==', ['get', 'access'], 'no']
+        ],
+        'icon-image': 'entrance',
+        'icon-color': theme.otherIconColor,
+        'text-color': theme.otherIconColor,
     },
 ];
 
diff --git a/basemap/layers/point/point_label.js b/basemap/layers/point/place.js
similarity index 74%
rename from basemap/layers/point/point_label.js
rename to basemap/layers/point/place.js
index 8dc58fcf..8464a918 100644
--- a/basemap/layers/point/point_label.js
+++ b/basemap/layers/point/place.js
@@ -19,40 +19,61 @@ import {asLayerObject, withSymbolSortKeys} from 
"../../utils/utils.js";
 
 let directives = [
     {
-        filter: [
+        'filter': [
             'all',
+            ['==', ['get', 'place'], 'city'],
             ['==', ['get', 'capital'], 'yes'],
-            ['==', ['get', 'place'], 'city']
         ],
-        'label-color': theme.pointLabelCityLabelColor,
-        'label-size': 16,
         'symbol-sort-key': ["-", ["to-number", ['get', 'population'], 0]],
+        'label-color': theme.placeIconColor,
+        'text-size-stops': [
+            0, 0,
+            10, 18,
+            24, 72
+        ],
     },
     {
-        filter: [
+        'filter': [
             'all',
+            ['==', ['get', 'place'], 'city'],
             ['!=', ['get', 'capital'], 'yes'],
-            ['==', ['get', 'place'], 'city']
         ],
-        'label-color': [theme.pointLabelCityFilterOneLabelColor, 
theme.pointLabelCityFilterTwoLabelColor],
-        'label-size': 12,
         'symbol-sort-key': ["-", ["to-number", ['get', 'population'], 0]],
+        'label-color': [theme.pointLabelCityFilterOneLabelColor, 
theme.pointLabelCityFilterTwoLabelColor],
+        'text-size-stops': [
+            0, 0,
+            10, 16,
+            24, 64
+        ],
     },
     {
-        filter: ['==', ['get', 'place'], 'town'],
-        'label-size': 10,
+        'filter': ['==', ['get', 'place'], 'town'],
+        'symbol-sort-key': ["-", ["to-number", ['get', 'population'], 0]],
         'label-color': [theme.pointLabelTownFilterOneLabelColor, 
theme.pointLabelTownFilterTwoLabelColor],
-
+        'text-size-stops': [
+            0, 0,
+            10, 14,
+            24, 56
+        ],
     },
     {
         filter: ['==', ['get', 'place'], 'village'],
-        'label-size': 10,
+        'symbol-sort-key': ["-", ["to-number", ['get', 'population'], 0]],
         'label-color': theme.pointLabelVillageLabelColor,
+        'text-size-stops': [
+            0, 0,
+            10, 10,
+            24, 40
+        ],
     },
     {
         filter: ['==', ['get', 'place'], 'locality'],
-        'label-size': 8,
         'label-color': theme.pointLabelLocalityLabelColor,
+        'text-size-stops': [
+            0, 0,
+            10, 8,
+            24, 32
+        ],
     },
     // {
     //     filter: [
@@ -85,6 +106,8 @@ export default asLayerObject(withSymbolSortKeys(directives), 
{
         visibility: 'visible',
         'text-font': ['Noto Sans Regular'],
         'text-field': ['get', 'name'],
+        'icon-size': 1,
+        'text-optional': true,
     },
     paint: {
         'text-halo-color': theme.pointLabelPaintTextHaloColor,
diff --git a/basemap/style.js b/basemap/style.js
index 0ea9a4b0..99eb7689 100644
--- a/basemap/style.js
+++ b/basemap/style.js
@@ -58,8 +58,8 @@ import waterway_line from "./layers/waterway/line.js"
 import waterway_area from "./layers/waterway/area.js"
 import waterway_label from "./layers/waterway/label.js"
 import icon from "./layers/point/icon.js";
+import place from './layers/point/place.js';
 import country_label from './layers/point/country_label.js';
-import point_label from './layers/point/point_label.js';
 
 export default {
     "version": 8,
@@ -115,7 +115,7 @@ export default {
         waterway_label,
         building_extrusion,
         icon,
-        point_label,
+        place,
         country_label,
     ],
 };
\ No newline at end of file
diff --git a/basemap/themes/default.js b/basemap/themes/default.js
index 05f70dcd..67ea2648 100644
--- a/basemap/themes/default.js
+++ b/basemap/themes/default.js
@@ -275,282 +275,6 @@ export default {
     pedestrianAreaPaintFillColor: 'rgb(221, 221, 231)',
     pointCountryLabelCountryTextColor: 'rgb(90, 56, 90)',
     pointCountryLabelPaintTextHaloColor: 'rgba(255, 255, 255, 0.8)',
-    pointIconAlpineHutIconColor: 'rgb(0, 146, 219)',
-    pointIconAlpineHutTextColor: 'rgb(0, 146, 219)',
-    pointIconAmusementArcadeIconColor: 'rgb(13, 134, 22)',
-    pointIconAmusementArcadeTextColor: 'rgb(13, 134, 22)',
-    pointIconApartmentIconColor: 'rgb(0, 146, 219)',
-    pointIconApartmentTextColor: 'rgb(0, 146, 219)',
-    pointIconArchaeologicalSiteIconColor: 'rgb(115, 74, 7)',
-    pointIconArchaeologicalSiteTextColor: 'rgb(115, 74, 7)',
-    pointIconArtsCentreIconColor: 'rgb(115, 74, 7)',
-    pointIconArtsCentreTextColor: 'rgb(115, 74, 7)',
-    pointIconArtworkIconColor: 'rgb(115, 74, 7)',
-    pointIconArtworkTextColor: 'rgb(115, 74, 7)',
-    pointIconAtmIconColor: 'rgb(115, 74, 7)',
-    pointIconAtmTextColor: 'rgb(115, 74, 7)',
-    pointIconBankIconColor: 'rgb(115, 74, 7)',
-    pointIconBankTextColor: 'rgb(115, 74, 7)',
-    pointIconBarIconColor: 'rgb(199, 116, 0)',
-    pointIconBarTextColor: 'rgb(199, 116, 0)',
-    pointIconBbqIconColor: 'rgb(115, 74, 7)',
-    pointIconBbqTextColor: 'rgb(115, 74, 7)',
-    pointIconBeachResortIconColor: 'rgb(13, 134, 22)',
-    pointIconBeachResortTextColor: 'rgb(13, 134, 22)',
-    pointIconBenchIconColor: 'rgb(102, 102, 102)',
-    pointIconBenchTextColor: 'rgb(102, 102, 102)',
-    pointIconBicycleParkingIconColor: 'rgb(0, 146, 219)',
-    pointIconBicycleParkingTextColor: 'rgb(0, 146, 219)',
-    pointIconBicycleRentalIconColor: 'rgb(0, 146, 219)',
-    pointIconBicycleRentalTextColor: 'rgb(0, 146, 219)',
-    pointIconBicycleRepairStationIconColor: 'rgb(115, 74, 7)',
-    pointIconBicycleRepairStationTextColor: 'rgb(115, 74, 7)',
-    pointIconBiergartenIconColor: 'rgb(199, 116, 0)',
-    pointIconBiergartenTextColor: 'rgb(199, 116, 0)',
-    pointIconBirdHideIconColor: 'rgb(13, 134, 22)',
-    pointIconBirdHideTextColor: 'rgb(13, 134, 22)',
-    pointIconBoatRentalIconColor: 'rgb(0, 146, 219)',
-    pointIconBoatRentalTextColor: 'rgb(0, 146, 219)',
-    pointIconBowlingAlleyIconColor: 'rgb(13, 134, 22)',
-    pointIconBowlingAlleyTextColor: 'rgb(13, 134, 22)',
-    pointIconBunkerIconColor: 'rgb(85, 85, 85)',
-    pointIconBunkerTextColor: 'rgb(85, 85, 85)',
-    pointIconBureauDeChangeIconColor: 'rgb(115, 74, 7)',
-    pointIconBureauDeChangeTextColor: 'rgb(115, 74, 7)',
-    pointIconBusStationIconColor: 'rgb(0, 146, 219)',
-    pointIconBusStationTextColor: 'rgb(0, 146, 219)',
-    pointIconBusStopIconColor: 'rgb(0, 146, 219)',
-    pointIconBusStopTextColo: 'rgb(0, 146, 219)',
-    pointIconCafeIconColor: 'rgb(199, 116, 0)',
-    pointIconCafeTextColor: 'rgb(199, 116, 0)',
-    pointIconCampSiteIconColor: 'rgb(0, 146, 219)',
-    pointIconCampSiteTextColor: 'rgb(0, 146, 219)',
-    pointIconCarRentalIconColor: 'rgb(0, 146, 219)',
-    pointIconCarRentalTextColor: 'rgb(0, 146, 219)',
-    pointIconCarWashIconColor: 'rgb(115, 74, 7)',
-    pointIconCarWashTextColor: 'rgb(115, 74, 7)',
-    pointIconCaravaneSiteIconColor: 'rgb(0, 146, 219)',
-    pointIconCaravaneSiteTextColor: 'rgb(0, 146, 219)',
-    pointIconCasinoIconColor: 'rgb(115, 74, 7)',
-    pointIconCasinoTextColor: 'rgb(115, 74, 7)',
-    pointIconCastleIconColor: 'rgb(115, 74, 7)',
-    pointIconCastleTextColor: 'rgb(115, 74, 7)',
-    pointIconCaveEntranceIconColor: 'rgb(85, 85, 85)',
-    pointIconCaveEntranceTextColor: 'rgb(85, 85, 85)',
-    pointIconChaletIconColor: 'rgb(0, 146, 219)',
-    pointIconChaletTextColor: 'rgb(0, 146, 219)',
-    pointIconChargingStationIconColor: 'rgb(0, 146, 219)',
-    pointIconChargingStationTextColor: 'rgb(0, 146, 219)',
-    pointIconChildcareIconColor: 'rgb(76, 76, 0)',
-    pointIconChildcareTextColor: 'rgb(76, 76, 0)',
-    pointIconChimneyIconColor: 'rgb(85, 85, 85)',
-    pointIconChimneyTextColor: 'rgb(85, 85, 85)',
-    pointIconCinemaIconColor: 'rgb(115, 74, 7)',
-    pointIconCinemaTextColor: 'rgb(115, 74, 7)',
-    pointIconCityGateIconColor: 'rgb(85, 85, 85)',
-    pointIconCityGateTextColor: 'rgb(85, 85, 85)',
-    pointIconCliniqueIconColor: 'rgb(191, 0, 0)',
-    pointIconCliniqueTextColor: 'rgb(191, 0, 0)',
-    pointIconCommunicationTowerIconColor: 'rgb(85, 85, 85)',
-    pointIconCommunicationTowerTextColor: 'rgb(85, 85, 85)',
-    pointIconCommunityCentreIconColor: 'rgb(115, 74, 7)',
-    pointIconCommunityCentreTextColor: 'rgb(115, 74, 7)',
-    pointIconCourthouseIconColor: 'rgb(115, 74, 7)',
-    pointIconCourthouseTextColor: 'rgb(115, 74, 7)',
-    pointIconCraneIconColor: 'rgb(85, 85, 85)',
-    pointIconCraneTextColor: 'rgb(85, 85, 85)',
-    pointIconCrossIconColor: 'rgb(85, 85, 85)',
-    pointIconCrossTextColor: 'rgb(85, 85, 85)',
-    pointIconCrossingIconColor: 'rgb(102, 102, 102)',
-    pointIconCrossingTextColor: 'rgb(102, 102, 102)',
-    pointIconDamIconColor: 'rgb(173, 173, 173)',
-    pointIconDamTextColor: 'rgb(173, 173, 173)',
-    pointIconDentistIconColor: 'rgb(191, 0, 0)',
-    pointIconDentistTextColor: 'rgb(191, 0, 0)',
-    pointIconDoctorIconColor: 'rgb(191, 0, 0)',
-    pointIconDoctorTextColor: 'rgb(191, 0, 0)',
-    pointIconDrinkingWaterIconColor: 'rgb(115, 74, 7)',
-    pointIconDrinkingWaterTextColor: 'rgb(115, 74, 7)',
-    pointIconDrivingSchoolIconColor: 'rgb(172, 58, 173)',
-    pointIconDrivingSchoolTextColor: 'rgb(172, 58, 173)',
-    pointIconFastFoodIconColor: 'rgb(199, 116, 0)',
-    pointIconFastFoodTextColor: 'rgb(199, 116, 0)',
-    pointIconFerryTerminalIconColor: 'rgb(132, 97, 196)',
-    pointIconFerryTerminalTextColor: 'rgb(132, 97, 196)',
-    pointIconFireStationIconColor: 'rgb(115, 74, 7)',
-    pointIconFireStationTextColor: 'rgb(115, 74, 7)',
-    pointIconFirepitIconColor: 'rgb(115, 74, 7)',
-    pointIconFirepitTextColor: 'rgb(115, 74, 7)',
-    pointIconFishingIconColor: 'rgb(13, 134, 22)',
-    pointIconFishingTextColor: 'rgb(13, 134, 22)',
-    pointIconFitnessCentreIconColor: 'rgb(13, 134, 22)',
-    pointIconFitnessCentreTextColor: 'rgb(13, 134, 22)',
-    pointIconFitnessStationIconColor: 'rgb(13, 134, 22)',
-    pointIconFitnessStationTextColor: 'rgb(13, 134, 22)',
-    pointIconFoodCourtIconColor: 'rgb(199, 116, 0)',
-    pointIconFoodCourtTextColor: 'rgb(199, 116, 0)',
-    pointIconFortIconColor: 'rgb(115, 74, 7)',
-    pointIconFortTextColor: 'rgb(115, 74, 7)',
-    pointIconFountainIconColor: 'rgb(87, 104, 236)',
-    pointIconFountainTextColor: 'rgb(87, 104, 236)',
-    pointIconFuelIconColor: 'rgb(0, 146, 219)',
-    pointIconFuelTextColor: 'rgb(0, 146, 219)',
-    pointIconGalleryIconColor: 'rgb(115, 74, 7)',
-    pointIconGalleryTextColor: 'rgb(115, 74, 7)',
-    pointIconGolfCourseIconColor: 'rgb(13, 134, 22)',
-    pointIconGolfCourseTextColor: 'rgb(13, 134, 22)',
-    pointIconGuestHouseIconColor: 'rgb(0, 146, 219)',
-    pointIconGuestHouseextColor: 'rgb(0, 146, 219)',
-    pointIconHaltIconColor: 'rgb(122, 129, 177)',
-    pointIconHaltTextColor: 'rgb(122, 129, 177)',
-    pointIconHospitalIconColor: 'rgb(191, 0, 0)',
-    pointIconHospitalTextColor: 'rgb(191, 0, 0)',
-    pointIconHostelIconColor: 'rgb(0, 146, 219)',
-    pointIconHostelTextColor: 'rgb(0, 146, 219)',
-    pointIconHuntingStandIconColor: 'rgb(85, 85, 85)',
-    pointIconHuntingStandTextColor: 'rgb(85, 85, 85)',
-    pointIconIceCreamIconColor: 'rgb(199, 116, 0)',
-    pointIconIceCreamTextColor: 'rgb(199, 116, 0)',
-    pointIconInternetCafeIconColor: 'rgb(115, 74, 7)',
-    pointIconInternetCafeTextColor: 'rgb(115, 74, 7)',
-    pointIconLayerIconHaloColor: 'rgba(255, 255, 255, 0.8)',
-    pointIconLayerTextHaloColor: 'rgba(255, 255, 255, 0.8)',
-    pointIconLevelCrossingIconColor: 'rgb(102, 102, 102)',
-    pointIconLevelCrossingTextColor: 'rgb(102, 102, 102)',
-    pointIconLibraryIconColor: 'rgb(115, 74, 7)',
-    pointIconLibraryTextColor: 'rgb(115, 74, 7)',
-    pointIconLightHouseTextColor: 'rgb(85, 85, 85)',
-    pointIconLighthouseIconColor: 'rgb(85, 85, 85)',
-    pointIconLockGateIconColor: 'rgb(173, 173, 173)',
-    pointIconLockGateTextColor: 'rgb(173, 173, 173)',
-    pointIconManorIconColor: 'rgb(115, 74, 7)',
-    pointIconManorTextColor: 'rgb(115, 74, 7)',
-    pointIconMarketplaceIconColor: 'rgb(172, 58, 173)',
-    pointIconMarketplaceTextColor: 'rgb(172, 58, 173)',
-    pointIconMastIconColor: 'rgb(85, 85, 85)',
-    pointIconMastTextColor: 'rgb(85, 85, 85)',
-    pointIconMemorialIconColor: 'rgb(115, 74, 7)',
-    pointIconMemorialTextColor: 'rgb(115, 74, 7)',
-    pointIconMiniatureGolfIconColor: 'rgb(13, 134, 22)',
-    pointIconMiniatureGolfTextColor: 'rgb(13, 134, 22)',
-    pointIconMonumentIconColor: 'rgb(115, 74, 7)',
-    pointIconMonumentTextColor: 'rgb(115, 74, 7)',
-    pointIconMotelIconColor: 'rgb(0, 146, 219)',
-    pointIconMotelTextColor: 'rgb(0, 146, 219)',
-    pointIconMotorcycleParkingIconColor: 'rgb(0, 146, 219)',
-    pointIconMotorcycleParkingTextColor: 'rgb(0, 146, 219)',
-    pointIconMuseumIconColor: 'rgb(115, 74, 7)',
-    pointIconMuseumTextColor: 'rgb(115, 74, 7)',
-    pointIconNightclubTextColor: 'rgb(115, 74, 7)',
-    pointIconNigthclubIconColor: 'rgb(115, 74, 7)',
-    pointIconNursingHomeIconColor: 'rgb(76, 76, 0)',
-    pointIconNursingHomeTextColor: 'rgb(76, 76, 0)',
-    pointIconObeliskIconColor: 'rgb(115, 74, 7)',
-    pointIconObeliskTextColor: 'rgb(115, 74, 7)',
-    pointIconOutdoorSeatingIconColor: 'rgb(13, 134, 22)',
-    pointIconOutdoorSeatingTextColor: 'rgb(13, 134, 22)',
-    pointIconParkingEntranceIconColor: 'rgb(0, 146, 219)',
-    pointIconParkingEntranceTextColor: 'rgb(0, 146, 219)',
-    pointIconParkingIconColor: 'rgb(0, 146, 219)',
-    pointIconParkingTextColor: 'rgb(0, 146, 219)',
-    pointIconPeakIconColor: 'rgb(209, 144, 85)',
-    pointIconPeakTextColor: 'rgb(209, 144, 85)',
-    pointIconPharmacieIconColor: 'rgb(191, 0, 0)',
-    pointIconPharmacieTextColor: 'rgb(191, 0, 0)',
-    pointIconPicnicSiteIconColor: 'rgb(102, 102, 102)',
-    pointIconPicnicSiteTextColor: 'rgb(102, 102, 102)',
-    pointIconPicnicTableIconColor: 'rgb(102, 102, 102)',
-    pointIconPicnicTableTextColor: 'rgb(102, 102, 102)',
-    pointIconPlaceOfWorkshipIconColor: 'rgb(0, 0, 0)',
-    pointIconPlaceOfWorkshipTextColor: 'rgb(0, 0, 0)',
-    pointIconPlaygroundIconColor: 'rgb(13, 134, 22)',
-    pointIconPlaygroundTextColor: 'rgb(13, 134, 22)',
-    pointIconPoliceIconColor: 'rgb(115, 74, 7)',
-    pointIconPoliceTextColor: 'rgb(115, 74, 7)',
-    pointIconPostBoxIconColor: 'rgb(115, 74, 7)',
-    pointIconPostBoxTextColor: 'rgb(115, 74, 7)',
-    pointIconPostOfficeIconColor: 'rgb(115, 74, 7)',
-    pointIconPostOfficeTextColor: 'rgb(115, 74, 7)',
-    pointIconPrisonIconColor: 'rgb(115, 74, 7)',
-    pointIconPrisonTextColor: 'rgb(115, 74, 7)',
-    pointIconPubIconColor: 'rgb(199, 116, 0)',
-    pointIconPubTextColor: 'rgb(199, 116, 0)',
-    pointIconPublicBathIconColor: 'rgb(115, 74, 7)',
-    pointIconPublicBathTextColor: 'rgb(115, 74, 7)',
-    pointIconPublicBookCaseTextColor: 'rgb(115, 74, 7)',
-    pointIconPublicBookcaseIconColor: 'rgb(115, 74, 7)',
-    pointIconRecyclingIconColor: 'rgb(115, 74, 7)',
-    pointIconRecyclingTextColor: 'rgb(115, 74, 7)',
-    pointIconRestaurantIconColor: 'rgb(199, 116, 0)',
-    pointIconRestaurantTextColor: 'rgb(199, 116, 0)',
-    pointIconSaddleIconColor: 'rgb(209, 144, 85)',
-    pointIconSaddleTextColor: 'rgb(209, 144, 85)',
-    pointIconSaunaIconColor: 'rgb(13, 134, 22)',
-    pointIconSaunaTextColor: 'rgb(13, 134, 22)',
-    pointIconShelterIconColor: 'rgb(102, 102, 102)',
-    pointIconShelterTextColor: 'rgb(102, 102, 102)',
-    pointIconShowerIconColor: 'rgb(115, 74, 7)',
-    pointIconShowerTextColor: 'rgb(115, 74, 7)',
-    pointIconSiloIconColor: 'rgb(85, 85, 85)',
-    pointIconSiloTextColor: 'rgb(85, 85, 85)',
-    pointIconSlipwayIconColor: 'rgb(0, 146, 219)',
-    pointIconSlipwayTextColor: 'rgb(0, 146, 219)',
-    pointIconSocialFacilityIconColor: 'rgb(115, 74, 7)',
-    pointIconSocialFacilityTextColor: 'rgb(115, 74, 7)',
-    pointIconSpringIconColor: 'rgb(0, 146, 219)',
-    pointIconSpringTextColor: 'rgb(0, 146, 219)',
-    pointIconStationIconColor: 'rgb(122, 129, 177)',
-    pointIconStationTextColor: 'rgb(122, 129, 177)',
-    pointIconStorageTankIconColor: 'rgb(85, 85, 85)',
-    pointIconStorageTankTextColor: 'rgb(85, 85, 85)',
-    pointIconSubwayEntranceIconColor: 'rgb(0, 146, 219)',
-    pointIconSubwayEntranceTextColor: 'rgb(0, 146, 219)',
-    pointIconSwimmingAreaIconColor: 'rgb(13, 134, 22)',
-    pointIconSwimmingAreaTextColor: 'rgb(13, 134, 22)',
-    pointIconTaxiIconColor: 'rgb(0, 146, 219)',
-    pointIconTaxiTextColor: 'rgb(0, 146, 219)',
-    pointIconTelephoneIconColor: 'rgb(115, 74, 7)',
-    pointIconTelephoneTextColor: 'rgb(115, 74, 7)',
-    pointIconTelescopeIconColor: 'rgb(85, 85, 85)',
-    pointIconTelescopeTextColor: 'rgb(85, 85, 85)',
-    pointIconTheatreIconColor: 'rgb(115, 74, 7)',
-    pointIconTheatreTextColor: 'rgb(115, 74, 7)',
-    pointIconToiletsIconColor: 'rgb(115, 74, 7)',
-    pointIconToiletsTextColor: 'rgb(115, 74, 7)',
-    pointIconTowerIconColor: 'rgb(85, 85, 85)',
-    pointIconTowerTextColor: 'rgb(85, 85, 85)',
-    pointIconTowmhallTextColor: 'rgb(115, 74, 7)',
-    pointIconTownhallIconColor: 'rgb(115, 74, 7)',
-    pointIconTramStopIconColor: 'rgb(122, 129, 177)',
-    pointIconTramStopTextColor: 'rgb(122, 129, 177)',
-    pointIconVehicleInspectionIconColor: 'rgb(115, 74, 7)',
-    pointIconVehicleInspectionTextColor: 'rgb(115, 74, 7)',
-    pointIconVeterinaryIconColor: 'rgb(191, 0, 0)',
-    pointIconVeterinaryTextColor: 'rgb(191, 0, 0)',
-    pointIconViewpointIconColor: 'rgb(115, 74, 7)',
-    pointIconViewpointTextColor: 'rgb(115, 74, 7)',
-    pointIconVolcanoIconColor: 'rgb(212, 0, 0)',
-    pointIconVolcanoTextColor: 'rgb(212, 0, 0)',
-    pointIconWasteBasketIconColor: 'rgb(102, 102, 102)',
-    pointIconWasteBasketTextColor: 'rgb(102, 102, 102)',
-    pointIconWasteDisposalIconColor: 'rgb(115, 74, 7)',
-    pointIconWasteDisposalTextColor: 'rgb(115, 74, 7)',
-    pointIconWaterParkIconColor: 'rgb(13, 134, 22)',
-    pointIconWaterParkTextColor: 'rgb(13, 134, 22)',
-    pointIconWaterTowerIconColor: 'rgb(85, 85, 85)',
-    pointIconWaterTowerTextColor: 'rgb(85, 85, 85)',
-    pointIconWaterfallIconColor: 'rgb(0, 146, 219)',
-    pointIconWaterfallTextColor: 'rgb(0, 146, 219)',
-    pointIconWayShrineIconColor: 'rgb(85, 85, 85)',
-    pointIconWaysideCrossIconColor: 'rgb(85, 85, 85)',
-    pointIconWaysideCrossTextColor: 'rgb(85, 85, 85)',
-    pointIconWaysideShrineTextColor: 'rgb(85, 85, 85)',
-    pointIconWeirIconColor: 'rgb(0, 146, 219)',
-    pointIconWeirTextColor: 'rgb(0, 146, 219)',
-    pointIconWildernessHutIconColor: 'rgb(0, 146, 219)',
-    pointIconWildernessHutTextColor: 'rgb(0, 146, 219)',
-    pointIconWindmillIconColor: 'rgb(85, 85, 85)',
-    pointIconWindmillTextColor: 'rgb(85, 85, 85)',
     pointLabelCityFilterOneLabelColor: 'rgb(100, 100, 100)',
     pointLabelCityFilterTwoLabelColor: 'rgb(50, 50, 50)',
     pointLabelCityLabelColor: 'rgb(25, 25, 25)',
@@ -606,6 +330,42 @@ export default {
     waterwayLabelTextHaloColor: 'rgba(255, 255, 255, 0.8)',
     waterwayLineColor: 'rgb(170, 211, 223)',
     waterwayTunnelColor: 'rgb(216,237,250)',
+    pointIconShopIconColor: 'rgb(172, 57, 172)',
+    pointIconShopTextColor: 'rgb(172, 57, 172)',
+    pointIconManMadeIconColor: 'rgb(85, 85, 85)',
+    pointIconManMadeTextColor: 'rgb(85, 85, 85)',
+    pointIconLeisureColor: 'rgb(13, 134, 22)',
+    pointIconLeisureTextColor: 'rgb(13, 134, 22)',
+    pointIconAmenityIconColor: 'rgb(199, 116, 0)',
+    aerodromeTextColor: 'rgb(199, 116, 0)',
+    pointIconHistoricIconColor: 'rgb(115, 74, 7)',
+    pointIconHistoricTextColor: 'rgb(115, 74, 7)',
+    pointIconRailwayIconColor: 'rgb(0, 146, 218)',
+    pointIconRailwayTextColor: 'rgb(0, 146, 218)',
+    pointIconTourismIconColor: 'rgb(0, 146, 218)',
+    pointIconTourismTextColor: 'rgb(0, 146, 218)',
+    pointIconWaterIconColor: 'rgb(0, 146, 219)',
+    pointIconWaterTextColor: 'rgb(0, 146, 219)',
+
+    // Icon colors
+    amenityIconColor: 'rgb(115, 74, 7)',
+    historyIconColor: 'rgb(115, 74, 7)',
+    transportationIconColor: 'rgb(0, 146, 218)',
+    accommodationIconColor: 'rgb(0, 146, 218)',
+    shopIconColor: 'rgb(172, 57, 172)',
+    healthIconColor: 'rgb(191, 0, 0)',
+    gastronomyIconColor: 'rgb(199, 116, 0)',
+    religionIconColor: 'rgb(0, 0, 0)',
+    powerIconColor: 'rgb(0, 0, 0)',
+    placeIconColor: 'rgb(0, 0, 0)',
+    waterIconColor: 'rgb(0, 146, 219)',
+    officeIconColor: 'rgb(72, 99, 160)',
+    manMadeIconColor: 'rgb(85, 85, 85)',
+    leisureIconColor: 'rgb(13, 134, 22)',
+    otherTransportIconColor: 'rgb(132, 97, 196)',
+    otherIconColor: 'rgb(124, 124, 124)',
+
+    // Line widths
     highwayMotorwayLineWidth: [5, 0.5, 16, 7],
     highwayTrunkLineWidth: [5, 0.5, 16, 6],
     highwayPrimaryLineWidth: [5, 0.5, 16, 6],
@@ -636,4 +396,6 @@ export default {
     railwayTramLineWidth: [5, 0.5, 16, 3],
     railwayDisusedLineWidth: [5, 0.5, 16, 1],
     highwayOutlineWidth: [5, 0.5, 16, 1, 22, 1],
+    aerodromeIconColor: undefined
+
 };
diff --git a/basemap/utils/utils.js b/basemap/utils/utils.js
index c05aaaa1..6f4c2707 100644
--- a/basemap/utils/utils.js
+++ b/basemap/utils/utils.js
@@ -61,12 +61,12 @@ export function asLayoutProperty(directives = [], 
baseLayout = {}) {
             ...textFont(directives),
             ...textField(directives),
             ...textSize(directives),
+            ...textSizeStops(directives),
             ...textMaxWidth(directives),
             ...iconImage(directives),
             ...lineSortKey(directives),
             ...fillSortKey(directives),
             ...symbolSortKey(directives),
-            ...labelSize(directives),
         },
         baseLayout,
     )
@@ -83,10 +83,10 @@ export function asPaintProperty(directives = [], basePaint 
= {}) {
             ...fillOutlineColor(directives),
             ...lineColor(directives),
             ...lineWidth(directives),
+            ...lineWidthStops(directives),
             ...lineGapWidth(directives),
-            ...roadWidth(directives),
-            ...roadGapWidth(directives),
-            ...labelColor(directives),
+            ...lineGapWidthStops(directives),
+            ...textColor(directives),
         },
         basePaint,
     )
@@ -124,10 +124,6 @@ function textField(directives) {
     return mergeDirectives(directives, 'text-field', null)
 }
 
-function textSize(directives) {
-    return mergeDirectives(directives, 'text-size', 12)
-}
-
 function textMaxWidth(directives) {
     return mergeDirectives(directives, 'text-max-width', 4)
 }
@@ -176,6 +172,10 @@ function symbolSortKey(directives) {
     return mergeDirectives(directives, 'symbol-sort-key', 0)
 }
 
+function textSize(directives) {
+    return mergeDirectives(directives, 'text-size', 0)
+}
+
 function mergeDirectives(directives, property, value) {
     let cases = directives.flatMap((rule) => {
         if (rule[property]) {
@@ -192,23 +192,19 @@ function mergeDirectives(directives, property, value) {
     }
 }
 
-function roadWidth(directives) {
-    return mergeRoadDirective(directives, 'line-width-stops', 'line-width', 1)
-}
-
-function roadGapWidth(directives) {
-    return mergeRoadDirective(directives, 'line-gap-width-stops', 
'line-gap-width', 1)
+function lineWidthStops(directives) {
+    return interpolateStops(directives, 'line-width-stops', 'line-width', 1)
 }
 
-function labelColor(directives) {
-    return mergeInterpolatedColorDirective(directives, 'label-color', 
'text-color', 6, 8, 'rgb(0, 0, 0)')
+function lineGapWidthStops(directives) {
+    return interpolateStops(directives, 'line-gap-width-stops', 
'line-gap-width', 1)
 }
 
-function labelSize(directives) {
-    return mergeInterpolatedNumberDirective(directives, 'label-size', 
'text-size', 6, 8, 4, 14)
+function textSizeStops(directives) {
+    return interpolateStops(directives, 'text-size-stops', 'text-size', 1)
 }
 
-function mergeRoadDirective(directives, property, alias, value) {
+function interpolateStops(directives, property, alias, value) {
     if (directives.filter((directive) => directive[property]).length == 0) {
         return {};
     }
@@ -236,78 +232,13 @@ function mergeRoadDirective(directives, property, alias, 
value) {
     }
 }
 
-function mergeInterpolatedDirective(directives, property, alias, value) {
-    let cases = directives.flatMap((rule) => {
-        if (rule[property]) {
-            return [rule['filter'], rule[property]]
-        } else {
-            return []
-        }
-    })
-    if (cases.length == 0) {
-        return {}
-    }
-    return {
-        [alias]: [
-            'interpolate',
-            ['exponential', 1.2],
-            ['zoom'],
-            5,
-            0.2,
-            20,
-            ['case', ...cases, value],
-        ],
-    }
-}
-
-function mergeInterpolatedColorDirective(directives, property, alias, 
startZoom, endZoom, fallback) {
-    const cases = directives.filter((rule) => rule[property]).map((rule) => {
-        const propertyValue = rule[property]
-        if (propertyValue instanceof Array) {
-            return [rule['filter'], propertyValue]
-        } else {
-            return [rule['filter'], [propertyValue, propertyValue]]
-        }
-    })
-    if (cases.length == 0) {
-        return {}
-    }
-    return {
-        [alias]: [
-            'interpolate',
-            ['linear'],
-            ['zoom'],
-            startZoom,
-            ['case', ...(cases.flatMap((c) => ([c[0], c[1][0]]))), fallback],
-            endZoom,
-            ['case', ...(cases.flatMap((c) => ([c[0], c[1][1]]))), fallback],
-        ],
-    }
-}
-
-function mergeInterpolatedNumberDirective(directives, property, alias, 
startZoom, endZoom, offset, fallback) {
-    let cases = []
-    directives.forEach((rule) => {
-        if (rule[property]) {
-            cases.push([rule['filter'], rule[property]])
-        }
-    })
-    if (cases.length == 0) {
-        return {}
-    }
-    return {
-        [alias]: [
-            'interpolate',
-            ['linear'],
-            ['zoom'],
-            startZoom,
-            ['case', ...(cases.flatMap((c) => ([c[0], c[1]]))), fallback],
-            endZoom,
-            ['case', ...(cases.flatMap((c) => ([c[0], c[1] + offset]))), 
fallback],
-        ],
-    }
-}
-
+/**
+ * Group an array of objects by a given key.
+ *
+ * @param xs
+ * @param key
+ * @returns {*}
+ */
 function groupBy(xs, key) {
     return xs.reduce(function (rv, x) {
         ;(rv[x[key]] = rv[x[key]] || []).push(x)

Reply via email to