# Various parts to be included later on _parts: srid: &srid "3857" srs: &srs "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" world: &world - -180 - -85.05112877980659 - 180 - 85.05112877980659 # Extents are used for tilemill, and don't actually make it to the generated XML extents: &extents extent: *world srs-name: *srid srs: *srs osm2pgsql: &osm2pgsql type: "postgis" dbname: "gis" key_field: "" geometry_field: "way" srid: *srid extent: "-20037508,-20037508,20037508,20037508" scale: 1 metatile: 2 name: OpenStreetMap Carto description: A general-purpose OpenStreetMap mapnik style, in CartoCSS bounds: *world center: - 0 - 0 - 4 format: png interactivity: false minzoom: 0 maxzoom: 22 srs: *srs Stylesheet: - style/style.mss - style/fonts.mss - style/shapefiles.mss - style/landcover.mss - style/water.mss - style/water-features.mss - style/road-colors-generated.mss - style/roads.mss - style/power.mss - style/placenames.mss - style/buildings.mss - style/stations.mss - style/amenity-points.mss - style/ferry-routes.mss - style/aerialways.mss - style/admin.mss - style/addressing.mss - style/golf.mss - style/tourism.mss Layer: - id: landcover-low-zoom geometry: polygon <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, way_pixels, COALESCE(wetland, landuse, "natural") AS feature FROM (SELECT way, ('landuse_' || (CASE WHEN landuse IN ('forest', 'farmland', 'residential', 'commercial', 'retail', 'industrial', 'meadow', 'grass', 'village_green', 'vineyard', 'orchard') THEN landuse END)) AS landuse, ('natural_' || (CASE WHEN "natural" IN ('wood', 'sand', 'scree', 'shingle', 'bare_rock', 'heath', 'grassland', 'scrub') THEN "natural" END)) AS "natural", ('wetland_' || (CASE WHEN "natural" IN ('wetland', 'mud') THEN (CASE WHEN "natural" IN ('mud') THEN "natural" ELSE tags->'wetland' END) END)) AS wetland, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels, way_area FROM planet_osm_polygon WHERE (landuse IN ('forest', 'farmland', 'residential', 'commercial', 'retail', 'industrial', 'meadow', 'grass', 'village_green', 'vineyard', 'orchard') OR "natural" IN ('wood', 'wetland', 'mud', 'sand', 'scree', 'shingle', 'bare_rock', 'heath', 'grassland', 'scrub')) AND way_area > 0.01*!pixel_width!::real*!pixel_height!::real AND building IS NULL ) AS features ORDER BY way_area DESC, feature ) AS landcover_low_zoom properties: cache-features: true minzoom: 5 maxzoom: 9 - id: landcover geometry: polygon <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, name, religion, way_pixels, is_building, COALESCE(aeroway, golf, amenity, wetland, power, landuse, leisure, man_made, "natural", shop, tourism, highway, railway) AS feature FROM (SELECT way, COALESCE(name, '') AS name, ('aeroway_' || (CASE WHEN aeroway IN ('apron', 'aerodrome') THEN aeroway END)) AS aeroway, ('golf_' || (CASE WHEN (tags->'golf') IN ('rough', 'fairway', 'driving_range', 'water_hazard', 'green', 'bunker', 'tee') THEN tags->'golf' ELSE NULL END)) AS golf, ('amenity_' || (CASE WHEN amenity IN ('bicycle_parking', 'motorcycle_parking', 'university', 'college', 'school', 'taxi', 'hospital', 'kindergarten', 'grave_yard', 'prison', 'place_of_worship', 'clinic', 'ferry_terminal', 'marketplace', 'community_centre', 'social_facility', 'arts_centre', 'parking_space', 'bus_station', 'fire_station', 'police') OR amenity IN ('parking') AND (tags->'parking' NOT IN ('underground') OR (tags->'parking') IS NULL) THEN amenity END)) AS amenity, ('landuse_' || (CASE WHEN landuse IN ('quarry', 'vineyard', 'orchard', 'cemetery', 'residential', 'garages', 'meadow', 'grass', 'allotments', 'forest', 'farmyard', 'farmland', 'greenhouse_horticulture', 'recreation_ground', 'village_green', 'retail', 'industrial', 'railway', 'commercial', 'brownfield', 'landfill', 'salt_pond', 'construction', 'plant_nursery', 'religious', 'flowerbed') THEN landuse END)) AS landuse, ('shop_' || (CASE WHEN shop IN ('mall') AND (tags->'location' NOT IN ('underground') OR (tags->'location') IS NULL) THEN shop END)) AS shop, ('leisure_' || (CASE WHEN leisure IN ('swimming_pool', 'playground', 'park', 'garden', 'golf_course', 'miniature_golf', 'sports_centre', 'stadium', 'pitch', 'ice_rink', 'track', 'dog_park', 'fitness_station', 'water_park') THEN leisure END)) AS leisure, ('man_made_' || (CASE WHEN man_made IN ('works', 'wastewater_plant', 'water_works') THEN man_made END)) AS man_made, ('natural_' || (CASE WHEN "natural" IN ('beach', 'shoal', 'heath', 'grassland', 'wood', 'sand', 'scree', 'shingle', 'bare_rock', 'scrub') THEN "natural" END)) AS "natural", ('wetland_' || (CASE WHEN "natural" IN ('wetland', 'mud') THEN (CASE WHEN "natural" = 'mud' THEN "natural" ELSE tags->'wetland' END) END)) AS wetland, ('power_' || (CASE WHEN power IN ('plant', 'substation', 'generator') THEN power END)) AS power, ('tourism_' || (CASE WHEN tourism IN ('camp_site', 'caravan_site', 'picnic_site') THEN tourism END)) AS tourism, ('highway_' || (CASE WHEN highway IN ('services', 'rest_area') THEN highway END)) AS highway, ('railway_' || (CASE WHEN railway = 'station' THEN railway END)) AS railway, CASE WHEN religion IN ('christian', 'jewish', 'muslim') THEN religion ELSE 'INT-generic'::text END AS religion, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels, CASE WHEN building = 'no' OR building IS NULL THEN 'no' ELSE 'yes' END AS is_building, way_area FROM planet_osm_polygon WHERE (landuse IS NOT NULL OR leisure IS NOT NULL OR aeroway IN ('apron', 'aerodrome') OR (tags->'golf') IS NOT NULL OR amenity IN ('parking', 'bicycle_parking', 'motorcycle_parking', 'taxi', 'university', 'college', 'school', 'hospital', 'kindergarten', 'grave_yard', 'place_of_worship', 'prison', 'clinic', 'ferry_terminal', 'marketplace', 'community_centre', 'social_facility', 'arts_centre', 'parking_space', 'bus_station', 'fire_station', 'police') OR man_made IN ('works', 'wastewater_plant','water_works') OR "natural" IN ('beach', 'shoal', 'heath', 'mud', 'wetland', 'grassland', 'wood', 'sand', 'scree', 'shingle', 'bare_rock', 'scrub') OR power IN ('plant', 'substation', 'generator') OR shop IN ('mall') OR tourism IN ('camp_site', 'caravan_site', 'picnic_site') OR highway IN ('services', 'rest_area') OR railway = 'station') AND way_area > 1*!pixel_width!::real*!pixel_height!::real ) AS landcover ORDER BY way_area DESC, feature ) AS features properties: cache-features: true minzoom: 10 - id: landcover-line geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way FROM planet_osm_line WHERE man_made = 'cutline' ) AS landcover_line properties: minzoom: 14 - id: icesheet-poly geometry: polygon <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way FROM icesheet_polygons ) AS icesheet_polygons properties: minzoom: 5 - id: water-lines-low-zoom geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, waterway, CASE WHEN tags->'intermittent' IN ('yes') OR tags->'seasonal' IN ('yes', 'spring', 'summer', 'autumn', 'winter', 'wet_season', 'dry_season') THEN 'yes' ELSE 'no' END AS int_intermittent FROM planet_osm_line WHERE waterway = 'river' ) AS water_lines_low_zoom properties: minzoom: 8 maxzoom: 11 - id: water-lines geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, waterway, name, CASE WHEN tags->'intermittent' IN ('yes') OR tags->'seasonal' IN ('yes', 'spring', 'summer', 'autumn', 'winter', 'wet_season', 'dry_season') THEN 'yes' ELSE 'no' END AS int_intermittent, CASE WHEN tunnel IN ('yes', 'culvert') OR waterway = 'canal' AND tunnel = 'flooded' THEN 'yes' ELSE 'no' END AS int_tunnel, 'no' AS bridge FROM planet_osm_line WHERE waterway IN ('river', 'canal', 'stream', 'drain', 'ditch') AND (bridge IS NULL OR bridge NOT IN ('yes', 'aqueduct')) ORDER BY COALESCE(layer,0) ) AS water_lines properties: minzoom: 12 - id: water-areas geometry: polygon <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, "natural", waterway, landuse, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels, CASE WHEN tags->'intermittent' IN ('yes') OR tags->'seasonal' IN ('yes', 'spring', 'summer', 'autumn', 'winter', 'wet_season', 'dry_season') OR tags->'basin' IN ('detention', 'infiltration') THEN 'yes' ELSE 'no' END AS int_intermittent FROM planet_osm_polygon WHERE (waterway IN ('dock', 'riverbank') OR landuse IN ('reservoir', 'basin') OR "natural" IN ('water', 'glacier')) AND building IS NULL AND way_area > 1*!pixel_width!::real*!pixel_height!::real ORDER BY COALESCE(layer,0), way_area DESC ) AS water_areas properties: cache-features: true minzoom: 0 - id: ocean-lz geometry: polygon <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way FROM simplified_water_polygons ) AS ocean_lz properties: maxzoom: 9 - id: ocean geometry: polygon <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way FROM water_polygons ) AS ocean properties: minzoom: 10 - id: landcover-area-symbols geometry: polygon <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, surface, COALESCE(CASE WHEN landuse = 'forest' THEN 'wood' END, "natural") AS "natural", CASE WHEN "natural" = 'mud' THEN "natural" ELSE CASE WHEN ("natural" = 'wetland' AND NOT tags ? 'wetland') THEN 'wetland' ELSE CASE WHEN ("natural" = 'wetland') THEN tags->'wetland' END END END AS int_wetland, landuse, tags->'leaf_type' AS leaf_type, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels FROM planet_osm_polygon WHERE ("natural" IN ('mud', 'wetland', 'wood', 'beach', 'shoal', 'reef', 'scrub') OR landuse IN ('forest', 'salt_pond')) AND building IS NULL AND way_area > 1*!pixel_width!::real*!pixel_height!::real ORDER BY COALESCE(layer,0), way_area DESC ) AS landcover_area_symbols properties: cache-features: true minzoom: 9 - id: icesheet-outlines geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, ice_edge FROM icesheet_outlines ) AS icesheet_outlines properties: minzoom: 5 - id: marinas-area geometry: polygon <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way FROM planet_osm_polygon WHERE leisure = 'marina' ) AS marinas_area properties: minzoom: 14 - id: water-barriers-line geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, waterway FROM planet_osm_line WHERE waterway IN ('dam', 'weir', 'lock_gate') ) AS water_barriers_line properties: minzoom: 13 - id: water-barriers-poly geometry: polygon <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, waterway FROM planet_osm_polygon WHERE waterway IN ('dam', 'weir', 'lock_gate') ) AS water_barriers_poly properties: minzoom: 13 - id: piers-poly geometry: polygon <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, man_made FROM planet_osm_polygon WHERE man_made IN ('pier', 'breakwater', 'groyne') ORDER BY CASE WHEN man_made = 'pier' THEN 3 WHEN man_made = 'groyne' THEN 2 WHEN man_made = 'breakwater' THEN 1 ELSE 0 END ASC ) AS piers_poly properties: minzoom: 12 - id: piers-line geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, man_made FROM planet_osm_line WHERE man_made IN ('pier', 'breakwater', 'groyne') ORDER BY CASE WHEN man_made = 'pier' THEN 3 WHEN man_made = 'groyne' THEN 2 WHEN man_made = 'breakwater' THEN 1 ELSE 0 END ASC ) AS piers_line properties: minzoom: 12 - id: water-barriers-point geometry: point <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, waterway FROM planet_osm_point WHERE waterway IN ('dam', 'weir', 'lock_gate') ) AS water_barriers_points properties: minzoom: 17 - id: bridge geometry: polygon <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, man_made FROM planet_osm_polygon WHERE man_made = 'bridge' ) AS bridge properties: minzoom: 12 - id: buildings geometry: polygon <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, building, amenity, aeroway, aerialway, tags->'public_transport' as public_transport FROM planet_osm_polygon WHERE building IS NOT NULL AND building != 'no' AND way_area > 1*!pixel_width!::real*!pixel_height!::real ORDER BY COALESCE(layer,0), way_area DESC ) AS buildings properties: minzoom: 14 - id: tunnels geometry: linestring <<: *extents Datasource: <<: *osm2pgsql # This query is quite large, having to deal with both roads, railways. To # allow for ways that are both railways and roads, a UNION ALL is present. table: |- (SELECT way, (CASE WHEN feature IN ('highway_motorway_link', 'highway_trunk_link', 'highway_primary_link', 'highway_secondary_link', 'highway_tertiary_link') THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature, horse, foot, bicycle, tracktype, int_surface, access, construction, service, link, layernotnull FROM ( -- subselect that contains both roads and rail SELECT way, 'highway_' || highway AS feature, --only motorway to tertiary links are accepted later on horse, foot, bicycle, tracktype, CASE WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass', 'grass_paver', 'gravel', 'ground', 'mud', 'pebblestone', 'salt', 'sand', 'woodchips', 'clay', 'ice', 'snow') THEN 'unpaved' WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'cobblestone:flattened', 'sett', 'concrete', 'concrete:lanes', 'concrete:plates', 'paving_stones', 'metal', 'wood', 'unhewn_cobblestone') THEN 'paved' END AS int_surface, CASE WHEN access IN ('destination') THEN 'destination'::text WHEN access IN ('no', 'private') THEN 'no'::text END AS access, construction, CASE WHEN service IN ('parking_aisle', 'drive-through', 'driveway') THEN 'INT-minor'::text ELSE 'INT-normal'::text END AS service, CASE WHEN highway IN ('motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link') THEN 'yes' ELSE 'no' END AS link, COALESCE(layer,0) AS layernotnull, z_order FROM planet_osm_line WHERE (tunnel = 'yes' OR tunnel = 'building_passage' OR covered = 'yes') AND highway IS NOT NULL -- end of road select UNION ALL SELECT way, 'railway_' || (CASE WHEN railway = 'preserved' AND service IN ('spur', 'siding', 'yard') THEN 'INT-preserved-ssy'::text WHEN (railway = 'rail' AND service IN ('spur', 'siding', 'yard')) THEN 'INT-spur-siding-yard' WHEN (railway = 'tram' AND service IN ('spur', 'siding', 'yard')) THEN 'tram-service' ELSE railway END) AS feature, horse, foot, bicycle, tracktype, 'null', CASE WHEN access IN ('destination') THEN 'destination'::text WHEN access IN ('no', 'private') THEN 'no'::text END AS access, construction, CASE WHEN service IN ('parking_aisle', 'drive-through', 'driveway') THEN 'INT-minor'::text ELSE 'INT-normal'::text END AS service, 'no' AS link, COALESCE(layer,0) AS layernotnull, z_order FROM planet_osm_line WHERE (tunnel = 'yes' OR tunnel = 'building_passage' OR covered = 'yes') AND (railway NOT IN ('platform') AND railway IS NOT NULL) -- end of rail select ) AS features ORDER BY layernotnull, z_order, CASE WHEN substring(feature for 8) = 'railway_' THEN 2 ELSE 1 END, CASE WHEN feature IN ('railway_INT-preserved-ssy', 'railway_INT-spur-siding-yard', 'railway_tram-service') THEN 0 ELSE 1 END, CASE WHEN access IN ('no', 'private') THEN 0 WHEN access IN ('destination') THEN 1 ELSE 2 END, CASE WHEN int_surface IN ('unpaved') THEN 0 ELSE 1 END ) AS tunnels properties: cache-features: true group-by: layernotnull minzoom: 10 - id: landuse-overlay geometry: polygon <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, landuse, military, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels FROM planet_osm_polygon WHERE (landuse = 'military' OR military = 'danger_area') AND building IS NULL ) AS landuse_overlay properties: minzoom: 8 - id: barriers geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, COALESCE(historic, barrier) AS feature FROM (SELECT way, ('barrier_' || (CASE WHEN barrier IN ('chain', 'city_wall', 'ditch', 'fence', 'guard_rail', 'handrail', 'hedge', 'retaining_wall', 'wall') THEN barrier END)) AS barrier, ('historic_' || (CASE WHEN historic = 'citywalls' THEN historic END)) AS historic FROM (SELECT way, historic, barrier, waterway FROM planet_osm_polygon WHERE way && !bbox! UNION ALL SELECT way, historic, barrier, waterway FROM planet_osm_line WHERE way && !bbox! ) _ WHERE barrier IN ('chain', 'city_wall', 'ditch', 'fence', 'guard_rail', 'handrail', 'hedge', 'retaining_wall', 'wall', 'jersey_barrier') OR historic = 'citywalls' AND (waterway IS NULL OR waterway NOT IN ('river', 'canal', 'stream', 'drain', 'ditch')) ) AS features ) AS line_barriers properties: minzoom: 15 - id: cliffs geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, "natural", man_made FROM planet_osm_line WHERE "natural" IN ('arete', 'cliff', 'ridge') OR man_made = 'embankment' ) AS cliffs properties: cache-features: true minzoom: 13 - id: ferry-routes geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way FROM planet_osm_line WHERE route = 'ferry' AND osm_id > 0 ) AS ferry_routes properties: minzoom: 8 - id: turning-circle-casing geometry: point <<: *extents Datasource: <<: *osm2pgsql table: &turning-circle_sql |- (SELECT DISTINCT ON (p.way) p.way AS way, p.highway AS type, l.highway AS int_tc_type, CASE WHEN l.service IN ('parking_aisle', 'drive-through', 'driveway') THEN 'INT-minor'::text ELSE 'INT-normal'::text END AS int_tc_service FROM planet_osm_point p JOIN planet_osm_line l ON ST_DWithin(p.way, l.way, 0.1) -- Assumes Mercator JOIN (VALUES ('trunk', 1), ('primary', 2), ('secondary', 3), ('tertiary', 4), ('unclassified', 5), ('residential', 6), ('living_street', 7), ('service', 8), ('track', 9) ) AS v (highway, prio) ON v.highway = l.highway WHERE p.highway IN ( 'turning_circle', 'turning_loop', 'mini_roundabout') AND l.way && !bbox! AND p.way && !bbox! -- Both conditions are necessary for good index usage, even with the DWithin above ORDER BY p.way, v.prio ) AS turning_circle_sql properties: minzoom: 15 - id: highway-area-casing geometry: polygon <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, COALESCE(( 'highway_' || (CASE WHEN highway IN ('pedestrian', 'footway', 'service', 'platform') THEN highway END)), ('railway_' || (CASE WHEN (railway IN ('platform') AND (tags->'location' NOT IN ('underground') OR (tags->'location') IS NULL) AND (tunnel NOT IN ('yes', 'building_passage') OR tunnel IS NULL)) THEN railway END)) ) AS feature FROM planet_osm_polygon WHERE highway IN ('pedestrian', 'footway', 'service', 'platform') OR (railway IN ('platform') AND (tags->'location' NOT IN ('underground') OR (tags->'location') IS NULL) AND (tunnel NOT IN ('yes', 'building_passage') OR tunnel IS NULL)) ORDER BY COALESCE(layer,0), way_area DESC ) AS highway_area_casing properties: minzoom: 14 - id: roads-casing geometry: linestring <<: *extents Datasource: <<: *osm2pgsql # This is one of the most complex layers, so it bears explaining in some detail # It is necessary to # - Have roads and railways in the same layer to get ordering right # - Return two linestrings for ways which are both a road and railway table: &roads_sql |- (SELECT way, (CASE WHEN feature IN ('highway_motorway_link', 'highway_trunk_link', 'highway_primary_link', 'highway_secondary_link', 'highway_tertiary_link') THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature, horse, foot, bicycle, tracktype, int_surface, access, construction, service, link, layernotnull FROM ( -- subselect that contains both roads and rail/aero SELECT way, ('highway_' || highway) AS feature, --only motorway to tertiary links are accepted later on horse, foot, bicycle, tracktype, CASE WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass', 'grass_paver', 'gravel', 'ground', 'mud', 'pebblestone', 'salt', 'sand', 'woodchips', 'clay', 'ice', 'snow') THEN 'unpaved' WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'cobblestone:flattened', 'sett', 'concrete', 'concrete:lanes', 'concrete:plates', 'paving_stones', 'metal', 'wood', 'unhewn_cobblestone') THEN 'paved' END AS int_surface, CASE WHEN access IN ('destination') THEN 'destination'::text WHEN access IN ('no', 'private') THEN 'no'::text END AS access, construction, CASE WHEN service IN ('parking_aisle', 'drive-through', 'driveway') OR leisure IN ('slipway') THEN 'INT-minor'::text ELSE 'INT-normal'::text END AS service, CASE WHEN highway IN ('motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link') THEN 'yes' ELSE 'no' END AS link, COALESCE(layer,0) AS layernotnull, osm_id, z_order FROM planet_osm_line WHERE (tunnel IS NULL OR NOT tunnel IN ('yes', 'building_passage')) AND (covered IS NULL OR NOT covered = 'yes') AND (bridge IS NULL OR NOT bridge IN ('yes', 'boardwalk', 'cantilever', 'covered', 'low_water_crossing', 'movable', 'trestle', 'viaduct')) AND highway IS NOT NULL -- end of road select UNION ALL SELECT way, ('railway_' || (CASE WHEN railway = 'preserved' AND service IN ('spur', 'siding', 'yard') THEN 'INT-preserved-ssy'::text WHEN (railway = 'rail' AND service IN ('spur', 'siding', 'yard')) THEN 'INT-spur-siding-yard' WHEN (railway = 'tram' AND service IN ('spur', 'siding', 'yard')) THEN 'tram-service' ELSE railway END)) AS feature, horse, foot, bicycle, tracktype, CASE WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass', 'grass_paver', 'gravel', 'ground', 'mud', 'pebblestone', 'salt', 'sand', 'woodchips', 'clay', 'ice', 'snow') THEN 'unpaved' WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'cobblestone:flattened', 'sett', 'concrete', 'concrete:lanes', 'concrete:plates', 'paving_stones', 'metal', 'wood', 'unhewn_cobblestone') THEN 'paved' ELSE NULL END AS int_surface, CASE WHEN access IN ('destination') THEN 'destination'::text WHEN access IN ('no', 'private') THEN 'no'::text END AS access, construction, CASE WHEN service IN ('parking_aisle', 'drive-through', 'driveway') OR leisure IN ('slipway') THEN 'INT-minor'::text ELSE 'INT-normal'::text END AS service, 'no' AS link, COALESCE(layer,0) AS layernotnull, osm_id, z_order FROM planet_osm_line WHERE (tunnel IS NULL OR NOT tunnel IN ('yes', 'building_passage')) AND (covered IS NULL OR NOT covered = 'yes' OR railway IN ('platform')) AND (bridge IS NULL OR NOT bridge IN ('yes', 'boardwalk', 'cantilever', 'covered', 'low_water_crossing', 'movable', 'trestle', 'viaduct')) AND (railway NOT IN ('platform') OR (tags->'location' NOT IN ('underground')) OR (tags->'location') IS NULL) AND railway IS NOT NULL -- end of rail select ) AS features ORDER BY layernotnull, z_order, CASE WHEN substring(feature for 8) = 'railway_' THEN 2 ELSE 1 END, CASE WHEN feature IN ('railway_INT-preserved-ssy', 'railway_INT-spur-siding-yard', 'railway_tram-service') THEN 0 ELSE 1 END, CASE WHEN access IN ('no', 'private') THEN 0 WHEN access IN ('destination') THEN 1 ELSE 2 END, CASE WHEN int_surface IN ('unpaved') THEN 0 ELSE 1 END, osm_id ) AS roads_sql properties: cache-features: true minzoom: 10 - id: highway-area-fill geometry: polygon <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, COALESCE( ('highway_' || (CASE WHEN highway IN ('pedestrian', 'footway', 'service', 'living_street', 'platform', 'services') THEN highway END)), ('railway_' || (CASE WHEN (railway IN ('platform') AND (tags->'location' NOT IN ('underground') OR (tags->'location') IS NULL) AND (tunnel NOT IN ('yes', 'building_passage') OR tunnel IS NULL)) THEN railway END)), (('aeroway_' || CASE WHEN aeroway IN ('runway', 'taxiway', 'helipad') THEN aeroway ELSE NULL END)) ) AS feature, CASE WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass', 'grass_paver', 'gravel', 'ground', 'mud', 'pebblestone', 'salt', 'sand', 'woodchips', 'clay', 'ice', 'snow') THEN 'unpaved' WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'cobblestone:flattened', 'sett', 'concrete', 'concrete:lanes', 'concrete:plates', 'paving_stones', 'metal', 'wood', 'unhewn_cobblestone') THEN 'paved' ELSE NULL END AS int_surface FROM planet_osm_polygon WHERE highway IN ('pedestrian', 'footway', 'service', 'living_street', 'platform', 'services') OR (railway IN ('platform') AND (tags->'location' NOT IN ('underground') OR (tags->'location') IS NULL) AND (tunnel NOT IN ('yes', 'building_passage') OR tunnel IS NULL)) OR aeroway IN ('runway', 'taxiway', 'helipad') ORDER BY COALESCE(layer,0), way_area desc ) AS highway_area_fill properties: minzoom: 14 - id: roads-fill geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: *roads_sql properties: cache-features: true minzoom: 10 - id: turning-circle-fill geometry: point <<: *extents Datasource: <<: *osm2pgsql table: *turning-circle_sql properties: minzoom: 15 - id: aerialways geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, aerialway, man_made, tags->'substance' AS substance FROM planet_osm_line WHERE aerialway IS NOT NULL OR (man_made = 'pipeline' AND tags-> 'location' IN ('overground', 'overhead', 'surface', 'outdoor') OR bridge IN ('yes', 'aqueduct', 'cantilever', 'covered', 'trestle', 'viaduct')) OR (man_made = 'goods_conveyor' AND (tags->'location' NOT IN ('underground') OR (tags->'location') IS NULL) AND (tunnel NOT IN ('yes') OR tunnel IS NULL)) ORDER BY CASE WHEN man_made IN ('goods_conveyor', 'pipeline') THEN 1 WHEN tags-> 'location' = 'overhead' THEN 2 WHEN bridge IS NOT NULL THEN 3 WHEN aerialway IS NOT NULL THEN 4 END ) AS aerialways properties: minzoom: 12 - id: roads-low-zoom geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, COALESCE( ('highway_' || (CASE WHEN highway IN ('motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link') THEN substr(highway, 0, length(highway)-4) ELSE highway end)), ('railway_' || (CASE WHEN (railway = 'rail' AND service IN ('spur', 'siding', 'yard')) THEN 'INT-spur-siding-yard' WHEN railway IN ('rail', 'tram', 'light_rail', 'funicular', 'narrow_gauge') THEN railway END)) ) AS feature, CASE WHEN tunnel = 'yes' OR tunnel = 'building_passage' OR covered = 'yes' THEN 'yes' ELSE 'no' END AS int_tunnel, CASE WHEN highway IN ('motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link') THEN 'yes' ELSE 'no' END AS link, CASE WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass', 'grass_paver', 'gravel', 'ground', 'mud', 'pebblestone', 'salt', 'sand', 'woodchips', 'clay', 'ice', 'snow') THEN 'unpaved' WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'cobblestone:flattened', 'sett', 'concrete', 'concrete:lanes', 'concrete:plates', 'paving_stones', 'metal', 'wood', 'unhewn_cobblestone') THEN 'paved' END AS int_surface FROM planet_osm_roads WHERE highway IS NOT NULL OR (railway IS NOT NULL AND railway != 'preserved' AND (service IS NULL OR service NOT IN ('spur', 'siding', 'yard'))) ORDER BY z_order ) AS roads_low_zoom properties: cache-features: true minzoom: 6 maxzoom: 9 - id: waterway-bridges geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, waterway, CASE WHEN tags->'intermittent' IN ('yes') OR tags->'seasonal' IN ('yes', 'spring', 'summer', 'autumn', 'winter', 'wet_season', 'dry_season') THEN 'yes' ELSE 'no' END AS int_intermittent, CASE WHEN tunnel IN ('yes', 'culvert') OR waterway = 'canal' AND tunnel = 'flooded' THEN 'yes' ELSE 'no' END AS int_tunnel, 'yes' AS bridge FROM planet_osm_line WHERE waterway IN ('river', 'canal', 'stream', 'drain', 'ditch') AND bridge IN ('yes', 'aqueduct') ORDER BY COALESCE(layer,0) ) AS waterway_bridges properties: minzoom: 12 - id: bridges geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, (CASE WHEN feature IN ('highway_motorway_link', 'highway_trunk_link', 'highway_primary_link', 'highway_secondary_link', 'highway_tertiary_link') THEN substr(feature, 0, length(feature)-4) ELSE feature END) AS feature, horse, foot, bicycle, tracktype, int_surface, access, construction, service, link, layernotnull FROM ( -- subselect that contains both roads and rail/aero SELECT way, 'highway_' || highway AS feature, --only motorway to tertiary links are accepted later on horse, foot, bicycle, tracktype, CASE WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass', 'grass_paver', 'gravel', 'ground', 'mud', 'pebblestone', 'salt', 'sand', 'woodchips', 'clay', 'ice', 'snow') THEN 'unpaved' WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'cobblestone:flattened', 'sett', 'concrete', 'concrete:lanes', 'concrete:plates', 'paving_stones', 'metal', 'wood', 'unhewn_cobblestone') THEN 'paved' END AS int_surface, CASE WHEN access IN ('destination') THEN 'destination'::text WHEN access IN ('no', 'private') THEN 'no'::text END AS access, construction, CASE WHEN service IN ('parking_aisle', 'drive-through', 'driveway') THEN 'INT-minor'::text ELSE 'INT-normal'::text END AS service, CASE WHEN highway IN ('motorway_link', 'trunk_link', 'primary_link', 'secondary_link', 'tertiary_link') THEN 'yes' ELSE 'no' END AS link, COALESCE(layer,0) AS layernotnull, z_order FROM planet_osm_line WHERE bridge IN ('yes', 'boardwalk', 'cantilever', 'covered', 'low_water_crossing', 'movable', 'trestle', 'viaduct') AND highway IS NOT NULL -- end of road select UNION ALL SELECT way, 'railway_' || (CASE WHEN railway = 'preserved' AND service IN ('spur', 'siding', 'yard') THEN 'INT-preserved-ssy'::text WHEN (railway = 'rail' AND service IN ('spur', 'siding', 'yard')) THEN 'INT-spur-siding-yard' WHEN (railway = 'tram' AND service IN ('spur', 'siding', 'yard')) THEN 'tram-service' ELSE railway END) AS feature, horse, foot, bicycle, tracktype, 'null', CASE WHEN access IN ('destination') THEN 'destination'::text WHEN access IN ('no', 'private') THEN 'no'::text END AS access, construction, CASE WHEN service IN ('parking_aisle', 'drive-through', 'driveway') THEN 'INT-minor'::text ELSE 'INT-normal'::text END AS service, 'no' AS link, COALESCE(layer,0) AS layernotnull, z_order FROM planet_osm_line WHERE bridge IN ('yes', 'boardwalk', 'cantilever', 'covered', 'low_water_crossing', 'movable', 'trestle', 'viaduct') AND railway IS NOT NULL -- end of rail select ) AS features ORDER BY layernotnull, z_order, CASE WHEN substring(feature for 8) = 'railway_' THEN 2 ELSE 1 END, CASE WHEN feature IN ('railway_INT-preserved-ssy', 'railway_INT-spur-siding-yard', 'railway_tram-service') THEN 0 ELSE 1 END, CASE WHEN access IN ('no', 'private') THEN 0 WHEN access IN ('destination') THEN 1 ELSE 2 END, CASE WHEN int_surface IN ('unpaved') THEN 0 ELSE 1 END ) AS bridges properties: cache-features: true group-by: layernotnull minzoom: 10 - id: guideways geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way FROM planet_osm_line WHERE highway = 'bus_guideway' ) AS guideways properties: minzoom: 11 - id: roller-coaster-gap-fill geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, CASE WHEN (tunnel = 'yes' OR tunnel = 'building_passage' OR covered = 'yes' OR tags->'indoor' = 'yes') THEN 'yes' ELSE 'no' END AS tunnel, CASE WHEN (bridge = 'yes' OR bridge = 'covered' OR bridge = 'viaduct') THEN 'yes' ELSE 'no' END AS bridge FROM planet_osm_line WHERE tags @> 'roller_coaster=>track' AND railway IS NULL ) AS roller_coaster properties: minzoom: 15 - id: roller-coaster geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, COALESCE(layer,0) AS layernotnull, CASE WHEN (tunnel = 'yes' OR tunnel = 'building_passage' OR covered = 'yes' OR tags->'indoor' = 'yes') THEN 'yes' ELSE 'no' END AS tunnel, CASE WHEN (bridge = 'yes' OR bridge = 'covered' OR bridge = 'viaduct') THEN 'yes' ELSE 'no' END AS bridge FROM planet_osm_line WHERE tags @> 'roller_coaster=>track' AND railway IS NULL ORDER BY layernotnull -- put bottom layered track first ) AS roller_coaster properties: group-by: layernotnull minzoom: 15 - id: entrances geometry: point <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, tags->'entrance' AS entrance, access FROM planet_osm_point WHERE (tags->'entrance') IS NOT NULL AND (tags->'indoor' = 'no' OR (tags->'indoor') IS NULL)) AS entrances properties: minzoom: 18 - id: aeroways geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, aeroway, bridge IN ('yes', 'boardwalk', 'cantilever', 'covered', 'low_water_crossing', 'movable', 'trestle', 'viaduct') AS bridge, CASE WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass', 'grass_paver', 'gravel', 'ground', 'mud', 'pebblestone', 'salt', 'sand', 'woodchips', 'clay', 'ice', 'snow') THEN 'unpaved' WHEN surface IN ('paved', 'asphalt', 'cobblestone', 'cobblestone:flattened', 'sett', 'concrete', 'concrete:lanes', 'concrete:plates', 'paving_stones', 'metal', 'wood', 'unhewn_cobblestone') THEN 'paved' ELSE NULL END AS int_surface FROM planet_osm_line WHERE aeroway IN ('runway', 'taxiway') ORDER BY bridge NULLS FIRST, CASE WHEN aeroway = 'runway' THEN 1 ELSE 0 END, CASE WHEN surface IN ('unpaved', 'compacted', 'dirt', 'earth', 'fine_gravel', 'grass', 'grass_paver', 'gravel', 'ground', 'mud', 'pebblestone', 'salt', 'sand', 'woodchips', 'clay', 'ice', 'snow') THEN 0 ELSE 1 END ) AS aeroways properties: cache-features: true minzoom: 11 - id: golf-line geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, tags->'golf' AS golf FROM planet_osm_line WHERE tags @> 'golf=>hole' ) AS golf_line properties: minzoom: 16 - id: necountries geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way FROM ne_110m_admin_0_boundary_lines_land ) AS necountries properties: minzoom: 1 maxzoom: 3 - id: admin-low-zoom geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, admin_level FROM planet_osm_roads WHERE boundary = 'administrative' AND admin_level IN ('0', '1', '2', '3', '4') AND osm_id < 0 ORDER BY admin_level DESC ) AS admin_low_zoom properties: minzoom: 4 maxzoom: 7 - id: admin-mid-zoom geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, admin_level FROM planet_osm_roads WHERE boundary = 'administrative' AND admin_level IN ('0', '1', '2', '3', '4', '5', '6', '7', '8') AND osm_id < 0 ORDER BY admin_level DESC ) AS admin_mid_zoom properties: minzoom: 8 maxzoom: 12 - id: admin-high-zoom geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, admin_level FROM planet_osm_roads WHERE boundary = 'administrative' AND admin_level IN ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10') AND osm_id < 0 ORDER BY admin_level::integer DESC -- With 10 as a valid value, we need to do a numeric ordering, not a text ordering ) AS admin_high_zoom properties: minzoom: 13 - id: power-minorline geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way FROM planet_osm_line WHERE power = 'minor_line' ) AS power_minorline properties: minzoom: 16 - id: power-line geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way FROM planet_osm_line WHERE power = 'line' ) AS power_line properties: minzoom: 14 - id: tourism-boundary geometry: polygon <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels, tourism FROM planet_osm_polygon WHERE tourism = 'theme_park' OR tourism = 'zoo' ) AS tourism_boundary properties: minzoom: 10 - id: protected-areas geometry: polygon <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, boundary, tags->'protect_class' AS protect_class, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels FROM planet_osm_polygon WHERE (boundary IN ('aboriginal_lands', 'national_park') OR leisure = 'nature_reserve' OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6'))) AND building IS NULL AND way_area > 1*!pixel_width!::real*!pixel_height!::real ) AS protected_areas properties: cache-features: true minzoom: 8 - id: trees geometry: polygon <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, "natural" FROM planet_osm_point WHERE "natural" = 'tree' UNION ALL SELECT way, "natural" FROM planet_osm_line WHERE "natural" = 'tree_row' ) AS trees properties: cache-features: true minzoom: 16 - id: country-names geometry: point <<: *extents Datasource: <<: *osm2pgsql # By splitting MPs into polygons, finding the largest in real area, and # finding a label point in 4326 we get better labeling points. 4326 does # distort the placement, but it does so in a way that results in better # results for most countries. table: |- (SELECT (SELECT ST_Transform(ST_PointOnSurface(geom),3857) FROM ST_Dump(ST_Transform(way,4326)) ORDER BY ST_Area(geom::geography) DESC LIMIT 1) AS way, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels, name FROM planet_osm_polygon WHERE way && !bbox! AND name IS NOT NULL AND boundary = 'administrative' AND admin_level = '2' AND way_area > 100*POW(!scale_denominator!*0.001*0.28,2) AND way_area < 4000000*POW(!scale_denominator!*0.001*0.28,2) AND osm_id < 0 ORDER BY way_area DESC ) AS country_names properties: minzoom: 2 - id: capital-names geometry: point <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, name, CASE WHEN (tags->'population' ~ '^[0-9]{1,8}$') THEN (tags->'population')::INTEGER ELSE 0 END as population, round(ascii(md5(osm_id::text)) / 55) AS dir -- base direction factor on geometry to be consistent across metatiles FROM planet_osm_point WHERE place IN ('city', 'town', 'village', 'hamlet') AND name IS NOT NULL AND tags @> 'capital=>yes' ORDER BY population DESC ) AS capital_names properties: minzoom: 3 maxzoom: 15 - id: state-names geometry: point <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT ST_PointOnSurface(way) AS way, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels, name, admin_level, ref FROM planet_osm_polygon WHERE ST_PointOnSurface(way) && !bbox! AND name IS NOT NULL AND boundary = 'administrative' AND admin_level = '4' AND way_area > 3000*POW(!scale_denominator!*0.001*0.28,2) AND way_area < 4000000*POW(!scale_denominator!*0.001*0.28,2) AND osm_id < 0 ORDER BY way_area DESC ) AS state_names properties: minzoom: 4 - id: placenames-medium geometry: point <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, name, score, CASE WHEN (place = 'city') THEN 1 ELSE 2 END as category, round(ascii(md5(osm_id::text)) / 55) AS dir -- base direction factor on geometry to be consistent across metatiles FROM (SELECT osm_id, way, place, name, ( (CASE WHEN (tags->'population' ~ '^[0-9]{1,8}$') THEN (tags->'population')::INTEGER WHEN (place = 'city') THEN 100000 WHEN (place = 'town') THEN 1000 ELSE 1 END) * (CASE WHEN (tags @> 'capital=>4') THEN 2 ELSE 1 END) ) AS score FROM planet_osm_point WHERE place IN ('city', 'town') AND name IS NOT NULL AND NOT (tags @> 'capital=>yes') ) as p ORDER BY score DESC, length(name) DESC, name ) AS placenames_medium properties: cache-features: true minzoom: 4 maxzoom: 15 - id: placenames-small geometry: point <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, place, name FROM planet_osm_point WHERE place IN ('village', 'hamlet') AND name IS NOT NULL AND NOT tags @> 'capital=>yes' OR (place IN ('suburb', 'quarter', 'neighbourhood', 'isolated_dwelling', 'farm') ) AND name IS NOT NULL ORDER BY CASE WHEN place = 'suburb' THEN 7 WHEN place = 'village' THEN 6 WHEN place = 'hamlet' THEN 5 WHEN place = 'quarter' THEN 4 WHEN place = 'neighbourhood' THEN 3 WHEN place = 'isolated_dwelling' THEN 2 WHEN place = 'farm' THEN 1 END DESC, length(name) DESC, name ) AS placenames_small properties: cache-features: true minzoom: 12 - id: stations geometry: point <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, name, ref, railway, aerialway, station FROM (SELECT ST_PointOnSurface(way) AS way, name, ref, railway, aerialway, tags->'station' AS station, way_area FROM planet_osm_polygon WHERE way && !bbox! -- Not ST_PointOnSurface(way) because name might be NULL AND way_area < 768000*POW(!scale_denominator!*0.001*0.28,2) UNION ALL SELECT way, name, ref, railway, aerialway, tags->'station' AS station, NULL as way_area FROM planet_osm_point WHERE way && !bbox! ) _ WHERE railway IN ('station', 'halt', 'tram_stop') OR railway = 'subway_entrance' AND way_area IS NULL OR aerialway = 'station' ORDER BY CASE railway WHEN 'station' THEN 1 WHEN 'subway_entrance' THEN 3 ELSE 2 END, way_area DESC NULLS LAST ) AS stations properties: cache-features: true minzoom: 12 - id: junctions geometry: point <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, highway, junction, ref, name, NULL AS way_pixels FROM planet_osm_point WHERE way && !bbox! AND (highway = 'motorway_junction' OR highway = 'traffic_signals' OR junction = 'yes') UNION ALL SELECT ST_PointOnSurface(way) AS way, highway, junction, ref, name, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels FROM planet_osm_polygon WHERE way && !bbox! -- Not ST_PointOnSurface(way) because name might be NULL AND junction = 'yes' AND way_area < 768000*POW(!scale_denominator!*0.001*0.28,2) ORDER BY way_pixels DESC NULLS LAST ) AS junctions properties: minzoom: 11 - id: bridge-text geometry: point <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT ST_PointOnSurface(way) AS way, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels, man_made, name FROM planet_osm_polygon WHERE ST_PointOnSurface(way) && !bbox! AND name IS NOT NULL AND man_made = 'bridge' AND way_area > 125*POW(!scale_denominator!*0.001*0.28,2) AND way_area < 768000*POW(!scale_denominator!*0.001*0.28,2) ORDER BY way_area DESC ) AS bridge_text properties: minzoom: 11 - id: county-names geometry: point <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT ST_PointOnSurface(way) AS way, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels, name, admin_level FROM planet_osm_polygon WHERE ST_PointOnSurface(way) && !bbox! AND name IS NOT NULL AND boundary = 'administrative' AND admin_level IN ('5', '6') AND way_area > 12000*POW(!scale_denominator!*0.001*0.28,2) AND way_area < 196000*POW(!scale_denominator!*0.001*0.28,2) AND osm_id < 0 ORDER BY admin_level, way_area DESC ) AS county_names properties: minzoom: 8 - id: amenity-points geometry: point <<: *extents Datasource: <<: *osm2pgsql table: &amenity_points_sql |- (SELECT * FROM (SELECT -- This subselect allows filtering on the feature column way, CASE WHEN amenity = 'parcel_locker' THEN CONCAT_WS(E'\n', COALESCE(tags->'brand', tags->'operator', name), ref) ELSE CONCAT( name, E'\n' || CONCAT( -- by doing this with a || if both the ele and height branches are null, this entire expression is null and only name is used CASE WHEN (tags ? 'ele') AND tags->'ele' ~ '^-?\d{1,4}(\.\d+)?$' AND ("natural" IN ('peak', 'volcano', 'saddle') OR (tourism = 'information' AND tags->'information' = 'guidepost') OR tourism IN ('alpine_hut', 'wilderness_hut') OR (amenity = 'shelter' AND tags->'shelter_type' NOT IN ('public_transport', 'picnic_shelter')) OR tags->'mountain_pass' = 'yes') THEN CONCAT(REPLACE(ROUND((tags->'ele')::NUMERIC)::TEXT, '-', U&'\2212'), U&'\00A0', 'm') END, CASE WHEN (tags ? 'height') AND tags->'height' ~ '^\d{1,3}(\.\d+)?$' AND waterway = 'waterfall' THEN CONCAT(ROUND((tags->'height')::NUMERIC)::TEXT, U&'\00A0', 'm') END ) ) END AS name, tags->'parking' as "parking", COALESCE( 'aeroway_' || CASE WHEN aeroway IN ('gate', 'apron', 'helipad', 'aerodrome') THEN aeroway END, 'tourism_' || CASE WHEN tourism IN ('alpine_hut', 'apartment', 'artwork', 'camp_site', 'caravan_site', 'chalet', 'gallery', 'guest_house', 'hostel', 'hotel', 'motel', 'museum', 'picnic_site', 'theme_park', 'wilderness_hut', 'zoo') THEN tourism END, 'amenity_' || CASE WHEN amenity IN ('arts_centre', 'atm', 'bank', 'bar', 'bbq', 'bicycle_rental', 'bicycle_repair_station','biergarten', 'boat_rental', 'bureau_de_change', 'bus_station', 'cafe', 'car_rental', 'car_wash', 'casino', 'charging_station', 'childcare', 'cinema', 'clinic', 'college', 'community_centre', 'courthouse', 'dentist', 'doctors', 'drinking_water', 'driving_school', 'fast_food', 'ferry_terminal', 'fire_station', 'food_court', 'fountain', 'fuel', 'grave_yard', 'hospital', 'hunting_stand', 'ice_cream', 'internet_cafe', 'kindergarten', 'library', 'marketplace', 'nightclub', 'nursing_home', 'pharmacy', 'place_of_worship', 'police', 'post_box', 'post_office', 'prison', 'pub', 'public_bath', 'public_bookcase', 'recycling', 'restaurant', 'school', 'shelter', 'shower', 'social_facility', 'taxi', 'telephone', 'theatre', 'toilets', 'townhall', 'university', 'vehicle_inspection', 'veterinary') THEN amenity END, 'amenity_' || CASE WHEN amenity IN ('waste_disposal') AND way_area IS NOT NULL THEN amenity END, -- Waste disposal points are rendered in the low priority layer 'amenity_' || CASE WHEN amenity IN ('vending_machine') AND tags->'vending' IN ('excrement_bags', 'parking_tickets', 'public_transport_tickets') THEN amenity END, 'amenity_' || CASE WHEN amenity IN ('parcel_locker') THEN amenity END, 'diplomatic_'|| CASE WHEN tags->'office' IN ('diplomatic') AND tags->'diplomatic' IN ('embassy', 'consulate') THEN tags->'diplomatic' ELSE NULL END, 'advertising_' || CASE WHEN tags->'advertising' in ('column') THEN tags->'advertising' END, 'emergency_' || CASE WHEN tags->'emergency' IN ('phone') AND way_area IS NULL THEN tags->'emergency' END, 'shop' || CASE WHEN shop IN ('yes', 'no', 'vacant', 'closed', 'disused', 'empty') OR shop IS NULL THEN NULL ELSE '' END, 'leisure_' || CASE WHEN leisure IN ('amusement_arcade', 'beach_resort', 'bird_hide', 'bowling_alley', 'dog_park', 'firepit', 'fishing', 'fitness_centre', 'fitness_station', 'garden', 'golf_course', 'ice_rink', 'marina', 'miniature_golf', 'outdoor_seating', 'park', 'picnic_table', 'pitch', 'playground', 'sauna', 'slipway', 'sports_centre', 'stadium', 'swimming_area', 'swimming_pool', 'track', 'water_park') THEN leisure END, 'power_' || CASE WHEN power IN ('plant', 'generator', 'substation') THEN power END, 'man_made_' || CASE WHEN (man_made IN ('chimney', 'communications_tower', 'crane', 'lighthouse', 'mast', 'obelisk', 'silo', 'storage_tank', 'telescope', 'tower', 'wastewater_plant', 'water_tower', 'water_works', 'windmill', 'works') AND (tags->'location' NOT IN ('roof', 'rooftop') OR NOT (tags ? 'location'))) THEN man_made END, 'landuse_' || CASE WHEN landuse IN ('reservoir', 'basin', 'recreation_ground', 'village_green', 'quarry', 'vineyard', 'orchard', 'cemetery', 'residential', 'garages', 'meadow', 'grass', 'allotments', 'forest', 'farmyard', 'farmland', 'greenhouse_horticulture', 'retail', 'industrial', 'railway', 'commercial', 'brownfield', 'landfill', 'construction', 'salt_pond', 'military', 'plant_nursery') THEN landuse END, 'natural_' || CASE WHEN "natural" IN ('peak', 'volcano', 'saddle', 'cave_entrance') AND way_area IS NULL THEN "natural" END, 'natural_' || CASE WHEN "natural" IN ('wood', 'water', 'mud', 'wetland', 'bay', 'spring', 'scree', 'shingle', 'bare_rock', 'sand', 'heath', 'grassland', 'scrub', 'beach', 'glacier', 'tree', 'strait', 'cape', 'reef') THEN "natural" END, 'mountain_pass' || CASE WHEN tags->'mountain_pass' IN ('yes') THEN '' END, -- after natural=saddle to give priority to that tag on the same node 'waterway_' || CASE WHEN "waterway" IN ('waterfall') AND way_area IS NULL THEN waterway END, 'place_' || CASE WHEN place IN ('island', 'islet', 'square') THEN place END, 'historic_' || CASE WHEN historic IN ('memorial', 'monument', 'archaeological_site', 'fort', 'castle', 'manor', 'city_gate') THEN historic END, 'military_'|| CASE WHEN military IN ('danger_area', 'bunker') THEN military END, 'highway_' || CASE WHEN highway IN ('services', 'rest_area', 'bus_stop', 'elevator', 'traffic_signals') THEN highway END, 'highway_'|| CASE WHEN tags @> 'ford=>yes' OR tags @> 'ford=>stepping_stones' AND way_area IS NULL THEN 'ford' END, 'boundary_' || CASE WHEN boundary IN ('aboriginal_lands', 'national_park') OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6')) THEN boundary END, 'leisure_' || CASE WHEN leisure IN ('nature_reserve') THEN leisure END, 'tourism_' || CASE WHEN tourism IN ('information') AND tags->'information' IN ('audioguide', 'board', 'guidepost', 'office', 'map', 'tactile_map', 'terminal') THEN tourism END, 'office' || CASE WHEN tags->'office' IN ('no', 'vacant', 'closed', 'disused', 'empty') OR (tags->'office') IS NULL THEN NULL ELSE '' END, 'barrier_' || CASE WHEN barrier IN ('toll_booth') AND way_area IS NULL THEN barrier END, 'waterway_' || CASE WHEN waterway IN ('dam', 'weir', 'dock') THEN waterway END, 'amenity_' || CASE WHEN amenity IN ('bicycle_parking', 'motorcycle_parking') THEN amenity END, 'amenity_' || CASE WHEN amenity IN ('parking') AND (tags->'parking' NOT IN ('underground') OR (tags->'parking') IS NULL) THEN amenity END, 'amenity_' || CASE WHEN amenity IN ('parking_entrance') AND tags->'parking' IN ('multi-storey', 'underground') AND (access IS NULL OR access NOT IN ('private', 'no', 'customers', 'permit', 'delivery')) AND way_area IS NULL THEN amenity END, 'tourism_' || CASE WHEN tourism IN ('viewpoint', 'attraction') THEN tourism END, 'place_' || CASE WHEN place IN ('locality') AND way_area IS NULL THEN place END, 'golf_' || CASE WHEN tags->'golf' IN ('pin') THEN tags->'golf' END ) AS feature, CASE WHEN access IN ('private', 'no', 'customers', 'permit', 'delivery') THEN 'restricted' ELSE 'yes' END AS int_access, CASE WHEN "natural" IN ('peak', 'volcano', 'saddle') OR tags->'mountain_pass' = 'yes' THEN CASE WHEN tags->'ele' ~ '^-?\d{1,4}(\.\d+)?$' THEN (tags->'ele')::NUMERIC END WHEN "waterway" IN ('waterfall') THEN CASE WHEN tags->'height' ~ '^\d{1,3}(\.\d+)?( m)?$' THEN (SUBSTRING(tags->'height', '^(\d{1,3}(\.\d+)?)( m)?$'))::NUMERIC END END AS score, religion, tags->'denomination' as denomination, tags->'generator:source' as "generator:source", CASE WHEN (man_made IN ('mast', 'tower', 'chimney', 'crane') AND (tags->'location' NOT IN ('roof', 'rooftop') OR (tags->'location') IS NULL)) OR waterway IN ('waterfall') THEN CASE WHEN tags->'height' ~ '^\d{1,3}(\.\d+)?( m)?$' THEN (SUBSTRING(tags->'height', '^(\d{1,3}(\.\d+)?)( m)?$'))::NUMERIC END END AS height, tags->'location' as location, tags->'icao' as icao, tags->'iata' as iata, tags->'office' as office, tags->'recycling_type' as recycling_type, tags->'tower:construction' as "tower:construction", tags->'tower:type' as "tower:type", tags->'telescope:type' as "telescope:type", CASE WHEN man_made IN ('telescope') THEN CASE WHEN tags->'telescope:diameter' ~ '^-?\d{1,4}(\.\d+)?$' THEN (tags->'telescope:diameter')::NUMERIC END END AS "telescope:diameter", tags->'castle_type' as castle_type, tags->'sport' as sport, tags->'information' as information, tags->'memorial' as memorial, tags->'artwork_type' as artwork_type, tags->'vending' as vending, CASE WHEN shop IN ('supermarket', 'bag', 'bakery', 'beauty', 'bed', 'bookmaker', 'books', 'butcher', 'carpet', 'clothes', 'computer', 'confectionery', 'fashion', 'convenience', 'department_store', 'doityourself', 'hardware', 'fabric', 'fishmonger', 'florist', 'garden_centre', 'hairdresser', 'hifi', 'car', 'car_repair', 'bicycle', 'mall', 'pet', 'photo', 'photo_studio', 'photography', 'seafood', 'shoes', 'alcohol', 'gift', 'furniture', 'kiosk', 'mobile_phone', 'motorcycle', 'musical_instrument', 'newsagent', 'optician', 'jewelry', 'jewellery', 'electronics', 'chemist', 'toys', 'travel_agency', 'car_parts', 'greengrocer', 'farm', 'stationery', 'laundry', 'dry_cleaning', 'beverages', 'perfumery', 'cosmetics', 'variety_store', 'wine', 'outdoor', 'copyshop', 'sports', 'deli', 'tobacco', 'art', 'tea', 'coffee', 'tyres', 'pastry', 'chocolate', 'music', 'medical_supply', 'dairy', 'video_games', 'houseware', 'ticket', 'charity', 'second_hand', 'interior_decoration', 'video', 'paint', 'massage', 'trade', 'wholesale', 'hearing_aids') THEN shop ELSE 'other' END AS shop, CASE WHEN building = 'no' OR building IS NULL THEN 'no' ELSE 'yes' END AS is_building, tags->'operator' AS operator, ref, way_area, COALESCE(way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0), 0) AS way_pixels FROM (SELECT ST_PointOnSurface(way) AS way, name, access, aeroway, amenity, barrier, boundary, building, highway, historic, landuse, leisure, man_made, military, "natural", place, power, ref, religion, shop, tourism, waterway, tags, way_area FROM planet_osm_polygon WHERE way && !bbox! -- Not ST_PointOnSurface(way) because name might be NULL AND way_area < 768000*POW(!scale_denominator!*0.001*0.28,2) UNION ALL SELECT way, name, access, aeroway, amenity, barrier, boundary, building, highway, historic, landuse, leisure, man_made, military, "natural", place, power, ref, religion, shop, tourism, waterway, tags, NULL AS way_area FROM planet_osm_point WHERE way && !bbox! ) _ ) AS features WHERE feature IS NOT NULL ORDER BY score DESC NULLS LAST, way_pixels DESC NULLS LAST ) AS amenity_points properties: cache-features: true minzoom: 10 - id: amenity-line geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, COALESCE( 'highway_' || CASE WHEN tags @> 'ford=>yes' OR tags @> 'ford=>stepping_stones' THEN 'ford' END, 'leisure_' || CASE WHEN leisure IN ('slipway', 'track') THEN leisure END, 'attraction_' || CASE WHEN tags @> 'attraction=>water_slide' THEN 'water_slide' END ) AS feature FROM planet_osm_line -- The upcoming where clause is needed for performance only, as the CASE statements would end up doing the equivalent filtering WHERE tags @> 'ford=>yes' OR tags @> 'ford=>stepping_stones' OR leisure IN ('slipway', 'track') OR tags @> 'attraction=>water_slide' ORDER BY COALESCE(layer,0) ) AS amenity_line properties: minzoom: 16 - id: power-towers geometry: point <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, power FROM planet_osm_point WHERE power IN ('tower', 'pole') ORDER BY CASE power WHEN 'tower' THEN 2 WHEN 'pole' THEN 1 END DESC ) AS power_towers properties: minzoom: 14 - id: roads-text-ref-low-zoom geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, highway, height, width, refs FROM ( SELECT way, osm_id, highway, array_length(refs,1) AS height, (SELECT MAX(char_length(ref)) FROM unnest(refs) AS u(ref)) AS width, array_to_string(refs, E'\n') AS refs FROM ( SELECT way, osm_id, highway, string_to_array(ref, ';') AS refs FROM planet_osm_roads WHERE highway IN ('motorway', 'trunk', 'primary', 'secondary') AND ref IS NOT NULL ) AS p) AS q WHERE height <= 4 AND width <= 11 ORDER BY CASE WHEN highway = 'motorway' THEN 38 WHEN highway = 'trunk' THEN 37 WHEN highway = 'primary' THEN 36 WHEN highway = 'secondary' THEN 35 END DESC NULLS LAST, height DESC, width DESC, refs, osm_id ) AS roads_text_ref_low_zoom properties: minzoom: 10 maxzoom: 12 - id: roads-text-ref geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, highway, height, width, refs FROM ( SELECT osm_id, way, highway, array_length(refs,1) AS height, (SELECT MAX(char_length(ref)) FROM unnest(refs) AS u(ref)) AS width, array_to_string(refs, E'\n') AS refs FROM ( SELECT osm_id, way, COALESCE( CASE WHEN highway IN ('motorway', 'trunk', 'primary', 'secondary', 'tertiary') THEN highway END, CASE WHEN aeroway IN ('runway', 'taxiway') THEN aeroway END ) AS highway, string_to_array(ref, ';') AS refs FROM planet_osm_line WHERE (highway IN ('motorway', 'trunk', 'primary', 'secondary', 'tertiary') OR aeroway IN ('runway', 'taxiway')) AND ref IS NOT NULL ) AS p) AS q WHERE height <= 4 AND width <= 11 ORDER BY CASE WHEN highway = 'motorway' THEN 38 WHEN highway = 'trunk' THEN 37 WHEN highway = 'primary' THEN 36 WHEN highway = 'secondary' THEN 35 WHEN highway = 'tertiary' THEN 34 WHEN highway = 'runway' THEN 6 WHEN highway = 'taxiway' THEN 5 END DESC NULLS LAST, height DESC, width DESC, refs, osm_id ) AS roads_text_ref properties: minzoom: 13 - id: roads-area-text-name geometry: point <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT ST_PointOnSurface(way) AS way, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels, highway, name FROM planet_osm_polygon WHERE ST_PointOnSurface(way) && !bbox! AND name IS NOT NULL AND (highway IN ('pedestrian', 'footway', 'service', 'living_street', 'platform') OR (railway IN ('platform') AND (tags->'location' NOT IN ('underground') OR (tags->'location') IS NULL) AND (tunnel NOT IN ('yes', 'building_passage') OR tunnel IS NULL) AND (covered NOT IN ('yes') OR covered IS NULL))) AND way_area > 3000*POW(!scale_denominator!*0.001*0.28,2) AND way_area < 768000*POW(!scale_denominator!*0.001*0.28,2) ORDER BY way_area DESC ) AS roads_area_text_name properties: minzoom: 15 - id: roads-text-name geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, CASE WHEN substr(highway, length(highway)-4, 5) = '_link' THEN substr(highway, 0, length(highway)-4) ELSE highway END, CASE WHEN (tunnel = 'yes' OR tunnel = 'building_passage' OR covered = 'yes') THEN 'yes' ELSE 'no' END AS tunnel, construction, name, CASE WHEN oneway IN ('yes', '-1') THEN oneway WHEN junction IN ('roundabout') AND (oneway IS NULL OR NOT oneway IN ('no', 'reversible')) THEN 'yes' END AS oneway, horse, bicycle FROM planet_osm_line l WHERE highway IN ('motorway', 'motorway_link', 'trunk', 'trunk_link', 'primary', 'primary_link', 'secondary', 'secondary_link', 'tertiary', 'tertiary_link', 'residential', 'unclassified', 'road', 'service', 'pedestrian', 'raceway', 'living_street', 'construction') AND (name IS NOT NULL OR oneway IN ('yes', '-1') OR junction IN ('roundabout')) ORDER BY z_order DESC, -- put important roads first COALESCE(layer, 0), -- put top layered roads first length(name) DESC, -- Try to fit big labels in first name DESC, -- Force a consistent ordering between differently named streets l.osm_id DESC -- Force an ordering for streets of the same name, e.g. dualized roads ) AS roads_text_name properties: cache-features: true minzoom: 13 - id: paths-text-name geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, highway, construction, name, CASE WHEN oneway IN ('yes', '-1') THEN oneway WHEN junction IN ('roundabout') AND (oneway IS NULL OR NOT oneway IN ('no', 'reversible')) THEN 'yes' END AS oneway, horse, bicycle FROM planet_osm_line WHERE highway IN ('bridleway', 'footway', 'cycleway', 'path', 'track', 'steps', 'construction') AND (name IS NOT NULL OR oneway IN ('yes', '-1') OR junction IN ('roundabout')) ) AS paths_text_name properties: cache-features: true minzoom: 15 - id: railways-text-name geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, CASE WHEN railway = 'preserved' AND service IN ('spur', 'siding', 'yard') THEN 'INT-preserved-ssy'::text WHEN (railway = 'rail' AND service IN ('spur', 'siding', 'yard')) THEN 'INT-spur-siding-yard' WHEN (railway = 'tram' AND service IN ('spur', 'siding', 'yard')) THEN 'tram-service' ELSE railway END AS railway, CASE WHEN (tunnel = 'yes' OR tunnel = 'building_passage' OR covered = 'yes') THEN 'yes' ELSE 'no' END AS tunnel, tags->'highspeed' as highspeed, tags->'usage' as usage, construction, name FROM planet_osm_line l WHERE railway IN ('rail', 'subway', 'narrow_gauge', 'light_rail', 'preserved', 'funicular', 'monorail', 'miniature', 'tram', 'disused', 'construction') AND (tunnel IS NULL OR NOT tunnel IN ('yes', 'building_passage')) AND highway IS NULL -- Prevent duplicate rendering AND name IS NOT NULL ORDER BY z_order DESC, -- put important rails first COALESCE(layer, 0), -- put top layered rails first length(name) DESC, -- Try to fit big labels in first name DESC, -- Force a consistent ordering between differently named railways l.osm_id DESC -- Force an ordering for railways of the same name, e.g. dualized rails ) AS railways_text_name properties: minzoom: 11 - id: roads-text-ref-minor geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, highway, height, width, refs FROM ( SELECT osm_id, way, highway, array_length(refs,1) AS height, (SELECT MAX(char_length(ref)) FROM unnest(refs) AS u(ref)) AS width, array_to_string(refs, E'\n') AS refs FROM ( SELECT osm_id, way, CASE WHEN highway IN ('unclassified', 'residential', 'track') THEN highway END AS highway, string_to_array(ref, ';') AS refs FROM planet_osm_line WHERE highway IN ('unclassified', 'residential', 'track') AND ref IS NOT NULL ) AS p) AS q WHERE height <= 4 AND width <= 11 ORDER BY CASE WHEN highway = 'unclassified' THEN 33 WHEN highway = 'residential' THEN 32 WHEN highway = 'track' THEN 30 END DESC NULLS LAST, height DESC, width DESC, refs, osm_id ) AS roads_text_ref_minor properties: minzoom: 15 - id: text-poly-low-zoom geometry: point <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT ST_PointOnSurface(way) AS way, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels, COALESCE( 'landuse_' || CASE WHEN landuse IN ('forest', 'military', 'farmland') THEN landuse END, 'military_' || CASE WHEN military IN ('danger_area') THEN military END, 'natural_' || CASE WHEN "natural" IN ('wood', 'glacier', 'sand', 'scree', 'shingle', 'bare_rock', 'water') THEN "natural" END, 'place_' || CASE WHEN place IN ('island') THEN place END, 'boundary_' || CASE WHEN boundary IN ('aboriginal_lands', 'national_park') OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6')) THEN boundary END, 'leisure_' || CASE WHEN leisure IN ('nature_reserve') THEN leisure END ) AS feature, name, CASE WHEN building = 'no' OR building IS NULL THEN 'no' ELSE 'yes' END AS is_building -- always no with the where conditions FROM planet_osm_polygon WHERE ST_PointOnSurface(way) && !bbox! AND name IS NOT NULL AND (landuse IN ('forest', 'military', 'farmland') OR military IN ('danger_area') OR "natural" IN ('wood', 'glacier', 'sand', 'scree', 'shingle', 'bare_rock', 'water') OR "place" IN ('island') OR boundary IN ('aboriginal_lands', 'national_park') OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6')) OR leisure IN ('nature_reserve')) AND building IS NULL AND way_area > 100*POW(!scale_denominator!*0.001*0.28,2) AND way_area < 768000*POW(!scale_denominator!*0.001*0.28,2) ORDER BY way_area DESC ) AS text_poly_low_zoom properties: minzoom: 4 maxzoom: 9 - id: text-line geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, NULL as way_pixels, COALESCE('aerialway_' || aerialway, 'attraction_' || CASE WHEN tags @> 'attraction=>water_slide' THEN 'water_slide' END, 'leisure_' || leisure, 'man_made_' || man_made, 'waterway_' || waterway, 'natural_' || "natural", 'golf_' || (tags->'golf')) AS feature, access, name, tags->'operator' as operator, ref, NULL AS way_area, CASE WHEN building = 'no' OR building IS NULL THEN 'no' ELSE 'yes' END AS is_building FROM planet_osm_line WHERE ((man_made IN ('pier', 'breakwater', 'groyne', 'embankment') OR (man_made = 'pipeline' AND tags-> 'location' IN ('overground', 'overhead', 'surface', 'outdoor') OR bridge IN ('yes', 'aqueduct', 'cantilever', 'covered', 'trestle', 'viaduct')) OR tags @> 'attraction=>water_slide' OR aerialway IN ('cable_car', 'gondola', 'mixed_lift', 'goods', 'chair_lift', 'drag_lift', 't-bar', 'j-bar', 'platter', 'rope_tow', 'zip_line') OR leisure IN ('slipway', 'track') OR waterway IN ('dam', 'weir') OR "natural" IN ('arete', 'cliff', 'ridge')) AND name IS NOT NULL) OR (tags @> 'golf=>hole' AND ref IS NOT NULL) ) AS text_line properties: minzoom: 10 - id: text-point geometry: point <<: *extents Datasource: <<: *osm2pgsql # Include values that are rendered as icon without label to prevent mismatch between icons and labels, # see https://github.com/gravitystorm/openstreetmap-carto/pull/1349#issuecomment-77805678 table: *amenity_points_sql properties: minzoom: 10 - id: building-text geometry: point <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT name, ST_PointOnSurface(way) AS way, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels FROM planet_osm_polygon WHERE ST_PointOnSurface(way) && !bbox! AND name IS NOT NULL AND building IS NOT NULL AND building NOT IN ('no') AND way_area < 4000000*POW(!scale_denominator!*0.001*0.28,2) ORDER BY way_area DESC ) AS building_text properties: minzoom: 14 - id: interpolation geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way FROM planet_osm_line WHERE "addr:interpolation" IS NOT NULL ) AS interpolation properties: minzoom: 17 - id: addresses geometry: point <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT ST_PointOnSurface(way) AS way, "addr:housenumber" AS addr_housenumber, "addr:housename" AS addr_housename, tags->'addr:unit' AS addr_unit, tags->'addr:flats' AS addr_flats, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels FROM planet_osm_polygon WHERE way && !bbox! -- Not ST_PointOnSurface(way) because name might be NULL AND (("addr:housenumber" IS NOT NULL) OR ("addr:housename" IS NOT NULL) OR ((tags->'addr:unit') IS NOT NULL) OR ((tags->'addr:flats') IS NOT NULL)) AND building IS NOT NULL AND way_area < 4000000*POW(!scale_denominator!*0.001*0.28,2) UNION ALL SELECT way, "addr:housenumber" AS addr_housenumber, "addr:housename" AS addr_housename, tags->'addr:unit' AS addr_unit, tags->'addr:flats' AS addr_flats, NULL AS way_pixels FROM planet_osm_point WHERE way && !bbox! AND (("addr:housenumber" IS NOT NULL) OR ("addr:housename" IS NOT NULL) OR ((tags->'addr:unit') IS NOT NULL) OR ((tags->'addr:flats') IS NOT NULL)) ORDER BY way_pixels DESC NULLS LAST ) AS addresses properties: minzoom: 17 - id: water-lines-text geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, waterway, lock, name, "natural", tags->'lock_name' AS lock_name, CASE WHEN tags->'intermittent' IN ('yes') OR tags->'seasonal' IN ('yes', 'spring', 'summer', 'autumn', 'winter', 'wet_season', 'dry_season') THEN 'yes' ELSE 'no' END AS int_intermittent, CASE WHEN tunnel IN ('yes', 'culvert') OR waterway = 'canal' AND tunnel = 'flooded' THEN 'yes' ELSE 'no' END AS int_tunnel FROM planet_osm_line WHERE (waterway IN ('river', 'canal', 'stream', 'drain', 'ditch') OR "natural" IN ('bay', 'strait')) AND (tunnel IS NULL OR tunnel != 'culvert') AND name IS NOT NULL ORDER BY COALESCE(layer,0) ) AS water_lines_text properties: minzoom: 13 - id: ferry-routes-text geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, name FROM planet_osm_line WHERE route = 'ferry' AND osm_id > 0 AND name IS NOT NULL ) AS ferry_routes_text properties: minzoom: 13 - id: admin-text geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, name, admin_level, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels FROM planet_osm_polygon WHERE boundary = 'administrative' AND admin_level IN ('1', '2', '3', '4', '5', '6', '7', '8', '9', '10') AND name IS NOT NULL AND osm_id < 0 AND way_area > 196000*POW(!scale_denominator!*0.001*0.28,2) ORDER BY admin_level::integer ASC, way_area DESC ) AS admin_text properties: minzoom: 11 - id: protected-areas-text geometry: linestring <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT way, name, boundary, tags->'protect_class' AS protect_class, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels FROM planet_osm_polygon WHERE (boundary IN ('aboriginal_lands', 'national_park') OR leisure = 'nature_reserve' OR (boundary = 'protected_area' AND tags->'protect_class' IN ('1','1a','1b','2','3','4','5','6'))) AND name IS NOT NULL ) AS protected_areas_text properties: minzoom: 13 - id: amenity-low-priority geometry: point <<: *extents Datasource: <<: *osm2pgsql table: &amenity_low_priority_sql |- (SELECT way, name, COALESCE( 'railway_' || CASE WHEN railway IN ('level_crossing', 'crossing') AND way_area IS NULL THEN railway END, 'amenity_' || CASE WHEN amenity IN ('bench', 'waste_basket', 'waste_disposal') AND way_area IS NULL THEN amenity END, 'historic_' || CASE WHEN historic IN ('wayside_cross', 'wayside_shrine') AND way_area IS NULL THEN historic END, 'man_made_' || CASE WHEN man_made IN ('cross') AND way_area IS NULL THEN man_made END, 'barrier_' || CASE WHEN barrier IN ('bollard', 'gate', 'lift_gate', 'swing_gate', 'block', 'log', 'cattle_grid', 'stile', 'motorcycle_barrier', 'cycle_barrier', 'full-height_turnstile', 'turnstile', 'kissing_gate') THEN barrier END ) AS feature, CASE WHEN access IN ('private', 'no', 'customers', 'permit', 'delivery') THEN 'restricted' ELSE 'yes' END AS int_access, way_area, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels FROM (SELECT ST_PointOnSurface(way) AS way, name, access, amenity, barrier, highway, historic, man_made, railway, tags, way_area FROM planet_osm_polygon WHERE way && !bbox! -- Not ST_PointOnSurface(way) because name might be NULL AND way_area < 768000*POW(!scale_denominator!*0.001*0.28,2) UNION ALL SELECT way, name, access, amenity, barrier, highway, historic, man_made, railway, tags, NULL AS way_area FROM planet_osm_point WHERE way && !bbox! ) _ WHERE railway IN ('level_crossing', 'crossing') OR amenity IN ('bench', 'waste_basket', 'waste_disposal') OR historic IN ('wayside_cross', 'wayside_shrine') OR man_made IN ('cross') OR barrier IN ('bollard', 'gate', 'lift_gate', 'swing_gate', 'block', 'log', 'cattle_grid', 'stile', 'motorcycle_barrier', 'cycle_barrier', 'full-height_turnstile', 'turnstile', 'kissing_gate') ORDER BY CASE amenity WHEN 'waste_basket' THEN 1 WHEN 'waste_disposal' THEN 1 WHEN 'bench' THEN 2 WHEN NULL THEN 3 END DESC, way_pixels DESC NULLS LAST ) AS amenity_low_priority properties: cache-features: true minzoom: 14 - id: text-low-priority geometry: point <<: *extents Datasource: <<: *osm2pgsql # Include values that are rendered as icon without label to prevent mismatch between icons and labels, # see https://github.com/gravitystorm/openstreetmap-carto/pull/1349#issuecomment-77805678 table: *amenity_low_priority_sql properties: minzoom: 17