Skip to content
Permalink
214335303b
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
2269 lines (2267 sloc) 89.7 KB
scale: 1
metatile: 2
name: OpenStreetMap Carto
description: A general-purpose OpenStreetMap mapnik style, in CartoCSS
bounds: &world
- -180
- -85.05112877980659
- 180
- 85.05112877980659
center:
- 0
- 0
- 4
format: png
interactivity: false
minzoom: 0
maxzoom: 22
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"
# Various parts to be included later on
_parts:
# Extents are used for tilemill, and don't actually make it to the generated XML
extents: &extents
extent: *world
srs-name: "900913"
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"
osm2pgsql: &osm2pgsql
type: "postgis"
dbname: "gis"
key_field: ""
geometry_field: "way"
extent: "-20037508,-20037508,20037508,20037508"
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
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, 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,
('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') 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', 'recreation_ground', '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 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-casing
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
FROM planet_osm_line
WHERE waterway IN ('stream', 'drain', 'ditch')
) AS water_lines_casing
properties:
minzoom: 13
- 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')
) 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')
) 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 2 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: 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: 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')
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
('primary', 1),
('secondary', 2),
('tertiary', 3),
('unclassified', 4),
('residential', 5),
('living_street', 6),
('service', 7),
('track', 8)
) AS v (highway, prio)
ON v.highway = l.highway
WHERE p.highway IN (
'turning_circle',
'turning_loop',
'mini_roundabout'
)
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)
AND (covered NOT IN ('yes') OR covered 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)
AND (covered NOT IN ('yes') OR covered 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,
'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') 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')
AND (bridge IS NULL OR NOT 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 2 END,
osm_id
) AS roads_sql
properties:
cache-features: true
minzoom: 10
- id: highway-area-fill
# FIXME: No geometry?
<<: *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)
AND (covered NOT IN ('yes') OR covered IS NULL))
THEN railway END)),
(('aeroway_' || CASE WHEN aeroway IN ('runway', 'taxiway', 'helipad') THEN aeroway END))
) AS feature
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)
AND (covered NOT IN ('yes') OR covered 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 2 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: 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
FROM planet_osm_line
WHERE aeroway IN ('runway', 'taxiway')
ORDER BY bridge NULLS FIRST,
CASE WHEN aeroway = 'runway' THEN 1 ELSE 0 END
) AS aeroways
properties:
cache-features: true
minzoom: 11
- 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: 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
table: |-
(SELECT
ST_PointOnSurface(way) AS way,
way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels,
name
FROM planet_osm_polygon
WHERE ST_PointOnSurface(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,
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 = 'alpine_hut' OR (tourism = 'information' AND tags->'information' = 'guidepost')
OR amenity = 'shelter')
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
)
) 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,
'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', 'recreation_ground',
'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')
THEN "natural" END,
'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'))
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
) AS feature,
access,
CASE
WHEN "natural" IN ('peak', 'volcano', 'saddle') 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') 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', 'bay', 'strait') 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', 'bay', 'strait')
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: 0
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") 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
) 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,
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