From e3638d19b955013729bfed5ca4b8342c4bc96d74 Mon Sep 17 00:00:00 2001 From: David Mease Date: Sun, 2 Oct 2016 18:39:58 -0700 Subject: [PATCH] Random scrub pattern --- landcover.mss | 20 +++++++++----------- project.mml | 2 +- project.yaml | 2 +- symbols/generating_patterns/scrub.md | 10 ++++++++++ symbols/generating_patterns/scrub.svg | 9 +++++++++ symbols/scrub.png | Bin 210 -> 13127 bytes 6 files changed, 30 insertions(+), 13 deletions(-) create mode 100644 symbols/generating_patterns/scrub.md create mode 100644 symbols/generating_patterns/scrub.svg diff --git a/landcover.mss b/landcover.mss index bd83fea3e5..fabb2417a0 100644 --- a/landcover.mss +++ b/landcover.mss @@ -426,17 +426,10 @@ [way_pixels >= 64] { polygon-gamma: 0.3; } } - [feature = 'natural_scrub'] { - [zoom >= 10] { - polygon-fill: @scrub; - [way_pixels >= 4] { polygon-gamma: 0.75; } - [way_pixels >= 64] { polygon-gamma: 0.3; } - } - [zoom >= 14] { - polygon-pattern-file: url('symbols/scrub.png'); - [way_pixels >= 4] { polygon-pattern-gamma: 0.75; } - [way_pixels >= 64] { polygon-pattern-gamma: 0.3; } - } + [feature = 'natural_scrub'][zoom >= 10] { + polygon-fill: @scrub; + [way_pixels >= 4] { polygon-gamma: 0.75; } + [way_pixels >= 64] { polygon-gamma: 0.3; } } [feature = 'wetland_swamp'][zoom >= 8] { @@ -625,7 +618,12 @@ polygon-pattern-alignment: global; } } + [natural = 'scrub'] { + polygon-pattern-file: url('symbols/scrub.png'); + polygon-pattern-alignment: global; + } } + //Also landuse = forest, converted in the SQL [natural = 'wood'][zoom >= 13]::wood { polygon-pattern-file: url('symbols/forest.png'); // Lch(55,30,135) diff --git a/project.mml b/project.mml index fffc90702c..3de7f8086b 100644 --- a/project.mml +++ b/project.mml @@ -280,7 +280,7 @@ "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", "Datasource": { "extent": "-20037508,-20037508,20037508,20037508", - "table": "(SELECT\n way, surface, \n COALESCE(CASE WHEN landuse = 'forest' THEN 'wood' ELSE NULL END, \"natural\") AS \"natural\",\n CASE WHEN \"natural\" IN ('marsh', 'mud') \n THEN \"natural\" \n ELSE CASE WHEN (\"natural\" = 'wetland' AND wetland IS NULL) \n THEN 'wetland' \n ELSE CASE WHEN (\"natural\" = 'wetland')\n THEN wetland\n ELSE NULL\n END \n END\n END AS int_wetland\n FROM planet_osm_polygon\n WHERE (\"natural\" IN ('marsh', 'mud', 'wetland', 'wood', 'beach', 'shoal', 'reef') OR landuse = 'forest')\n AND building IS NULL\n AND way_area > 0.01*!pixel_width!::real*!pixel_height!::real\n ORDER BY z_order, way_area DESC\n) AS landcover_area_symbols", + "table": "(SELECT\n way, surface, \n COALESCE(CASE WHEN landuse = 'forest' THEN 'wood' ELSE NULL END, \"natural\") AS \"natural\",\n CASE WHEN \"natural\" IN ('marsh', 'mud') \n THEN \"natural\" \n ELSE CASE WHEN (\"natural\" = 'wetland' AND wetland IS NULL) \n THEN 'wetland' \n ELSE CASE WHEN (\"natural\" = 'wetland')\n THEN wetland\n ELSE NULL\n END \n END\n END AS int_wetland\n FROM planet_osm_polygon\n WHERE (\"natural\" IN ('marsh', 'mud', 'wetland', 'wood', 'beach', 'shoal', 'reef', 'scrub') OR landuse = 'forest')\n AND building IS NULL\n AND way_area > 0.01*!pixel_width!::real*!pixel_height!::real\n ORDER BY z_order, way_area DESC\n) AS landcover_area_symbols", "geometry_field": "way", "type": "postgis", "key_field": "", diff --git a/project.yaml b/project.yaml index 29aa170535..e492d1cca3 100644 --- a/project.yaml +++ b/project.yaml @@ -294,7 +294,7 @@ Layer: END END AS int_wetland FROM planet_osm_polygon - WHERE ("natural" IN ('marsh', 'mud', 'wetland', 'wood', 'beach', 'shoal', 'reef') OR landuse = 'forest') + WHERE ("natural" IN ('marsh', 'mud', 'wetland', 'wood', 'beach', 'shoal', 'reef', 'scrub') OR landuse = 'forest') AND building IS NULL AND way_area > 0.01*!pixel_width!::real*!pixel_height!::real ORDER BY z_order, way_area DESC diff --git a/symbols/generating_patterns/scrub.md b/symbols/generating_patterns/scrub.md new file mode 100644 index 0000000000..9327bdc4bf --- /dev/null +++ b/symbols/generating_patterns/scrub.md @@ -0,0 +1,10 @@ +The scrub pattern is generated by visiting http://www.imagico.de/map/jsdotpattern.php and using the following options: + +- regular snub square ('5' button) +- distance = 45 +- radius = 64 +- radius y = 64 +- metric = 2 +- about 10-20 relax clicks +- 'scrub2' image +- use the "render (px aligned)" option diff --git a/symbols/generating_patterns/scrub.svg b/symbols/generating_patterns/scrub.svg new file mode 100644 index 0000000000..85ea639008 --- /dev/null +++ b/symbols/generating_patterns/scrub.svg @@ -0,0 +1,9 @@ + + + + + + + + + Created with Snap \ No newline at end of file diff --git a/symbols/scrub.png b/symbols/scrub.png index b43233aefb0bc525547eb12e1d80f0aed01b4a51..c8218985c346b5f0618c03730b6a3bdec0211354 100644 GIT binary patch literal 13127 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

K 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 A_5c6?