From 99ace5c79181c93e059f049ea1cf4c422d60515f Mon Sep 17 00:00:00 2001 From: RudyTheDev Date: Fri, 16 Nov 2018 02:22:18 +0200 Subject: [PATCH] Expand fill pattern definitions with optional tag-value pair requirement; add forest/wood broadleaved, needleleaved and leafless patterns using the new rules --- css/25_areas.css | 3 ++ dist/img/pattern/forest.png | Bin 18019 -> 18289 bytes dist/img/pattern/forest_broadleaved.png | Bin 0 -> 18182 bytes dist/img/pattern/forest_leafless.png | Bin 0 -> 18305 bytes dist/img/pattern/forest_needleleaved.png | Bin 0 -> 18210 bytes modules/svg/areas.js | 34 +++++++++++++++++++---- modules/svg/defs.js | 3 ++ 7 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 dist/img/pattern/forest_broadleaved.png create mode 100644 dist/img/pattern/forest_leafless.png create mode 100644 dist/img/pattern/forest_needleleaved.png 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 b7b2d2943dd564a6c4afa9b6398d9b3ac5626576..04c3c0c98cf3878e639ec1c5cae66c6abe569146 100644 GIT binary patch delta 869 zcmaFd!}zg}ae@VtYuiSvW6WG;AqGZPKxAq*nTy2+nH#{;Vpx!oUy@&(kzZitlAm0f zo0?bRn3tSdT#{c@Y{#X51Z;{@(yW{k(ZNH^8e*a+$l%j7g&3qx~D zBa1XcGc!}e%~h;&9LlCi#wjLACb||D2C2HHW$3TodyYGXsOr*{l z978H@y_tU2>#&2s@%qaqo_`N?JI!~r@zm$~#j$Uv#+OIIB1hhDIlGQseZ!K-$y;Wx zWoJK>(ysD({`<~|?3?PnH;lJ32~6C*mq9?#C55Y|^F+w`x%M%(@8fE14Vd&AIzQQz zaqvudS-b4H1%rzU>pIz`ss+|84IAC(F{Rg^t6XHm-X)=^QO(51_kgW}{aQolKem`w zHU;0g0d-kvJad?y9}wQaaBW-i>m04!%ff5rHXQI;dv415kbNIN?z3IwukO>p|1{3K zY^M4?fgKFNTknOOa!GN{jJ;;ck{g*j>y+LT7G5*n?X03()@}DZvVTAS8wbsTH8wFE zTISnRYW{E*aLQ!5*RsSVRVuKjaVZ7beSRs$t z{-*j^fPw2l9J|CR`5NnE0jWQ@&RiA#e1F>t#orE$IF@wo~`y6R!I8Hl8ky zAr-gYOh4^)*g>Rizvr#Yy%%~r&MP!6sQqs)z-n&S%Xx%T-2YDr7@4-7J9B8> z+4+_e=G33FJyz}Sxl%*tC}+>FDaU4Nu(Dv1 zF$-Hk!_}Lw=JYx&mCoCT;dzrHvfRsheP~= zw^z^Dcgeus)P(6=gZBf@3dU=739@{;hi7=(Zn(5|Z9(WF;cEw`8+0CV5)hJk{Y}qR z{g3u)*$aR6CvI7t&Hwwrw6Z#_JMkQBr+hX)agqJXSaJGkBd39QXOu<%O)tjBRSL>O1&AjqC=_@o4~PP)6vp;? z*1NZxPJ30WpjqAS{%`#MnECxZf6vUre(mt=&3nc^G{!K@o|);|9QtPC_pY7jGu+tt zC;Hmmnm!UT%zNJ-zjrW?Ji3oz4xVxs7Nf=bt%l_{i@^3xSnM=gNSk3Q2Rbcat-^>k z;j-(E7hZk(e1UcC@xq--U8uJv;fg!G5y1J4*#&E3)za<4f$CVLV;~1j7y-7^Y!P^tRH44{Q$B`vCLVbq_L`A6ct@7$)93Nf>`DSofloW*e@{swP?Ihhy&qQcU;XD4&;Shc8DV10WDrE3j8o5 z+rl=jwV;u7&9->hfKBK{A+i&P+O<~v$PZWi5h3yAk%3W8>UA7@Xn&i{p`pX*;5tIk zMLN_nTsYQ({2UDZwZMW0*U?aJ95(tenuERU5V%6>Lmfq~Gr~`NWh4aHaYvZNS5mX& zo=Q_)LC}oJ0D{O57JR=^O>fu3SuWVg$@unE+5LCAp6$28PgM9plirQf^9E}mf>mUx zaiYkH%7UmE$=@f1k|78=C#mLukGgNW&ar+U<%QU^WXO8nM^1Cl2bzdBhyan7yl&2q zZ5fUqG(l8#n_wC8EpNHP_ZoAW`1Uj={e~Z)Zo#Tl;fFO3wW|5nT0B1{JPU>>8DTC- zC{;-XxCt!xw`La_ZZ)kxwr{z%(F+R80O}B^9Mo(bWddrP>F5pzAY1*odZ}#NoF;2BS2ksb(^X61 zblbF5L6&Su(vo|l-@MneuIns1ay??;j%`|^DREGjO5K6$mcwZx>VW2m<+37XfpX5a z1iCG7(Q^Sbays!?Y%~_A={6JuL=?yZ=agl@0nySqMU@@NmdgT=oGio;H(NqYyK&x+ z4WuE?%{;uPzqOb5q=L6V5W=`VjTf>4g-bqC#ji?I=L}%QwZCe`vmV+NzOS{{twA$) zYdXmgr2cc}qhqvJpm(XNk-AE>Mmq_8Cu)NLPAsGOL{iXFul;6&?uXA3#3-4W4R;%f z2*LXH(jbbeDFZWJSU??3DB0pnDCiuJL`f1YS+z7JOY>VzLrF18<*e|&dufP)r_rqy z;4MSD%4Z|X8s5RoS-!UpgEupY&{PFzg$Pl7cLKl3;>QXb`7CI)8mKtTqhXH*=rndWkWym)V%NJu?+eEIR@yajNR*9D2f`nQ3YcXIqLXN+y&_ z(9F_GXJ+q-ldeeK&6+AJf?6ueB4;V3G6!Vzbk{^Ea;hkcz_e5mSYR8O+q#&gHMP4e z*>+8RgEAUdT3mLs6y~bcWm!`%pD}N{rjqR;(&_XTYU=;x%uH9W{riY)Z?bjYk!`Zl zC;n8tPKgULnj>$p%|J^tbev)2sAn5L(sDXr-ZvM!-tF#AdGy|oXw#c^HRo(tEPuP( zzck7aH@#?C9%?<@x!qnRKJ78k{t@kEl9gc+X@=W>SEF>k-n8`0bE z8+)WdFbWcZ;v%7hbto>3f<&OWNGM?)iVLG45hyMaN?3>D!YD`tii?C2)}gpC3KD_h zBB6wJC@zeGM4-4xC}ACn3!@+rC@vC8Scl@mC`bf~i-Z!^p|~`p3(p@elPE{uXi zptwjVVI7JKqaYC|E)q&uhvLF0NCb+Dgc8=FxG)M5f#M>egmow`jDkd3f<&OWNGM?)iVLG45hyMaN?3>D z!YD|DOX3>q{kRJB&@ZaA(NCwma^DS)p`Tr0t?9Ws!)$zvVZQWbhWXD$^!-zr&mrq?oWPn@$45?H(z-8#P<&E{M_c5 zmp^@I&e(C^6<4$0e)Sq{Ojy3*+)}baIus|Hb1!{OR*g?08`F z=+t%6UB7zex3`@8ho@cl^8Ay3Jim8hSK}+sx4#>mJNw{;rKJZRyub*z96I;ZDdc|2 z-Mxo7^W=#;c0GRfgtK?i-Cbwyxa(*0zkYp!10T4kJ$C)(=b0aT|K`u^JN+FNQD9~c M&eoo|Y3bho0WuBgLI3~& literal 0 HcmV?d00001 diff --git a/dist/img/pattern/forest_leafless.png b/dist/img/pattern/forest_leafless.png new file mode 100644 index 0000000000000000000000000000000000000000..5f909ecd2a9490bcbc220859b96f3a12eb174223 GIT binary patch literal 18305 zcmeI4e~cVe9l+-}Fy$_dG*q$tVTNsMtnKXl+S&P$y)EVT%3WmJ%k@aFCTM48-rNnh zJG0Ep-R)gMQbDnrrd2T(vA_WaZ7OPNYoZlRV<3&cqQpccrop5EX_|l$VhAd}*_nMi zyEj`NTs0|qm)`BSZ@%B}oA2lQ-uM0ZW4}1Q>-Mz+HxE!0wRUW@Gyy;9@ORAz;9q}f z>2>&VeSLJFPf>$6hQEE(!^b{CQ6qn~C#Qm`@*SGt*0Q?kRzS8F; zbOlV?&QRvnGe6JJwmFp9E0wu&eHhHxqe~vxv$Si{Sei9dGqb%oP-tk-K@9{t-KbR^ zUuz6yntnAXhs|t;ZmI;cLzx|6hxAl=oE~;PKug&?WALIv%W9UFR7J>bqXmx7vz*HE zIfmmkPSrS`j(;-60Vowb)6ynNJLB%)|AsO%K~UFNc41*5yC7y=Z<^&*Rb@GW6$A!q zF#e(w=ncm4H%3lceoDYMJi8v)u0w}@^@=+e3}rH5N9ZSxt5!!HIeyFzQe+!?o#nF} zn`UGh$fiE$RhzG78Z4-S8gK$1+VQD&^%*yC{Ta7Mm*{cNj$uy9Wz=`-`_^iyUHiev zJVX#9O||qV7wdqX0KPlt8DL}{hO#j&dOw%|?d)Kv$^{^zd*vJZ1Xhdu_*b7yK;+w%epVaN6ELNe@5~ zS}F|BGrTm(OIq{aR!-13F5x87?DA1|P1{=R^pT&0raTYbBz+__yM4fkXzGEEJ{RGo$7>NjCBY zHmm~BMf<(tu@SeYySDOqfzRax2B@MCyH*X0QFvJu6pPR2B|hDC)Y=(LlGNo;gd?n6 z*2Ww^&>^X@QV}*}Z5Xs+$^uX-DkE{C%5Zv4Vk#gfGHTx7I9|dCXTv2&uO@WDSWFlTP*f9e988v;;}|QS(;1yN zU}$pA63twm)7!D6xLMKFs2vWe#m)>jhtwW$PiJd;NHrISy6*WPEPX?nR_#NpNi<60 zvC=G|nr?*4O3?@l3NQ<7M{E1FkYyoKuvexN55Wra-hC|00OxWADRR}+>g~jLtzbd- zz>aA+RdH%%B)POpS}7N9b!oHO98;#5W#c~RtzoNOpk zE6s^4c83@SlK|YgE(nq)97EfJ=wvxiuQCSajghdc9t?4LzKl?7U;fTRF5)v;s}|_&>&K0?&Ro z<23P>2orsk#k}g7DJgv3f(siX%a+Q>TsSi;ip7|QRN=)65Cu?arIpOg_KFj2YF4qh ztvYjxDvOF7?o=vbg;7knQ&DmzU}ObUI7?FVf^4iJb1V1Bq^8E(l2zB#cPOJ_rA1}8 zmBK`|x+-hx)f4loXC~emBAQO`p{BksXJ)hq>O4oZ&RHwZ9j!xFwBqj!_bFjPhI8Z{ zju~+K2yaTX1ohUz54W6lnRm>^*t;1Y!h4?m@XpiGt0tVK_2sVi_!sq(;-=kOD-WeM z?!;-Y5MCr{@canRGR>V~5gyoAv?aVXpG}45!0KG{oF@w${9*aWSAsvDXp}-LcE*wfohu}ge za0G%2hZ52uxDW~)f#AZSgmeflgaSt(xNs;T9fAv?z!3;897;%s;6f;Hgv;U@Xn$`D zaNw7pTswRCnyp9H(ra!#`LV^#`;Of8(1kzVc-@O@KK1nD2R5Ag=85Ol zQ{bmZKl+1B!*5QkS?+u7BsDott+U6@A3FZz-_Ns895{IDxyQHl9qYT~eXVxrTbmDj zVeq%x)PFOBx4t}Z_m-EQ{>Rz3DhD6F@afWd{-z^8{`%m#56yDl=FdL(*k`|dtoZCx zFZ|?}r++xL{F}qK_kZrYZ@j$z;61%KGi=f$r~d3%?aA35=d z)8D`4(gQDD`{MFjheonboWJ{(M~m{E8-8`>_w>Ez$`AJc?eInCj=Mhm&udORdC_{K n|N2jC{L}8&UVZ!U_I_&9kM=*ayKX~j6g4)otMt9w_TTqkZipET literal 0 HcmV?d00001 diff --git a/dist/img/pattern/forest_needleleaved.png b/dist/img/pattern/forest_needleleaved.png new file mode 100644 index 0000000000000000000000000000000000000000..8e4b2fb5163d30603d8cda6f89b09a76bf9bc595 GIT binary patch literal 18210 zcmeI4e~cVe9l)oxkn;p$vBAb@9G8?RbasC2?9NQ~wmojI+>zT_?oPTFHSl)k&EBND zGwaOU?e>fY@dqI>(GzJZAto58(8M2&N*XZfS*2(UMxy}(35xzfL?e|zQ~s#>W_IW8 z?A~s9umn@{Hg~t*d++;W-sd~-JM*1C=I#UgZ@O~)1LF+CTsb>aoJZem_&atv`s=T) zy^6lx-I!VO8Rk9j3xBsT_uapfVWz)gFP4LHX-+rXdK#E+1*Ti|2GVAj{GL_=7>8iM zR$$e3CQ>gyek#S<=0xhCQW8pyDY$IUta)%@ZU3UNcF54o)Skk4zNI4vbr=A)Rj)a| z-kL~7esv^=!+eU3RDwejsmU-PTP_`7r(6%RN;=CKqO7txEiEdVDrI)Fk|1VzLF2^? zCy2VB>4M01KB>YulJcHu>GQ>Xop9*CiPUlsG<2SCHk;|DoOZn`FKU{`3lc9$9Ma(Y z!%hHNoa0~Hb`tw3Lf`Q0Mqs-R8~OzmcO{rerNTh?(^*%&fde^yhaIBGw?Kmz(*i%p z$TYA`W5ugQhh`c)tid{T0w39l1MM2iZs7XM?vRjpdT3yjlTr!C9(cU<`oPeBFujTp zbdV0T^cN2|AU_X%cf~W{^eS4)wS!jg2lKF-9RgQKeW0Vjwubl#XNE$6EqjPrIMX(Z z&Z%~)^9Y(gYC+K%Zq{g37Oev|Hr)Aa_6AbEakL+S-D(SM8^pVi)_klK|2?9XmC8?Y6 zV;Z{UdUX&K>^i7IzTs5!e0MORiBC^`%B{H`IxJX_^ZcOUfmTJ=SPA#Xq+>uICBsi7 z38gBk05^ha?`S+xvkUF|W4eZI>fN9)3!nx;j)SVHp-e!Pt5}-FL5MP=WdtQ>Wb=Gj z1(1vGafN=P(cXy3$r}iBiBO~4l;7i5H${Jvea3)W>}mm<}^vQ#B5d(<3I^# zn*x2@v(a?{)Dk-3T1>PSsA?t@1Vj{M1kTE400%@v7-8)%7~!smW}fdE?H*RY znY}rkWC+^+6XwHXG?$@sv8vH_6=@B3;=5MR1Rk8MqWwft(Ar*m&HCLB-X(}pv@>h= z2#N5)>S$>Y#atx=D&dU<)Hp4dF}QG_aX=PjSu`>^Lq)r4v@}SHE@k7w`@c&=2)rHL zSO!iNngu>ySv>F#X3lV(Rp`B$O@y{8KzE1`)pyHt>ny&kuz|~hMx$mMAl#k&s$+KU zw{SI&7n<<#4zAUNp8aOd)5K9?Ozb7L=8<=%qKa8d01}tWSsIrU!kt-BEzUHQiYQm0 zEWt{g*0)+9>CTLE?i{{E3-9ti<>5=`%Sx+pK$D;Aa$bk4JWL^M^f$QB@5^=EG%RdMMj-U|8T#>0lNij z<)V$Am-t~PE2Bt}P5;C|!=+({iHVM3d)p))m_~_dkD|x1=t(e-9|b3JhCAoCU+Avr z?e~p6(jXWGi9m6YP{KMC7e+xMP+TOGunxtAQIH4}7YQY-LvdjgBm%`nLJ8|oTo?t3 zKyi^!!a5WeMnNJ_TqKmR4#kC0kO&kP2_>vUabXlB0>wo_3F}Z?7zK$yagk8MIusX1 zK_XCGB$TiY#f4Fj2ox6yC9FenVH6|+#YI91>rh-61&Kg$kx;@q6cxO^rH;(e)k)(3f+y-~uk>4Dz9{kCV(+_Sx z`O^3N*Pba{{{o{v(me6lj&ELe)obUz_L%Vbd$zvb{P_=FsV?t7cJm+4oY}K}=Z+&| zSKW1AIi*f3-`bVmcC>u@hONKay{?T3C%$ykwz=Ied}QMnSC^i8_;=4g^U0;tfBi5T ruI`$v-2L=(C+^+#@BG;hGEe%S{^fJ)3lrg6Y-XqT7r%ew?RWkchDZOt literal 0 HcmV?d00001 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()