diff --git a/css/25_areas.css b/css/25_areas.css index 53b8c384d..2b2abe0c4 100644 --- a/css/25_areas.css +++ b/css/25_areas.css @@ -56,6 +56,9 @@ path.fill.tag-landuse-grass { background-color: rgba(140, 208, 95, 0.3); } .pattern-color-forest, +.pattern-color-forest_broadleaved, +.pattern-color-forest_needleleaved, +.pattern-color-forest_leafless, .pattern-color-wood, .pattern-color-grass { fill: rgba(140, 208, 95, 0.3); diff --git a/dist/img/pattern/forest.png b/dist/img/pattern/forest.png index b7b2d2943..04c3c0c98 100644 Binary files a/dist/img/pattern/forest.png and b/dist/img/pattern/forest.png differ diff --git a/dist/img/pattern/forest_broadleaved.png b/dist/img/pattern/forest_broadleaved.png new file mode 100644 index 000000000..f2c102d18 Binary files /dev/null and b/dist/img/pattern/forest_broadleaved.png differ diff --git a/dist/img/pattern/forest_leafless.png b/dist/img/pattern/forest_leafless.png new file mode 100644 index 000000000..5f909ecd2 Binary files /dev/null and b/dist/img/pattern/forest_leafless.png differ diff --git a/dist/img/pattern/forest_needleleaved.png b/dist/img/pattern/forest_needleleaved.png new file mode 100644 index 000000000..8e4b2fb51 Binary files /dev/null and b/dist/img/pattern/forest_needleleaved.png differ diff --git a/modules/svg/areas.js b/modules/svg/areas.js index 3dc39eea2..7e1e0af1c 100644 --- a/modules/svg/areas.js +++ b/modules/svg/areas.js @@ -17,7 +17,12 @@ export function svgAreas(projection, context) { construction: [ { pattern: 'construction' } ], farm: [ { pattern: 'farmland' } ], farmland: [ { pattern: 'farmland' } ], - forest: [ { pattern: 'forest' } ], + forest: [ + { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' }, + { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' }, + { leaf_type: 'leafless', pattern: 'forest_leafless' }, + { pattern: 'forest' } + ], grave_yard: [ { pattern: 'cemetery' } ], grass: [ { pattern: 'grass' } ], meadow: [ { pattern: 'meadow' } ], @@ -29,7 +34,12 @@ export function svgAreas(projection, context) { sand: [ { pattern: 'beach' } ], scrub: [ { pattern: 'scrub' } ], wetland: [ { pattern: 'wetland' } ], - wood: [ { pattern: 'forest' } ] + wood: [ + { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' }, + { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' }, + { leaf_type: 'leafless', pattern: 'forest_leafless' }, + { pattern: 'forest' } + ] } }; @@ -51,9 +61,23 @@ export function svgAreas(projection, context) { var cases = rules[r]; for (var c in cases) { // this iterates over rules for a tag-value pair var match = cases[c]; - // todo: no checks yet -- first case is good to go - this.style.fill = this.style.stroke = 'url("#pattern-' + match.pattern + '")'; - return; + + var matched = true; + for (var m in match) { // this iterates over any additional rules for a tag-value pair + if (m !== 'pattern' && match.hasOwnProperty(m)) { + // The only rule is a required tag-value pair + var v = d.tags[m]; + if (!v || v !== match[m]) { + matched = false; + break; + } + } + } + + if (matched) { + this.style.fill = this.style.stroke = 'url("#pattern-' + match.pattern + '")'; + return; + } } } } diff --git a/modules/svg/defs.js b/modules/svg/defs.js index da42f492a..e81b7f8c8 100644 --- a/modules/svg/defs.js +++ b/modules/svg/defs.js @@ -82,6 +82,9 @@ export function svgDefs(context) { ['meadow', 'grass'], ['grass', 'grass'], ['forest', 'forest'], + ['forest_broadleaved', 'forest_broadleaved'], + ['forest_needleleaved', 'forest_needleleaved'], + ['forest_leafless', 'forest_leafless'], ['wood', 'forest'] ]) .enter()