diff --git a/project.mml b/project.mml
index c6d113463c..9b27791019 100644
--- a/project.mml
+++ b/project.mml
@@ -106,7 +106,7 @@ Layer:
('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,
+ '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',
diff --git a/style/landcover.mss b/style/landcover.mss
index 68c1ede00c..6e44dfee9a 100644
--- a/style/landcover.mss
+++ b/style/landcover.mss
@@ -168,6 +168,26 @@
}
}
+ [feature = 'landuse_flowerbed'] {
+ [zoom >= 10] {
+ polygon-fill: @grass;
+ [way_pixels >= 4] { polygon-gamma: 0.75; }
+ [way_pixels >= 64] { polygon-gamma: 0.3; }
+ }
+ [zoom >= 15] {
+ polygon-pattern-file: url('symbols/flowerbed_mid_zoom.svg');
+ polygon-pattern-alignment: global;
+ [way_pixels >= 4] { polygon-pattern-gamma: 0.75; }
+ [way_pixels >= 64] { polygon-pattern-gamma: 0.3; }
+ }
+ [zoom >= 17] {
+ polygon-pattern-file: url('symbols/flowerbed_high_zoom.svg');
+ polygon-pattern-alignment: global;
+ [way_pixels >= 4] { polygon-pattern-gamma: 0.75; }
+ [way_pixels >= 64] { polygon-pattern-gamma: 0.3; }
+ }
+ }
+
[feature = 'landuse_plant_nursery'] {
[zoom >= 10] {
polygon-fill: @orchard;
diff --git a/symbols/flowerbed_high_zoom.svg b/symbols/flowerbed_high_zoom.svg
new file mode 100644
index 0000000000..305600a66e
--- /dev/null
+++ b/symbols/flowerbed_high_zoom.svg
@@ -0,0 +1,26 @@
+
+
diff --git a/symbols/flowerbed_mid_zoom.svg b/symbols/flowerbed_mid_zoom.svg
new file mode 100644
index 0000000000..364694137d
--- /dev/null
+++ b/symbols/flowerbed_mid_zoom.svg
@@ -0,0 +1,26 @@
+
+
diff --git a/symbols/generating_patterns/flowerbed.md b/symbols/generating_patterns/flowerbed.md
new file mode 100644
index 0000000000..ea6b31cb27
--- /dev/null
+++ b/symbols/generating_patterns/flowerbed.md
@@ -0,0 +1,15 @@
+The rendering for the flowerbed is split into two patterns: one for mid-zoom levels, and one for high zoom levels.
+
+### Flowerbed mid zoom
+The pattern is generated using [jsdotpattern (command sequence is recorded)](https://imagico.de/map/jsdotpattern.php#x,128,jdp47459;gv,6,32,32;tr;ts;rd,0,0,0,dot,0.125,4,4,0,jdp75205,eef6c0,cdebb0;).
+
+Generated SVG image is sanitized for use with Mapnik by the script svg_pattern.sh from the jsdotpattern repository at http://github.com/imagico/jsdotpattern.
+
+The final file is `flowerbed_mid_zoom.svg`
+
+### Flowerbed high zoom
+The pattern is generated using [jsdotpattern (command sequence is recorded)](https://imagico.de/map/jsdotpattern.php#x,128,jdp62563;gv,15,32,32;tr;rd,0,0,0,flower1,1,5,5,0,jdp49618,eef6c0,cdebb0;).
+
+Generated SVG image is sanitized for use with Mapnik by the script svg_pattern.sh from the jsdotpattern repository at http://github.com/imagico/jsdotpattern.
+
+The final file is `flowerbed_high_zoom.svg`