diff --git a/.travis.yml b/.travis.yml index 4997fadbb9..f0238cfa8a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,3 +45,5 @@ script: - psql -1Xq -v ON_ERROR_STOP=1 -d gis -f indexes.sql # Test for hstore operation not supported in PostgreSQL 9.3 - '! grep "tags->''[^'']\+'' IS" project.mml > /dev/null' + # Test for classes in project.mml (not supported in vector tiles) + - '! grep "class:" project.mml > /dev/null' diff --git a/CHANGELOG.md b/CHANGELOG.md index e1f63975c2..488fe230ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,52 @@ -## [Unreleased](https://github.com/gravitystorm/openstreetmap-carto/compare/v4.23.0...master) +## [Unreleased](https://github.com/gravitystorm/openstreetmap-carto/compare/v4.24.1...master) + +## [v4.24.1](https://github.com/gravitystorm/openstreetmap-carto/compare/v4.24.0...v4.24.1) - 2019-10-28 +### Changes +- Revert PR #3930 which added river-color (#3955) + +## [v4.24.0](https://github.com/gravitystorm/openstreetmap-carto/compare/v4.23.0...v4.24.0) - 2019-10-25 +### Changes +- Create darker river-color for river & canal areas and waterway lines (#3930) + + The color of river, canal, ditch and drain waterway lines + and river and canal areas is changed to `#8fcadd` (Lch78,21,227) + +- Fix rendering of water body labels (#3919) + + Restores rendering of water body labels on points (node features) + Fixes rendering of natural=bay to use italic font at all z levels + Cleans up duplicate natural=strait code in water.mss + +- Precedence of junctions over POIs (#3915) + + Junction=yes, =motorway and man_made=bridge labels now render before amenity-points + This prevents icons from blocking the display of these text labels + +- Remove rendering of waterway=wadi (#3931) + + The tag waterway=wadi is deprecated, suggested replacement: + waterway=river/stream + intermittent=yes OR natural=valley + +- Move parking to amenity-points layers, change way_pixels limit and initial zoom level (#3923) + + Moved parking features back to amenity-points layers + Changed parking text intial zoom to z14, as planned in PR #3612 + Change way_pixels limit for parking icon (750) and text (3000) + +- Don't use classes anymore (#3912) +- Convert state & country layers to ST_PointOnSurface (#3920) +- Convert addresses to use ST_PointOnSurface (#3898) +- Apply bbox to part of "addresses" query (#3942) + + The 4 changes above are needed to allow use of vector tiles + ST_PointOnSurface is used to generate a point for labeling + Classes are removed, replaced with the layer id + +- Documentation updates (#3911) & (#3910) +- Code clean-up (#3899) & (#3922) + + Document inner line rendering, update docker documentation + Clean-up text-placement / marker-placement, remove natural=marsh ## [v4.23.0](https://github.com/gravitystorm/openstreetmap-carto/compare/v4.22.0...v4.23.0) - 2019-9-20 ### Changes diff --git a/DOCKER.md b/DOCKER.md index 351b3b7379..f2028be24e 100644 --- a/DOCKER.md +++ b/DOCKER.md @@ -20,6 +20,7 @@ Read on below to get the details. * `git clone https://github.com/gravitystorm/openstreetmap-carto.git` to clone openstreetmap-carto repository into a directory on your host system * download OpenStreetMap data in osm.pbf format to a file `data.osm.pbf` and place it within the openstreetmap-carto directory (for example some small area from [Geofabrik](https://download.geofabrik.de/)) +* If necessary, `sudo service postgresql stop` to make sure you don't have currently running a native PostgreSQL server which would conflict with Docker's PostgreSQL server. * `docker-compose up import` to import the data (only necessary the first time or when you change the data file) * `docker-compose up kosmtik` to run the style preview application * browse to [http://localhost:6789](http://localhost:6789) to view the output of Kosmtik diff --git a/admin.mss b/admin.mss index 9b96cc58f0..c01c11509c 100644 --- a/admin.mss +++ b/admin.mss @@ -275,9 +275,16 @@ overlapping borders correctly. } } [zoom >= 10] { + // inner line ::wideline { opacity: 0.15; line-width: 3.6; + // Unlike planet_osm_line, planet_osm_polygon does not preserves the + // original direction of the OSM way: Following OGS at + // https://www.opengeospatial.org/standards/sfa always at the left + // is the interior and at the right the exterior of the polygon.(This + // also applies to inner rings of multipolygons.) So a negative + // line-offset is always an offset to the inner side of the polygon. line-offset: -0.9; line-color: green; [boundary='aboriginal_lands'], @@ -295,6 +302,7 @@ overlapping borders correctly. line-offset: -2; } } + // outer line ::narrowline { opacity: 0.15; line-width: 1.8; diff --git a/amenity-points.mss b/amenity-points.mss index 4d31747a12..a040ff70a6 100644 --- a/amenity-points.mss +++ b/amenity-points.mss @@ -1,5 +1,5 @@ @marina-text: #576ddf; // also swimming_pool -@wetland-text: darken(#4aa5fa, 25%); /* Also for marsh and mud */ +@wetland-text: darken(#4aa5fa, 25%); /* Also for mud */ @shop-icon: #ac39ac; @shop-text: #939; @transportation-icon: #0092da; @@ -1434,27 +1434,12 @@ marker-fill: @man-made-icon; } } -} - -#amenity-low-priority { - [feature = 'man_made_cross'][zoom >= 16], - [feature = 'historic_wayside_cross'][zoom >= 16] { - marker-file: url('symbols/man_made/cross.svg'); - marker-fill: @religious-icon; - marker-clip: false; - } - - [feature = 'historic_wayside_shrine'][zoom >= 17] { - marker-file: url('symbols/historic/shrine.svg'); - marker-fill: @man-made-icon; - marker-clip: false; - } [feature = 'amenity_parking'], [feature = 'amenity_bicycle_parking'], [feature = 'amenity_motorcycle_parking'], [feature = 'amenity_parking_entrance'] { - [zoom >= 14][way_pixels > 900], + [zoom >= 14][way_pixels > 750], [zoom >= 17][feature = 'amenity_parking'], [zoom >= 18] { [feature = 'amenity_parking'] { marker-file: url('symbols/amenity/parking.svg'); } @@ -1466,6 +1451,21 @@ [access != ''][access != 'permissive'][access != 'yes'] { marker-opacity: 0.33; } } } +} + +#amenity-low-priority { + [feature = 'man_made_cross'][zoom >= 16], + [feature = 'historic_wayside_cross'][zoom >= 16] { + marker-file: url('symbols/man_made/cross.svg'); + marker-fill: @religious-icon; + marker-clip: false; + } + + [feature = 'historic_wayside_shrine'][zoom >= 17] { + marker-file: url('symbols/historic/shrine.svg'); + marker-fill: @man-made-icon; + marker-clip: false; + } [feature = 'railway_level_crossing'][zoom >= 14]::railway, [feature = 'railway_crossing'][zoom >= 15]::railway{ @@ -1573,7 +1573,7 @@ } /* Note that these layers are also used in water.mss */ -.text-low-zoom[zoom < 10], +#text-poly-low-zoom[zoom < 10], #text-point[zoom >= 10] { [feature = 'place_island'][zoom >= 4][way_pixels > 3000][way_pixels <= 768000], [feature = 'place_island'][zoom >= 16][way_pixels <= 768000], @@ -2125,7 +2125,6 @@ } [feature = 'natural_wetland'], - [feature = 'natural_marsh'], [feature = 'natural_mud'], [feature = 'leisure_park'], [feature = 'leisure_recreation_ground'], @@ -2200,7 +2199,6 @@ text-halo-fill: @standard-halo-fill; [feature = 'natural_reef'], [feature = 'natural_wetland'], - [feature = 'natural_marsh'], [feature = 'natural_mud'] { text-fill: @wetland-text; } @@ -2317,7 +2315,6 @@ } } - [feature = 'natural_bay'][zoom >= 14], [feature = 'natural_spring'][zoom >= 16] { text-name: "[name]"; text-size: 10; @@ -2327,9 +2324,7 @@ text-face-name: @standard-font; text-halo-radius: @standard-halo-radius; text-halo-fill: @standard-halo-fill; - [feature = 'natural_spring'] { - text-dy: 6; - } + text-dy: 6; } [feature = 'amenity_atm'][zoom >= 19], @@ -2924,14 +2919,12 @@ text-halo-fill: @standard-halo-fill; text-face-name: @standard-font; } -} -#text-low-priority { [feature = 'amenity_parking'], [feature = 'amenity_bicycle_parking'], [feature = 'amenity_motorcycle_parking'], [feature = 'amenity_parking_entrance'] { - [zoom >= 10][way_pixels > 900], + [zoom >= 14][way_pixels > 3000], [zoom >= 18] { text-name: "[name]"; text-size: @standard-font-size; @@ -2950,7 +2943,9 @@ [feature = 'amenity_motorcycle_parking'] { text-dy: 12; } } } +} +#text-low-priority { [feature = 'man_made_cross'][zoom >= 17], [feature = 'historic_wayside_cross'][zoom >= 17], [feature = 'historic_wayside_shrine'][zoom >= 17] { diff --git a/landcover.mss b/landcover.mss index 1924fba74d..7e85727668 100644 --- a/landcover.mss +++ b/landcover.mss @@ -946,7 +946,8 @@ } } -.barriers { +#line-barriers, +#area-barriers { [zoom >= 16] { line-width: 0.4; line-color: #444; diff --git a/placenames.mss b/placenames.mss index 94997f90e3..f518f66353 100644 --- a/placenames.mss +++ b/placenames.mss @@ -3,7 +3,7 @@ @country-labels: darken(@admin-boundaries, 15%); @state-labels: desaturate(darken(@admin-boundaries, 5%), 20%); -.country { +#country-names { [zoom >= 3][zoom < 5][way_pixels > 1000], [zoom >= 5][way_pixels < 360000] { text-name: "[name]"; @@ -38,12 +38,11 @@ text-face-name: @book-fonts; text-halo-fill: @standard-halo-fill; text-halo-radius: @standard-halo-radius * 1.5; - text-placement: interior; text-character-spacing: 0.5; } } -.state { +#state-names { [zoom >= 5][zoom < 7][way_pixels > 3000], [zoom >= 7][way_pixels > 3000][way_pixels < 196000] { text-name: "[name]"; @@ -55,7 +54,6 @@ text-face-name: @oblique-fonts; text-halo-fill: @standard-halo-fill; text-halo-radius: @standard-halo-radius * 1.5; - text-placement: interior; [zoom >= 7] { text-size: 11; text-wrap-width: 50; // 4.5 em diff --git a/preview.png b/preview.png index d85560dff4..776bde2eb2 100644 Binary files a/preview.png and b/preview.png differ diff --git a/project.mml b/project.mml index ee2f3e5f49..fa78ac9076 100644 --- a/project.mml +++ b/project.mml @@ -198,7 +198,6 @@ Layer: minzoom: 8 maxzoom: 11 - id: water-lines - class: water-lines geometry: linestring <<: *extents Datasource: @@ -214,7 +213,7 @@ Layer: CASE WHEN tunnel IN ('yes', 'culvert') THEN 'yes' ELSE 'no' END AS int_tunnel, 'no' AS bridge FROM planet_osm_line - WHERE waterway IN ('river', 'canal', 'stream', 'drain', 'ditch', 'wadi') + 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 @@ -252,7 +251,6 @@ Layer: minzoom: 0 - id: ocean-lz geometry: polygon - class: ocean <<: *extents Datasource: file: data/simplified-water-polygons-split-3857/simplified_water_polygons.shp @@ -261,7 +259,6 @@ Layer: maxzoom: 9 - id: ocean geometry: polygon - class: ocean <<: *extents Datasource: file: data/water-polygons-split-3857/water_polygons.shp @@ -452,7 +449,6 @@ Layer: properties: minzoom: 14 - id: tunnels - class: access geometry: linestring <<: *extents Datasource: @@ -579,7 +575,6 @@ Layer: properties: minzoom: 10 - id: line-barriers - class: barriers geometry: linestring <<: *extents Datasource: @@ -595,7 +590,7 @@ Layer: WHERE barrier IN ('chain', 'city_wall', 'embankment', 'ditch', 'fence', 'guard_rail', 'handrail', 'hedge', 'kerb', 'retaining_wall', 'wall') OR historic = 'citywalls' - AND (waterway IS NULL OR waterway NOT IN ('river', 'canal', 'stream', 'drain', 'ditch', 'wadi')) + AND (waterway IS NULL OR waterway NOT IN ('river', 'canal', 'stream', 'drain', 'ditch')) ) AS features ) AS line_barriers properties: @@ -615,7 +610,6 @@ Layer: cache-features: true minzoom: 13 - id: area-barriers - class: barriers geometry: polygon <<: *extents Datasource: @@ -835,7 +829,6 @@ Layer: properties: minzoom: 14 - id: roads-fill - class: access geometry: linestring <<: *extents Datasource: @@ -901,7 +894,6 @@ Layer: minzoom: 6 maxzoom: 9 - id: waterway-bridges - class: water-lines geometry: linestring <<: *extents Datasource: @@ -917,14 +909,13 @@ Layer: CASE WHEN tunnel IN ('yes', 'culvert') THEN 'yes' ELSE 'no' END AS int_tunnel, 'yes' AS bridge FROM planet_osm_line - WHERE waterway IN ('river', 'canal', 'stream', 'drain', 'ditch', 'wadi') + 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 - class: access geometry: linestring <<: *extents Datasource: @@ -1192,18 +1183,18 @@ Layer: cache-features: true minzoom: 16 - id: country-names - class: country geometry: point <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT - way, + 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 boundary = 'administrative' + WHERE way && !bbox! + AND boundary = 'administrative' AND admin_level = '2' AND name IS NOT NULL AND way_area > 100*!pixel_width!::real*!pixel_height!::real @@ -1235,19 +1226,19 @@ Layer: minzoom: 3 maxzoom: 15 - id: state-names - class: state geometry: point <<: *extents Datasource: <<: *osm2pgsql table: |- (SELECT - way, + ST_PointOnSurface(way) AS way, way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels, name, ref FROM planet_osm_polygon - WHERE boundary = 'administrative' + WHERE way && !bbox! + AND boundary = 'administrative' AND admin_level = '4' AND name IS NOT NULL AND way_area > 100*!pixel_width!::real*!pixel_height!::real @@ -1384,8 +1375,53 @@ Layer: 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 highway = 'motorway_junction' OR highway = 'traffic_signals' OR junction = 'yes' + UNION ALL + SELECT + 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 junction = 'yes' + ORDER BY way_pixels DESC NULLS LAST + ) AS junctions + properties: + minzoom: 11 + - id: bridge-text + geometry: polygon + <<: *extents + Datasource: + <<: *osm2pgsql + table: |- + (SELECT + way, + way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels, + man_made, + name + FROM planet_osm_polygon + WHERE man_made = 'bridge' + ORDER BY way_area DESC + ) AS bridge_text + properties: + minzoom: 11 - id: amenity-points - class: points geometry: point <<: *extents Datasource: @@ -1461,6 +1497,13 @@ Layer: '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 ELSE NULL END, 'waterway_' || CASE WHEN waterway IN ('dam', 'weir', 'dock') THEN waterway ELSE NULL END, + 'amenity_' || CASE WHEN amenity IN ('bicycle_parking', 'motorcycle_parking') THEN amenity ELSE NULL END, + 'amenity_' || CASE WHEN amenity IN ('parking') AND (tags->'parking' NOT IN ('underground') OR (tags->'parking') IS NULL) THEN amenity ELSE NULL END, + 'amenity_' || CASE WHEN amenity IN ('parking_entrance') + AND tags->'parking' IN ('underground') + AND (access IS NULL OR access NOT IN ('private', 'no')) + AND way_area IS NULL + THEN amenity ELSE NULL END, 'tourism_' || CASE WHEN tourism IN ('viewpoint', 'attraction') THEN tourism ELSE NULL END, 'place_' || CASE WHEN place IN ('locality') AND way_area IS NULL THEN place ELSE NULL END ) AS feature, @@ -1684,52 +1727,6 @@ Layer: properties: minzoom: 10 maxzoom: 12 - - id: junctions - geometry: point - <<: *extents - Datasource: - <<: *osm2pgsql - table: |- - (SELECT - way, - highway, - junction, - ref, - name, - NULL AS way_pixels - FROM planet_osm_point - WHERE highway = 'motorway_junction' OR highway = 'traffic_signals' OR junction = 'yes' - UNION ALL - SELECT - 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 junction = 'yes' - ORDER BY way_pixels DESC NULLS LAST - ) AS junctions - properties: - minzoom: 11 - - id: bridge-text - geometry: polygon - <<: *extents - Datasource: - <<: *osm2pgsql - table: |- - (SELECT - way, - way_area/NULLIF(POW(!scale_denominator!*0.001*0.28,2),0) AS way_pixels, - man_made, - name - FROM planet_osm_polygon - WHERE man_made = 'bridge' - ORDER BY way_area DESC - ) AS bridge_text - properties: - minzoom: 11 - id: roads-text-ref geometry: linestring <<: *extents @@ -1809,7 +1806,6 @@ Layer: properties: minzoom: 15 - id: roads-text-name - class: directions geometry: linestring <<: *extents Datasource: @@ -1865,7 +1861,6 @@ Layer: cache-features: true minzoom: 13 - id: paths-text-name - class: directions geometry: linestring <<: *extents Datasource: @@ -1969,7 +1964,6 @@ Layer: properties: minzoom: 15 - id: text-poly-low-zoom - class: text-low-zoom geometry: polygon <<: *extents Datasource: @@ -2096,7 +2090,7 @@ Layer: tags->'addr:unit' AS addr_unit, 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) + WHERE way && !bbox! AND (("addr:housenumber" IS NOT NULL) OR ("addr:housename" IS NOT NULL) OR ((tags->'addr:unit') IS NOT NULL)) ORDER BY way_pixels DESC NULLS LAST ) AS addresses properties: @@ -2119,7 +2113,7 @@ Layer: THEN 'yes' ELSE 'no' END AS int_intermittent, CASE WHEN tunnel IN ('yes', 'culvert') THEN 'yes' ELSE 'no' END AS int_tunnel FROM planet_osm_line - WHERE (waterway IN ('river', 'canal', 'stream', 'drain', 'ditch', 'wadi') + 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 @@ -2195,13 +2189,6 @@ Layer: COALESCE( 'highway_' || CASE WHEN highway IN ('mini_roundabout') AND way_area IS NULL THEN highway ELSE NULL END, 'railway_' || CASE WHEN railway IN ('level_crossing', 'crossing') AND way_area IS NULL THEN railway ELSE NULL END, - 'amenity_' || CASE WHEN amenity IN ('bicycle_parking', 'motorcycle_parking') THEN amenity ELSE NULL END, - 'amenity_' || CASE WHEN amenity IN ('parking') AND (tags->'parking' NOT IN ('underground') OR (tags->'parking') IS NULL) THEN amenity ELSE NULL END, - 'amenity_' || CASE WHEN amenity IN ('parking_entrance') - AND tags->'parking' IN ('underground') - AND (access IS NULL OR access NOT IN ('private', 'no')) - AND way_area IS NULL - THEN amenity ELSE NULL END, 'amenity_' || CASE WHEN amenity IN ('bench', 'waste_basket', 'waste_disposal') AND way_area IS NULL THEN amenity ELSE NULL END, 'historic_' || CASE WHEN historic IN ('wayside_cross', 'wayside_shrine') AND way_area IS NULL THEN historic ELSE NULL END, 'man_made_' || CASE WHEN man_made IN ('cross') AND way_area IS NULL THEN man_made ELSE NULL END, @@ -2244,7 +2231,7 @@ Layer: ) _ WHERE highway IN ('mini_roundabout') OR railway IN ('level_crossing', 'crossing') - OR amenity IN ('parking', 'parking_entrance', 'bicycle_parking', 'motorcycle_parking', 'bench', 'waste_basket', 'waste_disposal') + 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') @@ -2263,4 +2250,4 @@ Layer: # see https://github.com/gravitystorm/openstreetmap-carto/pull/1349#issuecomment-77805678 table: *amenity_low_priority_sql properties: - minzoom: 10 + minzoom: 17 diff --git a/roads.mss b/roads.mss index a40d24ed04..1e08a025b7 100644 --- a/roads.mss +++ b/roads.mss @@ -2753,7 +2753,9 @@ tertiary is rendered from z10 and is not included in osm_planet_roads. */ } } -.access::fill { +#tunnels::fill, +#roads-fill::fill, +#bridges::fill { [access = 'destination'] { [feature = 'highway_secondary'], [feature = 'highway_tertiary'], @@ -3374,7 +3376,8 @@ tertiary is rendered from z10 and is not included in osm_planet_roads. */ } } -.directions::directions { +#roads-text-name::directions, +#paths-text-name::directions { [zoom >= 16] { // intentionally omitting highway_platform, highway_construction [highway = 'motorway'], diff --git a/shapefiles.mss b/shapefiles.mss index cd2e2ec0bf..f3ede87ab7 100644 --- a/shapefiles.mss +++ b/shapefiles.mss @@ -11,7 +11,8 @@ } } -.ocean { +#ocean-lz, +#ocean { polygon-fill: @ocean-color; [zoom >= 0][zoom < 10] { polygon-fill: @ocean-color; diff --git a/symbols/intermittent_river.png b/symbols/intermittent_river.png new file mode 100644 index 0000000000..a782778627 Binary files /dev/null and b/symbols/intermittent_river.png differ diff --git a/water.mss b/water.mss index dcd702e180..e5d286e374 100644 --- a/water.mss +++ b/water.mss @@ -145,10 +145,10 @@ } } -.water-lines { +#water-lines, +#waterway-bridges { [waterway = 'canal'][zoom >= 12], - [waterway = 'river'][zoom >= 12], - [waterway = 'wadi'][zoom >= 13] { + [waterway = 'river'][zoom >= 12] { // the additional line of land color is used to provide a background for dashed casings [int_tunnel = 'yes'] { background/line-color: @land-color; @@ -173,8 +173,7 @@ water/line-cap: round; water/line-join: round; - [int_intermittent = 'yes'], - [waterway = 'wadi'] { + [int_intermittent = 'yes'] { [bridge = 'yes'][zoom >= 14] { bridgefill/line-color: white; bridgefill/line-join: round; @@ -357,7 +356,7 @@ } -.text-low-zoom[zoom < 10], +#text-poly-low-zoom[zoom < 10], #text-point[zoom >= 10] { [feature = 'natural_water'], [feature = 'natural_bay'], @@ -366,12 +365,15 @@ [feature = 'landuse_basin'], [feature = 'waterway_dock'] { [zoom >= 0][way_pixels > 3000][way_pixels <= 768000], - [zoom >= 17] { + [zoom >= 14][way_pixels <= 768000][feature = 'natural_bay'], + [zoom >= 14][way_pixels <= 768000][feature = 'natural_strait'], + [zoom >= 17][way_pixels <= 768000] { text-name: "[name]"; text-size: 10; text-wrap-width: 25; // 2.5 em text-line-spacing: -1.5; // -0.15 em - [way_pixels > 12000] { + [way_pixels > 12000], + [zoom >= 15][feature = 'natural_strait'] { text-size: 12; text-wrap-width: 37; // 3.1 em text-line-spacing: -1.6; // -0.13 em @@ -394,21 +396,3 @@ } } } - -#text-point[zoom >= 14] { - [feature = 'natural_strait'] { - text-name: "[name]"; - text-size: 10; - text-wrap-width: 25; // 2.5 em - text-line-spacing: -1.5; // -0.15 em - text-fill: @water-text; - text-face-name: @oblique-fonts; - text-halo-radius: @standard-halo-radius; - text-halo-fill: @standard-halo-fill; - [zoom >= 15] { - text-size: 12; - text-wrap-width: 37; // 3.1 em - text-line-spacing: -1.6; // -0.13 em - } - } -}