From d33f124ca3d3d9a4135f467fb9bcf13963d1f5fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aleksandar=20Stojiljkovi=C4=87?= Date: Mon, 4 Oct 2021 22:04:14 +0300 Subject: [PATCH 01/20] Render tests for #11041 (#11070) * Render tests for https://github.com/mapbox/mapbox-gl-js/issues/11041 * Ignore https://github.com/mapbox/mapbox-gl-js/issues/11041 render tests Ignore in gl-js before the fix. --- test/ignores.json | 4 +- .../expected.png | Bin 0 -> 134638 bytes .../style.json | 149 ++++++++++++++++++ .../expected.png | Bin 0 -> 134638 bytes .../style.json | 144 +++++++++++++++++ test/integration/tiles/15-5238-12668.mvt | Bin 0 -> 85968 bytes test/integration/tiles/16-10476-25337mvt | Bin 0 -> 37685 bytes test/integration/tiles/16-10476-25338.mvt | Bin 0 -> 54164 bytes test/integration/tiles/16-10477-25337.mvt | Bin 0 -> 50593 bytes test/integration/tiles/16-10477-25338.mvt | Bin 0 -> 33272 bytes 10 files changed, 296 insertions(+), 1 deletion(-) create mode 100644 test/integration/render-tests/fill-extrusion-terrain/flat-roof-over-border-of-different-zoom-zoomin/expected.png create mode 100644 test/integration/render-tests/fill-extrusion-terrain/flat-roof-over-border-of-different-zoom-zoomin/style.json create mode 100644 test/integration/render-tests/fill-extrusion-terrain/flat-roof-over-border-of-different-zoom/expected.png create mode 100644 test/integration/render-tests/fill-extrusion-terrain/flat-roof-over-border-of-different-zoom/style.json create mode 100644 test/integration/tiles/15-5238-12668.mvt create mode 100644 test/integration/tiles/16-10476-25337mvt create mode 100644 test/integration/tiles/16-10476-25338.mvt create mode 100644 test/integration/tiles/16-10477-25337.mvt create mode 100644 test/integration/tiles/16-10477-25338.mvt diff --git a/test/ignores.json b/test/ignores.json index 6cdca5868ba..14aac644ed4 100644 --- a/test/ignores.json +++ b/test/ignores.json @@ -32,5 +32,7 @@ "render-tests/within/paint-line": "https://github.com/mapbox/mapbox-gl-js/issues/7023", "render-tests/distance/layout-text-size": "skip - distance expression is not implemented", "render-tests/skybox/atmosphere-padding": "skip - https://github.com/mapbox/mapbox-gl-js/issues/10314", - "render-tests/terrain/symbol-draping/style.json": "skip - https://github.com/mapbox/mapbox-gl-js/issues/10365" + "render-tests/terrain/symbol-draping/style.json": "skip - https://github.com/mapbox/mapbox-gl-js/issues/10365", + "render-tests/fill-extrusion-terrain/flat-roof-over-border-of-different-zoom-zoomin": "skip - https://github.com/mapbox/mapbox-gl-js/issues/11041", + "render-tests/fill-extrusion-terrain/flat-roof-over-border-of-different-zoom": "skip - https://github.com/mapbox/mapbox-gl-js/issues/11041" } diff --git a/test/integration/render-tests/fill-extrusion-terrain/flat-roof-over-border-of-different-zoom-zoomin/expected.png b/test/integration/render-tests/fill-extrusion-terrain/flat-roof-over-border-of-different-zoom-zoomin/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..71186ed4f7a20ee4bf81dab275475ff026d3520d GIT binary patch literal 134638 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

b!*bgh1wqnXm;FVicD9=iN%8kV8%2_Vc*gUD8GX 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

b!*bgh1wqnXm;FVicD9=iN%8kV8%2_Vc*gUD8GX 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�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 DZK@nC literal 0 HcmV?d00001 diff --git a/test/integration/tiles/16-10476-25338.mvt b/test/integration/tiles/16-10476-25338.mvt new file mode 100644 index 0000000000000000000000000000000000000000..e70a8589b9f34ecae5a2cb8f924169e89395cf87 GIT binary patch literal 54164 zcmaHUdtg+>+4s)b+sxUs_xonE$!<2A&E~rIOYY$w5Fx15s3;Ls5JAC9z10{I5iuen zVnjqlN)ahiL`o@Auaq=-lnDI%p5DPsI)&zy7S__5#TA13+j^UOT++-J_5 z#q-^V;HL}=yC0l9b>ie{cZGXOEkXF=OW!>WT*?58+IlK2)uyT$MvFnA0DxhXN|j2j z)@U$QAEnw6vDlzBQ;6!-?U%)|E;}uWR6JIQ>eA(}1*!pOo8{)A$st!$mBTmtKAM%6 zONUnawzgUrl~z%RY~b6i0@>CiPo|fVX$ASq;fgC;1hSsib*&bMrA$T!C9;*$q??^{ zS}oPN$ucq|kX67J1a0V1+m;H?_}HM?z^$j!iQ`qk*ZxGL)1%#ixvies%ydPtm=cQm zt$;5|gzHNeHhX4Foiz3SdkPW0BoS^aS=IFaAzb#!wnwr045)2BXXyj8zzbj*kdMgn zrVYb)1*2igb9T=vunA1Qy=jn~k~l#ap8Mlj-f#xAz4e^mqnHb-jL=Of#dU|_ThD$Y zP%bgIS-xkMGk*hbF_coL5@&x!SdRhq`_?yldO+8>hn~ENQgVXQ!|?L6#Dw|TPbWNz zU0`gLtA}^2DiVik=x_ZEb;Ws}?#}o||hJRfy zu6=#k0P7h(<$dteVX`sxf}EAGPgs!=%{3l~dQ6L%C!qON+2Td7tb%U{YBHlM`hzOZ zYH$in>i9YMN@gdWwElkyVPilC+-;uE!CG+bUAGhnod`U4>fpBww!I0RFFK#|%mvq7 z(*vFZNBioE4T_xHBjy=(-><;qBk!lfiq@)v%ZZ~}Q1cNKxD3vMd+#$_zX1O$8x{%f z5`ixX1~Z|h#zhStI0w7}SoExnRurKUek+JzM3-6)#{(T<#ogIyGi6H?bsK>%O2ck3 z&1>+mbHJN`)fO5y0>3&zd>e~Uy1?&A^Lv=S#Gw*@GDm><6y{h+dVAOKBHMv=>eDGakb-@CM*?Zx*C|S)$$OI+F3s z2kqCa1}}n^LNa{%?W&8!bLOM{yn0^;9C}VRuIM=tcuLYkulwnS<}P@AgOTYdp#NnZ5JO1MDKn-Q%E z&q{f^$G?YD~?=+6&-mpm^&?V-t;3!fETWs%!u>+hw4n|Di`q!X)R243L$86mUjtvr=*4_k3lB?r+@$GeBR0=Ni$P-W z9ACE1tvUqVkC1SHph_3>MT|da@)Ex)Es%fv>>C_+yk>l)eV8 zAYNlbk6(n5#Y`_V?nbTpzu;?NwNr9VNUU{msZfgSsK>GgL{?zo&74YeQ|r&cmoi(? z@ed2B!iqNPS2jcp8^8#avf^3|dR|5@W{X;QR8Wo$&9a^1BCKIK*bnX+(=_(p7i9Ew z_+^r5ciAteBeyt|hMb{tHFz16Q}IReD!5nhG&AZg->nY}pQ2m= zO}i|S8=!Ls^E5!FPe83Krl>S;NN%=(n-hyDY!Rj5EO-iNjNcc~OdVV%S!$K(6cbqq zP68tf*|Cl9f^P~iRKq301QxW-cQO&_2&uV*_x_{ci2`0+1=mO!^_=T;V`SR2Cx2E} z<_`=TK{X@FUJXx6F1fR0moMTQT*SFjpMvp)T(TB^EotV6<&Y(!*n{<=P<#q}3Pr&H zJT1|muH~WN2ITTUkk>yqNA?${)pi) zcnqSKfL5U%b~Sk|{7`TlJiL2LQ*7F_+s3!FG&I)K^nfQQz34l&@DGwW3#zUJBb|xo zz%ej$2o@*cp!8yKh`{qg|7*(kzk!bKkHJDv;u>}vrKMy4UK)E{Y)@t6mdxv*hq-^q zly`xRyPCcp_H8DcU;P7iCwOh6(f$_rbAiCEgBt~n+R-<<(}WgA0W=(T=t&m(<2=CqawGX(?u`I;*@0i7pz0U%&YDi8(Ls$hWL^ zv`4qSI-;63UtPo=1@CGCxZyr=W$;L`%GR}a?-Yj&Vjjsp#``JnZhbvSo5c(Ph$^@Ku;I3O)z zXZc1$B$UZ7;vb+N44Zs4c`bZi@}!f^OY38PdfGoIWM z-1j4x$uu--G;Z(Tz~2h2q8|QNs0t3W#<|X!v)pJ?x*ix|()g~o)cvynM=d-h$Yn!w zT^mvCh8d5I_l3r_Pks&{*&&q}MD_4J!Cf6_Me(+VoX1kH8=feuhj83OPXpP0N6a(z z@F~eVmT>EEVwwjuH++oy){j6)2}-E>M2;xz7b4q<&Zy?p=I|b)Ma5V~XmtMuDWE7I zRuukAC_heg$-Tm#GaLbNhB3t%h2G8R}%wTNyKg|nqu_GM<5=DGq(&d0W_ z0m%1oRqJ~NW~qmlBqMG#o^a;+K)~9?GS>0em{D+qxzHrN(j@z{{iV6R`(6kz8 z9go$t%6FAiu0IKFsuRs_Je_C{COpPK%5He_I<;oVJyV7hn&lPAEQ>Y!YjW&5P{J@i zyFxYUCXMkmS^5;cB?^BK(x($0NF6H43uX#%gEj&sH?y+6u#W#q1#8`uZTCbRddR7i ziZNqTC5~bDUM*NX{7zEXDekf(*9#iUMw>L1<45|9fgv&vqjLRQa+d`~M@w^tgTSm% zwU#pq?i!6*e)dQe_PLZ(j@b^YV-}aq*bjDtNuyr{{{yTAY+naI5mJO5UGXio#zx)! zcbp=MEA?zm3y0`JM6qIUt>9lSbkK4znsb;GwhW^^i*uE%o-bC}C|oJ|(@4;TI545ZU_gAXW;NJibOV>j6byhHn6J6Hyn_|mx28QgUQ7?es0-Ld@z`iUF zR|rkE8!a?1W^$|W31@{@qp9*K)kU^q?Pt&?fL;mBx%+vQSm8hp!5*??79%$3rg_k8A@3&oX<_z0F1;d2g43l@`Li@Wqcu?}mHNK6O*qFON1ItO-8Ukg` zB5JD^{zqsaY-p*c6w|*C=7MOjWn8ISUbjU07(5~z%ec@k?E!?1co-zZkj>U+N9f># zg-$5z;eP~WInYL5zc;7hIHe<|Q+XP{#D}Gi6!NZfl6v=O7nkMm(e8s9#^h%h+f6DY z&v>HO$KX3saIHqmV>t!q0E{J~G|k5wMQDDvVE%eqa+Q5G$BOcPAHuo&u^MQ{xjQIp z0BP|$FG+TmJLJ!~Rxraf442g?^g4yJP-=<8m6G4@VV7ug^T2js7p+!R_X2 zV6akI;Dogvt`c}0XrE_cJU85<<}4but(3d|EO?}f8b{Q06rPn-aI|=KQ7$+JX`san zO@Tjy@eR)ujN*BhNHKPxdFl1#xu0>szrPAPagFrKl9;%XdN@m9aiF8|)4m+uBXOnN zh+Uw;>1=I~9gT?`F}PUB6fSgBc{Y>_s(>x1D(+>T1$yr{pjmdVD)L0(KB?rbXgQW? zcLgm7hk!Ped!p0t7&4izMKmPtccjQ)&aSiP=7Z6Vf6-VJ2;c=-GEw0<#lFRf0z2+500hEk&REbhc<)SS6 zgh`xeSLjrE4(~$$2~5glok}^Z9spSqqbx69B9A?tXm@RYbFQ@q{0U6a7grL_{=cmcpX0(xOdQX_!J9L9&w@= zoG)_|XY|u8O zDw1uunk5cD7V3o?T?}0|=BnGZDo^-xe3FIWkjaO^O9i4i3I8tCfFg8KwO-e*(c~Zh z-7!jwIIX`*2lE{hol9I&6s`~~FKh6?4I_ zflqdDCF&p!Kb7>ox^lj~-873aGeBR$C=4St3a9aFnc~D1#o;?r0a>hHs>U_c*5T*-}O?a4HDCa;{HT? zz@)LcIIYdc-FgH(62DvCbBKzF!kT@htjF0m|&Tu$e1>Ha-_5^1#>^k%bKlgwVtl7PPwSUhN<{d~0D%a{zM zDrF#~DmsoI9U22aews=i?c}+Hrr#Hfo$_fwKA@q^h$Q2#F~C zyW~I%>(*A}TqdLU#>_9kB4$WcFk9oMY7i}yg3k#jE?(q0V(ZwBA34=TI72e_JAC4r zOS7EIZg)~XQR8v=jTGlA)a%W;H8}c`5y*{5Jq6ywMvfP-Y!d!iNL)o|vE_)rgFoX? z*wT!`tY`F}f<`4yd{CvXM{$<)~FOZGo$|uWR!(!Yy$pX$SNMR zGBnHH0e@PqVuB%{85LJC+*p-Sel0@`js!d-?A|?Set4m~V|>8bs0)-&RU00wX@4KE zPG7+a_!ps@aiir;TT&ek+|5AT%>+|ce7b-%Z3UjjB;a8xU|^-ao$UpcD#jH7np+g? zQ@B0&veUhQ~I5&GcGN-^0lhSBaF>D2!{Tj3zRRxrv zf=2~k^rG!(iJ?Qonhn)Ci+)Bwcw+n;I4Z-%YT2o;=)+0)bD@G1;3A<3_MpS@U5)MG zF=6eQPuD)6VTf4xLS=d_^zOR7wRoLT!mBdjW2;EOpVj%yCdq&I%WF;(LoY$ zkDv_?nq55L?(hw^LQn1+aCiENu5xG!8w(|oIQ&*{D>qtGF)!IM^_IIHSE~n&v6?v@ zLTb%0Su-uFA_@N?Y4CL8u1H7Xr_J-ggNfoHEiVFt+USqjm9kEavi)0lHc^C*CXNR? z5*pyM9|1*5Wn_ew(R-g|>Qz)3qIaa>r-BZPQNQMlsRJ7929wRE@5A->-ZAgui-WCo zI9jiA#yH$8)J`|rTywFiBNx*dMh(7WhF;e;sx9j+N!C#&I@^9BV2aTd<0jN$@tAZA z@j=Ffj(7003YS%@4Han$Y-Ez~pHd%j-nv55?g==|i}B<2$zxv0Zxies(#p&xDg{3u zk;=@m#(}2x+7OHHS-c6h0js$vaP1(kp9(1+&cxwSsok6F-OscKs!h7;TwUm6{P?Wp z+EkTZRxd)bH_eTS>W|i#CmJvdA`r;=+>fjHHj%#!IMuB|bp&1SgFyu6P-I1e_(Ubx?Lx zA+p8cVaaH{nM1Yhp?VJ0=8W8j_`$coQpZMHs6MFgACvO%e8W0t$6Syoxxt_*8y~l- zO=dOnjxDBK;#5g^T1u&VtVg09qc!*}jlm5zV?70)(AmBKNVe}1CriTPg7S-SuYHW| zh-l7$pwipS>L>n0_g7G&a#zSolc@eQ>=#N?G1|agRCnY{lij3&V{>YCesdEm)7Tv{ zyHPQ}7TT90w4-*Fx1-ai3yjzel2&MMak54D%twBJC$c5rw?ede(22UufsUBZ16(HP zn!X7bQAzCPv`cn&ExLaS4*Z&23c!_6y)D+^Fxa-@3oESo9i|j0%pRc7x@6X-O8Hz; z%ITsb+78H^27yuyYUc13wK`W>C}kz#f29=JSGma7;k9Tisla2qfjfc?R$Eg~yZ1Y>zg*rw-V5(Q)@&rop&Z5E$JpU@lc9F6*FAa5cV783PeI6*o`23~D3S5P@ z=?S<~YI1i4PN0r(j@5>nr{iOhr@#$0Lo($~nP*WCxgbrps_d-0BhhR#<_5n5`ashN zyDiz0i>eAVOKJEQp{y07IgU%EovIuM*o&ZnF>@7+Q;)s`8U<*hmJ|Iy1^*+==S5p< z)|Yln9bA@sa62&Tj2^#LYsmWN<7-Y>gf{jOCjz&XkFdDWJhMG zjx|`!22Y?aq*p!-rrb20a#5wcCln7anpJxugtM34gac)#tI14}Aonti=%d z67b*BZ0G&Uqa8mTdjC$KRhoT9q|p@_)$AadM~hLHgD(mj?NYP?%(Hbh53a4uG!}bP zIiEX`c@F&S&-hWF$E}l{#ECPe;pb9QbJ@7U(mBTFo@!v~cH<|Vl}PQo)|~nbgbMge z5?+*w*8JeHSjT;%Ud6Xo?RseR+x40vGcY4r&J^cM!nY+e?95$g=%@~A)cI@RuYirX zw|4r*4hqWpSJ7M2aKE6?Vstt+r>3Jc%xV+OR?|oLzzd&%vNa96fc!?b7!A1E3G)@B zWep1woi-m-$Hq(^`X;z@$mBI(y2)kH84H|Vq~UoX9*WV4=98seLp{3Egr#x@@|xAw z)Q}=uvP2h|dA04+@EeJ-KYF6L6W{By;U^r%+N9N%9OBgI2Y*=bp=cU@C6tq5w77VK zy0e)r+6=w`WtD1f>`)dqq#&ceLDpZ2#VZBBmNLb<#Hpsv;ApLi^EeRec#iq0J8RVH zOB6*^Qc*Wacv;GXyF$nDo;ZR`VSENrTlyyU(whevtWntxP;|F6{EuMyVzelfYXI&PTwAy^9BB}RkMY*m<@3aeViCcf~M zf$xyZ)Fo(*YOA{4z;HP4?qPn#EM@$~uP{G=ZOs2NoUE!t;qGt}{!;1~x5dv#J0hu6 zWhC_j*ae)$dd_IYepBFlEDcXchB#An1a@-F0FD8Lwy_cF#uO{xVyaYry)0#mhDgKL zq}FPeajmjr4ZuerKESzcW`)^cEqVbr;7HaKh*5!e$3o7=xt`r#)H&K`(7K??q4TlK z%_l*f)fm3Ez+Ny3e)d%^HNbR;m# z-I*Kx0Y0yv^bF9rb5$lsu*k-6hEmztoXDAmR|L*tv^u-Hywk%NOzqHl0w@#Hb(*XZ zI6lFh+0|2K;UQs#C1^WX80gxG1GggOutb}08|n15#e+4&vWYg6EOU!)nuVWAtViuf zyj=`890gAUv#DHTRs&-TTk;v;04ShWoHhj3Vzk?E#M?O=ILglhtENJ$M~u!4bS&N> z7GTW69|Tt|K?BC4(JlpR0}59?ux(_@7`35=(V-&7{)y}vw`j`@{6v`3hxT~q`nyyq zlLC%+C{zI_zDF<_GOjj_S$=~`jQR+f-@V8_=azB`TaNER4~oGE+y8pO-s{Vo-lsM3OU?>=`>GVH=@37M5@dwOCREd zY51;`$~PxY#yTSjl`_}y9p0fTRoC3%GVAoMQTbIlkueLumu#}id=T5jP^wT^LJHMc zP=z15-^8dtU^u*aq~0gGPzL@(h-e?0>2pTFu2NRbgU6GWI4OageKO@w0RY|BWt7=b{y2p>a zdZB6fUun+e<=f(&xoV5MKKMS)Lryc)6+6u;w;3P#Ty;i~g~x?H06V;Xow;jhs_g~? zd()#DRb6YmTxV&jS&VO1ItrX)W#L-E6G~8TdO^BtaK>HwJ~#;Oy53|p>#w`RVraj{ z3v9Axj+%6<#5y~>DBC%zxuTY1-^2$hI^>Ux8^-C^;8zhjSym7;Q5Ig14AWP+(cRq@ zu(#?1<##LD2dhH&RGT>5uDTk$vU*8p{ZjCT5_H}(3v_ngsnz@rpIG=kRcVXfSsZZd z%Tp2v@Riwk73EPP5h ztSmvhg9oa+M%Nm>3EyM;LApfEHk5U}3e-xQU#q0E(un&(C~G+4>MsPkG64thn4qJ) zdF(9UHoC*(;-1R;K9qR`t@*!^(%Jm%hWf5>z0Fvi(6f^|tAaJ5{7F$=gZwy!&bdyC z@5Da;p_oY*s@HSB z$1m~wy(JZ1XH}Y$wGGs!f0Y)x1uph)QR1oLP z!U3te&8k>f+m(x`q06GT1w9oxt@@5WFlof?&*8mbAsu}oXnVl^gZsYPM%81#;S%^88JTbF^yhEYy21?S*KLEus}ulitlmyNTi+r!R~ zQklP1bZuR@t;GD$?|yV*Av#44{#sJhvGlHVS4VSA#=z+#mHgCJU;fALfn zuA)~oz?X%sy&oM?4LG{5>vY%~b9zH*X+=1d$TlifBS&b|ui^LbsnC@986hG1(dx*d z`tHFQ#5wTGW;V;qU_FReS{bJm6-{|kDPtBrqXAwL>Z>0eZ#qyqWvEBV8B|()55DpN zozJMY#s)bpaeu)*a06T*i9L(C;_lvu?;RN}EF3u|TBn8CG}KPNr?!sK`wG;K2KZlT z=2I;fOQ#HWDGe5=wiz^vSlR7*CEk6zZArgAaz9-&75i6$q5SA%Ln@ne8Pm zi>ocAgXOsF6#0AdSEgkz-HDcJfJdZ~w^TjL*S#By4IFNdT~Sqi@4Y%MnPhb}HKRrp zdSK81pB6&Nk4{%@E9o9xUsP*i@7(~(8l5_Pa#Il*V%5#~HIVOdL{l}vqr%K(XgM?2 z-|exf)Z1~ksfa0TcCVFD!%x7kK%zxy=L%%W9Q;gRFGX8$Pt!fBRBJFnt*P4PAB~g^ z^FV{!2>p6|gmhIvHNX=>_P~ZVoHKW)EPxGhx2|H+X03OSedymogtKIIN<(EK=3h(d zUX?st)g6i99YFoPH3mpotM``kUj3$@uO?=yD!c9x@ zB^UYe31yxoh4Y4*9r5m5vz9fOj0UgoH<)qcSY^@UGu2A3TUnq+VDFTex72P+ba!-_ zO%OV57RRsf1FaD^dF@(!o%+!`3O$5xgx?57IDiJ4jzp%oQigyhlXwW1Vz$LwKCbC` zU{RYZYORGHw>H38lDd~gFO^LhUX4saS8LE2)~HGnEG%!mEsIRIW&>&JU}EBJgmVSC z189ByKx)eHTdr@f&D}H<=}J5|&2-zUvi;y;&Qe=uDj3j9h1Bau`x^Hrr+7jp1X)%c zZZ>mI-k{SUW2LvMt+v=&;IUjI{7~@i06JZ9A<%sk%mKG9#^;*(Zjv(_b#~Tm)VjlM z!(_Eav{n=RT#D%Rx&?tL9LE96S%6``ebw$-Y@RXc&w?x^b~AM96;{1=F0NYC zWMYKm@B=?`9|+gV`1*!!e49_jIg}P#m{oEPr1}Q@%pHw-{B4w1l)DK&FP!d|p?UT# z%~Ni_yU646AkO2_!c60bK=Ihqpte%29y$o0I7+!poVo!%D|z{>vRSe2X+vKCC-9>d zs5j!T;AkpGW|Ld1!<6W zAOCFo301pz&e{b3A(W6Zw9&QBF{QQ_R2#!nYfKtL+6Em){I){crZsC-6JC~OMQZdP zq@`a<%x#%c+NsyD9)sGX=7NvZ{s%wqt!Z}y^&*g!=ND1*COBKN+t$i+b=?kJz=A%V z!Rz`X?#=ERw-|32wdzC@zWyV7LQ2{HChR!N&^G%zT{mZ%gS#WUDUvdCkV{9@Iz6Y= zy#hW4B?T+s9LeQQmT#@;#@i`f(4}U*7OlZ+c?KK+=`ts9>h(^lIC1Vq_`0C=09wQ< zI$6_F<`VNEa~5cIuQFdVNEa!A>{k4xD)K{0qwobsP4J|o_A~BH_9>%!ft7QF>|EoN zWT{qH?kH<9b0ukmc3h!b<&AKT6y@h@&--VeH zn&G#?+JoqD!P;7t*oUrcjNaI3I@GIYLTQFumkkh9;CDo(_2 z^jocgfURcCwKXb~^`~w%%Fg0N_7-?ts4eBFk6jR$p)gp0X#n7xkc`6WW)$p5mG1Yz z%78MPLjFQARp8e`_f?K|6dl*i2x$)D1F1%XL+#V40Q`6UW%#64<99GHZIeYjmEf|V zz;bk?aa-x5!#zp^hu?wXHy2*B)*KtcZ!VzIQ08i(8lV!)6*O3mR+TUH&WQLpbJ)k~ zGvOEUeo$w6@>Zy`8&e~oCY;n1c+%Pe|0QJWaFv^UkFMJqB$jNif8ybbQ;zb&~c^TfjiB5J-&X!D%EbNBd{q^2~6bta#U#T$TE@%QRz)y|-uD>gGl4u8Cinm`Q0 z7I;zeqC<)KB{TBxf_pi8bB$Rasx`&?fL^I9z0L0#f|U3>HLf0@6>byaD1o8!#*w|iZ&h<;c8J<4YOgJ|Sp3DZ;vue}4W1CZpaOqEz%u`%EQ_}T=fEJ9 z!j@!kk!?<#$Vj6X+51-(e7@O4*31yqh z%bXsw(e2TjaNqZlY$4(pt?)~s5`@q)>n7);hI#q7V;x2KffIf^)=t#_JA7VpY|NvBS06NnJX<)1lSIYm*Jpv`1FTL}zG& zFA2-2K!=!pp+{@khCarrDbs58PPLIW;@8^}UxIc6{!##_vFZ!#QQF}1f;(VkmR(5C z@VOKwyid3JJTHO`psw8Mi&nUbk+u(Sh4J^I%A^ooq7{Dni@%%k_mNbf(}}jO83&mb zSL>MC#f6S&6nHh4>x7{sDF7(OR7QW3NWoQw4W1y`zM!g!Om z8|WD|TcXN$-$0M=(%|o>G3u@IuYnNd7zF^@%93p6I1R%6SVeYfZ}-Ww6V zE$xOyN;_2IpJp)Z?***d4$liYDvbJDE=78QZ!omj>N7vfx^$Kz&JO(7#2++iooO@F z`y1Vy=W4sQ!Eb~Ztw1|G2aS*BUxJ=!Vqi7_Rrc`)^FwYWY8`^m@NqiJQ{WMqkBhD` z7@ic?5R>L@LPFumnd@8hAVYJq; zkA2kU%HL<*1{!K17jS#SBXjQ$^@gW>Olc!{6`wY@dHz+kcfmrG%&4x1Dn7kKY8660WI7(2`g${-Om92bIA_9b^rh+NQIWzKvhGG8b!A=3+f`Rv5H8 zE0slbwxMvI5I5CmOZAS}TmUr&h0lj?WpG+(!7qk+JU_=f7^Ar&+|(2**Xtj8M81O& z#~B6}2t~C9?TYUTE&w;Mz+qvE<}f8ng>i_wM$H(}UaLt)?)j!?*KvRHIj8+9?YT5pJBuT0`HeD6I9yTd8(hr~sWgkK6F z7DdNQ1K#Dp!6ghN{M~92-j74Ea8ZE$~cZ4BR0Y zAcan67eqIM!8a&ND@s{|(&G21wb3xr*)1#=4XZW9Wl(J|g6hh+%UWA*a#WWYWf3U& znMXV6rw`0{aN;BnJ9*~x+v3qw>b9sy_u#aNlV;pCV>t_;uS7tWe}huOC-4 zs7=Cbt;-A~hLs|*yuRTqMhZ1xuHj7Xp30hsUI>0ls610%*Rq_yi zwj{{4w_y{Rk&~cj!DbgvrN@v7uTh1TbAx!qAQA0#9MkZSQ6k#mxsgXq647dO4&Oe; zsxeE@3TCgJhb$5_pj_zYA^cELkm?lM=inim1Z{3SRn0><*$Y&QK@S<;Awlcv*AQdi z3p)bUtfqY#p3x;ii>j8E@(})d5P|BFdX<%j@^XSWtLa+5bn+dz7yG5 z4LszPpgz+AqCfodkthSViJ00aL35b3EYFB95(rdVbH~V7r4n@3v%<(zQFU!lUDWar z{)P{MaaYUMxI{&SA9tacM*SM=MZU5_F&+v^P!BjjG>OiVK($jdkHlC?f|lBL67!@bXu#B~;~De8LSzqK zCeECZh}Nmjk>%ijQa~8}OmZ!8%B%!!tM9AhhssINC1byhhZ-d4n0`6Ya-#(G)Sn^V z+$2G}YX!GymY_YhOA&r7YO#e48;QDFB&xpbV&WsM613O4g9yF#T z7H=iS_=yB92a8B(+$cfoEjtP0O%ilDwT~#UOM;f_R*=Lfiy-|`V#S*!sy^#NvTRy3 zX65?H8gIc=KTagKN_;E4OGsRgm!K2OexlUdBxp~`8ZzPS611gxNjZsl&EHh_7dSINzg*uP7-F+vU>v;NR7Qyq8i}- zLTb`o611h|3dwM^~U@&?FUuPYTpV{x$c(6+7aAE>_1t8*0Pt0foQ@x zqPaw>;1r2!HG7e$@E!?T8aqv*c&Y?lv8^FO(8N9vIa|al`d*1@eRwfRanmGdt$Gzv z;dBXFZ(2rle;sI*&PdXr=@$FJDhg`+x*p&I*Ahb9;TC zm1lfVqMD*1k?Bxsg*C#f!e30f3hLWX}>g7z@G$bx<hqr=t&7WUbV1-hiD|6X+1@pFyE9|_^$hK`Qn5{i%WeE%`cldp~mH# z9zxceofqQCp30LEj8EEm)?SMB$1a!fbWc<41ejgRW3%WKN7R>Uc;WKdmJHXgTW#dY zo}sKO-Fq`UHk)Ec^#|iT_AJE?DA!c-*c^(j3h(sr*mHR-U!YW|Zef^*@OS!%(;hEA z==(958lA6NO?rsDTM_9tnRcdmvgax53g0=h*m)FNq+Ws_dSa!#K(SqkH8nieN3lyq z=dwKZBE>G0FE8h@`4qdH!?wte_fj4sWp->o_6nU~hy5@y*dmJc zDREWHFY8r`&FA)Ncx*An7B?(Q@z`q=JE=R=#AE#wTWi`xtoS;`J^*KlEK4ZX7wReI zdEcPe*~-2Mk1eIxF?5N@%+Ep8zCpQ}q_=#}NOZixx)|}SZ&KDCZjFV2Z4Q$?I@6butg_aRhtfbfl!+sJe zKd0F2vR!2Tt0=at@-m6fUr=nPYpIhLWi`d-m7cQk*t-;44)zk$uA$hK=Hnz%-lN#s z`d$*DYbmzLcZj&uFDb@v=<{onVRLn7hzqRC(-E~S_8ljcH}3)j>TO#>GFd*c6NRp| zt|c0HpU$u~v!0lCJ;g33*AvtJiejgn^GL?qK(UR!Gc2!x4=8pxe1fcEV;&=-T(Ah+ z*L*`kL^)hKn+*3MWjz9W3ATx1`+}<)_$hu(hZ|_zLpq}TsRJ2qiFaKaPqvw|t_W_n z^Vn}FcC6%-mB+Tw;r6lHNQ+80hx^O+kX?CxS3zc&ojy)7)Nko%v#XDn@}u!lM%H?z z`79AGpP>lrg2?(Jo@^^+{R0>vQSlMQ23mW|c)D#=xD6$zNd2_q;RM6B?jXGwUH*ZZ z4J3Q~j*hmtXjv;i+IET^EMHp3V;@s&O#mO*he zv>a~;3`F_C{)bL*%Dz_1V>>B!+P0p=&hII9v}F?!co)Ua>P{1n{R73WC^wN9+fA_^ z?Lm^;WOa7AWvzjq_m6oxqPykRtt7XJ?T893Y#<4L4;}5KVGhY2f1=po=(2i#w7nEN zYF``PUD^}Z$+6xkGcKg6<>~h08 z!h48f7n{$t@VtM^V??~grhUX!@@I4;1Wv?{#CWp9ly$l94CzQ@He2amM*QbfaX1y) zVtkTkJwjP8sdwvmOcp(>jSGpyf2VXutCu8sx})N7YV;3qm_!uaMQ*7(K?#FGX5?+vePfb`4+BTBhae|U<3LgmaWORn3-Zl6s3>M@cbcQAB zEu`K!<5-0x_S=FeoXgk@A z)0o)BY#{mR0%g7AI#bNA|38#GiBeER`;Ukf}|6ifloY*pwiNB|_&fx9W$JD@*>Mx%B3x5NOpdj(#=T-jmIpC z&DSj44 z?fLL-64)txZ~tZBL8rM z%!>axN7Bj67s*sedyF(AFVWFX)%KBevVdaS-TMgL%M@GVJ433NEXneRc6sR*Qo0Rw z+eyg2Lb1(YF{v_(D7L5>KLE<}zDlw6#$}|)E~eN?^G4FP^A(CLZKY`&DFUxix>?S1 zBnQZ{OrLiyIfEN3X=Qul1QD;FvTkmkPn`C38RkC;dGYw_My6fgw!MwVmgMP#M3%rC z%Y5l=lb|cXD`eJgY1YN*4a6B`*>hcd2~ofsbk?Kx0kR00gKpAqBw@Cc&U(prkd%e| zVJs1DUuqZWmfxhq_1kunMJ%J(^0J+zgMNz+x3KIC*?lFYMf5=7X=WZGGhD3OL6*Oq zj<(Y|m-y`46uXqUKo+rrV#my@8D4eoP>erX&wId1itVrICmXV#Q|ypuI~h;be4dJJ zCn2>ePe)8~toRf;B~1vB3VBbHdiM)TwMw;x7>xExSK3xoP+OD1HpjM;79~$6Ky~ztWUi&yqKYNW{Q6~Kyd<=o zxXCXm-R$H_Qb72#MI!Nh%`VdMMWkuBmnu=#d;dIkV5;rJVuuBDY!_E(P+-v z)p(9nvh9?0x8o?OGaplIlV&yGt-S+dKf3LM_V||A-~?|IhN{<5~Er$>&M_M=DLEiwU2l^CW39 zMT(a(U7zCRN%Nvc>v@V)J^xuWL4L#tC0+oYEY1%c%kt93Vr0ZDnJvbTl}_-prHKd$ zad~8(6fY~L$Ezoci}JkbIR8PCUt@}g;$(nWB9Wgr$uBs`iy0$=C5SE)QGTFUiZ@(> zmne#v@KRG*VGe$X1TR9Am?~PIAYAj0vi=_GFmEEYcwFHuI&OO}^1&g(WN zXj-rsQ9&%tPZc9mrQ^IzF}wskRxCv(&JcU!73Xb|;FU|pN)xT7(!2y@2{Ekqy!QDa z;=)M8x-o3eyo^zz_BcOa98ZnuQ#^ed3ydie#MZGGFF>4VFGIW`!DCV4vB^03E5olk zMh1>y2gM^2XNVEc%tU$5#LkRA!Di2YPAo)Bm>^^^vdAcLxm1#jP8N|OaS==M>d0W} z^I{XX6?8*??9P~82t^?clHf^ac{>M%3O zmC<@)V;nMhS0px$Wq8-X|IafEt}AG-o3W-V>spDKZu-h5(#mk ziV%NKk-1`mP{i+JM9E1UAefstb(~mRV8$!LpJ12Fk4~l+%p~LmqU1Do08ByV$dLF+ z3K}9Vl_Hrbj-|nb#EBA^5dVR*D_%l6Nt~3pQk3M51o4mrv450gM(hQci-c^9cv+GZ zgJ_yWI*EQUcF!Myzh-3qCfcx05QI6-oX;J?|d=l3dn zZC5*W!nBF_;%@%FZVCL=k-xqLT*`nE^|U?dQS`L`(56uQ&}Ou#aM!7@gyGZupX%`E zPP9*bAQgGwg7%PM=C7GG%FnF|#Xs;XK=_MdLB0X3g)hGRUlpb-MwgWX>D+Q~U-dEk zvhPYpH;?%Z9_<%!H8VC(uf+dEl*-Z|zTFbZ&)liF;{8JV;BT3x@4(onnWw-z%8!{B znLjXZD}SkehWQWkBK!!yDXdYbftt}+qVU_lKdr%&;kVga1Dy^=aZ&%B@=x0I+d%sh z&%0psYar7$7ff0S(s(66%RtL0`1u=$m6)Xgv)r@*V4k0S1U#>S(T_ZSO+Rq20r1Am z3UEcaL#tTAyr+G^a9?&Fn8&pK8Q_07do_4sHyD%`0O8SC%Q$#((F;G%E3OUAWmYN! z=fGb4V1EwyQn^s2ctd4GC#?U{1U52@lwaT%*#69XtXzZtA$BABOrr?Aq&}~F6TipH zR2^aR|JWb?qAkENdP@a-{o8LGcuWV{oLp8J7*LK{0amNu!e7Sz4t{kmPng%WUbsrG zzGLcynKM0b=Hy2w&6qIlo`9a!&6qTE^2ABg9+*5~YW_<3eG_Kf6JWwj{`ZHcPoIc? zSLN@4&%ERA>C>m;zts8G^uEat+;KPlLmxn_cE*F#rcIu97yi?b|8wSpGwz&l2fm2T zYV(7UPmG>54E7}bvU19T@bno|Cq6WJ(!(Cry%X-4EbE=49`?@3Qy-W#Bfl!TK96qF)JYFbcwqAMX}8_$ z5mqm|L+|0}=Xc`!_R}WZJIMnlPM&$+gAYua=+Wi>zHR0mGbZ2nKt6INOr4rn#l3h{ zlV;?j7~i{R!hqL62&B4qh4lUKQ}No^cOMn0Dv%852u~^Vj=l zmUhZ%$?bit+fi8FX`Zi~SY7D8>659dLhyH|X8!^48?Hw#au!DcO(|G}o#KzX4z6T* zmG&Ed0sb#SmRD(>uoAxb);sSL-S17jug1F9F&x&sUTx4AwfGA%kWOc25oflP!!K5z z_+HPCxj!=-SZtWoB9K}MDL?gBf{1E#6f9@))HZBQJ0^6fof?{H<* zKbOKIn7v5t)fa1uwLVyaJp7pRHvaD91b*uO)7Q7aS5aMi&)PHRnLuI^NJt_%oVViJi-OoD*Y&ZsCTRH&k&U`Z)es#L5}rJ&BVQp*Ke zsgLT<%PlEagsQiCt6#OPxAXnioV=*|{a{YcnOS@7_4x0#*532_0pa50GkJ!f#*VRv9AP#b3hpJ+mHP+-mxce+ILKVa_$&qDc;{% z=KC5bFLGHPTley~h>@LapYk!nC`7#2H_u-YD0d0p-aW=r3tWKfoM$SPV}xHv-~Y#_ zgHXDJJ3c)y&hhyKCY;Lgk|`Y5AHVDFG3$I5jQk7X{0YK{|D6|KebXiM1fEQL!3)Z& z3B9Ymm-;S4-!*RE`|kZ{yzhS|%mLw41I1vViZKIi+BN1GPhg{eqX(3iPhok*1k14h zlf7|gYXR@UU`omaerjQ#I)4Sajrb32n-FmA%-4M2cI6nit327>dS3(jz0#$8ds3B` zQ~$>OPL=R#NSHDv;r6>GT=-A#b`_Kh#&|A-!5e+w0ObN#>Ay^(?B3uY2){X@%7xxV zz9tY}1H!QX@WgOU`D+4Hxfa7% zW(l5N#(drw8_rr_B=M#%@L`%<{~Hrfy_42|d1tx)hbH2}djDTRw>p1{+= z-_e(fgzhGZ(stt}yDyPD*Z=+JUO1HQjGWL(<=R~X%=SP2#E&Xn zn!i^a2;%;?F3@y)I{hi4Cm0yZTT=t^l;}Pg$>)q^gs~7G59G=1ZNr^i{evr8ZtlJy z*48(4Mv_RFINI4aC6mm}^tn+VJL6xj8_e`9L0akHWVvwJKq5ibouNwxhlfIK!|wMhE(~3|tgExHGjwJ9CBvPagQ2Rn z8wQrSy`22XqwkLVAbdfva4M^|zR+c`MSIUsd;ga(hWwszPVnrhOrJC*R`M(A@@? zw6Emv1LNP}i5ogQdfHLcpmEhV7ltOt*xKLS{q9-|U5jvP@T|tR8<%ws_P`xue&Jj{ zzip8JEWw|o;I#20p{m|xOWf}7xcB77$G|}i!%YpnD0o8k*M%1K4-R$r41{L{QwKYH zd%AjXzuN`v-GeFh&6ho9|Jelk4Afn3*f z<1(nu+}?T7I=S}8%nhcU(wsp&*vVyORoiv$-**0sanjH~z}OBg#8_G00~0Ll?jLXk zyZ3>U_y2(1%ta`JV6g3`&fd@^!0a#^b7&dr&^Fxk2wAEIm-P&F4u#GO&F@^@2xiQMM!6nPum%77YerMaV z;gt+jcNn+y_AGUK9k=IIxJeRiU1*-X|4vpPn!1X>3=?*8eZ^*nEn{sxgB^f9+~fZ2 zZ(lYPYT!>+XL3ATFwk@J&24PW1$=jCsIhHHZ)d2%-3gdibL~Df%;mOQ#^WnOOv7M* zh>x`OVobyAFy5)V9y;~d_fD?g|EGtxhcU+DBWgk-h&!LB1o*pz{}u%cF6$W_8V+6M z1{E;k!#t3$0)_xlAhfNw2L)|kPn$a=?t2!-=AJIaP##98aou!IFlT<};8F~W!Ol>u zZMYjTX=NzZe?#ZOaa^VaQ!pIg+4tBxdw=rI{&gqs*mZKl-Z1tq=tQ?;-0H8p4j|@^ z7Q}B!g`h(W6lnXWEzh3Z^yE8xA3nK%->IK`k9Wn15HNarJ9r8L^E8ajM(}lfVgd}^ z&<|X)0eK|cy7lx6kDlDR&xL;5U}(Gvj(rpJ4wT~n9)9p7B>n?#85)2=+(6&k*@M|n zCsUk$?6!9w+I{M_pL3pQaHmTk#e8BAL8^=0B!=;qb;&r(Web0sdui z`HP#nmh@bG63+pC0*|u3adG$3zJ62}URPV6*YE0kssA_Y@7y^ZtqKDUZLP?>nH;LqOY6Egd9R#RYv3IaPx30Iy|oe;r|-(V9MV-s}QRQR8H>}M~Y1vYqwWXam} zE1DMXrQAQz9vap;EE5Iid8&HjV%Mv@EG`ZpzpW`_N^HaW0G`yWOGoJPRa08dLd#6ICEoq_!~yOx1EASlF!$?pSHg3+3USW= z(B;3QtA9gXQ<`O=S+?7(-hcn$e~hG}-JHM!vtP{^yl(nGy$g4dXD?-Jr-F?%Z!0zI zQ12FpX!sZ{IYNymNFJjCGx#*m1jaQu8w_W=46pKk_r#BnCV^pz8*c`m#Ou@=uD?gT zCl0Ek+IzHDEa@IzvZ~<$n)f)JhYQ>H(Tu%RwVisV@XGjq}{b=lj=v*EM!x;8EXa z^HSzKqm}>6Gldk<#DA_!+UdVz=ka$4{nWrQ2k~^y(!w8M0I$Jg6W3w*eizT)HD16Q z4F4$FAEH}+L@U?e*cu$U3)}K-wDgDS8nGqthUY=*d5~`T_Ea;Shi>xSZp!`p_rLd2 z7P^@gc;K8zXJ|!c^f~w8eQ0rivB4q}4KMfq>Q8_DZ2%1m1Ah*g z^Oy7+w?nY|@j~k#l40@xrN5$m0!@%f6~zZ zQqQOKjSorxZz}#D%Dr8re@MRf$-Ccw?S6mb6lE?%cg1dZ7yAG67w$+rD=>P|>aT~Z z9>r@38h%UBUE{cCJC=Zc&KUjw{hce`S$IrR-`wS06>|#Dskq?ADxW%q|6I_Qy7Z0y z4?lJJmj^~u9lAL!bG^D&`-ol?4V$QP6NNWX@>WW~>hrTy|1kC617*JR0qql?i_g`y z;sh?;nHYT>KgwLL*ZBYT+~JMca6tv~*NN%((yQvT>fN4EZMfs+=FQanEH&A5*&({< z1eKhina4=^oMyd4bB<8$4)rC9Wwk2J*o43++H_u=2OFYbIAC|psJT_=L58-i%E}Brb$A9wY zKe$JOvb7jmA7mdw);jwM-?BB7em~`|q4U>J`5L;!xTOEmp4uC}u@tq~q8k_9c+IW! znD|fi%KqBUH|WR067Q>DtA7UB`0V2Qv?sjiir348TJDXaE4)7zart8Z`+wa1Mi5=i zf?bb!=6Cy7mEe_t45mRZC#ea2^__sPnuWUkig3ZqulL_ieA8o0o~T25(M>9+hjw;WsQ2n^w&F6~$(@67aK(vMpC%hs)@u6(Gy zyjC%`>OQuHea3=GU-|1-#AWKl5_J6WF!2R$ z%oHFEPcU2Bdj{KkJ9*;OKG;7r#AP*F51^(;8G9L**j&~^|$3k7P472ay_&)rsYYWXsg+E5} zp2{Rx=IQAi22J%K_{>JrW5g0)xpFX02!X~Yk|0qd@4CG&=p5)D8t1gh!<-iMw=eBz z!}QN3+bnqB!cNS+v3kKmiAW!7w{T@gU*}494^MnM*>LE7e(y~k+%L|PU^xP_Ts885 zm$e$|#KgWMzGtT=JTsV9k2&$e?zUxJ-F=v$u8cS3iPK;Y))-tH5ArjLm<8qU#gJ)13nWVb2 z3>TiodrVLh&!GDKB-O^bAC-Lt)ot4*r2l-@1`aMPeS$je3|^y?yw;z)wrGrMx|(zb z)jubx9>_Yxl?n5jt|p&B_2eYg_j5N^Pf(q82Gu8%RF8-6%$cCVna(M;-)bHix7V(e zSGd55_n3MH)!s>7N5bppPf(?uLG|7w)o;&TTQEU&rjF|;?e+Hb-P0zhW}Lz6FaMnI z!ZJ%>A8s)v%WBj`CfQnE9}MK6<@qMz|D*)IQL z(J!d_Rf5#C-PF^MU_a&vUXlMQVJ6cXy9};BW5*YIgkirZ)Hiy2`*DuJO~si-i2t7D zSo<5~g{;}QE+I4U?(E0&3nFi;zoxsrcLkmkYo?hf3}5pmW!~Whd4R7iY45)&-sJDN zKEhAo4=G??YoB$qtx7Y&^qMFOZPmnMDs0ki&B7N)(=A~OM^zjwU^qSt6`7^#mSze^ zBn3ta-c4Mhe3HIR%mOuzNDD8@R4fnv2x+M{8Q80t9>WH!q=0iP?V0r|Iypk7SFu&w zV|$f}ZiT5DrfPX?lBQ~UY*jH`A;4O5go%H)s+%f*Wg-h=D&v2A7Vi~`qdo(!X$ZW^?@d--gpW|bZnjgGm_bMZ;Y|(fOkuFnhC}Fwq!qL< zJ4Sm)<=;>^|F6@pRYp>ei~9+NQ7uvow*?ypHo_i{?U9PB>{2_NDNV>JG2KJk{`-BI z$^+gOL$}nVfOQ+K^E`}>kC5$^YzsCCbb==A1RpG*;k(z-OjrUtZJ|R)FY5{OldUPH z4`y~%hGvwqjx|%mrt8+UxwepY0PTedB@`#%c%TQ26FHPRPx)QAaOK^uL zOvve&v@7K{yzcaM*j+)l9@B#(!c4GL8y?ae7!wXv@Do%P>=qY@<@dn%uAMPag)mxp zalmZ0XU?_J#)jBXgi+!}w`_#b^XwU6<#Eq(wFkfwussB@zH=;PfvLR%5PH!HQv-Yw z|8))HHEh2lbRAD@7m7MowsWLLwLHL8Y1bgGzTq#pqy(ptaD=b0$z0FNzk%+a-rk|^ zwhs3ytG(0Qaqz^nfZgDzVMW51n4G8SNr7En+gBiM$Nvo5f;Ok2Y*$c83hS>X7tzz>h@GZ7117x^tT1gOD~Uc=>V1h6b`WX_>ON5Vi_=G z0e(Q9GsC`MiOrS=s7;J4ay;N{qrEbz9Qc_Y7pT=gyZ$el@>kzB02i)j#6vRy$yq^n z@K_Y`DSuAfre!)VN7aPlHb#%GKoy~fN|Zx%98-2~*s4IoZQ$d0ZAh#*iIyM1#>?@R zbQs+9m>TZ0g829@6bXy!y5j>jIR09QQK}19pAPTC@DR#X!}7u{hU39MD2|AM{TejF zPQ&uBLMlv%5zVH>_%azu3N%*@@JrMsn!$3sN9X`ERK!;>ibLRB``cmHS?J7Sa{;6q zrj2^$?WW_{698Z4DZv^&`9ev7ou$uAds`@ne8)Y9fGov;&MtdZ84*upD7)0->>s~` zCD>gWHuMZ_Y!&tc7uFB{cVIX^4ih<0(!+bu0?EdL1>s-@s{;r@cFT?CIBdJnfvUoW zF<~WjgiZ@(@9b@26qw{us@iHM{7Gyp6~mdO$b=rSm4PuiqMg$JE|h~awux=R@jIHs zI^fd*GAy$E@B~B<3gj}8nHc*zFlKo`lHjO3EL9-hLDm3d$UnB1?QN+J3}kr?!+@F?h_+v`IZQ$~3~i5{fOw)P790cF zt-jH!?V19)Rd}Df1wZ^VbZ}vANQi7I3m~vGsKrKAnUbyP&~jy6P--^vzNtDuf)$XC zn;qkLfHt;pvEo2zbPCQUpao$(3XZVc0-O=Vfp!z(x_fPS2@(Tf3L685EHC(D)LZa{ zgOQC$VPYhjLCc3=4***v0SQY;n2-YiN%SHdbjXI}0AfPac?zdEzkR$~5NSg;5G}bV1K*}1hc|hc5P;dYbw=1|57D9gxemihI4mg^EZ~;K3 zo0Ms)Iy+IY6IC4=NoWLK@#}vn<-a{{6*KAyj2g!&tn3iSJ(Z>_AVRzowAHY!!dlz| z{0f}2CwS;WMC^iK2>i}0Qwy6gzGNv3wi)^h+9J$)KyeFDu>dS{mOX6&;|#V|VH0i+ z61V}`1`J^`v_*}$7-FdjL>oYH_GQn>;&puI)7iBv7S|8UP%DVwlVF**@6E1hyao#;@}&bJ~2{6^{L( zn_hIzKD9AAF<6rV3YehF5DZ)RKBkrSFeY^5m;2KJX0AJIXQ~k zah*NqS{rE@f|*CMzl1U-xdZfquuc;_oEY!#@1>Kd+b zU2Xa025LrntpLEFSR860mTMRWw;4256FC$NeaNlQGKeT(Apn9IFpf=a z9fgTKIU^K0swp2OwV*j12wPyday+GXHMc<{Ha}B=90WAiO2yv=P*je7(C!`6OQ3;tZBm!j|+dQ%G znW(L82n@a1GY$q}3cQHFjGkiCgNPn?I7TIocbO$&jCyE*;lYfsFVUnFQ=mPk1+&dW z7T^Kw<8lS=ntj)d>$lM%hU{5v6}BVW-(fds3Y-PjkQ>D!jA4oq+J&Bu2VT#><@H^m? zHisy5k6y;8w3N>T$UNcqMZoT`35GzbKq8OFl5@g{oNN{tAHp$6?S%QJY6E2u!Yi4X zgxoNKg%aM&L+C8r1uI!Zi4g(yVJlFfy^qHXm{=)|c=>CQ0S}ssS{I-_+|B*qpNk0# zYv5P;M3egQ7z=X!n{%$UA=4z=H*!PWQ5Po?P@V4~x(> z*sj7>g)Pdn^%@v_*Gf$UdI^x5E@NoY!cOIYP&P7rY&mFjM^j124E9Ak) zc*ti0TuJxk1Oi}T0`;p1G$NNk`ziux;}UqjiU1c>xCGv>BJhvN;QJ~9T+fm6ZxGTS zUf^nRf|RYr#yX)d)^l{^`EG}*OEVIZlS-oUEgFGqdk2QQfhf3ZCp|5cmunn~In-)I z^iWntp-hm9JbcT9m4Xo9ISv$o@Z;q6@E27%ke{BLU#J)BNxG(|8I=xh266Bnc8j~~ zSVKk2^DHXbLM8dKL=MQj#M3mqS>1!vX6vc9+N9Qw<^c$@lVY1GVp4`l8sdXVRi^Ms zO(sV3VkJ__U0|vFwcMgBEUL7q#GwWwWF+bs28Ft6Wat@skzTD2SM8u;n-WYC@{fZP zlH)#;l)tg$!SDxh$$#llHlJhojSv`F)Trkf-R%P}ktr%DR z``op$Np;W!+QzWgBn$V$apn zEXu|e84i`}J|wNg^0YN#g;C;&6*ZyqqSUm)>h#K6Os&*Z-yE3GeHy&>dyZfU;eQvd z*ADpt3y1`0r?%6^K%grv9Fh{Pf=G)>@Q~llz6Nbg*KPmfh zXBA$3^Q7t;c6(6SJi`(hmMF3)>auHZUTRXI?6PsO(lODpgK{ES8M&@Sb#1BdKFYCx zFly2BjTWQ-HOxGpKtz0rjQ#35VJz0mjSW;$U)67XO#0H?;&LPR7JW!pQ_B)yT2XE@ zgjAVMi0)w&B&0(kA%MA6DqE{Z;6T|_y^+=m+f%kmu8?qCw}i`LHvFI-KxfD(K!cp8 zyqpXre6~omNjpz@(YJi7w$P^1Iz6UG^@xG@(pM!r6sk(D0A4?(=gFuxii~WB0ApY? z-S7dVX}O76iKS&(GL-?PDjW<%{#KFNfrzrEXTp0)7#4qF?@bGzRIzX|YTO;*bnwB| zO4cYXwABh8kEODzEGscL5#dvyi$nuMFb`p_OwZGc7I)-JlwwQW0pph;nVeQxRGkfP zs4!ZYNpcr;H^}Ph?o~}Is@GDPO%a>$(p(vp&2p7|U2LTz+79svPOI;wRU?2V|0|Pa zjU~OXwcjQfq{7BYd(&HJ!_R)1#~}m;F0-{Au=el{bu~4^oM7J=Eoy4)M%94eZmQWb z)STGiWAK7Wq723IqGf1XhprKbKBD1;L2h$3}iCVZu&WIX$cv&%_a!a?=MUJR2 z{8gcHnT3Ig(4JuX@Co=-*n}cr5#mE&=h?9R-9p(35Bn|3zz9Ss@@r~c9y3}U@rf{c z;q5#`?4)&+{|r?b6-JeVLFI^-Pz!^OAuInuZj%=gcZMgKr@>E!~_}65-LM?0D zJdX?QQXa<5n*QnG?`p2oZws>1N9QT}X)6B=7vtETMbC@Ht5qloGs6~`_7%x)lUA&f za4Fym^OYbB*_4cUWV4^y)iP2S-Gj=g5l$c2Lk;Uaz&6EJlpUmA8@cYFIEW+*290t! zF`CekkPTp$Sk$CP3afK~HFq?ZBL12Pq=2kUl`4W*h8(4}D%^%B7{?FCLJdGs2YMro zMZ=9TSt*<0LEH5sk~!vZqqt3{fGQTl>m2WknV$Zj|S$I>JEh>(ZK0^5o=S!>=Ov};x|3M#$dSmD{ z(kt|I&gf~5kc+bO)AW+u%B)!Wid>Wfd#QFUl|~c%Nr59*z-8}|GMZpuGNzzsBLgMD zZqczp^jhjWs684HyZwfSmr?DfT*tGYmgd|?r6_|6YxF`y#8e{(^BAMnQj0CBI_`qw zEL3Qt434DmYjJQqoXFsKYmSl_Dll<4?~nj0drC{h$cag}d#5t1llr%A5HB~22l02Wc89TS~0gqrHIUbzwV3hv_F zsI3=IAv*y25|Bs$Z<`jfc$}{hn35S@KnhaBkf|YEBK87Ph$WCFgh9TMl1g%AZMB|Z zVBKA-Pb*HVDyoPY>#4S~ORl35q$$O~n%*Kytpb=V@*CND8bWPZZlne^iK|W)>*dX{ zHDEMeqAcn*x~od86lEPM&)oo%Lm#UsdaG(GmX{lx7LXt!mfGm%Wh8tg{f6S+dK=E9 ze3@SaK!*@pk{va~gj9J;T~*Wvq#e8_jclp47}S!waYR6W5^Enm_$7h)-hKX>xdQgZljafm%VjUi?hC>bFH z8pIXXia8t%1PUjB3kGF0|&BfLmTH zyIaO&83Gz|6rz$Xq8I}h2`CkMWkXR>W3^4IZ0a?=pQCDcUf5uY?rchP%bXHlq9;q0-QQc$DH?y-HuGx0klm zyM0SZ7+QUg*Ix> zRMGS6Jl!A4-iJP^YR)Ki_$QxOf|7Pdozc01Z^nUx|y1~PviCTz0Hk4=?HNu zH@zE?=n-W%Bcrb>k!e!nYBSf3P&I2wZ(7`1FYlum{D$fj(*Zar^g}9njO6VkKUDXM zuGk_>GCrVN)}z)xLW_snw~`)v28u4i+!F}V6LnS3+D5l*6ZZiz8<5j#QSuZUz*Vu4 zgtZhS!zk&hTqJq1~m;knt`cOL}K^8m?-(c)9YH)#b%I~>mP6_{e zykK27`OwW<{b!4q{i7b&|swnu7GZA;PY;P$LgD8h_-&h$% zDU4Le1(XOi$yOQT^s=hy0Chi)z@l!%FDZ*QqC&2et!}JAUgAlL2_@ar@Cro4z#qIJH?JPK#8I1#qNSDf@)qRN zMqQ%B#$L?%)Ad{nL(>f@>QHuV$Y`pG-3JvO6t-I1tV?6SXf_&9S2{2hPi7k(F+yk^ zt*Cnj>LFz&aQ;SR*(7%&k+5TDARIivYXqs`yF|P$_A2`?8_^EK1G%PJg;>aOQN?+* zG+V_8N7U|MTzKEXQt)X|!K4{nupoHmNRA01cn67pkBIf|MZde?k}}!ah+LCbl+hSk z5jvuB@`LJD71$~cYzVXsdV-L$+&`1&0~~dXXho3uE|}4qk5D0$ERq_2M>86j+F}JN~o3&pC4n@W`tjft9D3J9;_U}Jsu{PH8ohb zaO+R_9CkzDkZY@5rpS*EU=9mqE1IwXBRAr{CZ5+LGD1-k0GF*rO&pnRk%!o8Q^;2H zQ4*R0g<&mjoLNg1-4#t$vD#=U7PP8sLW|@Egw#Tr+mJtiiFcvwAJC!D9@5K7Nr6T zkn)|PaI+}2)pT1$_pmzVv^jF2N$ms1fI|nVrKuFb5PS6%dV@osAeJAX4RA5643EOc zuqoR4z|}3LOOWF_ES0SFq(9v`d+mzttac}zM)1w z1`Al&9C*`caKt9j-mnFc#8IDDw;^#UujCe$zmAg*&Bm~S5*U+@EE8b?aYbE<89kp} zSUoQ@l$ev4lYosFje*g`J+Y@TFp`l7N@U%t zgVc;VPXaSp0L)qxTAz6ldRk0TWm5kx((7ts%RAOl^T*{kX2c>q z3^7!IT7^x8n-#ZexjRr7s_+krqSTVEqqJy+v6>zO5HL^2GK1WYJcEU(P)oA%eo`o5 zEg_kyMpls-km$BO@O?e_Pg4&lQYhP90sBa|W6R5uv-BqJj zl(>jXQ_coh=A*By@I`@9bxSn~e<*4+=%F&Bf-yR*CI0Yz^41#fIlE zg@V}nu&oHIc>6d$*7FB0yH`Ua{P8${?BS0W`Qspe;4TL>bc{dV<&Tf}9~TQ`K`HJ2N{od(Gan=gi)-7rWf6D6YYScyX)<;R=WMfryBRh=?l! zA|fIn;EIR@2|+>#K|%;YLJ$cOL?na|f=CD<-|Mcv4DVLj^VOA_G&Kun_-RUDr<5I(C(X z5+jFI#)lb*Se>#Ef2t!MOF!Ql%I4RxXOIb1()oG&yW>xSydC5~>j50%?|7DV3AY<_YK#}*wG`1wPPDW|S^PedDtMHZ z3UgLB)gjQCai}$v82bfctm)Td#_-%D6w^gc7SAjXxmKY+v6=RFQfMfK_Z@pfQMrpO zC_QQq*`}j^qoDO^6Rt*U3}5fJ?-rf+kH3U;8ckjVbhgsW*jhL@>Qb%9jpl!tEG ziQZx-4Km|ua*g4?e5=iS(cA3~Z9*Y#H~KTmF?ciPJ+ISnEn~kcRInR;fTH=oNlC*A zeclD(`R-8O9`q5)%m37bYgH8%!$;oJXt1v(}{`qy!)SjuP!AJ1keFXyoyaP*M1a1t{zKnM?6!zoAy)A=?X1wZ?*pdrD%r zJ;yTcTm##X$AXVEd0dgY+30D0s3kXzONISM zm1v+NbCEU5hy~lw$Dl*AZD@3qn|b?JCS;qc^fLUC>L^~aJhq`K3Xbvu8+5*luA)FH%3oH|J>+8X z`iiJ)4RW);W;31dnI<=+a!}`UfB2|1%1Y55^dZX2{h0~du98xU-%!2VLr#S*)I|p@ zN54dO^nV*kDP{O4)k-|%LgwZ4Xx?^Nf+U{)qG@hTh9&rrZYGz+E0$MS8v2s;Tb{aKFlKh>(q68b zl$RWhtjDqJO{md^ti5gF)bjhIPRJ?u@lbRt5*g956a5UCCf9f@!>_7#;w4wuMPh6f z%2wR0=_6z^Z;kF!{E9B_wV~a$(T?TFiGPMV`@d!4Qj6xLc%H8K4Y4EDQP+C(TTuHt z)NUfhnEP{`@Y&gW(xQB>g4R+=k+h>)1Q8_oqh-_M+dRB4o||g$Y|@vmC#m zyTg>8^u!iaKx%!weL$MMq;sbjd$7-tZd8{=TvZtcwl;Se zeoZH(J8%uh*dElIVLZJVWEQ-JUXK5%lHw!F?W-cOqo_1}Ci*=pcJw7FNH4>0>CQjb@UbCeK;1~B8%PH*Orkg@R#A^YPRx{rMVm3F+AAL@b!O2 zerswuzOGB=nro#c_Hd$YDQZsVq=pn>t_;7U)3P%-lf;74G&o#Bh&PCF|$eFdDF!>)n8Sf71UbekoHt9{6E+dolJ+6yV=_?lXtrbye z4f+;2UO||wHlb_QUV^*T+1=!@{VX55XXw<&D=MtEl9KCc&L*R ztKVfat)>*9g}X95_t5bJEL5*va=7sdiMeL5Wi0Esm3O|x8j~Aw{Usg!MA?ag7;bq9 z`S6VoIh^Kzr)B7J{HhvEePn&*sg_s|as>84A<5u6e~JpZ3?J2{ek8XiO_4fZFH8M- zlUy{Zm*a)17=2`O#h%ibZ6A24jeLs63yj^M-oT%$N7S=oP9pRp*v_>1SzDdw*5^#z z8p3&7*XpJ8^El?;ikd~n-XD8Yd+MKc>d)jJ_Q!0UZWe>5W_r!kYqMA2Bj3?-Cyg9( zPqRWA8*sx0#EI{szBih^PfH)=_;sD#i&YmZW6}z!F>Ey~c^lnkN>19|tpfjDb-y%n z+KMWG%bY3K^up+RMdSo4k-gQl!=j{BM1Q9iEe} z*anm++m4X<9;zw$Fr~(3=o;99)~ChhqDZ}zJ{@roiBl|4j?e3%c$@udND0NW(d|x7 zdOB6vR))V*@x5fXdqp7DjUqWK&>$yE`kD;FP{A`g!#mk!QlbY%UA(m&1IsB(_Hw*H zH|XiHS&0~wg|LOX9ottUM+$z+@G4p}`N-Lp#suHX!tzb9?Xx`AV@_+Dzm(yVdIa1< z|)6pv^J1mBuMy`~l;C_t*L&!H51QK)N;>1}7Z*vNZe`l<>d zRg|T2#@BUG&MsZj7<+s+`UI^(6CNAT=5-tRnrzDPRn^vfWVU;|D>e=4EUDI(zY*#L z)9y+$=5qY)r*seGBYSdt$`kB8<9Igt7|XqeZZZkS!0*=S*%6yn8w;*NpRoxi8~8bL zq-da&rIa|6Gj4ePxmUP(C=BD1wmf`=rO6l>ERgry7vB4XWm46p?Wc95Wor>Md zi?z+r@uIfqBGm6Cw3YpiU5$qS(PRr+WUj!!RX6u(WM=6uTg=fdTV@(-e+|uMO{rho z5S8P<==AqwoJ@~NwV}D_eH0bKS*e4=w<>-b=??A;Br;c^8yt)<(1GkfsCEtec|{dy z8aWc{sf+n~&|9dIyjQCz3(Y7oj zc^;LMdKb?HoyeN_9Hj`spbM38Ke>OVGuh;jJ4$^Vypa7XRM>24g=%ZW@o`n(0dm&9 zgd`WC_Oh`#H?2nfr9h<3WwI%)tcc_1)I|bhCE5^3Za`6EjvV^AIV~H~TKOLu zoc!c?aIP)E`|~!V?+|7M*C&Xz8}ilYD#wfT=sL4(Wm96}qmRr(UiXN*Cj7Lv?s|ME zj`V1=K4XQVBO-K$ogGji)!VtZ&7C+cMOWfuy8mtRU9cu* zAsd4eyj$*VI2n`wX;oV#zM@;=nzSBwVh&;%shUB%(Wi(rkI-aWiI;q&X=9nR9VLg} z_5@T^d`U4TCB>pC5Nadh_@xymlsE= z2|)K}C!fI6k%jplxhzkkTJ8tMjK)YDpU_Qlq4OL`cB5Vu6BSeBtaktv)^pmyu>zk9I+Tmpdoqt6W%kK3NcZ$NG0!KV=xMqENpgDNfj#PJ_=s!n8GmXb;uxCh#M`9DXsR&x;5q!q{i zQq4C&W~XlrC8C=kuIC|3&c|pvN@q>HYmCJ4G~Kw)qeb?l#LCXzPl8&sguG=oE^Ux1PeWz9(Nkg1Ek&tz1r>OY zs>3w0uV7Y7vh<#N%Y)UAHF-;%xMGx{5kpoN^fk`-H@XuuWgkhfXeUS+v8lp!9A8_b znfz)0uKXnHD?q-Bs7>U`ZpZE~QgBj<|Da0CPr7~k6lrCEcrro(x&H|k!JfCuU_>+cD*UXf^mH;4EpWGQKzXqF=mW90=_R(x|I>aBW00nH zU`02sWn@k$d4TP(x4V(G>2^1=eT(AP52?g&sL|0+c9cv{CI&1*kBxNN!i6uPAKmbp ziFwUb68N90h=b&^b+)5@WVzr-1dH#=AG{jf9J|wpja4+YB=CHd{UA9M+*_VxlI&W< zggyZ6tb@HLy7~GsalGmy8oUBzeb!k^vS2f6wQ=@=E+I!m>Cc%+GmP>@-Bb3n3vm+S zwwx5L$yZP~#}YK1(HSB;s*7xY`pQ5uG9M9^wYAzBP?E7_b9@tQ`C8V&mM>MeE{?y^={g&l6-Z{TK{vY? zOPdWj2^&szB9*}NbRl2OI8>fwPar1v9*8)MUPA2*ld`&5qY*Zzbvv8nTdY77Vc^8U z^4R)RJJCw~rRw-l4~f@sGV-L8e-lORjV@$w<5Msn$EUyk<|$|-1@T*pS#E zPATSD&z++48B>2n+p|>S)f!pXTDEaXM)EOy(!%h4tW!jJ-E@zLH{{D*QWjUzkpo zm(Ft~eFxAVkgu=k{XLSH9mw6!RD)<9mcZ9^=ieYK^tW$CF(K07a`x-*6oOBLTTQ7# z^Opo(tahg$V8oA>CHanv$Sy61qg9vXu|{4noyQyNTvp9LNS1rghLST74|{r6*nk)Z zoc%B+g&O+#YCGM;!I-SWiG+V1dK(45K-uZhODrO&BD21(|*nvvsksYAUPL1UZ42U za`Xwi6b*bE%}2eh`I1RLS_X*Yb<_uf3iH1kv22)YMajPpa;dPPV(YN$vL)2~vF!8k_H-fh-4g zpUHnTAynZn^_4FAy94cx4mgOs*@3Ks91sNWag&BrU_T?nTv7x|9t>@oLy{k4gz+N!wMSC~6u*!BEW zVoQGP1$x-EWWwnW@tls>1(OT{WF-5S9kpH*2oi*C~YFM}=0C z6g16N5G zvbp~O4NzpNISm4@>bgDPIG5I*w7Ktq%fcm!RD$?!G0iMNvM_%OpIpV3dLMSNfo|wBipX<| z$=9`PRE__mhOQ9FUlQr)W!nnpZvAXLX$lK}ha@qS|WJ_|K{jhscu9RckxL z=WRi(sBGhMKSs4A)!l?Dd_v7m>Evqm)%y0(8q|nc&(BbV^v&SilOv|Qp~ z-g%**gT+3s@-nKDEETu93O`41%4%xdXv3=TrsdQ&(#guAxz2XSM)W-Ecf&0oFDtbA zk!6ITW$n)^#RJf+ZC9p0-dI)j|F&h&Qr)OU6`8eozpCsAIVr9eItvO$4!1k%YpZH&YSMzwpr>Lb7E_^QqEdCwFu9oD zjgpsG(Dw|K)`M=hzsr`y{*1CrwUXwcwfK}S&AHJ-GL?P=vg8Y%M>e6^{vi}~smc7S zYRVCEL|By8`FNyK5+XOcoE=b@K~64qG{W)vb=}Px{5xHkv#e+Q9ShJbR8lDjC5b?q zAbP!+47<}9rg2w`SI?)VR)k#3Tp8X2`FO`2;pqJ%vMqsc(2cF; zhJ&HxJGytS>gIfr_hw@Y9z#9DKYqS!8VZwe#=SW}p!SpG; zoxJ;zu;OVj^>71A|$}82}@4H^#b$Iou6Tgu!17yHufGzo* zj_e?LaxGgIB!Rw>swY}sMLvt&bl*@**LCd6*3lLu)7Yw@?bCu|dDdOFvl zA|VqTq2EAogh$f*IvtHJQ7gg}yedhxK3ZO+qX5KTiM@H@CQ9*ZD1`vp?gJl?uvpA#uq}ay@=0)f)XlTln*jZnN+?r zC=G*5S&tw2E`dzBid#hFwtw(H%Ftw5hp*@ZS41|$z+ecm1&$?X2~?O z&_maIVlDoMK5n+O%ih`U;A~B{{Pidu#`Sf2U|hs>okwG^7XMz)V~cVQNuB`~B`ERmz-%d4<$vNmHc0F_2BDhg z*Wy2@^-hEw&EB5ubaWO7TzV$w82)cmV5!OCog*?+lst9#cPgP7*C42R47cA@0QpohLnhFXn zaM$90s^{+!G9z@Tx-&8H=4hnl71VBV25iOm21&TtZ%XmnF-9Fesj4D_>=$ObAz~C+ zGH>)Ky%31Og=w6l*=EXu2BjDEf#<}9j-jA?SBoS4VQW1o@y7m6SN{x4Wa{-S*5mam zi<#uI?_y2I;7OwfxC3df8^?c&W}wGDM2CSxtI078GyP8I@mg?uRcEB-#+<|?Fa9mM zC)}EDE518qwV2FQI9n;Y^Gv(R4fSEzcDN*%ypv`8PcTfDorS8@kgF!0I{cg(Q8UP; zsw>G(Jki16p;;`O`3E*co|=Fyqvo02n7{z2q8d$HYC5UM&*<`5o_D5dC=(fgn3h(C?R7iD_@3gKTszC8l1~Hv zqw339WJYvv>rl^w>5Nd4!HY$IL=5NkaF&K`C>%Apv$kjhG^J@Vl|}Xi_JulG49OpY zj*yWrif=&Q2)SpW0At$4Xnxs%*Q?nhi(K~3C>Y9$L5{UmUO>5+l=XMyd*;%wP*2%bn zNZf!z3_laCLp=8^;@*c;z@$i%4S0?ER8kh%)pD_M=wJ^iN=UiK(GahgmTR#@Z}rxG zjhajcH(Fs(Y&wMh9>cQsv%{Qi-9A>o!yA#=Ajyf>FCFzdC)Xu%HM#k z@Utn@n#3n{IbF*?6&uPpBt~2ha$<+GdGABBcAW4lC|#k9xo*#q#HZDinN1F7%_SrS4=D_zxu^!A!5wf)$jwBI2pbW&o?;NKjcvs1)Ui2aY1*~o zp|Eq|=AtTPEE>;*!U$!)2%FGvQw01*JVz~NbI5$#-ooKL6tlboZbm>IR34WsWt=_t zBNP%+RbP$xMSbu>`|iTwEcS5V1T~T+_XY>&g^q)SID0?4*@rZ;llWKjG<#m@+fqLC zz6EGRuQ$;H&H%yj8*Gr_=Ab+6=|fYrQImL;YR}nZTI03k&^;*8dnxPX1mDeWKCLT| z{WS7&{yTl9Af>gml6bEg#(Wjh1=||7g(p$%7$HpO?TV*T*ET8g`07Ys-#@9&9yW>w4FH2YijA+ zPq3^;t03~hJx;j%!4PA zv6(#GN*CvNfN7)rSP|Ybs3f@P> zo`F^_@jK)b8B5G`w4nJ^6JGl}8o;9DP~Fw$;eECs3onJh_@#GH3uhrbNw0YknyBtF zV{I)AHRDC9x^u~l#EjxGY|w|;i01&ZvTPpgv~ycUp*LL7h9-n5xoQe;!bfz*59VBG z8Xj5;S7*VYvqW%c0a>>K+jl|PGa}Q}*4G$s#D~?|Q3_V+x{% zqr9#!zM|$FT|BswO=tP&5DXg!p38^bI771kkHy!kc{)nYdl$rpuSdM)42uc|!qLzm z#Cp>h_F2@2W$)~5;#~8SM*NDJdUD8xoQg4*&^;M9dc^d80SgHRaaL!VrFi0mVpqvi zaYN_^<+IdXL@qg9dA?@&eaq1oaDfbh3K#z|7VrNSdAMdbOQv36O+KnU0NsL*s~XQE zi}Fs^O=2B)S#eX+f}7efU-WmB>3qro&w9HMmo>&zR%zp#@t@W4VC(ra8z%9tUNE*w z#Qlayyx+?H)WL<_EV2f8r>Q}p8C(l~UZp;dY%SkVF@}|@5grRsxqTqdxSmE5Tks~b z*_GqQe1m&Ubj|on)!K8(=A8YFV?xVOhKLyZkF!MA@K3_;{ z&??AY_m41t=sUgRf{Mj8$1_dj}Grftwj&rG^pC@Bx1POW)ZA*9LSd} zR`*==W4mbzgNhGyDy|l8ksf7(1)MZKgJpvm>{C(>KN-WbB#YtpD&Y%iIrH7p`Sf?6hA-P(=t@%+` ztkmhR$0++pVF`!eDxK|ZC`tT&#iMx0`@H+Kizre!^MAhx9ivAz1UZ0HMkFk=WL3}R=PeE6Bs&r~RA zVXF`RrP|(&k=@DV`O}dj+s0+~>(vcg6)BiuBLTZ8`2#kRmM-1>C29(od%ar5?}JaN zp({qN6mO3`%1Cg<4_@Gb_-XJI4bKSBHxb@}-5x`#83x-J^MwJ;(E8#Y)oV-0l8mdx z)6q(Znw`RYmhrp;ZW>_6xxja$a6QYzuyeUGHN`~D>iXdiRnsjc7Ye%x=sGhGiDPnEHu4;@)$x#?2_w7*PAIUkB;rai z^SG%b)x4-5KB3dIxnWcOY-G#yTO4`!97DX68-YQSVNaHS3JNtO_PR;ns$k=8s(iF?-xvRr7M!KzeDf|c z8?luK5D9t2+q~Ji!Jmq35j;Q5#mjhzO>hC8A(e=`!5~NT%6|9@T{t_N=jMU3q7DJh zNM%2eLSdUVT~<~)_(E7}Ta3bOE$QYr?-Y2RGK;~xVFENT z8wtOGbimjX@U;zo8jNX<)erw%t!+xls^E#n*{Jkk3m+Z&6*~h7b|(%GBy9eu5ENEZ zO2AhHYtCIcsfw(A_%pSsQ%W|*P71Tp8n#?ynM4l5c7_>Pnq_aaGH_@ zpDE~Q`s#gFT961tEbgkhtPN#7t(E|?u0{l(8fhD73k9|>Fy)Ly2-Nuy{0 zep#RCRK?1w`CxMJ3X1_&hOfOBp6iw?_*+DAfEzl|C##p?+HT?bO1RzS=@LD7yeZpgBn`xS)Ec0Ibf@j8n2+w6 z4{e5rMJeDCNLi-UZG{TJCRnU;MIc#-U9JSYBU=rLYnC(s&(r0!zh+JXxO=dgV}Uz( zg^QErdJp3H1hm;bqh#(_?gohTx$rcrF_T8r0Q`zR)4}>Z_4AQ9rIzFC|02%>B~9C{ zvYc3XCawZPn>97yg8`Bz11MzNMPzOC5O6Mc!mOgaji|8)mv`gL$hlLZY*c)~bkd^uwMCCMf z4z#w#Kz#Y|m-0K*D#;%2g6g3+-sJTS7;xuMi{;Lt7^nFJOI7uYa68gT4#MrenAH|5 zwP4BSPocgJJYVInl5CIfu3v=sa*5#wSXj2;2?_R;VU|pQIN5j_xfz=rKYwK5DkPN3 z&IjT->Rc6MS^dhoMMxZ54^JZ4nLmQu?NF5W9wPFU7P!Cw8Y}?~f{me!F{V_a39AF2 zR-;oTIgmH4WRV$zz$jEMb@_t7|lp>mRlNlt_}hNBSCWMcasIhZBTMuZxn-Zw>n)d z>8`(8vjNI17sKX3$n`}S{+?!jG3$bRb>P}y{QahisM*4BeKAz$6NS^M($%f_MYXhO zAbU#BqAln?7Y{A9h{MH2(?d?qk_-paI7`Cmc?KHnp-)g)YWA?wKo=`DyI9&sq%^`08?5^8@&r=}f^Z=;_>#${C2k#AL1eDWr>W!z79*(omMeE#AeBe`$$@0M~UP~<~aO@8EN{NgYa9g zQ3XvRM_abVmUC<{57{0LB9wERg^fn!rgJV-$lDVS;oquVfwvLaUa>0o1kV=O5Z?jx<_v{u#)rh4V7{!Rz(#91 zaX=7px%UZd9$ZGPY=TBZ61oL&^(-MFl+nbonF9p>2KGgGnrH&B<-b`(Y3VGqH~qJY zC=7MOPXjFD8U#lO0T$%|JP7bW7E303;VQw+B9oTRq_a$LAdJgmp&{XeX`vyJ*~HcV zU<<4H*J3h#W6H;a(#I#}iN9l$`otg18*Gq#yi0z$F#;@!3iS*znV6Ke7rH zH@T#oTB|@Dc1vL|t0kwJ2!bu_&PnE^^Z57gf0h?$`Yf-BWM@k&H zeBi?!yigL(YrtZjA6s(+d38lWY|rrKHDvmDOMW1)A>tBAep*4J&nA+>KtZGYeRFag^q2GRPH-qqOUdR0l|Xv2A>V=y)laKs2Xn< zt78JZd@O>5iiviyvVgPyG*3{zs4WtlPlK-sHB;=kI*%hmBAlh_K^RfQSq24>P&LIa zCW<(6>krQaRIWpou7{^gnmV#8B#oXt;ohovZSB4Bkag<#kzJEUO_~5dL*fHnqene3 zCB#p8WFnxA8$JGB6=DoYL`8{*dAg#!#16SNYLSHdhmD=w6(#A6@?Wr5R5D)Qs)HFu zMjdi%S?@L-7VV|~ij7}g#;-o(*NE|Jf$?j$@oS#(YpL;Tk@0J+SLpm8c(ttKfeBM5 zca5Jq?%uJ(hIfsXUoh(q!nF>vvUxq{5$Q{1RnX?5U6l%mgQP*RW+!*FDj;45EvmYl zrho(;bggPvl>!oV(1yq{j{<`FN1f|p{duB*unwA$e#NhV3uY;Kp+*VQyueOpM2k_nL20-ythRG$#n!((1y%;wF)R(2W=*+iWE?e4%(Zyy;=c9bTmg>yV#)imY%3_|5wNsewQU)4WI;r`9MY--g=vI&l^l>Z7=9Vj=w7zO39ay7-Ry59{%Ba;ri%R!XUDxTL_14*}vSPgs+MclqUR({j zZqPwJ(!O*Bl+;1fgO^(rkU{;%%(-?21UnN|UNhV~Xpm^qLCZ>ELnTk&tb^7zuA!dS zqJx&$&QrQtb7Z4ft!2twZ2+RC#2*VPkaituM)n2j#JzRU&e&{G!Gcpt zmC}Xc#)tyyt4}p_KQ&!=WWx9Ol+;e*tiZ`VO<9LK0R8+qz-(?;sWcj#EhD;KmWMBJ%^ zjs>?+B8KXq{rTIQ6s#ZXphJ}xX$Ue_+~~YY!?O`^&cbCgW#C=Q99LqI?}?HWpvyy9W*E70HxF* z>$rcmLm_Lpj>a<_1Ka6z-5_-X>HM^gN}#R zQo8QfK?|KLGZZ3>?0hCRgQl)g23GodYL-TDS>>ETqxb_l);`xE3L340c2ueEVq~B_ z5jBS!A?RviHWmFCec(378CpNd?oaLVeA@yVW`ClC7Njk0P^gy^HpN=j>m0Squ{!8d z!6xd)<8;t5a)`2RWQ4tWYDO5ZV=apHP^nJPK|O`1sdG%!K?@_(s8oNdgU(r(QP~@& zdcJKQrGAo*buH3OgRxPb?QYpeonx|&wT(MTv)&W{QH#6j-2eLQj*zOLsrtB+S$nAm zJ*b0@db+7*4dV6W|B#M#y8a@K5)bR3YmxQTE+5fB>npC(1Zo8Kv-xYOsTu*gyM7Hd ziAVK;2MaILF#ebhTAQy`tGCbkLE;1vFefse@+t_R`S%6oB9}>3yOMyLOz&2N% zvnj9{2JBGwX-J-pHfPcQ|uZg#vrdfSsyZ)uzB^8L(O2{pAYmc>{LR zwop=FaNMKKx6gI3K!Lqrz;=ZX+7%eQEla~w%ug1}iw10Od}gD9H`jn2We?H#> z+p*lLz~;#?YJxW&qFWLUwCp$?%0l^J$ zje~Q|YpK3oGhjQa&r~aT3$>vFIiJ-{V}Kl+DDwyFR`gQPUN_M6NYtitwaUGh(k7=? zI`UNG`X*)MB4g2R`w41HaO9=oEpLGcFDnpk6>H+%5?n$vh`fcN(`~C;OSSNZfi@Q% zplEU?plFMv%OPbp#k{Dp7FgE%6ql2u14UEHSb5Q<#%w$BW?D_jL6M?ei!LiuW_#11 z_i({gL4hqZV2iTnh837%{B+f=j#D&L8gZn%a5;@5^5&MVaKyRNuZ(=lm~CFknq~#I z+g3&9~Nbib@$e{u*pr4peY5 z$sfuvO3JzP{WSK=B@c}ULO0#f%lVWN*CTGE%HC*9Hp8_yp-lFX0h`;ri4wQTfE|kN zrDH$V7UjvcHmb$V8b~1XeOqW*lGImSUvPqo1TGb8lw1u>qmg5aHk2p+W7Pdk_M~jk zWKQ9&jT)yb%C{9OK4H{}Yb}?k{mXk5%IdC+?UV&LsMcUhqqC_je{RgSAUur*4r8{n z71L;(lj~eM+g0uY^?ro~D)EiM1GK7{9NwN(FDb z0o$3kr&NKNZ2eH?raA@osX_2uOAocV!TPdF!5}ZO!$8}ceU$D{jXLRc#uggs?lMMZ zoM}-OFj?0%?>rire`(Biz&njrgT{XMqT>KHFQ-1+#o&T`Wi}DdI9SB+GR1LE$cGFIbT-T}El51C49=nV+muJoM zC@_<69SmQlCjDyzZ)xl-4c5C2+SZg`q=j!-Uv-vrnAWfIo`bHsrRoY*>TitMHl`n= zvfN|Lw$HhWszI*h>CjDun`q_pnK4xN!Mz4-M)M|G3H;W8>B`?{EHS^}D3zR+sRgpb ze~9{}0h;MJLR(7m4uTT0g5O8e?eB~QbiUvnwHn@m%qw|{G);lzc+(Xcz<+Px&2HLA zOQ8b>Y-3?J&C7ofUUCpl15U~*egvvR49jJJZcmREvk&= z?HFb4fTRZDKN@Hkigr-jF^q0y=osAq7>RCG+Ep6)4;zFm^3Q5i1n?(gw)s(YlWy8; ziyNrl$R6Ew6vB@T@6BY=jd+B zDCVc99j3}R3Yxv}1_@=dFO4;?)oh@#<(L868(x@H@cwMTwr8!PoF129G_w>RrCm9B z2T8eF6+1(*zA{EGkvAH$8=f#=%7#&f{l$Q7&+MUYc+!BK&N@TKer>=`Rji;CE18<| zKf}^P)nz!-(ZF)*{io!i6m7p2U5ri1QOgDDbKe*%EXkTi`9E#Iwj>r&vsS8kI-Ooa z8-4w~MQ5qhh5L_(Ma;G zLE7xxV>I6CNmL-S18RTSm`&gC%PEa*bc2&gERw5_Fh?8Qc*Xxh`rv@Z?Z4HPr7kkU$QGx6&{mw>c;wGqYyV1x(w& zMV7U+>v*S*w#d1YE^x`1?Ywse)w4_oCGBYC85(D0x1tMN&Dlgt*zXOl&WWq2mnsDt z#XA<=N5k7?1MiHuA*gV#qz{Ux^ipI+|I5HTm_MC{)hh;d2a8uF6>l(h<~svhDPKc% zf;W_%peLJhH=Qo9q-<`nu_)zhPWTY*>Bw6>igq?<4y}~_ZLGO4L+xeBO>|NX)}4iwwzWOGPyK;jNk867?68xbh54P4RlLy3dXY|M=9@0xTkn}`nYPy zXrW~f-GwOoOUl+xzgjvPY2jeuPU;Q+F@_$?IYK*0*9_Rw!kM(x|F6ORHguTw+T<)t zDbe?N(^!DfRj;9=R)w*s4qBhrO^>Ex`pDfm-L!^z+8BAc>^zNda(<$dZSwU{olew8 z>fBG4M^ZX=7hRyi*HnpJC_hdstY-|o4bCgH5;NtB<>?#f5=NDDwqP2qPG%Uy&9m&L zwQjb)>gmi=wB}N3JxcKL+(op)G+G*Sigr>Lc~+i{D!)LjuZ&&OBI_cm1ye0GGhaQ& z28;f|9S5Qu_}>dB{w8ojy}uwxTwS8txSIgC8se4mclGsA_%7a1BVTxkS60=?z`9!H z-zxdv+ByZTN=9n{H2DX`s-?I!QBFe2I`Mk>*IF5+x>A`pL8q^;Qa&}*H_%zC->wG69^ z%LLWQL+WcN=?&G&1eMA>4GqddRSH=NZ7h%uW9e53MH1DO3MDXwypS>`q1+IOS5_;6 zNz^L@RZ)WK6p;blfE`zsP1GshS1YSl0jn}a)l@`43gFc$+|dOTa^m#sI3NQL3Q2U{ zT1ss~nYbSKfzdSzSM@-JES&_UsYaDWoKi&v1k)+92V+naPPw7NiBpZzg&P{ELX>6d zs+47F6)tM22q}N{3RbPcQA545QbQ$WL!qLMl9s5ZgFuNuVFM5kR8wgYIS zk_7Mslc?scN*ETG=ckgYt_P_C3VecpK^*c|^~#S#9sNWF25Z4r^;8sbupD__ZqqQ0QbODbsbo=yaxP$QQ%VYM5<}1 zG=VwF7{G%39mp3DRU@F1si{=QQO4uc_Nd4kln<&l0ZkEPwQ3;Bj1Ax+FmW9XO?9AM zMR5=>#EwfB}26jA9256kD#ylf`1C1q0hKqaL@8z!uw+2B}hoF zd1|ow3f4Swo?lzoK8xE3uj4$9;BOgNw{ty&xr|1^gM^~;X{9u zmwS+$YIte``z!Vi{tO50q1K&3XtsDw{3E`*=Nu_>rm;tY%M(9 zF)Syy*;jWAjatLK$;z+$*^mCru7{^KKjl8-VzyiExjS)t@Ym>(*97mU2>xbJ`3I<* zdqaqfARnR37f@!EMhW&r@%LXo1Mh@_zfd`5c`x`QhM_sA&s!k={9f=}01to1LGqN~ zlP~PqCaWPGUT8fnnYe&v2_VNW3G)cNhHOIQMMeHrK(=|{?c8r1k#VDB%*xizG2$N7 zYX@3@K1IxPsP}s)eKpE#&1POiPr?Jg@K}&Cs1$!r#Stban-1C&L&ty0ZxY_&&Z1wV zbzJR#(cq^QUBRCkVr}ZBP+`Q_VUs6^@Z`~tc1;>K{wGnpWS!JCdGyGx@l!?*8!H?C z#9@le$9R zv0&)-@x$Q5u(8I~&KN#AZ^QF%!pkGzRQc+_&BdM|SUK1%r#>2Fv0zMyBw4Ls`LBHP z(WzjNjrz$c@3D@=dNgLh#M%e9qS+|66lKQX`3Z)O6m1rG+{kJTk%uNs8awjA(OnOP z_;JI2GTKyP#zWHmqsLC^nj{O#5Lw9DHMZ-)VN*s=7=Q1$kSb8q1>2C#`2K#lj5~hV zxULW$IePNMsZ+W}hOF}EdqH@kCr*)Lqbw)5a61le@J<;vdb}L|;99OMf40aK<%&K> z^4D?zxPQW=aYmub6@4N^oszw?Yh-rkgb_c<9xxha(y#NvFE;{>;}tDVnbb9GT+}Cd zhD@B;H7R@GPtNW=sjKTJp;Z{>sHY`6wT_D zB%2pd*X`T(C0%;Upyg$N>SNOY)h`6Zpd}q<3|Yf~8uk?8KfU_d%aStdjzNd|0hMr- zUr}#{kSS(avT+WH!1B3x>+|Pl>_BaX1L-Q3-He(IIO(WilfapyR?sOp^1Wk6|D-D# zl7hX*j#hNv8+>@`_|a1y$?i`P9g^+qXV-rH><6c3fAICd6re2pR_h>r$jVaqO@WT~v1IQlQW1VG#F5W)D!V*H6yA4Lohw zs4iK?Uw`oIsh*d=p0gziGBZsHOm+>6x+UlTjFp!eJYnqU5nb|c6X|bW$vtuEZ~)$W z|F99G$Bv#dx@&SYQ;OXB12*We?6wiZMs|&RL|**#x|LtQ|K`^pOamEmGT=4{W8lf- zr^p}Vm_|Rq{F5h6m^9^H2qO26?HWB9;;l0N-RY-ZfB&25KT|>tD0r|E#Q_~c6h!7> zuE<0s9(>&d4Aq?qgQr+sD8b$V0q?sqxW6VCSNS}Tt9mH zy6x)dCH(S&>qZ}&`=$Ez#@GkfQ@-@gmyZx76zr@0#r2f$*l_Rw{rV_(SYG>wj2+Uy zK9PSla^2T+-r1n8eJ*oN5WfDQ)Mjnyewl`$b9p=dm+u(rbi`o>G-i^QSUN}Dr3-*S$(#}uBoKVj=D*f5nJZXH3mHP6e8HdU^cf7iR zEMPaIXl53?5HmMNAe-4M$P-U%#bjo1nN!-r{SLwO8c%j*`bPZp>gV5d!1P(jXAf%MgKTq=cVybovKgrV14EK`Rt|}HT^ZJ5p~5!VT1@(rT%f_CN(cU&rb5G5 zy!!Cx`+Pt`C)uCe9F=bP5|RH_pS33P3e%oJ%^#t%)hO**WP2H&X+m&qr(-X=x0AeV zIbmzR$i0JZviI>d^{KqgKStP&8mF`5SHfa%s385O!JVgNak-WC+@ePjS6}?0x>^Z2 zTyrfaxs}adg!D4gJ>ZNh)$W#RcV@M^c1rYt)MzyHB+7b3u~AS){tq|HZz zZ>?>O^$p!3{=d4u20p6l%=5{U#1Jru>VM+=im&XZ z%5PKnFa^F#N&iH6;%s6YHLvNYyW^&>U5CdHZ6`eLDQeSJ_HiKZG*vuI=?fb76DFJG z%AMuKZM}Rs?qpSX1m&}Gvbp*@a~>+V?e13NOS@_DUYhlF7Wyp(UL_6Blo+M>u=gPS zkGA8cq{Eg-J(Ts}e3Ev{m zB1LG`!HbmjAth~2JI%BX?;boY$h*X(Kl+OwQPU4zE@v21M8+d~c%Liht@2vT3nrLOk>{NfpD#$5d;p690FjM*TMnei~20ja+oxkLo^}{fy819HrYV@(%s|Z>Zv) zW$XJMq}6vsGuv+dXIi#{=6x;rGG%V1z-8ji1>;2h*q`Y4 zY#+U$HorrGhXUWeT>m_Xd7Uff4gTThM_v6h^b^9Nd`&Dl=Fj{qOZy`wHD0D!K86&y zLyG*vqi(RI>pK?w28+{=n0}wC{eaDW?(#XLrwZKxHU2-m^dsr1eBGf}=JY*ILp_Vv zFK#JXH@{=n9jPXH?k6O@lwI1L2Pry2^WJ9nTsE@={aBcm_@92&txGfXS0a~gDETiR zZSdb6Z7*qU{5sZNmyJP|@LlgtUg7`7OYWF#-CXk0JUl2d>t0f}kbYe4{U*)YP1C-C z`^`=PY#v4yxg!_(UpwK#agP3zz!Tx6`)QlExT)TE$+Mrnhs%q}|5wUB#cq6D8@g<~ zOe)3h_y+%v|Bq{@68))^C-OHTA_|X?*h96O+qP2I#*f$oYTu?!yJ+=;)QJBF>3;SD zPxVDAeC%>nZUDm)mtn$x{@(q=42F#AKPfmCE%`NDxSCe_Z%b*(GVxR%u_0PBOtV@& zH!4SE%EY~Uk>_xKJU3;Q`@ePH*ywBY2lGG5x$SF7cckB((>Sl<=D9bgGzVH@x0Y6a zm+ry9GIwB^7gu1T#aih9msh@H%4uioAJ2L!veeWvH+t`<!Ay?$gx3 z)^!zbx~!1Z#dl*8uFXb^@elt0+&fnBzoI{z;-LN>V|!RnSEA(Rl0=@!6VZjUE3y`3 zE(|7863L6a6>NdJ&?lxXoKZHTB0E1c@0!Bc+}!B(Sw+Fpv??#B#d_8BFLRU9brp>u*`btcn7@xk#fAsMKXJo3KuFF;{ssB0BAE9v4eBAIUUAf6M)=l0; zQes!$d;G6m_{&?eg=o>Y7QYd>kFRRdz($AGR z^bYGhM#JiUPi4>iJBs>Zn`YdTy2-QIzbU1!=YCK6KvEa2)K^aL2(O#d63b>fdkkzeKNT>%Yt9Jx_CgM1}8C^#`=n(VoNk zxC{QTx*t#NUZyL*reCnzulYC6ujm!}!ao1c*#%ns1eMxUaFMQi#bf+h{}md)S@8GD z>9^epdM5xuVDrs~d$75QJuyDR$DnZ3z(v%3TR)4#g*UeB~Op0(PV zl(jS0M7s08QqrF2zF+&T_cAL~!(N$VW*%Si>;1S|y3^gF^7gJEk~?tgFwYe`Ib#d& zu_Zp%lmmS$?zjW1#r`$j>u~M1B<&wqwZ4CB_ijM$!`&>m*Q$E4m9}PGZ=`;mq#4@} z!hW1w)IkqyE{(`trbhhn63LCa4eQpgxMx)t-hU5WOOmgDRo^{wsjB83)Z_wp{QbhN zzBTtqOGHCSGbTQhyA4te>?}bGmUo+!#=X#7%{xVM>!J}$(B7UEk?OwB?mA*A3@fi% zHGr9Z?~(gmi|<;A#XTt1ynmx8_9zzLwQ6AXSNjJd%U!`g#&chj0!v`JRRaT&#rH@V zA7pY-iw%KQy)Kos!1%65GnVyg-uo`6>J@|Q;8dhMl2(DWzRbSt?20Ihu?^#{~#_f{+?2{M!OJiY+ z5}UVu?i3RmLndr4eia)DYThqAawnpBaLu|%Bx{1`?uuLydEFUPmS6U;PudywML3x zo;^u5{R*n>Q&e{J!RRCv4v9>j)LA7;4MUVbo^jn@uUcoD< z9-E?izZeB`Li!n3P`&i&uO1pV{i)p36X=?$hOVG`YD)T-`TwZnyk>p|T@O!L^-}pW z6FSaRGq2$F#FShgm%S+40*Ta_>Z~cMEL0XmihHjPAJP~OM6A7HV|c8De9lpc$@_nl zV7Iv!cLce-%*fD`jAi(*#LlQZk`PadUYWYqZCDkV8=1-#ZtfkcFGwt7CQ%`?C{Y zmX#q%^qQpX$;>TvfM^qyLw?Qjv}iOb@;5W#$VdMG((5Wz7)b~FTxkpN`5O(Qg-Q8; zLv?jSK={9*zCxR5cG9fR3O`l6AogdZgiKc|62(UC4JE~qE4j*Jb)RFn&kTi6uPVCq z??gFtfq~+&;L2ID9+5}uba_;&v-h4=eR4ne=1kR3(S$zAO>NVN%1w{sx5=5}$KvLz#?nBbz= zD!AZpFfu)+W-}p~nB>TRj9WfOJ*2*j=f*IF(ksA8MbACTpY`2#$#XA*NInQd81LZb zyWpW)kicW%ts*}O<6dM8cM*(Xq=o~x)&kR$Z<2`_HL#bnm^gSYiPZ5nP{vzlAL0%1 z(%pxHt8P2y9vj6sgT1|7Sxkw@ zN)Nl=X6V-S7LS^m5H?w=u*jGoh`0nn{jqtYJh}%~yM*B|j}&c;#SJdSwfYZ}M)}eg zJjx~Y5^h6nGj4k<#@X&{`A*Jq+T$t)Egazdq&ceX;oz^D zKE?DJuq#G$3sPDb4=Ei@0gdM12~A^M#t^npH~miGCY#CGfGUsevj7B(83qR8EgAS+ zHC1kt18!WgGy@+^Nt5kLld42Ag9R z{h8)6c}~-}r;qYC{39XdD7yq_n}EBi8m7ng+8)RbQ!B1x9Mu69ISdQz2wTNJ559%$ z@QTMwlC+oy@s99@?i$3B$YHP(Jnaw^);O0jYk7e}XazT82=L+{8XY)Zfg>#@z*198 z3=}q);+@1EY{?u|k?cuu%#OJf+lx0KwKUT!U9NyH@Fgt2_A0n{Oar@3sF&{wKU=qx?DP`TX96GK z3{g~=2w1dW<_X$~RAD9AGxFV{gn3F^@=yO?gr?buRjG&md)1q!fa&=<(m3`I;1 zm`GaoG&3(t!8A<%nAG4lm)|lSUcz&q5tE1{WEtpyJc9W0;EiI+Xz@5+(`PY(N(41w zEL&C`m_?e-Lhf+93O+zkO<1SFNQ5R(0x1XT*iasNPfY)ytW+#|ucq(x zqh)%Bl)0C{!bsIWt!vMMek15FP0Vnp{E+X~7gS~DhzwybY~pAZx;_DWj?E(kVoN_% z`>+}v@qPtUV<0=E%}Ld_Hvh%f_mD?PilDM!au6cggsTA(BkZZcYX~TOim!YQGAX>1 zF6{x{GRf&?CU#LU7orHjH8sOQ-f+T>zEH{_eQSFhS?qx&%~EaE@*>^pyu^g~mL9hW9pTRL=k>f*h7ltX}?v;}` zQXpBipt-%+R?}e)mo#J({)VJBY-eRz(@W5aAzx@_l8kc9nSwbn$|x>7anqCg>TC_m7ldVOvxx#qFl++5) zbVtpKx?KZ|B@_2}0@2c+z-gg=PxOag{fIWo)3>Th?ufMPY+H>A@Id<`G2rO%%Q@s7yqd2Ea^tE3j#V9R?gM7!|1knO4RN%mPrN;&@@|amA3`Y`+7`A5u$G^^u#0 zr}a4!M}Q7~DKIjAp-(Ur07lxzhCiSvYLX?*0(@Dy=Cpj&GwCN(T1&!Q8V0^khX+sr z0GVl4U?ofmF)%k+coENzq=sycsu%|TgmAJ(+B3|w5@{+3iPGZoWH1qUI++&b19|ug zl~9azToOr3ZGSqfg3mw{bFO;`J(JIo-3!p}0?Ja6FCaQJvsEbtW;a!6@3Fk5*Y%JI zo_3OAd1cW;6_p4VkO~ndjf=hpGXs@iYB3?jLsTFH75u_K8#aO3VRMe#wM!_OXx~g& z03sfmZBn#DQSjDe;Y`^2x>r3>1RMqe-<(_0qbas`;h5^urI<&emI)XetPf>=n6#fp zd?z8l<>5{;?Bzqm!ygKK3K6*JgNCSGu$zhMgW08X2{{DnLKUQ`u2lV!{$^0FN)aF^ z(GbakoYH4#ze7j_64^4i&0bqwsJx9Nun$3iX}}NuKxTme5D2DBS*g6w9JUKWNFhxP z7065`X_XoZf_y5Kmh_lCI6wDhatI~3;!@gHSy#W zs3Z}H5tvrBr=hH~1El2OJ&Kcuyy;&;+<2p3luLjcWM_)(EgdSM<-o+in+rsr>5anV zgwg`fx%^O(0{ONoge@~ZysN-eV{CmB$7(#-o?6u-&$*LJ@ZP~Fi+mZcWq4KLRUvo7 zS7SfD$K6wBk=yX$?O89~fQ7pc`|$(48{9pPi3*B6jwM;j=)H6a$E+3nm?%?{fZ??8 z&m~}_x=VX`-uUMdXya>t?P>(lP;v^-)d+CXkxSsc8UY?#>=O8{Mxc*#@L!Dpw_0~O z=vN~MP_j#qbTxu$;~WB4BS;ySA^Bn(k>P& zK0rsPs4Z0}+bMFIf+8;RDynM}9r2E0lf_L+m{i|m;@p==h4S{YpIxWa9VO#MdXbK@ z-eEGf5HI2}o>Ai~Pb(-6iENZfo5Ch59dVJ18-J&NA_Yl_{+?V(_IsoxZy8D{;@PHG z5mQAb#Y_sBq}mj*X|v7pZ1N+{C9gx+7$`zFCBotm!gD#!?ZPq6(-gw8$ELVVWoM~y z^C?vK5gdpgSIsqiTgX3@!*h7ND87?@L`I8)D?f}1ixLjC8F8bSM~+k1 z0fbzQD1wl!=UDkix zN;WA?6q?la7MdIquS-K<$pwqxJd=z@V~@I*9n|V zBviYLiq|)OO2ud8mzg#LgHlsnZfck#&1A_UQ{;#qn;wHLg-O*oKLRHrH0B9K1O!~b zBN@txk`HneWt4>+$~HoLH_}_!NHu(hVzG$j%`j4VYB&_m4f9mPZ>jZ0#G<%GnU3mO zjk0AaO63~Q3FYLTrC6f1+Q_q5y+g&IvZ(N9)ch_rJ5;}ybsY76glyW@UAR|0i&N}2 z*TIS^q+I_DwZO9`m60jhnI zD$Y~hN$6)GXFF7Qn37u+BTyGA%`F8|;o6X;;zstGf@dS7ACYZyT6C`l@9e(u*<|Is zcgNjINHp2F00w9?sm`Q=)!8jD4e+Rm99UH(Hus#Bk#P~Ve!yfw0gs^Fhii6XiJfZ_ z3JVf2Jm(jgjiSxOsUscRsotcm2)vCZ8}nUIL`1wy;LMqG1cc&Uu}KoK(pA#S=ufh3 zR%2@+8wFqbdLNmdV#LR3Dy$7+d|7fm)XdmeRGWKA8&;L~3J-Yz;ADsLfY6iFQXbix zr1T&1lv>na!7W?xkbS@ggEqCpG0o+LYo${hd~Nwo zpbs#~5WJ8lidq6f6G%7JCK8ZM7pSp*wVQ2Vf;53>P$Qq@Dat2Rg|Q0UI3Mn0WxSrB zqfWR45aHGB^%g~pYKH+-Z70>@^Gq`WM%ZYwC}yNCPt7fAs4VK`H8MSMD68SF^Ftdg z2Bb!e1W;&Ehs7El6^Qg30VvBuJj_dZU6ITMDAWcXBc$PkPc{904`4Dq`lbgkd34eK z>B>pEc&8E*CxH3$v#D?-bWGx7b)JBv)NybkSs76 zP*T+MG`-BSu}wz>ZdyZlA4NmgZn6O4F-@f9df&MC6WWPs;knvk>wigpiYgd}g!Jlhw+D(y=vi;ijWCK@Tr4Gg_v%C2L>b0oz zRrOICCf-_ZfrwXj4xWe4cG9D)cQ*@3&%gypC=Qc$uHoBQFOOO3NoLd;l>noL6vI<_ z2C{Q|tR1PRzz8>FZzKLoGU~#E;pbV6k?XKwv^fn%u0;hhkO5!H9HzYf3S+f{^ODcd zhqN2r&~Ys3cA~TGH>n#Mtmlo!#{Sx2w02Z&Q5mAcK_XI_8NO>$iiLd zIvWm9w*!M14Mule(+BjgOgWz=W|-=bEprOr+?s$?jfhfO4nCtyQ(Wf|psSr}*7izPZknDN_-_j@l8KEQ>`#0QhLwQRO@0 z_zaa1Ia%_s&-)>cZ(eIbCt9N*A!4<>nG0UrTh@?y zQeAzXwO9;5$TT$6HNYt3sK|~*yQ%z9YIu=)pCn_jn{!^*G)%1)mGbNm&*nY@fH4Z| z3j2F_z3~`zAH+SIOce)$)OYb48l6Et=tp}1jS^L5l@TM)Kq^*%nw%zqf!VmS99B=llLfr}ByFSfRA;Om+6EU6 zF0ae|Ktip-?NXpfhC{9Hc+R_(KQqy=z7+}iG!>aJ2^y2~M0@pN83DBi*np#94kt%?DFTS$BS><~Ndg5CKul zMXAUZ=+qQ}M=u65athEa89_re3I^9ckB7|!0I)Q4O0^QBDv(xCQ&Vp6!CV8CM|G$i zi^aRnw!cKmsZdyfLy)+ucsYl1u>DCa5|_&grJ}4EL0)aN7`1hxyruFI8MURNTvUms z+98>#XCPC5EDL%@^mm&6tI#O_c-p0MMK>9cP;N3bj^(oNGSzHgLLxT}Xet&hZ9QE! zvc*Od;I#oq^pz6Si2Urwh@WHG^aT^!k=3)58?@MQvjWIAl4LlqVa%37R?6=q$izr4NX5c>eBc9`u(Mz!b=@mvG3 zjKJ0az6dYl)x7yQ?O?ls(4kW}lkfsH4UEzS_6Ky0rJ_#s78`jy@+7q1Ci5WLS`5?> z8j=Gxyl8Vluqm>WBE4~*vmE9K3*>hF&s4+WuK1b6|IRZI2Djv_}E=^PaN!c-J1IZ0`8 zQyN!lG6n;P!eCS0+Lq^O;7JzYg$?nd1doK;y5k%W+lt9#qBM{ygT0L}vf?3ud@Gyt zrn0rjxBEb_6`O03%Cf3@zqsRLtGxFjP0}V*T{X7gpUz%86;qaVbpe zV2x2E3r_&ChAc27wvgx*tuURNGiPE|w^xEM7=1v~&rBQTzX-f?osuHZ4xlMOVGUI0 zZkF@yz@q0AYcQ!2eiy3nqYuhSh>nh~OLQ7JVqgc(5+2w}g^9Q*Gbsov6e1CW&CdXu zbz%#%sj9jlf$=pc=r)~X@2LgNxo8BDK5a@CIrX&z$3R<%g@mmR*r?{GsJ^~l9HW8v z(2O=$mw|aL(yGmHz)S#mV0IM1gQ>QGb{mKeLzdm_7#RtK9cl!6tC|=FQ ztZ%W`Q8XVTqk|{TV?A1$sHrYTvD-$)gGe)QCvs!0%%W9+p(5nQa^7&54zT6M8Ttee z`foB$((Ccph*hSkI$8vZ*b(}K9fXNs zIR-Se7{_F>ZjCqOv?8e{8)$cAS_&a8eI!?bGotUR`oE%ud@67@s-%k?TZVoBZJ9}( zN2vcGooCxs-d5BW5)v3dPQoN~jxsBmc(vdh{Kv-IV_A!bK9sE|78}_u1*^jX-5Pry zMn_`8$3>?o^%VIo$T`wPMAVD*qD6?>=8XqI_fycx*83THoodDAW|M%1j^^q-k&KzM zMQ+(4KwvE*T-4OcyklrcDRcQA3PHOlARgSqH&yY)h zSh{{@6jx@w>l@{d>t|;x{tACB>ILlV`o6NO_aJQYGUF{<=wn$71csttlm{Z(kHIddSnm;R@a$v89xUNx*K&YX^LT&RFf~>d zS5>=}56K3?W1|N!%x&W>@DvPT;OI}x@NqoSEIT)2Ira>&wvsh0h@^?uUo-MrBe9Me zQ7H!FXQV*I4ohHHLB=fJBI$Ra7s1W|0AXwexc1>y-!1C4qm>?E4tn7-#Bhai1db^N zEHEL4Wg>zzdA*eNQ4&>K$v6U9Nf|_lr(#8DQLe#diuIp2ZC} z{GsTROyB7p<@fncXDLXc&<UC4N^OXN{I@{F{%kq!ZITV(_zL= zx~qB|c2?bs+ld@S{{fu%(eCm9=b`dk1F2#NOxKn-ZG-2q_wC)0@{a7w(CWX=#A@Wf zAX+ho1+FS$wybyEHp10r*cW8EDC)~wph?b9#6=U9W9VA2QbK?JKE;|(Vm+`8&_-rd zYp~!JTr^bh9K$soWC(||!=<6R00%@++I6VU{u2a_3nq* ziclj)8TK83Mi|&A#mW9NT0fUI8osLq?C9;VTHma3wRqlhyr~L7jO`@*TWHNE;b57?W%$OzhuBj^rMX~60U8oAvH_Iy+E=& zYw(c1jX0tZ#EaoI8!udW5y``=1TPO>IITZ&GhU5&$)gWAl{S)u7w)$b*%(!Eu@Zjl zkUzd7e~icIm>7hKW|BAS9@po{5;9+%;xvrJiZE&7>`My4vWqNXBK65+9(Qu zrWuB14F;nTxo&)P{UMdB{$Qpv&KO&zb8#Biw~s_*)nD*BN6i_TuX9CY4dZt_b@3A# zXEX~3((0Yh!uZT_IvXDrHjIBIte9E&&iV#wW=V!_{6~)ZSL4GYa8(bNP2Q#+z9;?5?@U*fJ#J`x@hF&rZAR zuHvG3Lo=Sz7&p6*+K{oN{mzo1rhe)()fTI;y|~_0HftkHV+}fE#OPf9geLL8@C#1Y z+|rV{(Nmi=V}csv@!azktm*)aSFN`|Dy0?7Tfwmm6_e zKL1Ni?oHPv*5x?`&(hw^UxLo7+qQaZMDDqaRVLSVxc9z6cp8=t#k*GH-8bwr%m3T9 zbsFz=_xHNoB|nv0!2dlQ;uwMZtUP~URAT9bO)zd4HD70r7+1)D7&gu+9IlmZuD4+= z{SvGQ!lU$1+$+POa|%b|U-jqTT~RXU*FdFLi*B7;2gNsGMI6E=?u!wg-kP@Kuy_O= zm1lZD{#WDO#lK&JytnNIhVO~Wpa^dP|Bv@nC&vh9Mo#p+3NAX;GDyD+{7;oA;C~lJ zW{hytvR=#=vkexTv4a{a+Y9*{VJ)0O{f7l!gl4Jlfe}e&Cl>|eh<%0phHy}v!l~g` zZJy)MJnk6$2aGet>xx96QN-^JbH@tjvvyiMZy@(^cn!vmd2I+J74rXlQZ>>koJ;@O z=$UdD?8X=1mdP(iaYwLU$Pa3&9IW18@z~UrQ*cpUDw#xCA5gx*Db zC=9DuVVCn#l?S_kVJF}rNKRcB#U5E93V1mjo*3bW{7bP|$mTr^o9GXqRo5gEog)6m z-_?F0R;WLc<4tG5QOYKM1K=)WboNNT7x52=GdNZlv<_C~kGFwksx56N?0__#JtDo3 z|6YszL2-G$Wi{Q#(ypF~bYy;0 zPRn7qXXMl;pg2iqkNBmS|1``VCrFmdes6=vo?hx=j86dNiduOi{Du5YO_{@nPkj0J zjxtzgAA%)ADpSJ07{+3}AdlE?%Fp(?tFSn(ivmt$L=nFxY(lJXByG6Y+np|EIi7%~6n|OIPgN@BUkbCw37fs& z*uA}jU~x2-W|dF!&A4CZkA$n3za*=*G)}mg`3B_YH#g)~%zBGH0<)iqa!^E_Qht3n zNfLzPwv$!fW*eBMI8wIaLY|f$o#By)mGBRSN5l(XI<}AU&h^?->fE>P0t5dv+^Vaj zgMY1-he!A;<=*TZo~x?4bEd!UjyrYsi2P!HyJqpFv@PKEcBPMb9j0b9mMrqvb^b`u zO8CEp5fm@1vD~Qj4%EeX8du_idQa`dC!$P_q)Q2ZPy^9v-!Zdy<_a^P?R^;Tvc@ca zI%+_~rzQMH;SLH>my=wRfV1?@=s27|Y>%RS~z4BF_DPH$9)5D8i_zb9NiW~T2tSm3 z%htrLq7W1(WMy0<#5GBMXRcCkK- zZprHKED6G?qEFbGxk)MAK3mpWC^9pa&SZT=WD+lbd7D}Ul7#PTzBAM~3dKb4YDlxB zHa`x&mVZPcBm(j>{@};zm_%WVufBm#!1+zj!zhLmSRpxih&}>?qB-n(Zg)*X^Sf{u z#@%K!C#SW~$j;Lhi-fU^e=}Sz6NT-`^$nGA2J6F6YIL+@=gvD83<=^Mbv0`sdo{95TCA%Jj)o@3Pu2*D0 z8UJh;j)}reVM}Sv#D!^b&p>bGq}15h6bXjdv3mLc(tLb!h5`- zUS48J|LHVd{-QQ!P0e0o&D`(d3GgM4&ajj{2zBwXW%`&%TuS+;!>T0+XB_LxYgXiQ zNh4ncgY(V|At^=BM?{=l!mrV+-)8)x4C^hio-;lJTj93Z`hbY_UjBmS;(_%w<6U_U zv(aQRmJV~j^fjCbWHSP6`?efLkzNQgm;=imE4MP;(Euks|*VEY_s_aY;hhttA?P{nYI zbbBHWDCbXVgI=w<1P#s`KwB{R&AGJjFb*?74{m=1mVdr9Mj>7G=tH5HkrkV|D;+rr{*DkXBc=;1y?UID^-s5b8 z%|;A8l;kVPX}*GsGfT&Ih$Y>uXO#1K(9=Fs;VrhO#Z@WBv+MREHXIbvggE zj%(piMMF&;&s9`C4!C@jq$d08@0#&bFO>7Y3TJn+u#@{?WJ5!?!DccFPLFfk8dzN0 z{BYC?60yn4uh(3+C1W4oP`bcXlWZ|MUW2KbI`wOQ(nF>iy=-eYES6CvquLpZOJ-x!`NMfd`~uNXhGkjxY7nY0b=8R5*reWJ;z z+ZCCtoZl5rq-5cMX>-~5JYTHMQ(Wj7*FI^4-BOTNFj5~Bv8$Z_L%0qn3!fFP7aF$X z9{pQjTxQ^^md5hs@llmH(&6Du;hj{n@V&Rb!BAt!v#th+Gh{ypv8K^U?+sy91-~<_ zo=Z4nzF9WjmoFyRi#`1CWjkPa^>AJoA5|S9`c?9egh!;~nmSE5NZf*P^Pl z+MeIR%mOAVry{&W2#m|vdJ~(G4N&1wq};xrw`K&d_u#> zX6F5>@$(GG$-Z66-*6KG-Kr&hUg8-`4``aEcBlZ`^3<&ptq>dg#G7s7~!8Vrn;^@Pk(kwf|uCE?nlb+SYv-3~kDUCC8`m?|rx&x z;X7)n!h$uKQ^%(=CWn!+WZTA`0N{UC#3xroAH(U$Iv56Witv8Qd47D}ylI~7S&u;t zZA`NO*O)rtttc%c!>ah}+H_aoSmxB}>5MJMmfW0c=i>4lxn1`cG`|xyPRGcf!dvzf z;VaA8x~aZYll|^0{|aEslMSYlM24@8D&qQd`@_CW6)x~!4jaD)Y%x2*yeyM}xJ)KK zuEgN_%MjC5@mIprr3%|@t4B_)O6BeC6{A^GhqIhFJWm$C~4a$9ji*5;@)CVve~ zPMaCxk|FhBn$7y@gw_0e;gn4i&gX97rrzZ>SVp;fE`Zso|?nH4+&r^HJZE28Orz`#M3F6QR`gB_%^jWL=-vPy!6sPp9Gt>qf89oX#zAeyFKws2 zQ|scaITg-HUqDNy!I8}I@#BB5ak-CB@ZKK_v?btAF#@$190 zrVFQSd-A641kbQT@K30u1#66@GR{n!T}D1rpHmPfnNiKpe4QKu&nORM;owFUQ!!t-(C&%!OkyX}U8W%F{%R>5!a#Pm%u8*!T?T(D=ZrTcLgs|Z`%}Ce*-NRBVCzv=vFf!Ko zLvX(->TYmkXf^*rcs)!LzVck4r+TYQ+?eri!9f7lY_0W;p5)2MiaL9YEK}9|V;YKX z+D_z5?b`{@LenH%tYR&8CN_hOjn9f7!cHs(+Kkt-&N5RQnhm_S>K!-&f@#ui7IRFj zMTn1rP-Mmt{Hx)hWC#~B4%lZ+%*N9h2XAlo)UPLdVcer;G`u#{UU&rmjOL(Sj+@?D zrH*Oe0Asl=&1kk8%B5cS`}tYDH3pL}HL;jyXB+}M zH*9>*h@5dHL+D$>?+qL37A|FW8_oDSzBRZ|7D0b z8!WMA&M_(1C|C_9drVYos}H>pZWuF!Z;JK`v)+JIp(%ME0K(Tio}8X=K*wZ6mE6eC zTK>Po(9ab1)9)9|V@*!Z=5`9Egg9a5DQL|%r=?iz!)^;knHxc2Ex-CZ^^RMnumw)! z%xf@$v%$#CG||>IAb_Fy9T(-X?IwzYko)1dbA789KIr;U}9ZezYm7OhhW_NdAp5 zBD3&epiP!}Vz{oV;WLUfm1)BJtj{#n($@ixXW(~-Oigqlo_D;;O$ zODY9EEA`2!nInVi_|L;}_6R2`j`9mxi^GsTD@n8)U1EQ6;>bjk!Cw6sl*U9Kl}1L_ z@c*M#xmA|0D(B(79Gn{XjC~-KmT-*oHai=e$T*_zx3tx zVZOk|`#Cz+hR0?`Hn-eh9HE=6yZd#`-KW!!S?A4c8a=bI((c*=x70siG1}c$E>nC3 z?py`YTVH+nZ^K4s2}jDm;ujhnz72R*olw_Pm^d5lP=V1@@Tb%mvh|}u$$HIr$9^rh!S!Us= z?2M}7)Pji?qrW@F&e^OSXX~h4{xKv(-2sS9UdKNfhN(w*-+Fxb!kbW)d~ce`?7J-{ zBO@(#Sc)+t&0vT%4Yx(5b!6^Z{yQy0u9j|&naAQ?UW(3(p*Y(xnzNcIDsD1u2m%## zQWbGq9e*tBb&qg()Ft!6yRcptX4_)=X11(|k11<<5Lzo5t%Auqqfs|oSNt;#X*bKZ z3y3tEf#qwqLJXhayQeU|I@x5+D!H#TmWkTcL`IL~k7^PBs{E_ig~fC5!IA7Zp?HqP zP&nr;n3Xaj)->Zy$dAn$t4|)W8$%Y}H)IKk-@5ynk{FwlH^ik|%GZOHiLDx$NF`b_ z%nUU;u5zg1|Dnx((6xbHXsWo?W)Vj*lqCrqcRfVM8EP}wm{*{Np$qllk!D~dza<>A zEa3~o>70eBtj#9!X{+!6DVYJw2m@`71$I~pZlr8FnKjF+4C-)csC<{Dv@KvxTeq8<;*ZJ8M*u?Y^_Hq|ugWV0d$iy?C-C*=Z`C zTpV@y5XtnB{GpH4-EWp4SJn5qn&NRYiO#W*n>}WZ=3=p(Qj#lH~t zUbb*UIG4Q;kD*h(2Z|rg0G|R(=}6AG1K5;&Bb_olswax9+oSlWwDEf_`?LGzSs3>+ z8&f=by4h7ZCW~R*V>w#LV$vU`bD~Z&^!eWopX6l=-`7p)qw%rPgg0ojZ4u9LWvqZ( zW6E%AF+idto{0jFKL19|eW&uSKwp(Rvo66RIC|cO#eS3B%$Z_R?4vr9Y=slNQTK2n z&=>i~!}{k4UzkqkFE?W1#Id~7Wi>ggy7ML)SSBGiF42%XxjJ>)^HBhb960&;tzikn zgl{bC^OsMl%SmNTncl?Ml;W(kVQ~!C>aAQnaTvqREQqdn5f}LRjhcWx=FhYG#_-%! z7os<9HO=G=Gtl;2hBB2KQvU(QqV%ZsF#;h!zey9Y)Ar4*Ir zP&ia~+`1MTCRP+|g8k4~W3k;f(H_eg3(7b?F@@)n(~MkJu0@zIL-$7nRO9$OPQ&QbM`SG>5{+q1~q$UCwV}Y_%8eGpqMXbSmSC-MD>lL=o#dRzj z=v&g>;WBmh_q3FkRaLc=xy(zt+dKN^_x0d!mvKQy=llf&E_UF)USwO`+1(PR=tI07 zqlra19Uj(1-!{#|nGAQgcJ+67gk(zj&nor=EsJ-O%mk#}9 zoc=OZf9cU*W{a*h1^B?ZZ9&hH{*LY?i(9%{=XG?E$IfGtz+=FNQZ|=6jq0=JP6v`$ zVQtMwg~HHunCV3BSFs9-)ks_DBUuW`ppn*_->6ndMvZia{X`{k8tEW+Hdo=|HPT7L zF;xdaBW)9oR4H60jdU>oxJeH8kjkFFnlqsYXjkLAqGg={~ zYNRijm1=a-G}7VB<0_Z#g$>m!t;)c3jq8o-qk=-p&`39|$5g%C8tF^>D%CT@4Jz8c zH(#k&24*5jb)TH32HK-hxF2#99=yF59`?0w8>5i2HPR<=O?AyMjkJo}nXPc;Xrxo6 z8xj>#u15OGc1cwQF1Qr0$STxGd+8IE3aLmVow2{2uaJs0(w5;XZ3+o1b$G^aY)91@OEuCtW{nza z-Cv*O9#%tErg0q*wv;Hc^i2FV|FWv8SL0gCd{?M&>0p-qyVQ`CYh3U9_NaiX&`9sX z&QfJyrAAt5+NuuJp>(PEOEsaYG_GSs$5m3bM!HnGMfJT8Nh(MhZ>lDa(3p<6uB#BN z(MbDBcg83>=uSOq7*u0ct8s0u*}^MabsFhR(GLjaMG5{xoXiwxw=T zr8jA$J>|Pp)jB_3 zBdz9-sdZ|CMmo$$qZC3<*2RVbv18rK)e=hWgkNh2K?wO=(Ts=}48RJm@^xIV1@ zOhxKsjdZ1aziN;U%PZDhYOr;^zTj3CDN0Py2JU6At5~{KBYm5DSjEy*jkIC-_bO?c zMtTS?t2KPOMp`L+rF!BvjdVHZ3l(0sYovWuJ6T1E85(IN>{Rt4P*sC{u39Z#Gc~4j zrq#ogad&8>Z=6R}6K83p51nh&<$AV8lC0mUk)5NFjvBYBvhLJK9}3&mT)#^r{a`w- zX0Z;-vm+0vi>Ge&m6$CmE?cyL55aX6adVNR+Vj9l6*sLKg+8fjHBTFMo2-L8?g7|-|>Kj`_hE9XnK0(EFyYlm%69e=k*+HCq-O{w`B=}6o$Rn`I|sfuPE zRb$wxF`cM8V^=2BHN8=DRn7E;8rN!OkGgW{$v!<62XA zRLz2ZjdZPGyIT7PG}0=|X%!?(G?GjoRRM0*NIz74t{Oz(rmDKn7+#(AF6Dsbx{9uQ zHLl|co76hBR3p6u$5pOn8fk6T+p6}ujhE`aSG{_l#`UFXP#w4&NovfFVyZ~^A%BgW_(j| zNG;(3WO6Dk{`uMuIVXp)mOztr&VD0L8A-~zDr?yWwX?|8n6B3DRb`R$SBRfMKa+ImgRP(7`__n%W!n>2Rn1joGF zK^gdPlrZ-theBJe)4m$Ml2K@n5SogMZJt3DcA1(uta9}V+Zui7bv)2gXpa(_sv8_q z-A(daRpfvX_b$YfYxR-mD>tdiDT=6*UZ}imRlG~u4prE9Nqq{1*MvzaJ1vT^b-J(( zF<;gxwDmgehl;*jZliNd!@ z=i6HKt)S2z*J-EoKes8g%{uJ_yGEVk37z&HY^qWCw&=90{?)2GpVVou!U@&wTXova z%wsXi*r#;b`=vKk+qMy!>d;epAF63YmK@cLo%IJ*zdxn9_zs$tdgyh5lg|$-Dtx|`f`%xi<+pB6+R;g%;uEh(g zJHiu|DXLbg0YfelzG{V5q57swk?Ac}6)z1-Rkf{Bbr_)%tCTr>icwyb0sTiJ5ROij z5;t|m@~}gi5194=J2Yvmn*SSL+=Ff!tv&)OZi9Kq3yo#9WYS$GOk7Bv5*6wyZj3sBV>HMzi7fX^Dk6n=J11?Hx2-QSH(|==L#5?lO;@30K|95;B@SkDQ z%iLS=0=}VO_MH=E-~S+8`w%_pVdEq40<-j8d|$?UIPM9Mg=cMNVr9HtWu$<7#)z|! z|J{qfC)1<|8|(oueM}EAtQ48goU2X zaJz9IR7@;hzWkbTvo%SE;m2YA9vCgY2s2v}f*{OJc^2mPKLtD3bv*SOd@`a0tpfvX zbQbepuKVz91|_AEd284c><6svf1&0nnDZz24`v7aC#2!+cO%6iKkp3i|MkpgguPo> zc*k~nq47fy55bBD4!}0!*XA*oLAVBYd(3OksB|At;=m zhi?}c+PYf%`(1p0=kkue*6u|ftI6Eg(cjtL(LK=F+C^>~^tSdb^3ZwU;Z4T=wgo*s zUHF%QtWCY018ocN536$TptZkaUTYV*X!8gru5U?qH-45388yGP59PUT00Pb0-8!(O zueD1*@^9duc+9?tAc;q;!Gyv4CB%F>&!M`i z{67aHQqMM=sBtDxPGpTm);KoakYG$iR(w_l8GrlaM~|D7=}$~LZ$!oJ)> zQjKX`I-i7$>HLA0p088*zGqIF@G0~R48GyQJS!WGaXj(2DQzMfA3H_P6y6r3$9! z6q241xM}%{7LmMd>FQk6;c=QAW4k)KagOf$db-`p2x7#;2miR^=N@EjT!0_^)YjV9 zffm_`eT#8yN1rF&6x-IbcyUKx8`grB{*JzTJKH+?iHC^1zRvdf9qz`S9z;L7?%odf zElc{4={_Rz%A?!Kk`10;Qz9OMKhFCsDDMKg@v$wCat+l)8?w+0jr4}Kv zzqhAvpaoaAmadM@{w0cyR@dL1n3il`Pis3_@zQwdzs|f#D;VBvzMAK>gfo(283T){ z@X~uf|Cbpnlv$7(@TAtx{tD(|88QGKEgLz8$2Zs##(e%aTTbR9pH(-d+RU3EPZXHON5k64>Kt0b+w(pcYg zr==vhq&j9A*JhZI))<4MBbvuVjn3i!`sua5dT=z44!K%wN=rl=Bl9?sGgh&29j;)9 z|EMr764oTHvaF@Qf~!!tV9eLB>8rHEefvpRwiZ5teQ<(3O3Tbi`W*c}y$>EZ&s-+I4$_<83bSlGG%UaUFms$e2|ut= zHpi*DC^k#L|MSnP%kLJ}mwfLYe+h0M1bi3v3|~NOl;9!eB>W2>mTg&&&u0F`aLD1j zO5gD+^8_vI(IX{s2-Rfu651++ zGjWfWn%4PKj3lQpo>aslK$wDSVmo17rFZGgtV5X)&GW{*yuOh_e$E?k9kM z@rBplCKy>NTqu(o_Rulr$FN!2h#!Hm4*m+0*TJLsK@~5+>)1mDZuS2+{On=6*$#LFT9)4WI8;9fY0rVMblh%3+R~zpFnR~v`4R+P#(_^^!}dH%Z2eFA zLD)^#zfKQ-iOzbFtq-#G2y#9QpG2aQDapAB_$UATXCH!;$URHPv zyo1oR584mFy@RkB2C;`-jnCE$9EQ72!Nf11?hK@#1o{%#&p_tPl#O0hw!rhiT(EbM!d_$1mYK`bmlH8TU6OP zx^+U!ZL{x~JiBqxxQ-ERWs8Q-&+1J3S=v1@51C(sr|2y7QK16GLaqqaD<95ONhOXB8I{I7;_7+2Qe&4HlDkmG&f<;>Ipn?4FLTzI$wEUspfAZ0+nK+ny!ey{-3l zw4;nX{5E-Tdl0=b2s1KyYgiAHcY;BlS@_~@Gnqjh$>i-aAQ^jS6Bll|kmEA@f4636 z2zt1qV*sySH;^q@{o;ApNjCK%VFUIm*w9Ul4>L*|~;+Sl1JFwjaSu$!#Ym-OAUq^GmL zLt(6fi)U9eAgs?=;(EwYjg5}iZB<48^UO= zYcFnlI4tY(q~CI3E}jv7#C1OOQH1L+)~_S7c*gW2uG2c#Kg@VHP}S?lTv_~$AHuR& zVa4GwVJ7^9mmi7xR#)q6&95SAnHlSkxNb&78Srt$lMz|AXjv}IF!Y}C*dN#3F@SsE zML*gssT(SFj}@I~`fIO?UEG5Y7yfAHi^)U;lO6Cp+>#I|;K^&lKgs^B65iE;(ko%!ra%GD;wW%t+Wf;~U{*Hi$1mtUrj|Nr<6B zfL~mY3DQBvA7mvuMB4?qST^@jJCg(1L4zOp@tPQnZ_XE7ZadDN?`0lKu&kb%nE8ROH8o~yYbkqa5?qsvO(k}`Wuj+ zmdr9EW6)Xj35_rzkN_D$Bclh2-o#9N8yij0&Nft=_1qyysd9o>Mt&JN&{l#wBkB}H zt>s)f-h(58YyiPZON#4uFF#xBq&{ZcB;*+zIVbf8VGzFIP$~G6;H3V{UxH8Y(==#` z33nA_DR1k;vW1B>zYh;J$qPKoTQZMaS=!Un?)pPA$t*nU=;~j9#|b2}{%ln;>vO9h zJ3@?y5;6Ee2*mmA!a<|V<%=?=7J@}0QN>FH0*qwzh-fH_L~t=m;olGlVz>#ai7G*hWOs_F37Qrxl3AC` z;$Ns64ndLmA#ObWVURfqtBVpKK8OQ@n1INIeo&NYkSzHUi`rtHAhxJFN_T{W?Kmys zfMA(Sh?yL~48a%3i{o)Fj4^5}qdo{45%G=C!GeK$;4hZK84#qXFOET|U`lWZa3wQn zQDOt=SH&y?F*8W}Ls$Sq=%*0Y7o11765|6R&dCH>F@%6bIN=4NKEB3RA*_zLcL*Z* z5O<+?xoDnDJdbdeF!dm0K*=(Wr*z{`o@5~G(zxKlwdip^$YDv66s)6VG-^%^lu0_F zek6q{YP~hcSA-O)jD*I^m^*$7%^}mEIyAZ(c_jlyZL|8HLIU~13^mHAJQcD8d8}1N zQp~}RzLyLVEAgl(4o3MRI@j+HaR?Jq+=E!+7!h?2a()B?#sKwGrV1J{LV=J0zt9J$ z8q!(92pAj#v5i4*Vp=2oBqJ(BKt+YH>;+Js#g9=!#Rz24FvK-li!V_SN?1=Ll0M3n z9>C;9pW=K$)Q&)HqxF)Z=4H5u6ahsOu_8*x$vC%N_}oHmHy&gzl92EsT1+B@6^G1# zTFVT&3t5RB81fK0id;umgwPlRq2LHyuY%|)j48oq2vLJN29=_Zmt_SlXc8@>)6g5J zos2#qjte4Nh`@$NcVndSFD8T$MmmpfLTx#twg@V2XIxMASkyTzh147YnTlq18cSAP_*^F`;Ch zk}(D{Q5e+?NJfc0$xz4hkOL*6>j_{`3|VpCWT>M;NFa_w8_+2vMhrEGxh(O!1s7TX zB;E{GCo-2yu^s|gVq`-o-Q$?nQoHK+r;vgC80m2A%M-9=15_(+1Ajtxzv4qwsR2d_M1|pa!Vk2G( z8c{wbdyv6vn9x`tBuqfb6y#(cy@DVS5f(vOM30la2N7pMb5U2EgVYTPY6qEjO%$~o zvjJgELV{BemHg;o{EZRCl*QjTAjqP-2#OfO2`y;rB}Xvbh1w|A;NNeWE|oh!K>7GF zRKlqe_gD1pRO(OkMN~bAAx4SB2?3%%DvKUQX$W<6II2Y~K>*2$Ysm~jGy(&MU`004 zU7!|(k(5-)Aj%{i(N`>{7qSxD@i$_cxD#KZHONP%LhO*}OH2s=4k5~SbBFac=htP9DPUg^6 z5&{%ez+?&CDOnq2ML7~0zhuP8NqA+f2v{IU2O5hlAJT{!gesHe9<@c6T#Ol{XARQ3 zNqLa5!$AYB7;1ukd@V{mW;H4D7x9gu!X=xGeJ@@@3q+!)T^%+rQ^>MEA1^|-d7^H47?h$e`k)CS@|Du}9v@Jf(TEGJ?yNiLvT)PCHI$}!l( zpv6;U+bkIue>6cNojjUh!fymv04pB>7tuy>MleY-y8IH>*&vw@l`sz)8>klIKQtIy zJ=8-1MUWRa!d$y>tcv=CzP&{Z3J4q22su%I#f36LO)^Q0gex@)tFo<;t zg<)dgH-mgw;Yc;XPh(IVfeD0@$iz4Vq-><-{)VQ86D=^4F^8{iYLLwAEM9d>_3F$l9DA!)tjiMTEnvChk6J8JO!h9-#x=n`DduvI`P%5FK`Ngc#^7oaMYA}%vH z6ji~3NwksNvbjNGWCR{6WE6>D5fw*o1aa43B>5L38L>}AbwzX<`T?DWTsWR135P=D zCYhd!qcHSDI({km2x98XECLC$1^tWpC3|FtQzi~2tqM94ykr2`j-m=EntaJDUc=C` zP6_=RV#%ynQ}RXRNAHBNLW$@CWZFIdPw^+fohUIB5rZ&94J0&z!Dz^+jzr3IK!KIg z&=XvUGR}@9@{@33Rm4CbzPa7ZSv2Mn`*E^I!eWQ2__0${sx{tMjGUDk@Q|gWOF1pT zJxkA05AD7Kzi+|sM*Q}XW4;CW{?9J*9#ACAa=loAyBrSB;s$z_D5nP*$`&V9xQJEC zb?HG2IR3bZzat9+VIcPnhGf7K4JTn>{v87gpfIrijsdMv7!3c80Us1l7>xgp0pCZj zFmV5lK|l!sRFe1fD^{GK6*~`>mrvM;j{O~c%=l;fGyK?6EC@kUd6L;-FZGERU=Rb@ z)jO~NL4?6Mj6s|uL#YIA2{1RY!DhucFbSSt34*_Nv?u#GtaTj=%B)g-~(_Bp+%>3(S526+-BNr3%~U4ll5=0sMs z__CWzMN!;~7~GF$Q0FQxLN7`VLR}C_Log-a4p{t{Aq9RWkmOJD7y6t01C4v3L4(xu~34Ym;zHII#rw~LG$#1 zt~qG4h(0eR&S!iQjUmWh1r;}yut+cwZA1H;k&1V5CBSwkR-7QgQVH+ZNRTVq>)0l@ zn3^s6DzZ;Qmkhm1isD44@N4D*>YL(>q@@$bW(V?ukQxLo1l4{H*E>sf+#~d|Kxv3x zHr8ET7#mm6lvsDa#Fk@=-L1I9ilO}<;u5pxQrIQD;*uk-i-4PROlyQy;W{WRPa2!I zbdJBdb`F-i2{PnL#JvR)jK!iO7Nq)9{gwb5hz&wXknRt{jF0Iz@g_u?0gf`kD^1H^OZKy*?dbDdWvREPde4qb_8b z^HM~#JQqh+i;LR*dH&Q1Nq?i~grFke3&Jw8i)jvlFGRZoZhv-GYKe$0%95E}nI0`M ze_g2f+lIOP1wK&6TRgvF6bP<0EB;;+--71@c|p1`2tGw%+nhxb6o~U>{M7u<>6X2a zk(ZK`rTE#;F5;emj3B}gTKu_zmO#(1aijba9fEfu@D{U<4$Ssf2R1_O_50s~i_qu~%*WR$eh!1`8(Uf{ za$=I0Cr)hl%|W;L5X@^}?sv3%%EaC#u@}+41+!!oR+z)E3Vpa@?m?_R2-(Oe|~N;iSnTQ|395W_0YY}$nX#D#3A zSRpPGF`NrT3}my6(ZQz~WSRtLJ>IpI$W)kZai!EZ#*9>w|G85V39eEkI##ARnYIvI z&<=_8=NU5gTkJF$$|w4p{XTzQpsv=@=m>$k(NT*q|2rIqKvSSFkQyTBM@T0IIK*~b zmL&lOu_Sfu0^FS4tNF^H}qUln4-bo?g|u)N4v z_n}s%KgRa9Kt=%YVm2v2Sb8dCb}xouU@x-@=AfTZ{B&R8%;^gxD8$u7Vp2u-97{V# zaE(GNqPscUSAkuVG*c`nXr7mnqShyAwmx-X%`YCQ)-JgA!$ElUNKuEY2;X zI&_kZ;GlWLAXXEZu09LZy<=zkEBx+2UWg`+@dfD%5by=EYx#!&o5I8(Gb2RT2KYvI zwU~l=j7x=C=I|%ts#b=vGR%}f&$BHds=|!}Pu_A+IFG;)vYZ#0i)=d>c zqp>*tQ^eGssThih7kdh-kJ4>2lO@rN#9|3=k{Fx|L6n78#gyg@Uq+t46qgW3kdDLE z+_w>*eCjF0TRGqef;mJthM4{kr1&X3y-xMlU~a)y8_|O6pCgcjUB=6F`$oDe$b5-i&2%jAe1OG&$mA`^3K`ylMHx>(Id)(L zWBmnKG-Cr9xPuBz2r?x>XuPQ4BL@4#|04LXd(Nr&*lsymLRs7uN>#!_QX-MPT>)_s zZNc_IhB_HNEiuiC|9v8Hw(=6U2+IgU7_5YatDvr~P(+@q;LdhqCBSi{#h{U^S*GXq z7EZ|TK zByr-DlhBJ*`5NXmjXP^xGO)5DxG;xNP~0ZSJ50BK4RfaCiG_KEZfx0dWzxu4#OA9Y zt^#qoh^8Pid^M90Xwq z7F;>{B^K9Hth@*-tSG3B8#{+hU@y%QCp7t!0@$;#ljBO_8VhTEf%Pz{c++NIS2vMAv4kQZd8E6X-^1lSc!De0OlV=y6C%q>JryRo$3-4{1ugu44D zHu^aJ@53~(eFfAvhKn?wh&VnXAHAN3>~;RUwkfsZ{W4%bgyG3UMU(uF0OAqv!<7f= z@<0~Cth{7etlu19f}DM~f-xu7pw$M%n8WiA6=SbjFXd86ZY(xfTNF2Dkb*#CyM-vj z#Q@P#D8Wp8A+Ev%M;OK7ihwT0Bo(*7B{)dCMe$20oHHHMdFCKYxrBX@VGZ&wlW?7o z=((hDkm8M{9k&$NBB5~0bjv}~B}~MIU#yszijicn@|0ui^%CxwS+YOCeFiSnb&bul z(ff6YO=giSDp)gQqAaRB1+`XI7n~T^C#Be61C9M}Dq>gxVTw%8$I)aY;w`&5b%EF{ zR$x)Xr3x#PO#3hiFcq+s=n|(C7EW)HVTBA`lJO>X6~}2Ah2nHF#3^l%UE~Y%;_9d- zPE>o_a+$0tWPL%{%Zj0^puEn^V(`s=esQI+uKj8f7?E)tjK1=#^CYk@qXdiw;QUo4+#&-+WJ226bC%Qkv9-XK1q#)OyyAft@#E(Q{saR}+UM9sZ#G_b-lRuPM7F9tXTtv;`H|RIXme~fHWBw0Bk>H zdO$*KAs|SpMpKkcOzlaSzoJAmH#0sS5$H?J&Yo^5jKiFg7|VjxZKR-M$wnjRZo_Tc zRrnIR=1fP34gy)rCF3Ss>9NLc!zF!1sTe1+q|?k&>eJXY;Ga2r?qu-^XvUynXPSfy z6o&daD18CMhd}%bbCjOnJOlS2*Wmv3xDhxFvj^ICg1`ASG;{{;UJ)LCi=XkQ?1uYy z(@!8=HsWeF0sEbj0D`I{V8;z#ASqBfzix&|&T~G+@A)`!d*k%U;-ZRLOCyW>O6-xQ zwfS?iaIMS04Fc~^%1UY!A3@%a;X91-8h8`8Yz2j6<2-pL_SdC>rjMZRZ-7WEo$PMI zGLV81$Jk)vy_Tl5&2d<|J|S(h)AJr_o39srV!Dd&6WRvzC(dyDai5Q?z8}}CL=o2q zv&3M-hpQzPoD|tuj%dO1h6z8t&WEiqE`p?cqTMsaxneU}SXRtDN#1}oMZz-RdbJ>L8_^u=CQivq zEUsAyHvF@qA{95A;$ifHj7U3z5g=bOy&r`yAc!L2pM%XjxFrV9;BY+tpDM;RXHOCH zeC}paCdodyR-7%ikoE`f^|IIo=ly>zonL5MRUF5A&dD}$!xft?SzGKSskG2&%NAI$ zVfRR*4K|Vsi!|Cu1MO^e#RgY2vckR0!ipG}3}5BttV5=$=ill{k>DmnqWNQ~I8kET2%w3InX#R#RmO#i8yd z*oMjpO%Dt((D1;K>uP9G4Nec1hw>wtebl{j!_KHZNeu0?Nw23yw%uoEYc4BUQEu9w zf0vZ_CigDR^CMX3$Pi$~swM;RQZJFoYJCKeiohF+7zcG-i0nyC4dI@i>Ac^}b_t8U%(8ft^UeM6l@uecLx zM6t+|?``9*P2M~JpiSDd0-L!_6vS7eIilM3K;7EWT-Y8I_K7SkmUvGV_R&*sn(9ea z@#lQ_C-lD~z(4VCbC}E;ffb_ZI20e5<-bvxxpE*v%X*yy-IY#$BihF5u{>3UWT=y& z8iV5mV$-o@)wirV?Eb3j6}@451qrRv8fe=08v3lB@Z`6s8s>B3S9!Ftbzx__v!jbw z?2^Ls!M*O_peeKrWbO70FQbpNw4;$%n0Gw!0@MD$z!v7$R0XzYv84_SX%V`0Z!3XlJkUddn!Tpn!f^hz$rGw_SFbb4$%a|h z{s9@YgADFf#@v&5i7{_Hb3qH8xux=BM1^_kDSW&#J2{%|Sy0FdT|{!N*?7KJd=Y=a zf?Gs1oFBLpNnVB#8a~4<+6Ja>tI@i@z*(0C$*v|kOcejk&$y&!5x1FO5P^oAC z!c-^bizWAz@;8v-RmROh-)s-y7;Sa#vl8Z}ng#(Cj|7pf6%{KmrO`kgtoYMz%7-M( zz*t@0$r<4sfO+sS2IxpU$^Z+`pH@z?icPuPMxFvthDzsJt;w}z`)v`Rw-XN465bum zTTGQ|H-}~pwQqTmw|3TfMiZs65!QK##<^05o#M`38r!~|EbU2}M|+OOPIBjd+RL|d Date: Tue, 5 Oct 2021 10:20:12 -0700 Subject: [PATCH 02/20] Fix conditional check for isFullscreen to accommodate Safari (#11086) --- src/ui/handler/scroll_zoom.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/handler/scroll_zoom.js b/src/ui/handler/scroll_zoom.js index 74084468297..641fab8c471 100644 --- a/src/ui/handler/scroll_zoom.js +++ b/src/ui/handler/scroll_zoom.js @@ -391,7 +391,7 @@ class ScrollZoomHandler { } _isFullscreen() { - return window.document.fullscreenElement !== null; + return !!window.document.fullscreenElement; } _showBlockerAlert() { From 23ff998f15d178261d4587fd944dcbaeaeebdb7a Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Wed, 6 Oct 2021 00:56:40 +0300 Subject: [PATCH 03/20] Fix an iOS15 issue where Safari tab bar interrupts panning (#11084) * fix an iOS15 issue where map stops when panning * fix tests and lint * Test drag pan handler does not end interaction on resize * Move blur event reset into non-touch handlers (#11087) * Move blur event reset into non-touch handlers * Fix linter * Fix/amend unit tests * Flush task queue in rotate test Co-authored-by: Ricky Reusser Co-authored-by: Ricky Reusser --- src/ui/handler/box_zoom.js | 4 +++ src/ui/handler/click_zoom.js | 4 +++ src/ui/handler/keyboard.js | 4 +++ src/ui/handler/mouse.js | 4 +++ src/ui/handler/scroll_zoom.js | 4 +++ src/ui/handler_manager.js | 5 ---- src/ui/map.js | 8 ++--- test/unit/ui/control/attribution.test.js | 4 +++ test/unit/ui/control/logo.test.js | 4 +++ test/unit/ui/handler/drag_pan.test.js | 37 +++++++++++++++++++++++- test/unit/ui/handler/drag_rotate.test.js | 2 ++ test/unit/ui/map.test.js | 32 ++++++++++++++++++++ 12 files changed, 102 insertions(+), 10 deletions(-) diff --git a/src/ui/handler/box_zoom.js b/src/ui/handler/box_zoom.js index 96c6dacac87..e76e3e117e1 100644 --- a/src/ui/handler/box_zoom.js +++ b/src/ui/handler/box_zoom.js @@ -153,6 +153,10 @@ class BoxZoomHandler { } } + blur() { + this.reset(); + } + reset() { this._active = false; diff --git a/src/ui/handler/click_zoom.js b/src/ui/handler/click_zoom.js index 19362ede8c0..44d29f26976 100644 --- a/src/ui/handler/click_zoom.js +++ b/src/ui/handler/click_zoom.js @@ -16,6 +16,10 @@ export default class ClickZoomHandler { this._active = false; } + blur() { + this.reset(); + } + dblclick(e: MouseEvent, point: Point) { e.preventDefault(); return { diff --git a/src/ui/handler/keyboard.js b/src/ui/handler/keyboard.js index eb04f773aae..b5bc103ff74 100644 --- a/src/ui/handler/keyboard.js +++ b/src/ui/handler/keyboard.js @@ -45,6 +45,10 @@ class KeyboardHandler { this._rotationDisabled = false; } + blur() { + this.reset(); + } + reset() { this._active = false; } diff --git a/src/ui/handler/mouse.js b/src/ui/handler/mouse.js index d1a94551476..059e024cea6 100644 --- a/src/ui/handler/mouse.js +++ b/src/ui/handler/mouse.js @@ -31,6 +31,10 @@ class MouseHandler { this._clickTolerance = options.clickTolerance || 1; } + blur() { + this.reset(); + } + reset() { this._active = false; this._moved = false; diff --git a/src/ui/handler/scroll_zoom.js b/src/ui/handler/scroll_zoom.js index 641fab8c471..b5257576c69 100644 --- a/src/ui/handler/scroll_zoom.js +++ b/src/ui/handler/scroll_zoom.js @@ -371,6 +371,10 @@ class ScrollZoomHandler { return easing; } + blur() { + this.reset(); + } + reset() { this._active = false; } diff --git a/src/ui/handler_manager.js b/src/ui/handler_manager.js index b9b4e3a12ca..a3fa767706c 100644 --- a/src/ui/handler_manager.js +++ b/src/ui/handler_manager.js @@ -344,11 +344,6 @@ class HandlerManager { handleEvent(e: InputEvent | RenderFrameEvent, eventName?: string) { - if (e.type === 'blur') { - this.stop(true); - return; - } - this._updatingCamera = true; assert(e.timeStamp !== undefined); diff --git a/src/ui/map.js b/src/ui/map.js index 80db60df2c3..47137da5239 100755 --- a/src/ui/map.js +++ b/src/ui/map.js @@ -696,9 +696,10 @@ class Map extends Camera { * if (mapDiv.style.visibility === true) map.resize(); */ resize(eventData?: Object) { - const dimensions = this._containerDimensions(); - const width = dimensions[0]; - const height = dimensions[1]; + const [width, height] = this._containerDimensions(); + + // do nothing if container remained the same size + if (width === this.transform.width && height === this.transform.height) return this; this._resizeCanvas(width, height); @@ -707,7 +708,6 @@ class Map extends Camera { const fireMoving = !this._moving; if (fireMoving) { - this.stop(); this.fire(new Event('movestart', eventData)) .fire(new Event('move', eventData)); } diff --git a/test/unit/ui/control/attribution.test.js b/test/unit/ui/control/attribution.test.js index 76891d6129c..4aa9d0364cf 100644 --- a/test/unit/ui/control/attribution.test.js +++ b/test/unit/ui/control/attribution.test.js @@ -37,6 +37,7 @@ test('AttributionControl appears in the position specified by the position optio test('AttributionControl appears in compact mode if compact option is used', (t) => { const map = createMap(t); + Object.defineProperty(map.getContainer(), 'getBoundingClientRect', {value: () => ({height: 200, width: 700})}); Object.defineProperty(map.getCanvasContainer(), 'offsetWidth', {value: 700, configurable: true}); let attributionControl = new AttributionControl({ @@ -49,6 +50,7 @@ test('AttributionControl appears in compact mode if compact option is used', (t) t.equal(container.querySelectorAll('.mapboxgl-ctrl-attrib.mapboxgl-compact').length, 1); map.removeControl(attributionControl); + Object.defineProperty(map.getContainer(), 'getBoundingClientRect', {value: () => ({height: 200, width: 600})}); Object.defineProperty(map.getCanvasContainer(), 'offsetWidth', {value: 600, configurable: true}); attributionControl = new AttributionControl({ compact: false @@ -61,6 +63,7 @@ test('AttributionControl appears in compact mode if compact option is used', (t) test('AttributionControl appears in compact mode if container is less then 640 pixel wide', (t) => { const map = createMap(t); + Object.defineProperty(map.getContainer(), 'getBoundingClientRect', {value: () => ({height: 200, width: 700})}); Object.defineProperty(map.getCanvasContainer(), 'offsetWidth', {value: 700, configurable: true}); map.addControl(new AttributionControl()); @@ -68,6 +71,7 @@ test('AttributionControl appears in compact mode if container is less then 640 p t.equal(container.querySelectorAll('.mapboxgl-ctrl-attrib:not(.mapboxgl-compact)').length, 1); + Object.defineProperty(map.getContainer(), 'getBoundingClientRect', {value: () => ({height: 200, width: 600})}); Object.defineProperty(map.getCanvasContainer(), 'offsetWidth', {value: 600, configurable: true}); map.resize(); diff --git a/test/unit/ui/control/logo.test.js b/test/unit/ui/control/logo.test.js index ea0c77f7825..a3491f55170 100644 --- a/test/unit/ui/control/logo.test.js +++ b/test/unit/ui/control/logo.test.js @@ -104,12 +104,16 @@ test('LogoControl appears in compact mode if container is less then 250 pixel wi const map = createMap(t); const container = map.getContainer(); + Object.defineProperty(map.getContainer(), 'getBoundingClientRect', {value: () => ({height: 200, width: 255})}); Object.defineProperty(map.getCanvasContainer(), 'offsetWidth', {value: 255, configurable: true}); map.resize(); + t.equal(container.querySelectorAll('.mapboxgl-ctrl-logo:not(.mapboxgl-compact)').length, 1); + Object.defineProperty(map.getContainer(), 'getBoundingClientRect', {value: () => ({height: 200, width: 245})}); Object.defineProperty(map.getCanvasContainer(), 'offsetWidth', {value: 245, configurable: true}); map.resize(); + t.equal(container.querySelectorAll('.mapboxgl-ctrl-logo.mapboxgl-compact').length, 1); t.end(); diff --git a/test/unit/ui/handler/drag_pan.test.js b/test/unit/ui/handler/drag_pan.test.js index 1a476a32a47..98ea491a2ca 100644 --- a/test/unit/ui/handler/drag_pan.test.js +++ b/test/unit/ui/handler/drag_pan.test.js @@ -151,13 +151,15 @@ test('DragPanHandler ends a mouse-triggered drag if the window blurs', (t) => { map._renderTaskQueue.run(); simulate.blur(window); + map._renderTaskQueue.run(); + t.equal(dragend.callCount, 1); map.remove(); t.end(); }); -test('DragPanHandler ends a touch-triggered drag if the window blurs', (t) => { +test('DragPanHandler does not end a touch-triggered drag if the window blurs', (t) => { const map = createMap(t); const target = map.getCanvas(); @@ -171,7 +173,40 @@ test('DragPanHandler ends a touch-triggered drag if the window blurs', (t) => { map._renderTaskQueue.run(); simulate.blur(window); + map._renderTaskQueue.run(); + + t.equal(dragend.callCount, 0); + + map.remove(); + t.end(); +}); + +test('DragPanHandler does not end a touch-triggered drag if the window resizes', (t) => { + const map = createMap(t); + const target = map.getCanvas(); + + const dragend = t.spy(); + map.on('dragend', dragend); + + const drag = t.spy(); + map.on('drag', drag); + + simulate.touchstart(map.getCanvas(), {touches: [{target, clientX: 0, clientY: 0}]}); + map._renderTaskQueue.run(); + + simulate.touchmove(map.getCanvas(), {touches: [{target, clientX: 10, clientY: 10}]}); + map._renderTaskQueue.run(); + + map.resize(); + + simulate.touchmove(map.getCanvas(), {touches: [{target, clientX: 20, clientY: 10}]}); + map._renderTaskQueue.run(); + + simulate.touchend(map.getCanvas()); + map._renderTaskQueue.run(); + t.equal(dragend.callCount, 1); + t.equal(drag.callCount, 2); map.remove(); t.end(); diff --git a/test/unit/ui/handler/drag_rotate.test.js b/test/unit/ui/handler/drag_rotate.test.js index 4fe68a46fd2..f12c0eba8bb 100644 --- a/test/unit/ui/handler/drag_rotate.test.js +++ b/test/unit/ui/handler/drag_rotate.test.js @@ -492,6 +492,8 @@ test('DragRotateHandler ends rotation if the window blurs (#3389)', (t) => { t.equal(rotate.callCount, 1); simulate.blur(window); + map._renderTaskQueue.run(); + t.equal(rotateend.callCount, 1); map.remove(); diff --git a/test/unit/ui/map.test.js b/test/unit/ui/map.test.js index 484fc3a4f60..deec79c18e9 100755 --- a/test/unit/ui/map.test.js +++ b/test/unit/ui/map.test.js @@ -764,10 +764,42 @@ test('Map', (t) => { t.end(); }); + t.test('does nothing if container size is the same', (t) => { + const map = createMap(t); + + t.spy(map.transform, 'resize'); + t.spy(map.painter, 'resize'); + + map.resize(); + + t.notOk(map.transform.resize.called); + t.notOk(map.painter.resize.called); + + t.end(); + }); + + t.test('does not call stop on resize', (t) => { + const map = createMap(t); + + Object.defineProperty(map.getContainer(), 'getBoundingClientRect', + {value: () => ({height: 250, width: 250})}); + + t.spy(map, 'stop'); + + map.resize(); + + t.notOk(map.stop.called); + + t.end(); + }); + t.test('fires movestart, move, resize, and moveend events', (t) => { const map = createMap(t), events = []; + Object.defineProperty(map.getContainer(), 'getBoundingClientRect', + {value: () => ({height: 250, width: 250})}); + ['movestart', 'move', 'resize', 'moveend'].forEach((event) => { map.on(event, (e) => { events.push(e.type); From 1276c8432c59dfbe15d715b39c492e5458096af0 Mon Sep 17 00:00:00 2001 From: Ricky Reusser Date: Wed, 6 Oct 2021 14:31:58 -0700 Subject: [PATCH 04/20] Cherry pick 2.5.1 changelog (#11099) --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e293edb4623..c5357d00b06 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## 2.5.1 + +### 🐞 Bug fixes + +* Fix an iOS 15 issue where the iOS Safari tab bar interrupts touch interactions. ([#11084](https://github.com/mapbox/mapbox-gl-js/pull/11084)) + ## 2.5.0 ### Features ✨ and improvements 🏁 From e8ca715f18c60e23d807164aab23c126e4f84122 Mon Sep 17 00:00:00 2001 From: Katy DeCorah Date: Wed, 6 Oct 2021 22:25:28 -0400 Subject: [PATCH 05/20] Update link to transpiling guide (#11096) --- rollup/bundle_prelude.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rollup/bundle_prelude.js b/rollup/bundle_prelude.js index fa62061ec4e..215f2a8405c 100644 --- a/rollup/bundle_prelude.js +++ b/rollup/bundle_prelude.js @@ -9,7 +9,7 @@ if (!shared) { } else if (!worker) { worker = chunk; } else { - var workerBundleString = "self.onerror = function() { console.error('An error occurred while parsing the WebWorker bundle. This is most likely due to improper transpilation by Babel; please see https://docs.mapbox.com/mapbox-gl-js/api/#transpiling-v2'); }; var sharedChunk = {}; (" + shared + ")(sharedChunk); (" + worker + ")(sharedChunk); self.onerror = null;" + var workerBundleString = "self.onerror = function() { console.error('An error occurred while parsing the WebWorker bundle. This is most likely due to improper transpilation by Babel; please see https://docs.mapbox.com/mapbox-gl-js/guides/install/#transpiling'); }; var sharedChunk = {}; (" + shared + ")(sharedChunk); (" + worker + ")(sharedChunk); self.onerror = null;" var sharedChunk = {}; shared(sharedChunk); From cb4778f7cbde092dc11c959696eacfcfeb28ee71 Mon Sep 17 00:00:00 2001 From: Arindam Bose Date: Thu, 7 Oct 2021 09:52:50 -0700 Subject: [PATCH 06/20] =?UTF-8?q?s=CC=B6y=CC=B6m=CC=B6b=CC=B6o=CC=B6l?= =?UTF-8?q?=CC=B6-=CC=B6c=CC=B6l=CC=B6i=CC=B6p=CC=B6=20dynamic-filtering?= =?UTF-8?q?=20with=20`pitch`=20and=20`distance-from-camera`=20expressions?= =?UTF-8?q?=20(#10795)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Setup plumbing for pitch and distance-from-camera expressions * Add symbol-clip with support for pitch and distance-from-camera expressions * hackily working pitch expression * distance clipping * Track clipped state in JointPlacement and JointOpacity, reflect clipping using notUsed state in debug buffers * Rename distance-from-camera to distance-from-center * symbol-clip: splitting filter expressions into dynamic and static parts (#10923) * symbol-clip: dynamic filter style spec changes (#10977) * symbol-clip: Render tests, debug page and distance matrix rework (#11065) * WIP dynamic filter splitting stage 1 * Add tests for isDynamicFilter * More test cases for isDynamicFilter * Existing static filters get passed through unmodified. * WIP extracting static filters * Working case -> any translation * More tests for case -> any conversion * Add support for match branches * WIP: V0 of adding collapsing of dynamic expressions to true * more test cases * tests and some more refactoring * remove temory inspection code from unit tests * Fix dynamic filter detection * Fix failing spec test * Units tests hopefully :green: now * Add test to cover for `null` in expressions * Address CR comments and reduce number of temporary allocations * remove gl-matrix as dependency of style-spec and inline a matrix multiplication function * Fix lint issues * Add better error messages for expression compilation failures * Ensure location parameter is passed down * Remove symbol-clip from the style-spec * Remove unused property-expression type * Move filterSpec to v8.json and replace symbol-clip with dynamic filter * Fix unit tests * Fix most flow errors * finally flow is happy * Add expression validation code * Add api-supported tests for validation * Fix some failing unit tests * Ensure layer._featureFIlter is updated on main thread as well * Ensure layerType is passed down to validation * Fix flow and linting * Fix unit tests * Pass 1 of addressing CR comments * Add basic placementTime metric * Move to using total placement time * Fix lint errors * simplify placement time tracking * Fix silent conflict in with SymbolInstanceStruct changes * try benchmarking with filter splitting algorithm removed * Fix versions microbenchmark page * Revert "try benchmarking with filter splitting algorithm removed" This reverts commit 865f354a8cf4cb6dc974c45cf16374b7ea2e7021. * Simplify by calculating distance using tile coordinates of the symbol directly * Use new specific centerDistanceMatrix * Sign flipping for consistency * add new debug page with distance visualizer * First set of pure distance based render tests * Pitch thresholding tests * Fix lint errors * More tests * Add first batch of point symbol render tests * Increase threshold * Increase allowed threshold for the correct tests :facepalm: * remove flaky collision debug boxes instead * Move geojson test data to be in separate files instead of inlined into styles * Update flaky render test expectation * Fix distanceMatrix comment Co-authored-by: Aidan H * Switch to linear scale and update line placement tests * Update point placement tests * Update test expectations * Fix lint error * Remove flaky collision boxes Co-authored-by: Aidan H * Remove frametime logging change * Ensure that feature deserialization happens only when needed * Fix matrixKey naming leftover from copying fogMatrix code Co-authored-by: Karim Naaji * Rename matrices as per CR comments * Default layerType inside filter validation function. * add `VectorTileFeature` deserialization cache * Switch to matrix-free distance calculation * Add cache in Transform * Precompute bearing vector * prescale by windowScaleFactor * Inline `getSymbolFeature` * Lazy filter compilation * Move distance matrix calculation out to the debug page Co-authored-by: Aidan H Co-authored-by: Karim Naaji --- bench/versions/index.html | 11 +- debug/dynamic-filter.html | 142 + debug/index.html | 2 +- src/data/feature_index.js | 22 + src/geo/transform.js | 37 + .../expression/definitions/index.js | 10 + .../expression/evaluation_context.js | 30 + src/style-spec/expression/index.js | 12 +- src/style-spec/expression/parsing_context.js | 2 +- src/style-spec/feature_filter/index.js | 204 +- src/style-spec/reference/v8.json | 106 +- src/style-spec/style-spec.js | 2 +- .../validate/validate_expression.js | 35 +- src/style-spec/validate/validate_filter.js | 4 +- src/style-spec/validate/validate_layer.js | 4 +- src/style/evaluation_parameters.js | 3 + src/style/style.js | 4 +- src/style/style_layer.js | 24 +- src/style/style_layer_index.js | 3 +- src/symbol/placement.js | 80 +- src/ui/map.js | 2 + test/integration/data/distance-lines.geojson | 488 ++ test/integration/data/distance-points.geojson | 4646 +++++++++++++++++ .../background-visibility/none/expected.png | Bin 108 -> 202 bytes .../early-dynamic-high-pitch/expected.png | Bin 0 -> 12297 bytes .../early-dynamic-high-pitch/style.json | 67 + .../early-dynamic-low-pitch/expected.png | Bin 0 -> 12684 bytes .../early-dynamic-low-pitch/style.json | 67 + .../late-dynamic/expected.png | Bin 0 -> 12516 bytes .../late-dynamic/style.json | 66 + .../high-pitch-far-hidden/expected.png | Bin 0 -> 22675 bytes .../high-pitch-far-hidden/style.json | 67 + .../low-pitch-far-visible/expected.png | Bin 0 -> 42216 bytes .../low-pitch-far-visible/style.json | 67 + .../line/distance-far-cull/expected.png | Bin 0 -> 34795 bytes .../symbols/line/distance-far-cull/style.json | 63 + .../distance-near-and-far-cull/expected.png | Bin 0 -> 39124 bytes .../distance-near-and-far-cull/style.json | 63 + .../line/distance-near-cull/expected.png | Bin 0 -> 22539 bytes .../line/distance-near-cull/style.json | 63 + .../line/distance-nofilter/expected.png | Bin 0 -> 52788 bytes .../symbols/line/distance-nofilter/style.json | 62 + .../symbols/line/pitch-high-cull/expected.png | Bin 0 -> 2797 bytes .../symbols/line/pitch-high-cull/style.json | 63 + .../symbols/line/pitch-high-show/expected.png | Bin 0 -> 52278 bytes .../symbols/line/pitch-high-show/style.json | 63 + .../symbols/line/pitch-low-cull/expected.png | Bin 0 -> 2874 bytes .../symbols/line/pitch-low-cull/style.json | 63 + .../symbols/line/pitch-low-show/expected.png | Bin 0 -> 32801 bytes .../symbols/line/pitch-low-show/style.json | 63 + .../early-dynamic-high-pitch/expected.png | Bin 0 -> 21898 bytes .../early-dynamic-high-pitch/style.json | 68 + .../early-dynamic-low-pitch/expected.png | Bin 0 -> 14234 bytes .../early-dynamic-low-pitch/style.json | 68 + .../late-dynamic/expected.png | Bin 0 -> 20887 bytes .../late-dynamic/style.json | 67 + .../high-pitch-far-hidden/expected.png | Bin 0 -> 31056 bytes .../high-pitch-far-hidden/style.json | 68 + .../low-pitch-far-visible/expected.png | Bin 0 -> 28053 bytes .../low-pitch-far-visible/style.json | 68 + .../point/distance-far-cull/expected.png | Bin 0 -> 35395 bytes .../point/distance-far-cull/style.json | 64 + .../distance-near-and-far-cull/expected.png | Bin 0 -> 36644 bytes .../distance-near-and-far-cull/style.json | 64 + .../point/distance-near-cull/expected.png | Bin 0 -> 31438 bytes .../point/distance-near-cull/style.json | 64 + .../point/distance-nofilter/expected.png | Bin 0 -> 42798 bytes .../point/distance-nofilter/style.json | 63 + .../point/pitch-high-cull/expected.png | Bin 0 -> 23683 bytes .../symbols/point/pitch-high-cull/style.json | 64 + .../point/pitch-high-show/expected.png | Bin 0 -> 33703 bytes .../symbols/point/pitch-high-show/style.json | 63 + .../symbols/point/pitch-low-cull/expected.png | Bin 0 -> 12423 bytes .../symbols/point/pitch-low-cull/style.json | 64 + .../symbols/point/pitch-low-show/expected.png | Bin 0 -> 20405 bytes .../symbols/point/pitch-low-show/style.json | 63 + test/unit/style-spec/feature_filter.test.js | 934 +++- .../fixture/bad-dasharray.output.json | 8 +- .../style-spec/fixture/bad-sky.output.json | 16 +- .../filters-dynamic-distance.input.json | 53 + ...dynamic-distance.output-api-supported.json | 22 + .../filters-dynamic-distance.output.json | 22 + .../fixture/filters-dynamic-pitch.input.json | 53 + ...rs-dynamic-pitch.output-api-supported.json | 22 + .../fixture/filters-dynamic-pitch.output.json | 22 + .../fixture/filters.output-api-supported.json | 2 +- .../style-spec/fixture/filters.output.json | 2 +- .../fixture/fog-invalid-input.output.json | 14 +- .../style-spec/fixture/numbers.output.json | 40 +- test/unit/style-spec/spec.test.js | 11 +- 90 files changed, 8678 insertions(+), 101 deletions(-) create mode 100644 debug/dynamic-filter.html create mode 100644 test/integration/data/distance-lines.geojson create mode 100644 test/integration/data/distance-points.geojson create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/early-dynamic-high-pitch/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/early-dynamic-high-pitch/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/early-dynamic-low-pitch/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/early-dynamic-low-pitch/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/late-dynamic/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/late-dynamic/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance/high-pitch-far-hidden/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance/high-pitch-far-hidden/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance/low-pitch-far-visible/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance/low-pitch-far-visible/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/distance-far-cull/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/distance-far-cull/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/distance-near-and-far-cull/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/distance-near-and-far-cull/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/distance-near-cull/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/distance-near-cull/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/distance-nofilter/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/distance-nofilter/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/pitch-high-cull/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/pitch-high-cull/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/pitch-high-show/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/pitch-high-show/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/pitch-low-cull/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/pitch-low-cull/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/pitch-low-show/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/line/pitch-low-show/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/early-dynamic-high-pitch/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/early-dynamic-high-pitch/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/early-dynamic-low-pitch/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/early-dynamic-low-pitch/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/late-dynamic/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/late-dynamic/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance/high-pitch-far-hidden/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance/high-pitch-far-hidden/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance/low-pitch-far-visible/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance/low-pitch-far-visible/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/distance-far-cull/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/distance-far-cull/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/distance-near-and-far-cull/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/distance-near-and-far-cull/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/distance-near-cull/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/distance-near-cull/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/distance-nofilter/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/distance-nofilter/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/pitch-high-cull/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/pitch-high-cull/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/pitch-high-show/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/pitch-high-show/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/pitch-low-cull/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/pitch-low-cull/style.json create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/pitch-low-show/expected.png create mode 100644 test/integration/render-tests/dynamic-filter/symbols/point/pitch-low-show/style.json create mode 100644 test/unit/style-spec/fixture/filters-dynamic-distance.input.json create mode 100644 test/unit/style-spec/fixture/filters-dynamic-distance.output-api-supported.json create mode 100644 test/unit/style-spec/fixture/filters-dynamic-distance.output.json create mode 100644 test/unit/style-spec/fixture/filters-dynamic-pitch.input.json create mode 100644 test/unit/style-spec/fixture/filters-dynamic-pitch.output-api-supported.json create mode 100644 test/unit/style-spec/fixture/filters-dynamic-pitch.output.json diff --git a/bench/versions/index.html b/bench/versions/index.html index 81007f00aa9..ad645d646b4 100644 --- a/bench/versions/index.html +++ b/bench/versions/index.html @@ -18,9 +18,16 @@ const params = new URLSearchParams(location.search.slice(1)); Promise.resolve(params.has('compare') ? params.getAll('compare').filter(Boolean) : - fetch('https://api.github.com/repos/mapbox/mapbox-gl-js/releases/latest') + fetch('https://api.github.com/repos/mapbox/mapbox-gl-js/releases') .then(response => response.json()) - .then(pkg => [pkg['tag_name'], 'main'])) + .then(releases => { + for (const release of releases) { + if (!release.prerelease && !release['tag_name'].includes('style-spec')) { + return [release['tag_name'], 'main']; + } + } + return ['main']; + })) .then(versions => { return versions .map(v => `https://s3.amazonaws.com/mapbox-gl-js/${v}/benchmarks.js`) diff --git a/debug/dynamic-filter.html b/debug/dynamic-filter.html new file mode 100644 index 00000000000..b864fc07c91 --- /dev/null +++ b/debug/dynamic-filter.html @@ -0,0 +1,142 @@ + + + + Mapbox GL JS debug page + + + + + + + + + +
+
+
+ + + + + + diff --git a/debug/index.html b/debug/index.html index cffdd3eef64..9495e9cc7f2 100644 --- a/debug/index.html +++ b/debug/index.html @@ -22,7 +22,7 @@ container: 'map', zoom: 12.5, center: [-122.4194, 37.7749], - style: 'mapbox://styles/mapbox/streets-v10', + style: 'mapbox://styles/mapbox/streets-v11', hash: true }); diff --git a/src/data/feature_index.js b/src/data/feature_index.js index f1bf5c0e639..5a291b703b5 100644 --- a/src/data/feature_index.js +++ b/src/data/feature_index.js @@ -59,6 +59,7 @@ class FeatureIndex { bucketLayerIDs: Array>; vtLayers: {[_: string]: VectorTileLayer}; + vtFeatures: {[_: string]: VectorTileFeature[]}; sourceLayerCoder: DictionaryCoder; constructor(tileID: OverscaledTileID, promoteId?: ?PromoteIdSpecification) { @@ -102,6 +103,10 @@ class FeatureIndex { if (!this.vtLayers) { this.vtLayers = new vt.VectorTile(new Protobuf(this.rawTileData)).layers; this.sourceLayerCoder = new DictionaryCoder(this.vtLayers ? Object.keys(this.vtLayers).sort() : ['_geojsonTileLayer']); + this.vtFeatures = {}; + for (const layer in this.vtLayers) { + this.vtFeatures[layer] = []; + } } return this.vtLayers; } @@ -262,6 +267,23 @@ class FeatureIndex { return result; } + loadFeature(featureIndexData: FeatureIndices): VectorTileFeature { + const {featureIndex, sourceLayerIndex} = featureIndexData; + + this.loadVTLayers(); + const sourceLayerName = this.sourceLayerCoder.decode(sourceLayerIndex); + + const featureCache = this.vtFeatures[sourceLayerName]; + if (featureCache[featureIndex]) { + return featureCache[featureIndex]; + } + const sourceLayer = this.vtLayers[sourceLayerName]; + const feature = sourceLayer.feature(featureIndex); + featureCache[featureIndex] = feature; + + return feature; + } + hasLayer(id: string) { for (const layerIDs of this.bucketLayerIDs) { for (const layerID of layerIDs) { diff --git a/src/geo/transform.js b/src/geo/transform.js index ae1dc2f95e4..d8f30068af8 100644 --- a/src/geo/transform.js +++ b/src/geo/transform.js @@ -16,6 +16,7 @@ import assert from 'assert'; import {UnwrappedTileID, OverscaledTileID, CanonicalTileID} from '../source/tile_id.js'; import type {Elevation} from '../terrain/elevation.js'; import type {PaddingOptions} from './edge_insets.js'; +import type {FeatureDistanceData} from '../style-spec/feature_filter/index.js'; const NUM_WORLD_COPIES = 3; const DEFAULT_MIN_ZOOM = 0; @@ -107,6 +108,7 @@ class Transform { _projMatrixCache: {[_: number]: Float32Array}; _alignedProjMatrixCache: {[_: number]: Float32Array}; _fogTileMatrixCache: {[_: number]: Float32Array}; + _distanceTileDataCache: {[_: number]: FeatureDistanceData}; _camera: FreeCamera; _centerAltitude: number; _horizonShift: number; @@ -136,6 +138,7 @@ class Transform { this._projMatrixCache = {}; this._alignedProjMatrixCache = {}; this._fogTileMatrixCache = {}; + this._distanceTileDataCache = {}; this._camera = new FreeCamera(); this._centerAltitude = 0; this._averageElevation = 0; @@ -1262,6 +1265,39 @@ class Transform { return posMatrix; } + calculateDistanceTileData(unwrappedTileID: UnwrappedTileID): FeatureDistanceData { + const distanceDataKey = unwrappedTileID.key; + const cache = this._distanceTileDataCache; + if (cache[distanceDataKey]) { + return cache[distanceDataKey]; + } + + //Calculate the offset of the tile + const canonical = unwrappedTileID.canonical; + const windowScaleFactor = 1 / this.height; + const scale = this.cameraWorldSize / this.zoomScale(canonical.z); + const unwrappedX = canonical.x + Math.pow(2, canonical.z) * unwrappedTileID.wrap; + const tX = unwrappedX * scale; + const tY = canonical.y * scale; + + const center = this.point; + + // Calculate the bearing vector by rotating unit vector [0, -1] clockwise + const angle = this.angle; + const bX = Math.sin(-angle); + const bY = -Math.cos(-angle); + + const cX = (center.x - tX) * windowScaleFactor; + const cY = (center.y - tY) * windowScaleFactor; + cache[distanceDataKey] = { + bearing: [bX, bY], + center: [cX, cY], + scale: (scale / EXTENT) * windowScaleFactor + }; + + return cache[distanceDataKey]; + } + /** * Calculate the fogTileMatrix that, given a tile coordinate, can be used to * calculate its position relative to the camera in units of pixels divided @@ -1600,6 +1636,7 @@ class Transform { this.pixelMatrix = mat4.multiply(new Float64Array(16), this.labelPlaneMatrix, this.projMatrix); this._calcFogMatrices(); + this._distanceTileDataCache = {}; // inverse matrix for conversion from screen coordinates to location m = mat4.invert(new Float64Array(16), this.pixelMatrix); diff --git a/src/style-spec/expression/definitions/index.js b/src/style-spec/expression/definitions/index.js index 434cf776f1f..914ece11b6c 100644 --- a/src/style-spec/expression/definitions/index.js +++ b/src/style-spec/expression/definitions/index.js @@ -201,6 +201,16 @@ CompoundExpression.register(expressions, { [], (ctx) => ctx.globals.zoom ], + 'pitch': [ + NumberType, + [], + (ctx) => ctx.globals.pitch || 0 + ], + 'distance-from-center': [ + NumberType, + [], + (ctx) => ctx.distanceFromCenter() + ], 'heatmap-density': [ NumberType, [], diff --git a/src/style-spec/expression/evaluation_context.js b/src/style-spec/expression/evaluation_context.js index f851dcf9c62..dd1fe1641ff 100644 --- a/src/style-spec/expression/evaluation_context.js +++ b/src/style-spec/expression/evaluation_context.js @@ -1,9 +1,12 @@ // @flow import {Color} from './values.js'; + +import type Point from '@mapbox/point-geometry'; import type {FormattedSection} from './types/formatted.js'; import type {GlobalProperties, Feature, FeatureState} from './index.js'; import type {CanonicalTileID} from '../../source/tile_id.js'; +import type {FeatureDistanceData} from '../feature_filter/index.js'; const geometryTypes = ['Unknown', 'Point', 'LineString', 'Polygon']; @@ -14,6 +17,8 @@ class EvaluationContext { formattedSection: ?FormattedSection; availableImages: ?Array; canonical: ?CanonicalTileID; + featureTileCoord: ?Point; + featureDistanceData: ?FeatureDistanceData; _parseColorCache: {[_: string]: ?Color}; @@ -25,6 +30,8 @@ class EvaluationContext { this._parseColorCache = {}; this.availableImages = null; this.canonical = null; + this.featureTileCoord = null; + this.featureDistanceData = null; } id() { @@ -47,6 +54,29 @@ class EvaluationContext { return this.feature && this.feature.properties || {}; } + distanceFromCenter() { + if (this.featureTileCoord && this.featureDistanceData) { + + const c = this.featureDistanceData.center; + const scale = this.featureDistanceData.scale; + const {x, y} = this.featureTileCoord; + + // Calculate the distance vector `d` (left handed) + const dX = x * scale - c[0]; + const dY = y * scale - c[1]; + + // The bearing vector `b` (left handed) + const bX = this.featureDistanceData.bearing[0]; + const bY = this.featureDistanceData.bearing[1]; + + // Distance is calculated as `dot(d, v)` + const dist = (bX * dX + bY * dY); + return dist; + } + + return 0; + } + parseColor(input: string): ?Color { let cached = this._parseColorCache[input]; if (!cached) { diff --git a/src/style-spec/expression/index.js b/src/style-spec/expression/index.js index d4156d81600..4d3f5335668 100644 --- a/src/style-spec/expression/index.js +++ b/src/style-spec/expression/index.js @@ -27,6 +27,7 @@ import type {PropertyValueSpecification} from '../types.js'; import type {FormattedSection} from './types/formatted.js'; import type Point from '@mapbox/point-geometry'; import type {CanonicalTileID} from '../../source/tile_id.js'; +import type {FeatureDistanceData} from '../feature_filter/index.js'; export type Feature = { +type: 1 | 2 | 3 | 'Unknown' | 'Point' | 'MultiPoint' | 'LineString' | 'MultiLineString' | 'Polygon' | 'MultiPolygon', @@ -40,6 +41,7 @@ export type FeatureState = {[_: string]: any}; export type GlobalProperties = $ReadOnly<{ zoom: number, + pitch?: number, heatmapDensity?: number, lineProgress?: number, skyRadialProgress?: number, @@ -63,24 +65,28 @@ export class StyleExpression { this._enumValues = propertySpec && propertySpec.type === 'enum' ? propertySpec.values : null; } - evaluateWithoutErrorHandling(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection): any { + evaluateWithoutErrorHandling(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection, featureTileCoord?: Point, featureDistanceData?: FeatureDistanceData): any { this._evaluator.globals = globals; this._evaluator.feature = feature; this._evaluator.featureState = featureState; this._evaluator.canonical = canonical; this._evaluator.availableImages = availableImages || null; this._evaluator.formattedSection = formattedSection; + this._evaluator.featureTileCoord = featureTileCoord || null; + this._evaluator.featureDistanceData = featureDistanceData || null; return this.expression.evaluate(this._evaluator); } - evaluate(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection): any { + evaluate(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection, featureTileCoord?: Point, featureDistanceData?: FeatureDistanceData): any { this._evaluator.globals = globals; this._evaluator.feature = feature || null; this._evaluator.featureState = featureState || null; this._evaluator.canonical = canonical; this._evaluator.availableImages = availableImages || null; this._evaluator.formattedSection = formattedSection || null; + this._evaluator.featureTileCoord = featureTileCoord || null; + this._evaluator.featureDistanceData = featureDistanceData || null; try { const val = this.expression.evaluate(this._evaluator); @@ -233,7 +239,7 @@ export function createPropertyExpression(expression: mixed, propertySpec: StyleP return error([new ParsingError('', 'data expressions not supported')]); } - const isZoomConstant = isConstant.isGlobalPropertyConstant(parsed, ['zoom']); + const isZoomConstant = isConstant.isGlobalPropertyConstant(parsed, ['zoom', 'pitch', 'distance-from-center']); if (!isZoomConstant && !supportsZoomExpression(propertySpec)) { return error([new ParsingError('', 'zoom expressions not supported')]); } diff --git a/src/style-spec/expression/parsing_context.js b/src/style-spec/expression/parsing_context.js index 60df487c5ae..d6525276a30 100644 --- a/src/style-spec/expression/parsing_context.js +++ b/src/style-spec/expression/parsing_context.js @@ -229,5 +229,5 @@ function isConstant(expression: Expression) { } return isFeatureConstant(expression) && - isGlobalPropertyConstant(expression, ['zoom', 'heatmap-density', 'line-progress', 'sky-radial-progress', 'accumulated', 'is-supported-script']); + isGlobalPropertyConstant(expression, ['zoom', 'heatmap-density', 'line-progress', 'sky-radial-progress', 'accumulated', 'is-supported-script', 'pitch', 'distance-from-center']); } diff --git a/src/style-spec/feature_filter/index.js b/src/style-spec/feature_filter/index.js index 9868c32bf09..9e7d970fdbc 100644 --- a/src/style-spec/feature_filter/index.js +++ b/src/style-spec/feature_filter/index.js @@ -1,14 +1,18 @@ // @flow import {createExpression} from '../expression/index.js'; +import {isFeatureConstant} from '../expression/is_constant.js'; +import latest from '../reference/latest.js'; import type {GlobalProperties, Feature} from '../expression/index.js'; import type {CanonicalTileID} from '../../source/tile_id.js'; +import type Point from '@mapbox/point-geometry'; -type FilterExpression = (globalProperties: GlobalProperties, feature: Feature, canonical?: CanonicalTileID) => boolean; -export type FeatureFilter ={filter: FilterExpression, needGeometry: boolean}; +export type FeatureDistanceData = {bearing: [number, number], center: [number, number], scale: number}; +type FilterExpression = (globalProperties: GlobalProperties, feature: Feature, canonical?: CanonicalTileID, featureTileCoord?: Point, featureDistanceData?: FeatureDistanceData) => boolean; +export type FeatureFilter = {filter: FilterExpression, dynamicFilter?: FilterExpression, needGeometry: boolean, needFeature: boolean}; export default createFilter; -export {isExpressionFilter}; +export {isExpressionFilter, isDynamicFilter, extractStaticFilter}; function isExpressionFilter(filter: any) { if (filter === true || filter === false) { @@ -52,17 +56,6 @@ function isExpressionFilter(filter: any) { } } -const filterSpec = { - 'type': 'boolean', - 'default': false, - 'transition': false, - 'property-type': 'data-driven', - 'expression': { - 'interpolated': false, - 'parameters': ['zoom', 'feature'] - } -}; - /** * Given a filter expressed as nested arrays, return a new function * that evaluates whether a given feature (with a .properties or .tags property) @@ -70,25 +63,192 @@ const filterSpec = { * * @private * @param {Array} filter mapbox gl filter + * @param {string} layerType the type of the layer this filter will be applied to. * @returns {Function} filter-evaluating function */ -function createFilter(filter: any): FeatureFilter { +function createFilter(filter: any, layerType?: string = 'fill'): FeatureFilter { if (filter === null || filter === undefined) { - return {filter: () => true, needGeometry: false}; + return {filter: () => true, needGeometry: false, needFeature: false}; } if (!isExpressionFilter(filter)) { filter = convertFilter(filter); } + const filterExp = ((filter: any): string[] | string | boolean); + + let staticFilter = true; + try { + staticFilter = extractStaticFilter(filterExp); + } catch (e) { + console.warn( +`Failed to extract static filter. Filter will continue working, but at higher memory usage and slower framerate. +This is most likely a bug, please report this via https://github.com/mapbox/mapbox-gl-js/issues/new?assignees=&labels=&template=Bug_report.md +and paste the contents of this message in the report. +Thank you! +Filter Expression: +${JSON.stringify(filterExp, null, 2)} + `); + } - const compiled = createExpression(filter, filterSpec); - if (compiled.result === 'error') { - throw new Error(compiled.value.map(err => `${err.key}: ${err.message}`).join(', ')); + // Compile the static component of the filter + const filterSpec = latest[`filter_${layerType}`]; + const compiledStaticFilter = createExpression(staticFilter, filterSpec); + + let filterFunc = null; + if (compiledStaticFilter.result === 'error') { + throw new Error(compiledStaticFilter.value.map(err => `${err.key}: ${err.message}`).join(', ')); } else { - const needGeometry = geometryNeeded(filter); - return {filter: (globalProperties: GlobalProperties, feature: Feature, canonical?: CanonicalTileID) => compiled.value.evaluate(globalProperties, feature, {}, canonical), - needGeometry}; + filterFunc = (globalProperties: GlobalProperties, feature: Feature, canonical?: CanonicalTileID) => compiledStaticFilter.value.evaluate(globalProperties, feature, {}, canonical); + } + + // If the static component is not equal to the entire filter then we have a dynamic component + // Compile the dynamic component separately + let dynamicFilterFunc = null; + let needFeature = null; + if (staticFilter !== filterExp) { + const compiledDynamicFilter = createExpression(filterExp, filterSpec); + + if (compiledDynamicFilter.result === 'error') { + throw new Error(compiledDynamicFilter.value.map(err => `${err.key}: ${err.message}`).join(', ')); + } else { + dynamicFilterFunc = (globalProperties: GlobalProperties, feature: Feature, canonical?: CanonicalTileID, featureTileCoord?: Point, featureDistanceData?: FeatureDistanceData) => compiledDynamicFilter.value.evaluate(globalProperties, feature, {}, canonical, undefined, undefined, featureTileCoord, featureDistanceData); + needFeature = !isFeatureConstant(compiledDynamicFilter.value.expression); + } + } + + filterFunc = ((filterFunc: any): FilterExpression); + const needGeometry = geometryNeeded(staticFilter); + + return { + filter: filterFunc, + dynamicFilter: dynamicFilterFunc ? dynamicFilterFunc : undefined, + needGeometry, + needFeature: !!needFeature + }; +} + +function extractStaticFilter(filter: any): any { + if (!isDynamicFilter(filter)) { + return filter; + } + + // Shallow copy so we can replace expressions in-place + let result = filter.slice(); + + // 1. Union branches + unionDynamicBranches(result); + + // 2. Collapse dynamic conditions to `true` + result = collapseDynamicBooleanExpressions(result); + + return result; +} + +function collapseDynamicBooleanExpressions(expression: any): any { + if (!Array.isArray(expression)) { + return expression; + } + + const collapsed = collapsedExpression(expression); + if (collapsed === true) { + return collapsed; + } else { + return collapsed.map((subExpression) => collapseDynamicBooleanExpressions(subExpression)); + } +} + +/** + * Traverses the expression and replaces all instances of branching on a + * `dynamic` conditional (such as `['pitch']` or `['distance-from-center']`) + * into an `any` expression. + * This ensures that all possible outcomes of a `dynamic` branch are considered + * when evaluating the expression upfront during filtering. + * + * @param {Array} filter the filter expression mutated in-place. + */ +function unionDynamicBranches(filter: any) { + let isBranchingDynamically = false; + const branches = []; + + if (filter[0] === 'case') { + for (let i = 1; i < filter.length - 1; i += 2) { + isBranchingDynamically = isBranchingDynamically || isDynamicFilter(filter[i]); + branches.push(filter[i + 1]); + } + + branches.push(filter[filter.length - 1]); + } else if (filter[0] === 'match') { + isBranchingDynamically = isBranchingDynamically || isDynamicFilter(filter[1]); + + for (let i = 2; i < filter.length - 1; i += 2) { + branches.push(filter[i + 1]); + } + branches.push(filter[filter.length - 1]); + } else if (filter[0] === 'step') { + isBranchingDynamically = isBranchingDynamically || isDynamicFilter(filter[1]); + + for (let i = 1; i < filter.length - 1; i += 2) { + branches.push(filter[i + 1]); + } + } + + if (isBranchingDynamically) { + filter.length = 0; + filter.push('any', ...branches); + } + + // traverse and recurse into children + for (let i = 1; i < filter.length; i++) { + unionDynamicBranches(filter[i]); + } +} + +function isDynamicFilter(filter: any): boolean { + // Base Cases + if (!Array.isArray(filter)) { + return false; + } + if (isRootExpressionDynamic(filter[0])) { + return true; + } + + for (let i = 1; i < filter.length; i++) { + const child = filter[i]; + if (isDynamicFilter(child)) { + return true; + } + } + + return false; +} + +function isRootExpressionDynamic(expression: string): boolean { + return expression === 'pitch' || + expression === 'distance-from-center'; +} + +const dynamicConditionExpressions = new Set([ + 'in', + '==', + '!=', + '>', + '>=', + '<', + '<=', + 'to-boolean' +]); + +function collapsedExpression(expression: any): any { + if (dynamicConditionExpressions.has(expression[0])) { + + for (let i = 1; i < expression.length; i++) { + const param = expression[i]; + if (isDynamicFilter(param)) { + return true; + } + } } + return expression; } // Comparison function to sort numbers and strings diff --git a/src/style-spec/reference/v8.json b/src/style-spec/reference/v8.json index 9cfe5deaf88..2b036408c14 100644 --- a/src/style-spec/reference/v8.json +++ b/src/style-spec/reference/v8.json @@ -652,7 +652,7 @@ }, "filter": { "type": "filter", - "doc": "A expression specifying conditions on source features. Only features that match the filter are displayed. Zoom expressions in filters are only evaluated at integer zoom levels. The `feature-state` expression is not supported in filter expressions." + "doc": "An expression specifying conditions on source features. Only features that match the filter are displayed. Zoom expressions in filters are only evaluated at integer zoom levels. The `[\"feature-state\", ...]` expression is not supported in filter expressions. The `[\"pitch\"]` and `[\"distance-from-center\"]` expressions are supported only for filter expressions on the symbol layer." }, "layout": { "type": "layout", @@ -2500,6 +2500,72 @@ "value": "*", "doc": "A filter selects specific features from a layer." }, + "filter_symbol": { + "type": "boolean", + "doc": "Expression which determines whether or not to display a symbol. Symbols support dynamic filtering, meaning this expression can use the `[\"pitch\"]` and `[\"distance-from-center\"]` expressions to reference the current state of the view.", + "default": false, + "transition": false, + "property-type": "data-driven", + "expression": { + "interpolated": false, + "parameters": ["zoom", "feature", "pitch", "distance-from-center"] + } + }, + "filter_fill": { + "type": "boolean", + "doc": "Expression which determines whether or not to display a polygon. Fill layer does NOT support dynamic filtering, meaning this expression can NOT use the `[\"pitch\"]` and `[\"distance-from-center\"]` expressions to reference the current state of the view.", + "default": false, + "transition": false, + "property-type": "data-driven", + "expression": { + "interpolated": false, + "parameters": ["zoom", "feature"] + } + }, + "filter_line": { + "type": "boolean", + "doc": "Expression which determines whether or not to display a Polygon or LineString. Line layer does NOT support dynamic filtering, meaning this expression can NOT use the `[\"pitch\"]` and `[\"distance-from-center\"]` expressions to reference the current state of the view.", + "default": false, + "transition": false, + "property-type": "data-driven", + "expression": { + "interpolated": false, + "parameters": ["zoom", "feature"] + } + }, + "filter_circle": { + "type": "boolean", + "doc": "Expression which determines whether or not to display a circle. Circle layer does NOT support dynamic filtering, meaning this expression can NOT use the `[\"pitch\"]` and `[\"distance-from-center\"]` expressions to reference the current state of the view.", + "default": false, + "transition": false, + "property-type": "data-driven", + "expression": { + "interpolated": false, + "parameters": ["zoom", "feature"] + } + }, + "filter_fill-extrusion": { + "type": "boolean", + "doc": "Expression which determines whether or not to display a Polygon. Fill-extrusion layer does NOT support dynamic filtering, meaning this expression can NOT use the `[\"pitch\"]` and `[\"distance-from-center\"]` expressions to reference the current state of the view.", + "default": false, + "transition": false, + "property-type": "data-driven", + "expression": { + "interpolated": false, + "parameters": ["zoom", "feature"] + } + }, + "filter_heatmap": { + "type": "boolean", + "doc": "Expression used to determine whether a point is being displayed or not. Heatmap layer does NOT support dynamic filtering, meaning this expression can NOT use the `[\"pitch\"]` and `[\"distance-from-center\"]` expressions to reference the current state of the view.", + "default": false, + "transition": false, + "property-type": "data-driven", + "expression": { + "interpolated": false, + "parameters": ["zoom", "feature"] + } + }, "filter_operator": { "type": "enum", "values": { @@ -3091,7 +3157,7 @@ } }, "length": { - "doc": "Gets the length of an array or string.", + "doc": "Returns the length of an array or string.", "group": "Lookup", "sdk-support": { "basic functionality": { @@ -3103,7 +3169,7 @@ } }, "properties": { - "doc": "Gets the feature properties object. Note that in some cases, it may be more efficient to use [\"get\", \"property_name\"] directly.", + "doc": "Returns the feature properties object. Note that in some cases, it may be more efficient to use `[\"get\", \"property_name\"]` directly.", "group": "Feature data", "sdk-support": { "basic functionality": { @@ -3124,7 +3190,7 @@ } }, "geometry-type": { - "doc": "Gets the feature's geometry type: `Point`, `MultiPoint`, `LineString`, `MultiLineString`, `Polygon`, `MultiPolygon`. `Multi*` feature types are only returned in GeoJSON sources. When working with vector tile sources, use the singular forms.", + "doc": "Returns the feature's geometry type: `Point`, `MultiPoint`, `LineString`, `MultiLineString`, `Polygon`, `MultiPolygon`. `Multi*` feature types are only returned in GeoJSON sources. When working with vector tile sources, use the singular forms.", "group": "Feature data", "sdk-support": { "basic functionality": { @@ -3136,7 +3202,7 @@ } }, "id": { - "doc": "Gets the feature's id, if it has one.", + "doc": "Returns the feature's id, if it has one.", "group": "Feature data", "sdk-support": { "basic functionality": { @@ -3148,8 +3214,8 @@ } }, "zoom": { - "doc": "Gets the current zoom level. Note that in style layout and paint properties, [\"zoom\"] may only appear as the input to a top-level \"step\" or \"interpolate\" expression.", - "group": "Zoom", + "doc": "Returns the current zoom level. Note that in style layout and paint properties, [\"zoom\"] may only appear as the input to a top-level \"step\" or \"interpolate\" expression.", + "group": "Camera", "sdk-support": { "basic functionality": { "js": "0.41.0", @@ -3159,8 +3225,26 @@ } } }, + "pitch": { + "doc": "Returns the current pitch in degrees. `[\"pitch\"]` may only be used in the `filter` expression for a `symbol` layer.", + "group": "Camera", + "sdk-support": { + "basic functionality": { + "js": "2.6.0" + } + } + }, + "distance-from-center": { + "doc": "Returns the distance of a `symbol` instance from the center of the map. The distance is measured in pixels divided by the height of the map container. It measures 0 at the center, decreases towards the camera and increase away from the camera. For example, if the height of the map is 1000px, a value of -1 means 1000px away from the center towards the camera, and a value of 1 means a distance of 1000px away from the camera from the center. `[\"distance-from-center\"]` may only be used in the `filter` expression for a `symbol` layer.", + "group": "Camera", + "sdk-support": { + "basic functionality": { + "js": "2.6.0" + } + } + }, "heatmap-density": { - "doc": "Gets the kernel density estimation of a pixel in a heatmap layer, which is a relative measure of how many data points are crowded around a particular pixel. Can only be used in the `heatmap-color` property.", + "doc": "Returns the kernel density estimation of a pixel in a heatmap layer, which is a relative measure of how many data points are crowded around a particular pixel. Can only be used in the `heatmap-color` property.", "group": "Heatmap", "sdk-support": { "basic functionality": { @@ -3172,7 +3256,7 @@ } }, "line-progress": { - "doc": "Gets the progress along a gradient line. Can only be used in the `line-gradient` property.", + "doc": "Returns the progress along a gradient line. Can only be used in the `line-gradient` property.", "group": "Feature data", "sdk-support": { "basic functionality": { @@ -3184,7 +3268,7 @@ } }, "sky-radial-progress": { - "doc": "Gets the distance of a point on the sky from the sun position. Returns 0 at sun position and 1 when the distance reaches `sky-gradient-radius`. Can only be used in the `sky-gradient` property.", + "doc": "Returns the distance of a point on the sky from the sun position. Returns 0 at sun position and 1 when the distance reaches `sky-gradient-radius`. Can only be used in the `sky-gradient` property.", "group": "sky", "sdk-support": { "basic functionality": { @@ -3195,7 +3279,7 @@ } }, "accumulated": { - "doc": "Gets the value of a cluster property accumulated so far. Can only be used in the `clusterProperties` option of a clustered GeoJSON source.", + "doc": "Returns the value of a cluster property accumulated so far. Can only be used in the `clusterProperties` option of a clustered GeoJSON source.", "group": "Feature data", "sdk-support": { "basic functionality": { diff --git a/src/style-spec/style-spec.js b/src/style-spec/style-spec.js index 1d1dddafa9e..6837d8401ba 100644 --- a/src/style-spec/style-spec.js +++ b/src/style-spec/style-spec.js @@ -1,7 +1,7 @@ // @flow type ExpressionType = 'data-driven' | 'cross-faded' | 'cross-faded-data-driven' | 'color-ramp' | 'data-constant' | 'constant'; -type ExpressionParameters = Array<'zoom' | 'feature' | 'feature-state' | 'heatmap-density' | 'line-progress' | 'sky-radial-progress'>; +type ExpressionParameters = Array<'zoom' | 'feature' | 'feature-state' | 'heatmap-density' | 'line-progress' | 'sky-radial-progress' | 'pitch' | 'distance-from-center'>; type ExpressionSpecification = { interpolated: boolean, diff --git a/src/style-spec/validate/validate_expression.js b/src/style-spec/validate/validate_expression.js index 5fc24a3f94c..a321bf12cd7 100644 --- a/src/style-spec/validate/validate_expression.js +++ b/src/style-spec/validate/validate_expression.js @@ -5,6 +5,9 @@ import ValidationError from '../error/validation_error.js'; import {createExpression, createPropertyExpression} from '../expression/index.js'; import {deepUnbundle} from '../util/unbundle_jsonlint.js'; import {isStateConstant, isGlobalPropertyConstant, isFeatureConstant} from '../expression/is_constant.js'; +import CompoundExpression from '../expression/compound_expression.js'; + +import type {Expression} from '../expression/expression.js'; export default function validateExpression(options: any): Array { const expression = (options.expressionContext === 'property' ? createPropertyExpression : createExpression)(deepUnbundle(options.value), options.valueSpec); @@ -26,8 +29,8 @@ export default function validateExpression(options: any): Array return [new ValidationError(options.key, options.value, '"feature-state" data expressions are not supported with layout properties.')]; } - if (options.expressionContext === 'filter' && !isStateConstant(expressionObj)) { - return [new ValidationError(options.key, options.value, '"feature-state" data expressions are not supported with filters.')]; + if (options.expressionContext === 'filter') { + return disallowedFilterParameters(expressionObj, options); } if (options.expressionContext && options.expressionContext.indexOf('cluster') === 0) { @@ -41,3 +44,31 @@ export default function validateExpression(options: any): Array return []; } + +export function disallowedFilterParameters(e: Expression, options: any): Array { + const disallowedParameters = new Set([ + 'zoom', + 'feature-state', + 'pitch', + 'distance-from-center' + ]); + for (const param of options.valueSpec.expression.parameters) { + disallowedParameters.delete(param); + } + + if (disallowedParameters.size === 0) { + return []; + } + const errors = []; + + if (e instanceof CompoundExpression) { + if (disallowedParameters.has(e.name)) { + return [new ValidationError(options.key, options.value, `["${e.name}"] expression is not supported in a filter for a ${options.object.type} layer with id: ${options.object.id}`)]; + } + } + e.eachChild((arg) => { + errors.push(...disallowedFilterParameters(arg, options)); + }); + + return errors; +} diff --git a/src/style-spec/validate/validate_filter.js b/src/style-spec/validate/validate_filter.js index 3e03f1f984c..1b10b087eff 100644 --- a/src/style-spec/validate/validate_filter.js +++ b/src/style-spec/validate/validate_filter.js @@ -9,9 +9,11 @@ import {isExpressionFilter} from '../feature_filter/index.js'; export default function validateFilter(options) { if (isExpressionFilter(deepUnbundle(options.value))) { + const layerType = deepUnbundle(options.layerType); return validateExpression(extend({}, options, { expressionContext: 'filter', - valueSpec: {value: 'boolean'} + // We default to a layerType of `fill` because that points to a non-dynamic filter definition within the style-spec. + valueSpec: options.styleSpec[`filter_${layerType || 'fill'}`] })); } else { return validateNonExpressionFilter(options); diff --git a/src/style-spec/validate/validate_layer.js b/src/style-spec/validate/validate_layer.js index 32a3494be3d..931b2262982 100644 --- a/src/style-spec/validate/validate_layer.js +++ b/src/style-spec/validate/validate_layer.js @@ -98,7 +98,9 @@ export default function validateLayer(options) { objectKey: 'type' }); }, - filter: validateFilter, + filter(options) { + return validateFilter(extend({layerType: type}, options)); + }, layout(options) { return validateObject({ layer, diff --git a/src/style/evaluation_parameters.js b/src/style/evaluation_parameters.js index 2ba7105106b..e64bbbaa54d 100644 --- a/src/style/evaluation_parameters.js +++ b/src/style/evaluation_parameters.js @@ -14,6 +14,7 @@ export type CrossfadeParameters = { class EvaluationParameters { zoom: number; + pitch: number; now: number; fadeDuration: number; zoomHistory: ZoomHistory; @@ -28,11 +29,13 @@ class EvaluationParameters { this.fadeDuration = options.fadeDuration; this.zoomHistory = options.zoomHistory; this.transition = options.transition; + this.pitch = options.pitch; } else { this.now = 0; this.fadeDuration = 0; this.zoomHistory = new ZoomHistory(); this.transition = {}; + this.pitch = 0; } } diff --git a/src/style/style.js b/src/style/style.js index 0a46525c26c..b9d9035d328 100644 --- a/src/style/style.js +++ b/src/style/style.js @@ -999,7 +999,7 @@ class Style extends Evented { return; } - if (this._validate(validateStyle.filter, `layers.${layer.id}.filter`, filter, null, options)) { + if (this._validate(validateStyle.filter, `layers.${layer.id}.filter`, filter, {layerType: layer.type}, options)) { return; } @@ -1194,6 +1194,8 @@ class Style extends Evented { sourceCache.pause(); } this._changed = true; + layer.invalidateCompiledFilter(); + } _flattenAndSortRenderedFeatures(sourceResults: Array) { diff --git a/src/style/style_layer.js b/src/style/style_layer.js index d236073bd0d..a45661efd92 100644 --- a/src/style/style_layer.js +++ b/src/style/style_layer.js @@ -13,6 +13,7 @@ import {Evented} from '../util/evented.js'; import {Layout, Transitionable, Transitioning, Properties, PossiblyEvaluated, PossiblyEvaluatedPropertyValue} from './properties.js'; import {supportsPropertyExpression} from '../style-spec/util/properties.js'; import ProgramConfiguration from '../data/program_configuration.js'; +import featureFilter from '../style-spec/feature_filter/index.js'; import type {FeatureState} from '../style-spec/expression/index.js'; import type {Bucket} from '../data/bucket.js'; @@ -53,6 +54,7 @@ class StyleLayer extends Evented { +paint: mixed; _featureFilter: FeatureFilter; + _filterCompiled: boolean; +queryRadius: (bucket: Bucket) => number; +queryIntersectsFeature: (queryGeometry: TilespaceQueryGeometry, @@ -73,7 +75,8 @@ class StyleLayer extends Evented { this.id = layer.id; this.type = layer.type; - this._featureFilter = {filter: () => true, needGeometry: false}; + this._featureFilter = {filter: () => true, needGeometry: false, needFeature: false}; + this._filterCompiled = false; if (layer.type === 'custom') return; @@ -296,6 +299,25 @@ class StyleLayer extends Evented { } return false; } + + compileFilter() { + if (!this._filterCompiled) { + this._featureFilter = featureFilter(this.filter); + this._filterCompiled = true; + } + } + + invalidateCompiledFilter() { + this._filterCompiled = false; + } + + dynamicFilter() { + return this._featureFilter.dynamicFilter; + } + + dynamicFilterNeedsFeature() { + return this._featureFilter.needFeature; + } } export default StyleLayer; diff --git a/src/style/style_layer_index.js b/src/style/style_layer_index.js index bd32e3e3d47..86feb123486 100644 --- a/src/style/style_layer_index.js +++ b/src/style/style_layer_index.js @@ -4,7 +4,6 @@ import StyleLayer from './style_layer.js'; import createStyleLayer from './create_style_layer.js'; import {values} from '../util/util.js'; -import featureFilter from '../style-spec/feature_filter/index.js'; import groupByLayout from '../style-spec/group_by_layout.js'; import type {TypedStyleLayer} from './style_layer/typed_style_layer.js'; @@ -38,7 +37,7 @@ class StyleLayerIndex { this._layerConfigs[layerConfig.id] = layerConfig; const layer = this._layers[layerConfig.id] = createStyleLayer(layerConfig); - layer._featureFilter = featureFilter(layer.filter); + layer.compileFilter(); if (this.keyCache[layerConfig.id]) delete this.keyCache[layerConfig.id]; } diff --git a/src/symbol/placement.js b/src/symbol/placement.js index 154cc5150e5..b6cdc645ee8 100644 --- a/src/symbol/placement.js +++ b/src/symbol/placement.js @@ -40,9 +40,12 @@ class OpacityState { class JointOpacityState { text: OpacityState; icon: OpacityState; - constructor(prevState: ?JointOpacityState, increment: number, placedText: boolean, placedIcon: boolean, skipFade: ?boolean) { + clipped: boolean; + constructor(prevState: ?JointOpacityState, increment: number, placedText: boolean, placedIcon: boolean, skipFade: ?boolean, clipped: boolean = false) { this.text = new OpacityState(prevState ? prevState.text : null, increment, placedText, skipFade); this.icon = new OpacityState(prevState ? prevState.icon : null, increment, placedIcon, skipFade); + + this.clipped = clipped; } isHidden() { return this.text.isHidden() && this.icon.isHidden(); @@ -57,10 +60,13 @@ class JointPlacement { // and if a subsequent viewport change brings them into view, they'll be fully // visible right away. skipFade: boolean; - constructor(text: boolean, icon: boolean, skipFade: boolean) { + + clipped: boolean + constructor(text: boolean, icon: boolean, skipFade: boolean, clipped: boolean = false) { this.text = text; this.icon = icon; this.skipFade = skipFade; + this.clipped = clipped; } } @@ -224,20 +230,26 @@ export class Placement { getBucketParts(results: Array, styleLayer: StyleLayer, tile: Tile, sortAcrossTiles: boolean) { const symbolBucket = ((tile.getBucket(styleLayer): any): SymbolBucket); const bucketFeatureIndex = tile.latestFeatureIndex; + if (!symbolBucket || !bucketFeatureIndex || styleLayer.id !== symbolBucket.layerIds[0]) return; - const collisionBoxArray = tile.collisionBoxArray; - const layout = symbolBucket.layers[0].layout; + const collisionBoxArray = tile.collisionBoxArray; const scale = Math.pow(2, this.transform.zoom - tile.tileID.overscaledZ); const textPixelRatio = tile.tileSize / EXTENT; + const unwrappedTileID = tile.tileID.toUnwrapped(); - const posMatrix = this.transform.calculateProjMatrix(tile.tileID.toUnwrapped()); + const posMatrix = this.transform.calculateProjMatrix(unwrappedTileID); const pitchWithMap = layout.get('text-pitch-alignment') === 'map'; const rotateWithMap = layout.get('text-rotation-alignment') === 'map'; + + styleLayer.compileFilter(); + + const dynamicFilter = styleLayer.dynamicFilter(); + const dynamicFilterNeedsFeature = styleLayer.dynamicFilterNeedsFeature(); const pixelsToTiles = pixelsToTileUnits(tile, 1, this.transform.zoom); const textLabelPlaneMatrix = projection.getLabelPlaneMatrix(posMatrix, @@ -259,6 +271,18 @@ export class Placement { labelToScreenMatrix = mat4.multiply([], this.transform.labelPlaneMatrix, glMatrix); } + let clippingData = null; + assert(!!tile.latestFeatureIndex); + if (!!dynamicFilter && tile.latestFeatureIndex) { + + clippingData = { + unwrappedTileID, + dynamicFilter, + dynamicFilterNeedsFeature, + featureIndex: tile.latestFeatureIndex + }; + } + // As long as this placement lives, we have to hold onto this bucket's // matching FeatureIndex/data for querying purposes this.retainedQueryData[symbolBucket.bucketInstanceId] = new RetainedQueryData( @@ -275,6 +299,7 @@ export class Placement { posMatrix, textLabelPlaneMatrix, labelToScreenMatrix, + clippingData, scale, textPixelRatio, holdingForFade: tile.holdingForFade(), @@ -357,6 +382,7 @@ export class Placement { posMatrix, textLabelPlaneMatrix, labelToScreenMatrix, + clippingData, textPixelRatio, holdingForFade, collisionBoxArray, @@ -400,6 +426,37 @@ export class Placement { } const placeSymbol = (symbolInstance: SymbolInstance, symbolIndex: number, collisionArrays: CollisionArrays) => { + if (clippingData) { + // Setup globals + const globals = { + zoom: this.transform.zoom, + pitch: this.transform.pitch, + }; + + // Deserialize feature only if necessary + let feature = null; + if (clippingData.dynamicFilterNeedsFeature) { + const featureIndex = clippingData.featureIndex; + const retainedQueryData = this.retainedQueryData[bucket.bucketInstanceId]; + feature = featureIndex.loadFeature({ + featureIndex: symbolInstance.featureIndex, + bucketIndex: retainedQueryData.bucketIndex, + sourceLayerIndex: retainedQueryData.sourceLayerIndex, + layoutVertexArrayOffset: 0 + }); + } + const canonicalTileId = this.retainedQueryData[bucket.bucketInstanceId].tileID.canonical; + + const filterFunc = clippingData.dynamicFilter; + const shouldClip = !filterFunc(globals, feature, canonicalTileId, new Point(symbolInstance.tileAnchorX, symbolInstance.tileAnchorY), this.transform.calculateDistanceTileData(clippingData.unwrappedTileID)); + + if (shouldClip) { + this.placements[symbolInstance.crossTileID] = new JointPlacement(false, false, false, true); + seenCrossTileIDs[symbolInstance.crossTileID] = true; + return; + } + } + if (seenCrossTileIDs[symbolInstance.crossTileID]) return; if (holdingForFade) { // Mark all symbols from this tile as "not placed", but don't add to seenCrossTileIDs, because we don't @@ -801,12 +858,12 @@ export class Placement { const jointPlacement = this.placements[crossTileID]; const prevOpacity = prevOpacities[crossTileID]; if (prevOpacity) { - this.opacities[crossTileID] = new JointOpacityState(prevOpacity, increment, jointPlacement.text, jointPlacement.icon); + this.opacities[crossTileID] = new JointOpacityState(prevOpacity, increment, jointPlacement.text, jointPlacement.icon, null, jointPlacement.clipped); placementChanged = placementChanged || jointPlacement.text !== prevOpacity.text.placed || jointPlacement.icon !== prevOpacity.icon.placed; } else { - this.opacities[crossTileID] = new JointOpacityState(null, increment, jointPlacement.text, jointPlacement.icon, jointPlacement.skipFade); + this.opacities[crossTileID] = new JointOpacityState(null, increment, jointPlacement.text, jointPlacement.icon, jointPlacement.skipFade, jointPlacement.clipped); placementChanged = placementChanged || jointPlacement.text || jointPlacement.icon; } } @@ -862,6 +919,7 @@ export class Placement { if (bucket.hasTextCollisionBoxData()) bucket.textCollisionBox.collisionVertexArray.clear(); const layout = bucket.layers[0].layout; + const hasClipping = !!bucket.layers[0].dynamicFilter(); const duplicateOpacityState = new JointOpacityState(null, 0, false, false, true); const textAllowOverlap = layout.get('text-allow-overlap'); const iconAllowOverlap = layout.get('icon-allow-overlap'); @@ -978,8 +1036,8 @@ export class Placement { const collisionArrays = bucket.collisionArrays[s]; if (collisionArrays) { let shift = new Point(0, 0); + let used = true; if (collisionArrays.textBox || collisionArrays.verticalTextBox) { - let used = true; if (variablePlacement) { const variableOffset = this.variableOffsets[crossTileID]; if (variableOffset) { @@ -1003,6 +1061,10 @@ export class Placement { } } + if (hasClipping) { + used = !opacityState.clipped; + } + if (collisionArrays.textBox) { updateCollisionVertices(bucket.textCollisionBox.collisionVertexArray, opacityState.text.placed, !used || horizontalHidden, shift.x, shift.y); } @@ -1011,7 +1073,7 @@ export class Placement { } } - const verticalIconUsed = Boolean(!verticalHidden && collisionArrays.verticalIconBox); + const verticalIconUsed = used && Boolean(!verticalHidden && collisionArrays.verticalIconBox); if (collisionArrays.iconBox) { updateCollisionVertices(bucket.iconCollisionBox.collisionVertexArray, opacityState.icon.placed, verticalIconUsed, diff --git a/src/ui/map.js b/src/ui/map.js index 47137da5239..adea9b40d35 100755 --- a/src/ui/map.js +++ b/src/ui/map.js @@ -2761,12 +2761,14 @@ class Map extends Camera { this._styleDirty = false; const zoom = this.transform.zoom; + const pitch = this.transform.pitch; const now = browser.now(); this.style.zoomHistory.update(zoom, now); const parameters = new EvaluationParameters(zoom, { now, fadeDuration, + pitch, zoomHistory: this.style.zoomHistory, transition: this.style.getTransition() }); diff --git a/test/integration/data/distance-lines.geojson b/test/integration/data/distance-lines.geojson new file mode 100644 index 00000000000..b2b5c7e647f --- /dev/null +++ b/test/integration/data/distance-lines.geojson @@ -0,0 +1,488 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "distance": "-2.50" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 37.919470015974326 + ], + [ + -120.30344797631889, + 37.919470015974326 + ], + [ + -120.10259006169738, + 37.919470015974326 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.25" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 37.93927382972113 + ], + [ + -120.30344797631889, + 37.93927382972113 + ], + [ + -120.10259006169738, + 37.93927382972113 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.00" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 37.9590723086595 + ], + [ + -120.30344797631889, + 37.9590723086595 + ], + [ + -120.10259006169738, + 37.9590723086595 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.75" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 37.97886545186313 + ], + [ + -120.30344797631889, + 37.97886545186313 + ], + [ + -120.10259006169738, + 37.97886545186313 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.50" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 37.99865325840861 + ], + [ + -120.30344797631889, + 37.99865325840861 + ], + [ + -120.10259006169738, + 37.99865325840861 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.25" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 38.01843572737516 + ], + [ + -120.30344797631889, + 38.01843572737516 + ], + [ + -120.10259006169738, + 38.01843572737516 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.00" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 38.038212857845025 + ], + [ + -120.30344797631889, + 38.038212857845025 + ], + [ + -120.10259006169738, + 38.038212857845025 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.75" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 38.057984648903016 + ], + [ + -120.30344797631889, + 38.057984648903016 + ], + [ + -120.10259006169738, + 38.057984648903016 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.50" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 38.07775109963683 + ], + [ + -120.30344797631889, + 38.07775109963683 + ], + [ + -120.10259006169738, + 38.07775109963683 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.25" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 38.09751220913702 + ], + [ + -120.30344797631889, + 38.09751220913702 + ], + [ + -120.10259006169738, + 38.09751220913702 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.00" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 38.11726797649678 + ], + [ + -120.30344797631889, + 38.11726797649678 + ], + [ + -120.10259006169738, + 38.11726797649678 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.25" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 38.137018400812224 + ], + [ + -120.30344797631889, + 38.137018400812224 + ], + [ + -120.10259006169738, + 38.137018400812224 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.50" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 38.156763481182196 + ], + [ + -120.30344797631889, + 38.156763481182196 + ], + [ + -120.10259006169738, + 38.156763481182196 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.75" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 38.176503216708255 + ], + [ + -120.30344797631889, + 38.176503216708255 + ], + [ + -120.10259006169738, + 38.176503216708255 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.00" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 38.19623760649492 + ], + [ + -120.30344797631889, + 38.19623760649492 + ], + [ + -120.10259006169738, + 38.19623760649492 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.25" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 38.21596664964929 + ], + [ + -120.30344797631889, + 38.21596664964929 + ], + [ + -120.10259006169738, + 38.21596664964929 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.50" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 38.23569034528143 + ], + [ + -120.30344797631889, + 38.23569034528143 + ], + [ + -120.10259006169738, + 38.23569034528143 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.75" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 38.25540869250392 + ], + [ + -120.30344797631889, + 38.25540869250392 + ], + [ + -120.10259006169738, + 38.25540869250392 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.00" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 38.27512169043243 + ], + [ + -120.30344797631889, + 38.27512169043243 + ], + [ + -120.10259006169738, + 38.27512169043243 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.25" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 38.29482933818517 + ], + [ + -120.30344797631889, + 38.29482933818517 + ], + [ + -120.10259006169738, + 38.29482933818517 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.50" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -120.50430589094042, + 38.314531634883195 + ], + [ + -120.30344797631889, + 38.314531634883195 + ], + [ + -120.10259006169738, + 38.314531634883195 + ] + ] + } + } + ] +} \ No newline at end of file diff --git a/test/integration/data/distance-points.geojson b/test/integration/data/distance-points.geojson new file mode 100644 index 00000000000..ddeb33d8610 --- /dev/null +++ b/test/integration/data/distance-points.geojson @@ -0,0 +1,4646 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "distance": "-2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 37.919470015974326 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 37.919470015974326 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 37.919470015974326 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 37.919470015974326 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 37.919470015974326 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 37.919470015974326 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 37.919470015974326 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 37.919470015974326 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 37.919470015974326 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 37.919470015974326 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 37.919470015974326 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 37.919470015974326 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 37.919470015974326 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 37.919470015974326 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 37.919470015974326 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 37.919470015974326 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 37.919470015974326 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 37.93927382972113 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 37.93927382972113 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 37.93927382972113 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 37.93927382972113 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 37.93927382972113 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 37.93927382972113 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 37.93927382972113 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 37.93927382972113 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 37.93927382972113 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 37.93927382972113 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 37.93927382972113 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 37.93927382972113 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 37.93927382972113 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 37.93927382972113 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 37.93927382972113 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 37.93927382972113 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 37.93927382972113 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 37.9590723086595 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 37.9590723086595 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 37.9590723086595 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 37.9590723086595 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 37.9590723086595 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 37.9590723086595 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 37.9590723086595 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 37.9590723086595 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 37.9590723086595 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 37.9590723086595 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 37.9590723086595 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 37.9590723086595 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 37.9590723086595 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 37.9590723086595 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 37.9590723086595 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 37.9590723086595 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 37.9590723086595 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 37.97886545186313 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 37.97886545186313 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 37.97886545186313 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 37.97886545186313 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 37.97886545186313 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 37.97886545186313 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 37.97886545186313 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 37.97886545186313 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 37.97886545186313 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 37.97886545186313 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 37.97886545186313 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 37.97886545186313 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 37.97886545186313 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 37.97886545186313 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 37.97886545186313 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 37.97886545186313 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 37.97886545186313 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 37.99865325840861 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 37.99865325840861 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 37.99865325840861 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 37.99865325840861 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 37.99865325840861 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 37.99865325840861 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 37.99865325840861 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 37.99865325840861 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 37.99865325840861 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 37.99865325840861 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 37.99865325840861 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 37.99865325840861 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 37.99865325840861 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 37.99865325840861 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 37.99865325840861 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 37.99865325840861 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 37.99865325840861 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 38.01843572737516 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 38.01843572737516 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 38.01843572737516 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 38.01843572737516 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 38.01843572737516 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 38.01843572737516 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 38.01843572737516 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 38.01843572737516 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 38.01843572737516 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 38.01843572737516 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 38.01843572737516 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 38.01843572737516 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 38.01843572737516 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 38.01843572737516 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 38.01843572737516 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 38.01843572737516 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 38.01843572737516 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 38.038212857845025 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 38.038212857845025 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 38.038212857845025 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 38.038212857845025 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 38.038212857845025 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 38.038212857845025 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 38.038212857845025 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 38.038212857845025 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 38.038212857845025 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 38.038212857845025 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 38.038212857845025 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 38.038212857845025 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 38.038212857845025 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 38.038212857845025 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 38.038212857845025 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 38.038212857845025 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 38.038212857845025 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 38.057984648903016 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 38.057984648903016 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 38.057984648903016 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 38.057984648903016 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 38.057984648903016 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 38.057984648903016 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 38.057984648903016 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 38.057984648903016 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 38.057984648903016 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 38.057984648903016 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 38.057984648903016 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 38.057984648903016 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 38.057984648903016 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 38.057984648903016 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 38.057984648903016 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 38.057984648903016 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 38.057984648903016 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 38.07775109963683 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 38.07775109963683 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 38.07775109963683 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 38.07775109963683 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 38.07775109963683 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 38.07775109963683 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 38.07775109963683 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 38.07775109963683 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 38.07775109963683 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 38.07775109963683 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 38.07775109963683 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 38.07775109963683 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 38.07775109963683 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 38.07775109963683 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 38.07775109963683 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 38.07775109963683 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 38.07775109963683 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 38.09751220913702 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 38.09751220913702 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 38.09751220913702 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 38.09751220913702 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 38.09751220913702 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 38.09751220913702 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 38.09751220913702 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 38.09751220913702 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 38.09751220913702 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 38.09751220913702 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 38.09751220913702 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 38.09751220913702 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 38.09751220913702 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 38.09751220913702 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 38.09751220913702 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 38.09751220913702 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "-0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 38.09751220913702 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 38.11726797649678 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 38.11726797649678 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 38.11726797649678 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 38.11726797649678 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 38.11726797649678 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 38.11726797649678 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 38.11726797649678 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 38.11726797649678 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 38.11726797649678 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 38.11726797649678 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 38.11726797649678 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 38.11726797649678 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 38.11726797649678 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 38.11726797649678 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 38.11726797649678 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 38.11726797649678 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 38.11726797649678 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 38.137018400812224 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 38.137018400812224 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 38.137018400812224 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 38.137018400812224 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 38.137018400812224 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 38.137018400812224 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 38.137018400812224 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 38.137018400812224 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 38.137018400812224 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 38.137018400812224 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 38.137018400812224 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 38.137018400812224 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 38.137018400812224 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 38.137018400812224 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 38.137018400812224 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 38.137018400812224 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 38.137018400812224 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 38.156763481182196 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 38.156763481182196 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 38.156763481182196 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 38.156763481182196 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 38.156763481182196 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 38.156763481182196 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 38.156763481182196 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 38.156763481182196 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 38.156763481182196 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 38.156763481182196 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 38.156763481182196 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 38.156763481182196 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 38.156763481182196 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 38.156763481182196 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 38.156763481182196 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 38.156763481182196 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 38.156763481182196 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 38.176503216708255 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 38.176503216708255 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 38.176503216708255 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 38.176503216708255 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 38.176503216708255 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 38.176503216708255 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 38.176503216708255 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 38.176503216708255 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 38.176503216708255 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 38.176503216708255 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 38.176503216708255 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 38.176503216708255 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 38.176503216708255 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 38.176503216708255 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 38.176503216708255 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 38.176503216708255 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "0.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 38.176503216708255 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 38.19623760649492 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 38.19623760649492 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 38.19623760649492 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 38.19623760649492 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 38.19623760649492 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 38.19623760649492 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 38.19623760649492 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 38.19623760649492 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 38.19623760649492 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 38.19623760649492 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 38.19623760649492 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 38.19623760649492 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 38.19623760649492 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 38.19623760649492 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 38.19623760649492 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 38.19623760649492 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 38.19623760649492 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 38.21596664964929 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 38.21596664964929 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 38.21596664964929 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 38.21596664964929 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 38.21596664964929 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 38.21596664964929 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 38.21596664964929 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 38.21596664964929 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 38.21596664964929 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 38.21596664964929 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 38.21596664964929 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 38.21596664964929 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 38.21596664964929 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 38.21596664964929 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 38.21596664964929 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 38.21596664964929 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 38.21596664964929 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 38.23569034528143 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 38.23569034528143 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 38.23569034528143 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 38.23569034528143 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 38.23569034528143 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 38.23569034528143 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 38.23569034528143 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 38.23569034528143 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 38.23569034528143 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 38.23569034528143 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 38.23569034528143 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 38.23569034528143 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 38.23569034528143 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 38.23569034528143 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 38.23569034528143 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 38.23569034528143 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 38.23569034528143 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 38.25540869250392 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 38.25540869250392 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 38.25540869250392 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 38.25540869250392 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 38.25540869250392 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 38.25540869250392 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 38.25540869250392 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 38.25540869250392 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 38.25540869250392 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 38.25540869250392 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 38.25540869250392 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 38.25540869250392 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 38.25540869250392 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 38.25540869250392 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 38.25540869250392 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 38.25540869250392 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "1.75" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 38.25540869250392 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 38.27512169043243 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 38.27512169043243 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 38.27512169043243 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 38.27512169043243 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 38.27512169043243 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 38.27512169043243 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 38.27512169043243 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 38.27512169043243 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 38.27512169043243 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 38.27512169043243 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 38.27512169043243 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 38.27512169043243 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 38.27512169043243 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 38.27512169043243 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 38.27512169043243 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 38.27512169043243 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.00" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 38.27512169043243 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 38.29482933818517 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 38.29482933818517 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 38.29482933818517 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 38.29482933818517 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 38.29482933818517 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 38.29482933818517 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 38.29482933818517 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 38.29482933818517 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 38.29482933818517 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 38.29482933818517 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 38.29482933818517 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 38.29482933818517 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 38.29482933818517 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 38.29482933818517 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 38.29482933818517 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 38.29482933818517 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.25" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 38.29482933818517 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.50430589094042, + 38.314531634883195 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.47919865161273, + 38.314531634883195 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.45409141228504, + 38.314531634883195 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.42898417295734, + 38.314531634883195 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.40387693362966, + 38.314531634883195 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.37876969430197, + 38.314531634883195 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.35366245497428, + 38.314531634883195 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.32855521564659, + 38.314531634883195 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.30344797631889, + 38.314531634883195 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.27834073699121, + 38.314531634883195 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.25323349766353, + 38.314531634883195 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.22812625833583, + 38.314531634883195 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.20301901900814, + 38.314531634883195 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.17791177968047, + 38.314531634883195 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.15280454035278, + 38.314531634883195 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.12769730102508, + 38.314531634883195 + ] + } + }, + { + "type": "Feature", + "properties": { + "distance": "2.50" + }, + "geometry": { + "type": "Point", + "coordinates": [ + -120.10259006169738, + 38.314531634883195 + ] + } + } + ] +} \ No newline at end of file diff --git a/test/integration/render-tests/background-visibility/none/expected.png b/test/integration/render-tests/background-visibility/none/expected.png index 724d17cd7d363c15e2712b76e90d158b55fb812b..aad72f146fb55cea82ff1af0aa090ca24055667f 100644 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|T0C7GLn`9l zUS$+yFyLX@_~?E~Yt6F-GLpN0MF06G+`x83*g+wVVZH(r2ZW{Fz`*p8MW93c0GC38 xgAF6gBi0Q}90~&d42>0xYZypY<}mjFbH)t@$2I>G8iDR%@O1TaS?83{1OTyQIPL%d delta 78 zcmX@bm@`4egUQpyF{Fa=ja1zw1_lOI5by0lMqVKMkizffb$sRtKqfLcu$RHXfq^m5 R`shTEu&1k^%Q~loCICFa6QckC diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/early-dynamic-high-pitch/expected.png b/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/early-dynamic-high-pitch/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..f0c42704f0448741db9b76d58302fef3eadbc34e GIT binary patch literal 12297 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 EFLwwCa{vGU literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/early-dynamic-high-pitch/style.json b/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/early-dynamic-high-pitch/style.json new file mode 100644 index 00000000000..6bba706be14 --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/early-dynamic-high-pitch/style.json @@ -0,0 +1,67 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 75, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-lines.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "rings-lines", + "type": "line", + "source": "rings", + "layout": {}, + "paint": { + "line-width": ["abs",["*", 10, ["to-number", ["get", "distance"]]]] + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": ["case", + ["<", ["pitch"], 60], ["in", ["get", "distance"], ["literal", ["0.25", "-0.75", "1.50"]]], + ["all", [">=", ["pitch"], 60], [">", ["distance-from-center"], 0]], ["in", ["get", "distance"], ["literal", ["1.00", "2.00"]]], + false + ], + "layout": { + "symbol-placement": "line", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/early-dynamic-low-pitch/expected.png b/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/early-dynamic-low-pitch/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..3c35f0edbceb663c5346db81dcd0c0998bde1256 GIT binary patch literal 12684 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 Rq5ob1kds!DDw2Tv{x2Nw%kuyL literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/early-dynamic-low-pitch/style.json b/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/early-dynamic-low-pitch/style.json new file mode 100644 index 00000000000..da6d72d3a80 --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/early-dynamic-low-pitch/style.json @@ -0,0 +1,67 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 45, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-lines.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "rings-lines", + "type": "line", + "source": "rings", + "layout": {}, + "paint": { + "line-width": ["abs",["*", 10, ["to-number", ["get", "distance"]]]] + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": ["case", + ["<", ["pitch"], 60], ["in", ["get", "distance"], ["literal", ["0.25", "0.75", "1.50"]]], + ["all", [">=", ["pitch"], 60], ["<", ["distance-from-center"], 0.5]], ["in", ["get", "distance"], ["literal", ["1.00", "2.00"]]], + false + ], + "layout": { + "symbol-placement": "line", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/late-dynamic/expected.png b/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/late-dynamic/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..1b5b5689fd83d0fd0ffc4d7a147d441e9a367965 GIT binary patch literal 12516 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 NlKUWA@zyx#e*td%wpIWD literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/late-dynamic/style.json b/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/late-dynamic/style.json new file mode 100644 index 00000000000..d2e832e11d6 --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance-data-driven/late-dynamic/style.json @@ -0,0 +1,66 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 73.5, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-lines.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "rings-lines", + "type": "line", + "source": "rings", + "layout": {}, + "paint": { + "line-width": ["abs",["*", 10, ["to-number", ["get", "distance"]]]] + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": ["all", + ["in", ["get", "distance"], ["literal", ["1.00", "2.00"]]], + [">", ["distance-from-center"], 0.5] + ], + "layout": { + "symbol-placement": "line", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance/high-pitch-far-hidden/expected.png b/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance/high-pitch-far-hidden/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..3e5b5517c2528068017fd8662c74df075b9d3242 GIT binary patch literal 22675 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 N5EU)uT1D%q{{g)9^^E`k literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance/high-pitch-far-hidden/style.json b/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance/high-pitch-far-hidden/style.json new file mode 100644 index 00000000000..ce2df982d3d --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance/high-pitch-far-hidden/style.json @@ -0,0 +1,67 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 73.5, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-lines.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "rings-lines", + "type": "line", + "source": "rings", + "layout": {}, + "paint": { + "line-width": ["abs",["*", 10, ["to-number", ["get", "distance"]]]] + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": ["case", + ["<", ["pitch"], 60], true, + ["all", [">=", ["pitch"], 60], ["<", ["distance-from-center"], 0.5]], true, + false + ], + "layout": { + "symbol-placement": "line", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance/low-pitch-far-visible/expected.png b/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance/low-pitch-far-visible/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..c2bfa4dea07edbe2feee389fcfdd97089f3c75c6 GIT binary patch literal 42216 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 literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance/low-pitch-far-visible/style.json b/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance/low-pitch-far-visible/style.json new file mode 100644 index 00000000000..fd53adce3a1 --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/line/combined-pitch-distance/low-pitch-far-visible/style.json @@ -0,0 +1,67 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 55, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-lines.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "rings-lines", + "type": "line", + "source": "rings", + "layout": {}, + "paint": { + "line-width": ["abs",["*", 10, ["to-number", ["get", "distance"]]]] + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": ["case", + ["<", ["pitch"], 60], true, + ["all", [">=", ["pitch"], 60], ["<", ["distance-from-center"], 0.5]], true, + false + ], + "layout": { + "symbol-placement": "line", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/distance-far-cull/expected.png b/test/integration/render-tests/dynamic-filter/symbols/line/distance-far-cull/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..793ff74e5719d39388954cd793e00bfd9533e237 GIT binary patch literal 34795 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 literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/distance-far-cull/style.json b/test/integration/render-tests/dynamic-filter/symbols/line/distance-far-cull/style.json new file mode 100644 index 00000000000..31c8877aee0 --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/line/distance-far-cull/style.json @@ -0,0 +1,63 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 73.5, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-lines.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "rings-lines", + "type": "line", + "source": "rings", + "layout": {}, + "paint": { + "line-width": ["abs",["*", 10, ["to-number", ["get", "distance"]]]] + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": ["<", ["distance-from-center"], 1.1], + "layout": { + "symbol-placement": "line", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/distance-near-and-far-cull/expected.png b/test/integration/render-tests/dynamic-filter/symbols/line/distance-near-and-far-cull/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..15016b855057d3852342e83e588ccfd9a395b72c GIT binary patch literal 39124 zcmeFXQ+Op&w>2DR$F|k6ZKGp%(y{Gyk{#Pd$F@5i+qTUe+s5DLJ?H#a-~D&sh1fS!0Y@Yu1`8LRnE72_7FF3=9nEyNrY?7#Mi`zXJe(`PbqUS+Mu-1n#0LEe2LI zMR)=RMhf;_LR8&D|6C8&Rb3M2({0|10q&TfqRR{e8;}Wg{eCxfQwB6U@^yLJXe|tC!-Rkb z5AhchAv1)A;G^GCsilGXpC+&|f0}Q~fd9U)L{)|vpj%mx`=8!)xRk;E z)Z=8OdstU8qOP7SYS7Y&ka$2Ai>zo`|Hm|=k&Ntk3^D&GcgyZ;$bC*2wGs^ z`?%AYtF!tcsD>BkM}Ny`e{ydIs0$TE@5JfuDS~_0&W8SG>Fl742PY&X@yX^^Sv*E( zR7adl=cB!?h%zVuBRALY5r%quQRCB3G{7`Ek2FuEaGae+u3HR7z?bk(9r(uPK{u@> z5O`}v2TNzb&HeJ_o%6+E1@Zi5(CXw8O~}n0nl`PhZP*nM8e&kU|Ar zX1DHgm1MrN=($Irh`91%gt9a8;zg`qSjA!@ss0bls~(ZB)RMn_ppKw^6J)Xx!A z%%RLx7S$m6AsZ=}n7B{kZ%6t1hcXLS-C->yy; zf&ID+7c<5Ri-Q=crq?SKKQr^sr~QiwJg=gn5htBQ?zxFKyY-yPx2nOqrYk4pUpF^5 zp~9bKJ&nsS{lnCF(9k(DijPB$%d*Qt6cqjUoed47=WD+ZeSKlA-w1yB*5u{E-QGd6 zIOef_89olC&_~UbtIet#7$-<%@&R3@Wqujk3NZuO z?!R;HsvpkOW~){k0Z4+eW3oDgg7|?sf_EYHMpM)wA(vY9C78XvnP&nyYrc5}eP|X_ zuKjxMSh=8g+l@5;ogISNh7%`sjT5JPOWd0F8W|pnLl6_=uOSjYu>Ab5g-46CcU_GX zMs#$~aHq3}MWESyiOKa-Hx?QiqR}rNXG+4&wv@iDu7G9ue_pvc{k!5AFJp4GC1ny?VNWU3f#4L}y zXHHJd8=|5*6Vg{9f?$8Rv%I|7ESu;5I%5LB^Tpme!xHjid*}mox`j|gMc1t%MLPx5 zG!G+_lW8`7{fK}D%8AySFE7S7LmazmEIKmKIrmp+901@})tOByCZ*}<2ptdQ-H+iB zkV5B6i+_YJsPD2-W?3N~q2?thVa3Ojf|QtM7bB1Q>M?5Nv1xOfd^AO`o;T;3+_FAK~p0+-_|oTv2x@E2wuF z#p?x5s2BA6+_U^fuo&H z-mR*B9vFYjV+evDh5m6`|+feniz6VZcN4`Xxq zei67QA#OLs#d0?o8c9;V@SA)`?*@TctW;4A4ltHixI{c{xe~az!|A_vagZ9I-|2Xp zb2OL{UFm}5I84NL15awcPbWd-iy`((qfu{xKx_IMGp2<*2GdgJ%E6b$X0lTP=Q6kp z>N%_J=OTx)$jM>4?Zy-mc+T^V2X#4M6*vn)aoHzl>`Zb8oYi1F6ADe->p~*74N(wGjO71@LYw?jW&-xE1hBrK6Ge9+Nom zr!D%Uf|B_;5fHVM>o-fvfs||{`CMc|f$)N2`uN0ez%uKl;Xm4SgnY34gqK{9leN=f zn>w`xW19#XL6@Pv`;MZ02l<Pn~n3=s0+volpMVpJJ<#evahdsSnQYrVoT`YQk;q z2=P%6L&uAT^Bnf*O>sfPa>Q%&N3nb&Iv(AaBQJLgSh@)4ID+Fp^wDJLtj-a4@eG)Ndv%`@t>+#h91qC*ao@lZ zX~)nlkA5h}M$4hdy3B5|!GUR)g3%&E>Z4@0DA}}Vh2k@oH*Qi&sNx7{9?mjY`>s{X z=gTe~{K#v^fgyg1_d5MQI=57)L`b$PVBYsCojX3PY@GeQyt9Y?e)H2W1Tp;TWHv5* z$S9pkJV^J>veZlg_AAQ4_b`8>{D+h_5K2+>lVXQb4IrX$qH>GCS!su(kP49hWi(DD z;-ZjgPd7q5Fl}PpPDF~)KwTOXy1l@oE~(3hr~dqUBDN^7b?#69yX#K?KsIFiJfY{R z8=<7Aw?tXT+4_`a!bP9TZ^k?=5*eE*S?uPGWQEm=cZ{w`U}aJ-Hl*BCOk_t|2!_FL@eBd@v+iYQKr!^%^gr7`MDHp_rS=mclM*oCiqOx)GJG94v$M- z-j-k}LVO`{32{$#@Z{!lwGawIuMNDWerj^}Q-+mnnV`*BBpSaH{a)z?)(KljT|$hn z-R&0?416-Ohkj_pm1jGn4UgGgGLYSB;0jzWAc%&}@We6}k0SWQG!o%m3MJ&ODz&&k zy8%#sxi&e;uH>UeN91@u8;uM-KBvJ&hyGG8t913t(7#19`W$jCd zYXX1x{eAV_0jIpt$n6~qcTCo10Tfny{I1?0Dr+vT@OB5*zQb*Vb_JUv^b(5>%LJzl z6!7P@F{fqk3v6s&NG(Xf4NLbHxXAJ@Jto!%vh>eXhc2|5$xE{N*~YU@9<*l6{AtAa z157?5MWGhJrvpmR{E{%4=C^G>lIIg@P|FqMpQ3={d=$~-@MpI~qc=4H;QSaW| z=bumj{#Sa}+RcCw86941=h-(@W*&WwZv-m&j^U60QLMKPy58hz9v%(dXfmuStVlZ|AZw zSjMA`$Nd$EC);!z7#b?z?WD4sSOt07QU5bmZt&`0Y+%(jF$5!5|XJ(-QAs z!Bu#T&6@t-`rQ;?t@+2oS=+|xlyzLc=>rcOxgoU%brl$oTadt(*Ws1b)hQ1y)*U20 zny)_b!XxJjBk|*2tIGhzFx>CIK(&@{lZAlI#~MU~ZJ!^<@PdpSOAyaEJv!JPd7S=d zVDE^erPwCzGZcbpx)w|Xyu7@Q7B7pre(=(VJ1a^vU7adhxOnqg>KbIg0b3qF4m{#+ zUnp^V@JHb$3}inVe|NmC1zefdX2;bTB}o55k`;y=M`V@^Mo4vqV3-n^Zt@$X_UlrKcQiCO-3Zs zE|i1oO0R$Bgo+3X%SOuQ{bx`2?ZI6&y&30ao0+dpY^`SG=QoEWY6Al@A+wOBtk$y( z9G9}HN24O~(r8{_f)Y1=JY;_f!c}NOR2KvQt`ZEJNn!(;q<7+x;4>b~`zB;GsrENh z%RqV842Y1VkcRPV!fD>b2suq3mts(J_*3LIZupPGipTwl$^BS5N)g2kC~l>GfT--Ubq=lXk>mq<%ZzbybpaXakU=8W;)5#=31!q(N?(jTJm4RFdWh*W?+=0IXy#hDqB?yEc(9CZH3)GmY@~K2zbF%}I7p>)KlT|=tZyIZm1MMj zgXbny?%r;Ot+dzUW%%5%=>G6!`j%-eUXwmwZ0n|9kx3p(^_;gA5v+2E};#jH&T zKR|r^no7T%5emwGu}Cs>w=fum(oIemCh>CkfFW8E07T=0zu!h77QQ}Un_P~GwNR#)R3Bf ziwJOl&mPmzL8+=zfo3g#6`4$P>|Ax5jE5`Dny$hJKUMIx@BA@_eq4|7SF;!Bpt!$g z5~OToS}s4`vD7_%KVKoUIZCf!(UXGwYjpn?%qtDPc|D!XlF8l@&+{#M+^dRq_S|7FH%G%1 zd7N0=dQJPw92xAGxQn5??*kM+ZGxnH`s3@UFqriEcHXAFciyg4G_8ZSe~j&j6s0%F z)#8*J89Udt8sZ7ZI5mDqOF<@H?<0Enau8fLH=@Ds#D9DMHs85oLj+=xN7(}|H;at{ z2>r7{N>L4n4?3ppbeQ{RPJE-`g-v*2p!qY&J%6D_F88ILafcaHwFQOLS^pyW7pNwe zZqdR^{l$aHL(zu$k8r5wE=RiWfw^bj(_afZBq3FZ4sO9fU@ADqEO`Z(JdP67PF13? zU(1wdjg)=fg4(H>RxG9+jSvbXNGY_rS%gJgofsP2O`=Iz{XMnavXj2kf)G5X*2w3o z4A{ei4PDAIYmMeH(TGBCh^(WZe~qo4n2bniCTO#X!KJq17F2QzgJ9>i;;pg^r4w>? zB0Dm@3Y@pLEm`{rR=V_BCbaW?;nOq7q zlN3zZA-BKec_Y$rP$=lmd@v>MMaD3aX1!JYdKnJ_7*Wr>xz`jCMQ?J{czgy36!`Gt z*DlOC+!dgHGbE7pK%xK!hsyl);~Jr4>2~bx-c%^gui4Y z)hF9)iVd~za9<*}$Wqv_ROw6AoEgpcWd=4rU<=@n3cM$x!rz9ms@DhyKj#H!$UFo8 zpuS}&NVUV-=6$`oU~0bXMc2^(eCJxj{Fu#K8WitB6}=>o-)eS7>VQSAdZdu5hiIRC_Es?~~KyqfadKB;uf%ZI_lEa=H)Ydmmy zO2=a47K_{$QseR$A!`JKT3N^z%Gh8lpy>(h;B61JT^Nx}FEU}R7$t*0JNcw{KtjD{ zJ6N2WXux6hy$kD;-U42q*JGT#;XDU^9WUu%<#>yov1S>8)v)MiYAnu?y3OSlBTJ>H zEhch@8*V~#$@e%;GH|K@J125$mY=X@q@Lz5e4#Z-A^&pD>83o_QERA=SM*0hH?dMh zR7s@hsx&+vr%n3n)^7TZTmnyQ6La2G;qWb_mq|%^2BHcrHe@_D-$tXg@3U6cEo%RPWt}`BK z=!EqB<9E~;W^n3@HELM|C4@|6zK9zrOY|SW%@ZyLZR%|I3&*a zzEh;<#NG?XQglypTJqg7No>Cp@qId#>P|e}58NbTJKm%|#=MI;1VDpxsv*mFvIwrD zrpPZs#WIa2DZy{J@S*ey>vu|kmC`dq`aXlVJZKtq{799TZl3@GyjvOpR8LgR5@%<{ ztY#ejyhYxuSmJ{otkZSaRW7sA$GvLdc)XMY;C5RiO#Ql=pBsYT->KPcsB#@dSHhJO z$e&#XMRd2VkOX|9{I@#IE-84lB+4gX>PC81Tl{8wwQj(U(*BAPAF{~9`1C=Up8h0% zDZ_JkQ-Mx>|Abi)_JHkpVi@ewzbe$rRQqGqo7F5Ys;YRpelsIe z)Zr96nt4boD+OUnefxI?qu!j1i4RO@)USW{2wG;ERg=2LfH`~%ha@DAJB;+I5gPDj z9IP9ax5$2|aY8r~(WbRXU5^_r!5}D2Q8Yvs3-2uDmOOfteY=%WGs@FKboK&&Kw%pkblELYi~mR2p$O=)Sz(H&~KB=@NgNC z@Za0U8?X2C;l%Z5MBA2O&)6nL^Bkx~4);=Isb)W_dLl5m$ppLw6?40gk&$_6=x)VD zdK6dI?;`4dh>Duj^@f8EVX~t1Hdc}nX5p!*7#xpE7>Mp)ojp8r0^8s42nBd>YiiPu zS7xOFolKC|8A4d1S6dNCtruwc_)+2Efa4aHE`&0|Cz#vZ?C3JyPD=NA>u91VabED} zx2yi}IER>6qUFBXy4OHml?0Tzxitz()B5L+*A^a>qL|E@#KaC%)c6?9>W-O4`kA74 zjwyNlfcqwQkO3^oZVJnBQ2_EyW$-42xRYxSgu3q+J7K3QO@me74r}%f&<^AMUx~t) zUA<6Bx)(|6-NAn7Z=;~Qi@MK@(I=9JdlpKCm*5BPz>kSgsZOEqU z&iD6k;ZbJ+ZWo%pTS6pHs2*d(Q`s`lBTbf8_#d|zj(jd)P1Ryfr?qT6 zYuG(?7L<-r&1vn=&+03ySY)JzKY~=0)fWIKC)H@UE%O}93usMEgEY+Uy${Rop>}vX zSt|ZJ+U^t|Q5w&7gV>1pnBdIJ2D@ckyd5OGQJN+WaYv|+Z(=HIg*MwTLWLQ8Eq!f@+z2Zx04>1>4YL@bTVw81 zEhHptLn>_|;~7ttPSx}mxb5vnuWxugMK}AAh8MUMGR}o8Fl?QjsgED9#ExE{2jD*^ zrcp547B@dQ>^mQbvv?32+=Sr5EJ(y3_qwm=bK6-gm08{!i4_UB`&d5g2)&P$8ZwvF z@R6C|g+4e`=jLy&y1&SoYMB285##ZFlGv5Xwpyw+Uv_3#EA5ZeTnCn!jCcb)J(gh5 zl{GD0jlwl?Ax4P>Zrhxi$<|ayLjG?#3bhT_q&nYKo|uO7`@he`YWRUnZ6P18`KF`R zS+wrLXS^(_V{9G6B+{;hUB_BYk}W7!YQ9pcsk7Jk#FQNzjQ6FbgM&15E}l9+%PKDh z^NyTYuOvZS_I7#Ha^v=w0f}5N()VlWU4>!RZ50*qUS~3de&;TxFX@{UKGVW+6OZmD zdZ4c3!!%gtZSR%Odn8%ctr1*KSr5&7O3z1ub+t$r(TrmrT%ur46|mrx?Zb}Q`9*SC z&+;rabN3p9H|RdtHWQ_JvOV6C))l;O?vH5Ct<>aRS|lx{VCAd+cM0>B&ih^-zITDw zTvm6Dhri`-I2R!76FVAf)%9x*SfPd{ooH}di7{j+wT!}?wvuCUjA=2u;d?KA(!Q|1rV{Cp#lTE->#N_ ze^uwl-HNT62M;*0L(F={CUn1SgAe*YO{k3Mw4hQQuoNw)`or6>rP9Pofs+(l{*hQk_d&+=x6_G-^whzH_>sJ6I(HmBNZ zs}*&pwqU5BfFMv053V8)tc+QIRA{iF%iQR``seRHWAyI@Gz0G{Z0$|-T53J-1Zv1x zMPSrcB8cO@gP$J45`Pin)Y;{|_tBEwPa;f)J7(I-`JJ^BRQQ z>A@g#fLwpCT;;clYH|u0%&8308y)pqQ~A*JiLN^96;neQ-ELoF$dy`ZzI+o&axwc~ z2^bQoPCFtJBoERE-3ymg?`XT8|MCQwbxOp<7L7;q66 zXDZE?G|1&LZEKy|7AxbSd3dxebB4={{ho+Ig~JEjxiZjkZ!MoE2YzFn9sF^(t0#kV z_l5Z`Tmi-AHW2f3ao*k&F z`0_w~hA?Oa*CQZms)UBX{e9&jzmbj)eO~Wtx^Jt0eh?Ue83Q1D^5TH7c z+-+l}lKeYSR#u0bjD3~@3xRiNykimUtG(Edm5_vpd`#o%>o9UjcoSv)lE`eex|A9{ zlE43piPsSQ<4r@y1w6)jaVz##8BRI@q`EO;wh`BLH3k0wcKvu`us$w8c zYbL@2b65EDx#Eb2C)1kX0a9wQO9(-x265m!mk%mFwcJJU;!c6r_-|w9=ju@1KU7I- z@z$RC9QdyAGVNSSp*I+HrK6RAwsi!J{^7jQ;~HnQsda*4jT)_}^y6|b0^+9c&Ig`z zlqv^O(L7(NCe0l$@5_ZIzy2=70Gr+jA_sA6ZJhr z0VtJUWnm3htQF+tM>=mNFhOQbzqDPKEsZ(MY77P`=U+ZQy|l|5_a%E4CE-ij`Hc}g zDayKWvbaCVg=Y(((Q`deV8ZG%Atn(DWe{Fe3S-z5&nrF-i*Zqz9_RMbnKCGUdnjgw z2MrSj2cj=UFumpo@+>-I>RwqQ=gzYli|f|N5fp6+Au<*eP5k}kq~rG3*o>q3AWt|$ z_g73_RWgJKnQ(zDQXiIf_c&%@cKtwUximgkoItdcn%j*b_FHTAg+_xd-Wa!}N#U7# zgBQAG7Esxf!qqCr8y%}AC;SEH&l3ds`pBfqEbF7OL%^0YSqc-?Dz1Kf{(x~#2p3c1 z3~!_7KH*xKQ}>sC5x{SKPUbut6``4dM7NvRYVuNKHIE>^3+~v_lJ4Ht>UPD1CmuVz zWVdG)Br+WCjdzAG=S}0l(Un>`oz{w~qGh#%7r;|Q4PoHNNT;Tl0@EL&hqRJG^@}}= zi$PrTI%Z|t9Bd7^-)FICJNm=c2p#(yxt3T@_6AbpwRaty$$kI!p?5sDrMzurQ8eK? zlt=X|z7UG5WTK1BE|5JDMd4LiUG@;xO?>P^9Bnrt_`cPTqI(8XVYr$7VV*Y(g^4ST zZ=*CwTA=bGsUXbUAugG{r^|9@h`{X0(9Kmr0MM}YS@Ud?;qW7Qb<91Ai*Vq^L2ahN zj!p5w7quFa-P8uN1W)V2V!}WV-fn?^qD-AXqmQR4scxeg;`v2()vR>An%`g49e+A3 zkF!KmuN7T8uABU_?k%Y^TU7JrVm%CGH`MnQOX@Ln0ri_Pi8dyIBBW#H+w9JwG{;C4 z;K7o!bXi8)lTJAvE?7D_D#Eb&2t@7g#&DgFTtMdPga$1Ty(J&Qhe>(4o52De7RwJm zta;wMD|M^a?$~xf;Yhdw-}T+=V7sH!1}9(!G7raQt-qH|{4tH3{A|f+8qLBgoy#t< zQ&-;u9LvEkoI7By_#OO>e{PGOz-Wf>pVo%M@X zF%og+7Vge0<;pL*zk>)I3>{o4`%+`2T%G)7!X#cxAwJ$9lc*6&4c!+6ID~~rs4pBu z!!-F#8~T>m__BKYQL%Qr28$Ybq6@ zKXp92SIRWFqK9ZA#b30pYHEcjFyJ!!U2neP^=T>vTD&TzPwn<)#>9}O z>f?64Wt`BKRE1Mx)zqn64?Yi^z8xhy&v_M`@fkrNj{Eh0y84mH3?EvMKKF=myn3R$ zUUdZt)^X>}mxLvB>;pcv5gN4Lk=N`0Yh$(yl}?fYhk@f#l?z!65dw)~|1^ zSP#|tmA~QRQ}Nil!wiq8@mHagFT%pku@) z!~8tEg>h+q6t2mmdESKuq*1$d`iLvxCmRY{>vsQRcDZV$%MsaABvc*WLW|R~m<2$t zqn~v)pm0MCd2*TIIQq|C%$>;UfzRZzrtL~-@B#pH@)KL(N36JNo71L05=(h@`Wn6< zzL#!}Xz6ijvCz&iE*ASK_oaFsa%JrY@7k^vq0MB$w^QF!Fzk;sf*&!%GW5&8gZl@( z3DYkhmQ}iJIrr4g&58zmfLRPBo79Q}mw&@%fx|Mb!@)47@6R`TVBkT$FlJ_-Wo3?G zia(IO-Vj&T#z05TF717TRLD(DydHZI)H8`oflQOfvotR!%mTblw1<-fP}FokreFfR zA2iMt&*P??roYq6Ge^q0P2xv;J^sq#y+b`e|7&EULo>FeRdISwh$1~Kv414}Z)Hd+ zxxwlwD=W5tFvQ1%>4J{=Neb8+MK;P#NegODaLFOf}_2qH-=0?(jtpc0Ve{$tUdW342b_@RJT6-d+UeoXx zbjK|#mzh^2@q6ROSUa~6WYy9}T&D5;rdY-E(JJP!ukSEWA0_w6^xk&= z!HX~i!LP5`MjISE$|laXH+|A<1ow@n!j~tM!Ygp*^jO}5DL2|M6{-ly6Z#~Vd5GU- zsjwx@ECV_ahP&Bk=4@J!dtlAUV9bk(ima@{*}vX}FcgU(RI|FRfCXs;mjw&x&>3sc zJfFnS_aHgwxOGDNA9 zC`K&a$}J{5JQ{x-=icNHfs$*3?>V{QMs2X9?Ajy(WHVu0AowW1pJ}RhIWr18VfX*B z7i=r)gv-qB7EcL7xqXclyP=k2HR~nBMLbt135puu^(46p5z^AX3<(T;q+xzST~Xzd zmGhZxxtYdg+c$@TlE`lW^r+?bTu)#;a|a$GsnQs@1HGGxE+!OV|_&2qTuA^ zsnApq<3b+ss{P?L!_ll-3EA62?Ts@t^OYjfg!6iHO+v2cklNE#p25b#V)~{>0es7w zLHqt4rEiuMj*Ba#2agei+tF6o zRH^=NnBWtD)MNKotkX1$I4hv0Cd|kp_1`gW%L^@ z7Qxu5ZC7<74^+5Y*qL(RLi7?@!F z*IhMa%jGszrk1(RJjp{LmKT)-cFe})`@PkR<&~yh0W8&R-RfWY7G<>>39NjD zkctj6h1&dki4EzNOOW8x_x`(2!gb8OkVI=5V~xmjB2n*s2rGIwG<;wDx^q%L&Z?U! z>j~V;=DxRWSd1URO8lDmfvRtI>rSSFP8s zK{wHNiuGIXPu@?SEtt<3u-XAJ4+amcwn37-oyv=qzxfDjrM_VOa?|;V(z_k3XiVFa z=wFk`Fi9}?bhQ!#WwSuVGoP)zzFqUhboM&wZRqS4?6G%5oDf>I@l=zCA4EGT1V~qP zA3L+XkZr@nlDpEm6yntMQstlqbW4RWRyL!GP+A%rORg(LyA0|>M{0T0se?KwqMyxG ze3`Gn2Mt_eAf^|jfz-m%tg7!)mFQBUAdiq!MYw4iotbsweECCifwwcKh+Mx4H7i`- zTTuj>oX=Cze8p!)@l5(B9xu8^cXdy1lA`5yiE0h6O7|=vmMBVa3MAnscHXkth|u2zV>Ie5pFG~#fiDw0lFr40#%Pr&G zUsppzmS2M+$N!2K)FiKnz)ljeN=D|rmFE=8`oWg7->M@hxNka~3mtkD1>Yto;2l|) zIHr^N=vEDUdzUVZXtL_?A2A%nmtP=vU8fbwo_}E>3;u;jxN!)7A1&XY*lDF1wSV6xMSC;x?;H*Rc;U`hc-*GlQlxQOi?O z6iNM);wV*8o=~>r8CWHYXBmD8(^z~*NX*7g>Xf2~dVLz?2>g;v7-Vs6hhen|jQ8vp zKVCP@(OupRp109z003Y3RId64O*JQVeuDB%%#bE^9n8m?enzy+`U5(-+o7_b;u4Ut z>zO`Y$-J}?Z?``2^GUWSl4Uo(xvOt+p)yi)V0fE#J<7e9n&-wc{;H(%8BFGW;5(`m zk{dsfpTXnE&hH;($43=i|M7U-u?wD1v+U~G``1n;{V(QZH!+!u*Kn-p4-GRG$4?po zU52KHFMpT8E!T5GyW5JBEw<>BZ4!$nyu7H@82{4R1S(apC*#^P#|AvGl>@U|`R^y> ze@#VeaTb%*!InIraZFV03_^;bIS&n5qk9L*V$46e@AA(T4adl^vB)ltC}bR#;bL4< zXg<79#D?4xuyEVmcKyd4Ij&%Ne(wWN#2p!93bV6!Y}j&&6L+FwHrL*Y(h+K-8?5yw z2optHEom*cz+GkEFt~g?$>>L+dB+Q9?^|hl1x{?H40T>&js?*j&G;QX4;vabj`oge zWMdoa6|0DBd^)8wX#H=q96>+6@8tRwG}w^Xu7je7X5VIP#rP#^7Yo&O0$GYz$Z=N*KOw@Lk$ce-i! zmt3|YRlY3f@48Md)6VMEuLxeqdSQx6D?LNw2U$aY69a73KCR<5oVqQuah^qMIRMWF zyY+$ve#|v6ANmYz1DO3hM5nou&59iWQo4*14o`F*v~lkRQUTH(Sa7Ba5qS>^(v06cQR-g5`$nA zP%j=|UGHp`J-#YFHFnw@6Dxwbm0t2#j$Hk{%GrGDF1J;Syd;HdPs_$kElHvqc&MHi zDo;sfm33r9uh8Kuv0FxOgL7vP~-^)9w;| zR-^?)j)pihbwM`*c0bWO^(E{PZ)8xgIQqXc?X#QKw4Q`+n`l+wmAxvHH@*xFS{?>6 z%)@MwkLNA__&56;0>4BppkN_#Vk+Z*=i`Wts4it7jOscTI*0`6Ro_1yeG}vunX~AUH~YA8}yID4#~kTADHcM8-l) z!GX>iin%M(Xdfho5xDpFlfZJmdm!JOa#g9rQf$~42a@5f&d@-68HOulW8l4(_& zdtuf$m_%TY>M~3d+?J;Col}kon2Q~Q;}ZWnBWPCJm`A(5sH!Hgq;uMFrokj72O=(T zzdI;Mg~J3~u^7C%Q`Jv2aV$)$d={Z8U#eH;$`j z(phh~((N{Q2nAM=iiH$ZxVnTlEC~s|XK-$9xgFXclMn(6 zQ;CnxLSe|94^+HKSm5jHp1s1rl>48+I?Om7ifDegvh%a~01Eoq>x8BZS~i8R2n-`V z2I(Wd{*!rfh>}d<~H|J;{ErX z40<0wPOg1krIH!-0tzE~{keB+s?wKVk7giu98l4vs7$f#>Y@ZDN1`Uwa+ADRb*J*v z4+3@1&3PY^l=jrGXs;d|LB>L zoRbPINLcnPauQ;;@T)|a^_i-98jMnD^%OK7_73<S8zVd$CrRgk7A+0ACVyg8Qrj;Ir z^e!EaCi9b;jqgEv#z({wV3_pNzt0%Qln{cg^ea4^_XCyZ5g*79^et@&9&qdCLtnHu zQzR(9cDy;yU&@s4yR%)!d~BySJ%eVp+Opi%ZP@M$9a%CZHWWN46Nw*-3(;Y&fB#r$^dLTZ6-hCs~2UySNg4u2=cnPqG;_OcK^Rk8yHx z5+3s)?%{!aem*u}f3u;>jHb^v=IlZrSYK}|F*vv0A;64@O9 ztFySf6O7M1^UurUcy@xtprB?$M#;|Q!-8dZ5F6JPG-OHc9~zP(#(LXup}CF|^9*}K z6%tZq>In@k*qbeluXe$4p|5tK5)fpM5hu0Fpt*8gMc2}95wWnm=!}KwLCU`#ZH{fP+%NDYP_gAru#Ryl0ZP?@H!^Hs za9d@cyS9n~RZHc~y7VircEV=$Z|?HCk>1B_KsyW%zL0Tn;5AJ(Pjh1zyAX>~c+#@u?1F`J zC>0afyZ%;D&|1>v=tPSnkeYJfA0N-r((+99wCJFGvJXCN0o!*r|Ad-4hc~%(#n?oc zw*NASqjJ0{n?MzceTA`!Qt!&-3Fk8X(@?%e)nCp=p_yJDuj&S|0knxoXh@noH; zP^gVRICv2a4IKGucXt=4xFgko2R}XCQm=xt@Pi$5zU-p_0Jq@)VBfD18&7fyU?J?C zf&Y7R4mwRhJ8RYJzKlA9ixC}W-@3hsZIO(J2R3H`pSg?X$BBpG#Qh0R+6D&WR_fS7 ztP>4AGO;J%#h_YLDj}*U-3Z#soQBnG%rEfp+?Gg8ESjT!mokQWoWx?HC%@TSeX1U%Lc!lXh$RWSBgR?OS&MDI2>> zc=uG$fdp(g{2KAC2JI~?CfTjb#oSNTF(!?SBnvu+7Tvx>7D!u`Ips_eg`~4P9jpJ4 znCLoTnB3TX>4Btq_vBQKny@?s7rVFK_MVSE+^bx$Y$IczKV+CRkA;wvMaex6HYa&R zgOM0v7wk0ZSAJfUEy4umt-?__xKInljQrafbJ)V86dcMWFv-fA6CODh5EKNN<jm8xTnaR-JG@3!hwSO(yW=lfM8# z0bbp;k=(Zjg9|@5k!~C`UH%8{x}}s}V3j3-48vU$8T{?0Qf>&tb=uB&gq1`XxqrevpMV>tRE#)yxN~zC&pMvNrB+s-IB|G7*bZxFeSl|L z056fX3UBfUTcZ=1`qX!$$xPV(I**-f_k1sN21RI;pyAHtKK3Hnw($AV{`e$%t3z-( z{KV@|trG4+tryQAIlu%o+Px;IJ>_w_`0wyqs+O0C#&s_Hc z=sye7Wuxia?~bC5wQW2-8jCM@$gr&r`vBbZNr&H_dh9HfJVNmQjVEV9zDV91hwrjw z+47sx)iz51yOO+F!|y|F8&LxTEp?qt(+4;?pVm^dLHJ|_y_lpV>;essSi}VFNj@`p zI$yn*emG>y?FwC{Cda@Pp$IIcni^y6U_8c)eGvteEG7NZ%x`kth3u46coHu|7P(|? z1%l*CwZW4=qD;49Cb)i8tRQToDj-fv^WdOZHMf+A0rMCO_ee`z^KfZq>P$ap--RB8 z+8Lv`XomDs$kBl3xRFQRVHj~fL0n2N~_(|__ha4wYq`DLz=XC0|m0#^+RLc z!l4$Pfo)6eXe3GC1tPk&7Ay%K*H-)|u>ng;5|33h8K#af4obo(x9%6JI(eBJT*nTz- z>8{<7u-8qbr0sg@Oh$?OMF<^JeuR>`MLQCLhKs4sx*kMNX-GIu>O<-P{x^+^ zMiUE_s6*?UCd&q-puj*T%ngqcIsZ1z%VfPK%itK|8##*(53?hea&E3Q{KN_6;tcVt zxg(fBaWgmpVh_2RV$A^XUFhYzq?v0CrtJXSyg~*w@^;KuK&xIkaP+e`(R?Za zXx+RD(Ld_pWt)Yt>q=k~Doloh2^%Y5Q=EsuzTQIL8Ull{>$p4}RQ$Mhx}PznLY>H7s4Q;bm}>5IVUbTm(`3$4IK?V@0$Zn zW~4GEomUIZ7s8KKP~2d|@mgxWMkZw?4KZL%H+ijQcVCTWdMgwN^5vDD=eqC=Wsvhv zJi#a~<5=&=CigiBhL( z`*i4)5+_DfR4kMm4F{%gv`(z%G*cePOZ?l_WJD~{tYJ(3uSqiWcheq=f_58tVomSEV*&2=;^SDNOFVYF?V+q?JLjHqVS4wDb!jP-Y1jIFn|sS@QXT z111y zxtcEWHXV1<24Swm^9K5KET-Ec{s zCGIrvH8-hhtxU8wE0#_xnBTL8m*2mn|$2YVV)Kn7UV#u|0 zDNY~uMoQZO@aQHzMjG6Lm5InYQVD1KJj5ilN2@0RZ=RvEZW$_JkDMF(Bj0F;6p0o$)l~W&BQq~PYOKrcY(M;!uYoL@3M(A3fJ{nj4H)Wb>9@3B#59BXD zi6FNFX!2+jN*V>7Jvo(Ccx7d%sI*5+YF~7j8X&zeE?6^#ao>Hy>)>~3pfn>~+wqz| zr)@IUjtbDuJEtz<_ZbDz;bAmwzQ2s`88@Pz-Mq}unVrGuDGeEd65n9UG^N~zE^h|P z-I{DuK$_@1Iyuz~O&WcsBW+0tiJ)9^a%hn+*REs!CWYS=eQ*-Fc+Z2VzWfrEZ-0P& zuH8)MJBaGAYpy|lStBIh{tR0DGgXEsv_J%R`Ep?m`CW#F6e782qq?VYC277GBa&%N z%956Xi-bJw$hezm&;9Sp9sMPR@|ev51H>n{Rg6L8z+4nOF&T!3AA|GnU%>5|dx61s zi2GWoORwm1&-2A-zR-Q`2wszs;|5W-%I0AQ-+hNOv;Rek@f1Agxu3x8%q}3H2~OsA zgzJlU!EWp`C<*HbeR(n5vJb-X>yHEgRKhe)mKxdBWxSW;T~>#3V=u?=oR|!^hi?PM zJT3MV81B6v>jNJUGNq5thTEtCaJ=g#R2pm%6FwQ89lw=_O|g7*@nY$O7#o3AW9eL30gxrmXWU5z4h*2e`d39*&J{rG?$UA92%ufq#(kYz)%PJeFRM=)!x^ zenJ!24(J0s{ICqenCjquD#%(QMzwYAKuw)b9jk4&rm-;37SO>XZQ9Ontw$CkDxr&c zgNyOBqP$s?CZ7Ld-0>Sza1Yu&7bs~m9_S|)hPf-h9%-uendp}=$Cvyl^SD%Iro(Pn zbwKW5C&(#NkX`7HyfIJ828BFChLXctct1bvjB!TS7kbFDTq;toCi8t(T2Y~HyZS=% z+5l9o0)^ohcc!u?obmYR(b)Fp7IeQ^oVzJ2H9q}Rgb@2ve9>y%0@%gH$P!ilogbru zFs{!rs=1o-+_k}jVLD|)w9ujUV5IrfQ_^q_9*nqKKSaR8;gT+H9;MXv?~g*)5S-Zy zwBY7gHteGiQqXvs9V@rWW!mFvPTg6;hsuV&gsEi^jR7Nb%E$NLqx|QUI5PQbNf(8H z^1?k%K0erX$Q|83d04I>Qz7xRJbEL<6Ovs_ZBuG9IakRu%wm`#1$ye-NXQL(bnOQW zz|QBkqU#W2jW8WD?we}f9H&d0z-4C)yg#2LSE9LE%}Pw;5e8g8;TqAEa5AdV#DTDK zgfuZ-)W1J=P27skL%1WnLLP(4Ry7e3f+pvkd*Sohi?XdebtWq<>zO9qOE0}7TbW$J zD>t{JIJm{ZAr&)thzxsGF&Dx1>GS3xWpfeqA3P_|s%8y5&mE!Zc6Z0N``4lS>_{m% z%yBVH8#D;Tcin}lQ>P*+=^g|G{CEYayY!#tL04&Mec|u_Cwlbgf&SE*JY$7jjcIKM z4#dv4V&EKh5N+v=+;x|!wm0_nIS4A*2xo_UDFkdu!*Kn#-!SRrmywqjDGm!G-v6a5 zHFW^|{8oq^|1(&AOXa}R_}IW|)F>QiJRU7xYby;5Yv*ZnD=SeR(E&$qn}>Gqc9O?) z@?t`H-aITjejMAk??P&7e>86V`+o@zl$10Phpu^e?8UTc(_q8>5e(B9nXOxgqN#I{ z_{lPaHYC=mPad4=@@%0G3uW*X%bRX`@zp|HFVri@gKT0 zS#Q^_9Ufr#&JNksz)Yvyemk}g`x{=pV$p&d3u!=@11l>-dXLel2ycxhn?I80{xI$H zzypF`Ce4^3a4s$mf~V)6%Z^4;(!B@>SPDTCts@;{(!}t^oF;nLbR;#Jt{;W+rfm_h zX|{BhNYk)kqKsA2)h!ZP&xnyW)yDl_`Oum-!!!K|Ivnui*>6Ma_y|#Aw#hJ%{{oL zzwtg7s|euw^*H$AE;Jut3kO4bh2*09XlS~h;Ac{UuFnLW;${NXYT(1 z4iDaeM!ObEIUxXaVwoa!aS>H|R5@2-uS_+XxJQ94qq&#CNYltE*TqVmh#{G+h-2ghrE#nWk`j{(PCNr-wOlBFZ}T#1YR&5ZQjO zTm@$?uc`{gPrrr}%|@ZkiFc)CX8MXbaVpKID4`sf`Vg(4|6^CR(3KW;$PgJxaIt94 z9PE5{4Z2kP3Eg$wW%oIjiL6+G?e7%hnn|wm+3&uSJMpPFxTa*>jKuWr)zr4UHdDi* z2xc`+Wy(AhoHeIZg8lj-b;{4E$Sp_UO)j!LkIa;vjWf5s2HVLm!GG@Ka_2Ugg5Efz zIZsca9LRr{^Zb_D(0j3Gv{GFvdU5fLYNjZ-{>LaiJssPx`4HDM{#$NxF?K#Ryf+KG z4&R8bZ8pecJloz3A1+f_biV$hP8Y{bC)?C9ml~fD2puohJ&zcH!?X7zH1lsb-`-U! z9BR+Kd$Iq~b!hqVt+1aoM&idsXF6+)MvQ4+rmwW-z89OD`n+$ECZ_f&@56`V@J9zE zO?|sanppiHXj+RFAKwNC(!?wT`JHRa)Q$B>(^X+W&S6@bN1iXt`ZmtmoH^L>SPZ(h z-3Xn%jWjL>1CF>nfPi<0!aa4j6dr0thOSKA=yamMgr2t8nf@QUSS>{-!=y0jVKVng zp`SPriFs|Hn>ihU^B$4L!QLLldA5if`ZXdSvzM(C$WU5Knr6+!tMueeO6Na>3CGSw zQd3zrD`wd5jP$i@2g7Squ(Q_>==OrM#EJE}Wo6hI`VKnJkAi;5w*Y%V@p|YXxmapE zg^&x)m$LnjM7L)LL=N;@@RE*{c3*bEDMu44~d6=7_Gb*2d1;Ncy zrHs)MaZ!wgDK0L;GiCKpLv_urFWN1Aht2>OsZD2Au%L#{D6b(ykbmtEBo6%mtrzu^ zGQ%pXyaMd#`2((*<}Y;!U4CLhC2c(X=t{1mk|wG_R+Ea0(S))6PBof7>o4_QO`7;O zMl20PQ@t4wrd?P%M|nPHj>{J{!(*mz8B&>mBEjTlT3Wpx87G1CY@l_NL2!6+ zu@ep@JE60d=Ap+ySJGIpO?l#GDpMs>Lvn5%zD+XuPfbktH`+J{Fs#Dj`k}z2q!Kp8 zInXuo5o3zm0k{RS?7UJ&A8Cz{uQxl#fJTLvarfcH_8wg^LTmZM3_R&1nGQRmaBMeF>4J(+)}e`Q*4hfFVuH zqEtIM&=O6yWy0Fjh9-XNLg_1$&XEn(&$%>xUnc`X(C8_%IDiwzL6I(&h?0l7%aZA6 zIz>!58V?2&_c;I(U|w&|aE%jnzI`XmRWl%=64B08w&Xc#dj?p6QrFVE`e1;X-ykOJ zRzS~!%t>M8-)Qt$C_wLze9W{Z*UYsFA+2>jTNyB_;`_vw5e0YVGsUBwSXc8mIZwp= zzvx+Nv``l?!@&8cU8JK@lb2X%MV_FrbB%yyuJkR)2c%s)>R8+5PY2__mg_g4TV^zQ zoo`;5`eR0qJf*VlN7ijoJ$F;znz)a00WvHGn(&*N?gnbN*VCzOs7*AFcz zd&-!mJIEj8sq=N%V35miY4mH$uhe7IZIn049~}|uKJp#EPg!Q>fOB#_gL5eu)Rrb1 zeiolG3OiqC1>Ps!mQGltJ|RC*rnD0wHTj}mVW3KW(h?iw39AhVt4FB>39h9S5s6?$ z91RKAvTE)rp)z9`A_qh3%E{oxH4B2y?^*(%Yd|D|1qYULl61hdJtbEnXL&Kk;5ry5 zk&4aIx$V41+<2eLjm*h+SX02~=^2ndPBw*v%)s;}y)H`&!DMC{UMdY!ba$~qUWNA= zeUKLN1?i!Z)7CAtgNfJ^jFsFpmb_Tut3|^U1eWX4Sdb@)GX<_b1pG?FMS3+wXns1cLwv7UG{Ncpeu564VB!tq+tO}x)NxpZE6 z>`~2&3Y%w9kx#gcQq#d8FR{{>Jj5;sHQVX%d&HYg9dWIXjo7uNiB7qtW5;RysIO_@ zES0R&Q1YUlsd?Hg`G}1->0odxnmHd>Wk5vd*E1K+rIRtqjAU$jKiW}`H7AP%vF_a5 zh)`+LBjUu-2v7-dQW?cCLSYJnN|c20KEKcV^eSojN#ND!Rnl9b&>Ht^ox`}Khv`as zM5K=lPI|Rg^~93&((*G;O%I7ePi$$7nT_Cm8f)T8rqi&$8jWdf6)#hf<}FM3p4I@6 zSkUvMcTK#==yX`M?FIf7@d+|sATy! z8cg!X`8qSOz)Q=Plb=l0k`{oWj8Z4nwc3fFww5Ms<0XxmrIswzzZdE_LRy&}V$?!< zNUs)=Ua|q97swEh$7`PN(v-i}$&x=x20q_Wj8t}HcJ6C3zX+ICv8$ze&Uar6A+J{E zrbohP%Tnm5jhQ%cBDG1TG2vvHr|Gm*7d>ZULm@F=6gR(rxjG3nB<3}FspfA{DbO2a z1jeERDgjooX}qMR9rzx3h`7<%(&4bSNnS(JTOZ#hU(o1M{w#UFystIlWK}3HEggCx zWk|1{hTOE_w>}1Y8NQ*Vm1rEb)QtJhYUw)OCvKFd^QG*VS<%wQ{6=kfiTudyKz*ju zFNG%3az4j^Q4$U8g$x|4nYjgp&Zx#)n*RS^duIY3Re8PfcM>87*#wjdxUndRiikik zBB)431l%nZ*Saf0ixrDnTP;=u6%efpZgu^;FI5V)Dk4j?sDOYd7F4jP)FJ|5&HSI= z{pJpnklDyg7;eseo;+wWb7$`Ro$oB~Io~;H8xWKn++Nh91b0mvh z-lvb&tPOd_z%wvt&9~pyPn(+P->n9y1BdGA^#wpaZk%*L{@T|Ni@0w&e(IKDv|kJE+Xz=1n>F)vo7doUQ>iQU{rYRo%D+OLFOu??e&Og8 z|6((@Yv(Cl@J?i$cLXLFPJ)5x>3#Gu-7aV&%$M!l*=u~kw()xM;pNYsttC2EwR<0^ zX8UYPF9(7Eq4T2MI(-rl(hcp`zP*-R_9rhyY`(`vcbE^CWw+fl@2#e4_1q<@^T4f+ z93-~pg`D+>^ruER%PET;foc{$lMT&6M00j;bV4X@w_eW+>xIk;9pLy%gGwlP7oay zB7RSnLJ{YdvoRPCoa3cSwc*KEwO~oU>&eIA%gAh!?_OT4wZFYx``7!I1lE2sl06=g zJ#;UTO)ll!&`AUW(L53Da3~SRSaKHT{`)n3O$YY~I3Ty*?mbVq{b=s-Yh)> zLg0YSh~_iMG;uzG4}&DT>MDJ7+bkVi9HCvv{<1^YuGPwJ7i#T@yR`4*>mAw3;iU@M z8bHSI?QDnKk|`5lAc-C2A5nt*l0H=&_IvzsO}~DUid{og*OG#4=i{ntguY;$nqF6`S!dqi92&nJD}?iuDf(deSL*c4 zG0HpR6n8F!FfB%~aJI1Hx#krnlciMtUQQnHFo-%h_rO8h(@s-que0>;9%s2q9k@Iq zTQteIahg8q5EYN8<$7nauSpKXBov{#Fuw6}nyGxhTzyTs^B#ENRO-C=qH}hOi}lUT zZz$BYh0Be=Nn=e{t5b6+?|?)3iqh3eA9Jy#)# zAWCAu4)6GZ2ef(eRL#5LNwsgkQMGE-^5o4E^lPrsC#(9X&5+ireadmpcp$HwUO(+L zZQ8U+n>TOPtXYLBDheKMGiMg6TengVkJ@N_A`ea@;~5Vfsvip4Y4w$ts(JHG9&Vnj zp&WksOU*pw5q0Y})1B5Qfx-``)r*TgS=+FomOlM7UxyqLEZjD4uBG|&3)G=QskaAr z!66vT>p`}&>fO6kc+tRy6d#&>XBN0@KHLjY@stAlnfCf;z>Ef&5PRg@Os)~ z*+iuBKj_lvISmL~>QFDg+!>GuAJmp9@95*}p4?hQfLzf`aOzae z9rB9W7D>B&^1f35)F6%@?_aH5(@)o?UIX+=r*qY@<0e;uK<-PM~OfF1~9u}e9_>mN2F?*@f+)KOYF@&&DF)kgcZ3%h~@ zn!OekY2y{cv|y2RSi22dsVfvM&K@mfw8=|_~Kh%tH;n4ps*6jr!V zW0f5L2NiWHb@G555OIwfrRksVsp6tE4G7<&9LVs1@Me%?Se7$0+K4jQm)VK_ zj)+jlA1${fagJw4!%UKTW5(#iXB(*ffA3N40mnLd>(@`4Ra+mfJXu{%TjB7fh8(Sm z`$wa}{CrPbaj+{MoZE@uiThRA<0z_VaumZ#BRvRj48dRjs_9oORdJ_(x_lZGbdMfd zwXvC2Y;32t9lvsvG<-MsA*bX-B86_8Q`%Whrl+%>{!Do9*-)r31yF!QAd45P?D41d z{z;QmbamKOD}hnlwp#L2XVuvwq^6;H&XK`#Q?$VFCb}KVRj=h*fe=vBWPDgh6g;f_t{t5da?(lKu%)i%|F4%0@B5$hA`pN;IH{$MhGHa}5KfYC zSg+DjP5)!5x((i>yxAolct5S*U5i(ARLAb0I}QxX%qr26J5n7^1)((e-s5F}YMgf8k^j%SrR=+Y^OXf9EhoirA#Rp7VTXv-OYPdv=dNy~hxv@lq ze|X?^>Ug>#$mOUo4HTqAqj@|SSOO>)qStoq^worqRJL0~?bm3o(;|{e7N4lYTfVJ= zZihNUL#V;2SKgDK@4XD)Cx}iS&rceNZ5BPN#V=r4NM1ya@z1^SQ|;5ct{Sdz4GO~w zX~v=fD(*PNonS_=SOA>rNQDLt9wHd;0C6h&AX~2~7Z9*9FnpY1CWJlwaQ*kG+4^>Q zBOTN+aw=2O$6xkTt3BtcUXRx48xY@`vVY?pjPYjx zSnbgJ`X}z$)bUQqQ>o#%>tM4IktOn4{FWU%ON)u^S%6qsiuZnOG4>RSAQf4H>n4vE z?R307Uo6MpgI|Z4Z;D{c*{pe1LPv!DRf_-QTaznF0zC( z9k1gz`x#a>SF0r1FZf-F4mjid62yZGuZ4K>b6{y7Bm{UL6ofBcJvh!X4iCmS(d&2( zKe^sDHxv4Tx&as{B8GSr0M0e72QWBb5-+kKkqNyWv}9&wI3r7Vaf#-b5NL3*!Q;si z4i?2V$ZYhmSSA)WNAH2Gam8yt!rml;MaD1+@np$wKuGCsWvwuB^zpa*YavTeoADZx zvOkd{3c7>94ch5*hPGA`66%=Oz*9S7xEySVS;^o5U-Go1|FF zKlT9=!Qb#M@p^)o$c%?E6aWelJSvkVHUXXyv_0~Ox8&1aI6TNA-V+{qkRy+Z_z~G7 zFYH0Q>WZ?&KBdPR9yGYo7|`Fx$SUt83Pia?s|Yi(5pw(GR%8f8w_)-1Ma^Zc}MP%|ElQd zbYv5KbLR;Q&K6GQ!IS#PdT|N$g@U z@S^bq5qvQABNB@Ka;b$xCa}rmJ^a}y$S1N2hA2-kL|*wFECIDIIDD12Cmn$oJ&YALt1%1XrI%M2Qm_vJS{SN*wt{o^wq{m!q(-pm6XQlpwZv zNO!?2z8;H9;t}N^uZI#sLg_e4?DW&)M_71!{E&>R*nhvO-!lmB=jBB~h}Q4GIMl#1r`2v*A!` zC?FDb@h);5C^f&tnGK4(Ci2MGpd4+$&;*gMPZw))mb83NcBTW&C_!aSptv|Uz_E}- z7iFuJpUj~t*3g}g(%UUw1Vd3da)OZCn!H>l^e zk>%%f*FXR1TsY==L?&!uK&X(Z>E1D$jkA^I!gqv_9Y{u(o@sUKdY*7}Ko5slXU)>= z@FhC%%Acuj6S?r2^Id*cn-dr((0C1NPn5s|Z9D zc;&2=4o;q|uh(_d#y-cZRo6&(f}B(Bfue}C)&X`LuFA&6rt;l_^cqqE7=>uZ1H2tD zgP!0(aM!M04g_b@bASjfUU)&J{|jl({#UAKP~=oRYr`5K%d{Mc=xDY^qDhk3#xfLs z=9#e9AdA@@9A7`{EU$MJSGi$5+5RRue1AMD6jt=?2JJBTVWY9ILx$+PzX$|(HHH1qYk4Ea zuk=#>%&AVN_&WL*zi@3<=vJ|V2l0i%XPz1MylA@OKK{7tP4(7WUIufUiB;8scn*F> zIUyh!LR$lr6ipy$Ci&)@nmh7uYTZVv6DoBsbfgbX>4-5}G;cp0cI?*Q7VK6yylu{Pa^ak6k|6Pb zL>E1;SfN=xUQ*`=Iw=2&i(T&|Jn7iAh&a;RD&Aqd9Ngv^|4P_mazerCU@a^-FTyB-8DyDdP;dK zzH!_Da{-Eq6n^+I%^aVnBabR^B^pi z9ZlTuiu?E1l3Pnuuc%N>8kMPhdb$FQ}oIUp7pD?uq7+yF*JF8G5g zj10ldQHjg$*Me3-u}Ax|5jkLR`GH65-CL!nU#icKI?K_v;16&pzO`#L@2Gp#YS5ml zGxFE2_Y+N?Mvr#?4Rsg_d9)1rvL@4o6nPNbMXS;%;Y1$sl&BCvCReW1)N>{}142YX zLs0Z@g9ci8&Pc7^rKMWVALlwy<8+dgVqz&_c%*;Ij?~f4fY6qhu!t{C2*tk~`IV!e zYq|k}FNSCIE~JA0p~ER5J#!L<57(@*^VH=SDes$Qjt^!`XqPSuKmL?vj@hgukDTc^ zFd`Q2L5EYQL%cULARY$W7!YI<4aD3OB9RkM)RI5VRJ|j2Qw zrmM%0)lP{q_k%iMHXXH-L^EbUJPfumAk3^_);y622Bc3PmG(bhpCA28XF$LoYd~xA z(o)Sk>Mv?_Rs+=;b*|A;dn81Ui4 zoguDYUn?&hrPbjUYPs-kXIO|>_!~MJ0}?r~wl-2e<0yfpeiJCk1UA1m2)!DepMJUiJC!C-jpY=Tg_Fgx7PFlf*l; zKqS633ab(dYw%!qS`FnCndkBS1Mlgl#=AKRi;V;yg@SwUJxx7-iF*90z+sO<#Kk7k zW8*QrEYgnLD69$;){{?44?W~M_F_P~cUReUH>#xh07qdldj>qAU;p<%%_@Fgo&V58 z`NOVuV+P<)&>I|e=RQVZc^GU%VL@FJHG?xo_p-}8Lov1Q?aqJ@p&+N^qMJ3-zx&>) zdWSdD9#B~53mhekd_>-nZ_*4qmckl6I_!lRj9-M$gn%YNY)SMekFZS=9WD}&Z0Jxo zX#Ri$^xX-=^yB@1SDU+zcMA*`b-@MtV%QYbJ+8f)_T1eizSxX#oy_xqbFN?COQKT* zx1)H>>=Gua-+h}TI*|m)LktKCY{m?2dGa}x3|XurhirB@qWs2;(V9ml>5I=>s>35a zT~tC;O`!t$52C?HyHPXLu1FAj94&i>o~?iL=ydnAHur%W~aeuD~WQ9 z95=NxUZ?!FDdVMV5nh-=ddlip*iS#zJD0Ce&q+n@7&^0sDdTN4PCX~??Gm~uLMSi# zJ;2*X=qvOfl&F>QRw&~|nPH$QJ^&oT_?9hI^7Geq=yfer*ss{(JY$CbRp-}gd(&a6 z+jU>(DHGlCe&)wB0$8s2g;L&{%**@ce48>}3^6}AKF};@pY3_Twf1kOeeN0Pifdkc zQD1K<(#A8+Q>#l`I-No8gVIw<2yvY1)bYGxoard-o4OAXxL0md#tQ|79)Q~-|2cfP z*53M%7QVB)j`+uEjt0ERIO|%#3gS6wzc*AJBNW2x( zW84lBmX~EV1T6;29VEn~h{5cuMbg@`n1h6KrNRak4iXY>K+8m$Guc7H@;GCYfu`I+ zLNN0?BT8DgO8RL2))@;czmb-HQ{f;X)pF1=kq)7DkgzX1S;r&CeCnvUlpV zS}N`yIY?L<*7TVn^>B3`TQAlprXPqP~9lN$#KeFG9B54mzoK9}4PYh_Y>tC3186BtAyLmV+2VXC*Rl}UPQ zgaJYKQ)3YCqM8bhox;LYTbW?9cjW2l^iatDtC3R<3Z~M^1f~_kkgSynBnYY09es9e zn`Vl+)Tk@_OPk&&q|!{$KctTHYt0nX!#DQT=`>R$mmY7h85Ps;{nkve^0n}rDRQnY z-h@$JL$iux%@jFfLuF~ahKt)T4LkokeK}0lOc53lrXyav81xD{8pEHc&t7#Q=FI~k zsg{eaf~yOJbU(*$=MJ4kHxfK98Y3oa=Z*n_&a`&!sUhySbN6QwkUM1K;L-W*+^L2n zhXno{Hm6IBwR2AmU;kAV+qsjXLs3CVWpD@}QCAE*v+N->IAkg?I!|fR;m9=lS6WrJzC`HtPas$JPU3LAr z3b6yFYVs-Q?O9fTC>InkG78QWM*{m39ci=(l|=<_^q}1Kd}s}P4@QHQ;$Vnzz!+CH z-=n4sl**@1m1v9NkUZvl@27d zNxo8JO)KkUv&gATf5L?c+!{EGJS7zC&sVtkwDOtlx)MK!r2b+!bIHDYg30qXA$O5f3gl@&_Feh+jfdy4`K3R=*c>_^@kSObE9 zGGq;KXcK}mL8wto2tEgK_#170DpsFyK!;LYA7B&^LQN$VLJyc2Al>Bk&0|`iXYz~JzO0DZD~{{N8KV^ouV-&zG;qxPQhL@gkOl<6P%ND4tXS?D zD?=CpYTId99holcHG#v>0BE8pgOku~A{x>qv*0yQZc~0_&U7#|kaGr+2?CYA7sF30 zAQX;&avA}q^$AXZzkZdy8Rf)#@ow#qTgpqb%?nXNv?<}d0tPuzlz{_A2Yy5XdW3kauaLqeO3RPpoI7Y~*b z(!4j3B8!C<=YWlr>iX8uWr_RP{s@Zw_Dc;JJXjPH`-2e}81F<*LhN0kTfX?h^*b|4 zD>b}hUqxhr0io4NDlCcb91!6XouJ#IlN1wte4q>nAuynI?wlUrc&M~$z^lSqr*lDv zVXeKn33jE00G&i>$B=FW#|$H)M_Oy7d-#%=5n z3_+@f$G<-fUE$xop;mUKi~!NP-wioc=Zc$SL>P)lj^nuFQv0|-84wf_7B`_cOFLyG z8ZLw(_51AOae(xoVGdNQ`ro@TwZwk7s?X#zHg2Q7-C3xtum&vm5b=MZuCV-WCr4?u5yB{>1{*(!F+VFNw%p zA0ijKQbPdxiE$M1`ZIZVLHjVOfG~wHg9c>{8+ugoQ%^~!o+>r^afzF{=W`?d`nh$Z z^*&U9e?cEahG<~$aWdld=}PShYSyb#(nol`3&JDJL`z35= z0hxnLD9KOc3XB0EAw+dppWXPFA z!B7JRY%wdImGMbJ+P@AP=E2CzNdlWvN`0eZ>@nDJIc@~|oO4`O79tkqG-iy#{rY=0 zgTjVZ|9D0XpZ>E0o`eYD=kw3I`IORz7lhs5*mA`8rEsweVucRUVG#bt#5OP=bW+D-Cnp(wPwEU5>fn}P=;xU zOjKnC44gk(D_luC_vBwQ_g+CV97CCqV`VxW?k59>APF%Jci*kqd!Otj_TX!~gg#cm z;cZ>!55vJA9frJMKme0_#LTAfkwB?omyEAXE*sbelCjVlaW9k*Mu5l<+)*?uR%rEu z&uZ}(u7nVWw(VX^oKdHAj`bWh$_YDzrkG+#-8Cd|%)*d6VR>7$Nd8^z6)vcNMv5B+ zptYC+NtxUocetrw7=f2x*1P{Z#9L>STF*M~JIl>lFdPgo_=zW^-o4!vL?RMAikP)R znL!%hui2Fx0gfJ^+7i-!Ohdip7PmjBYJdyw+Erg&e2bU=V1G9HX}y}ZT;u+ZJQ-P;eLu3W8%mP)Gy~ep%o)P!nPU0xv?zfD{t}fBth#>psGBR*53eMbXya2sI%b zp&nr#o-TjHyMiu>A@9MM=qK6PlH?)~{8!*n!VpHL%vS!u2ss`t+5;he-~n%(=kn+0 zs5Im#L)uzL^IiY?mm3B8^wVz582veDkkfj2xG`f0VNm!nuQoMVOX?i4piqp%hdW0L z4;Q-e_rKTF#;1DTFgAskc$_?(7;Cln-qP=W=L`t{kMThB@!lBn-o_B8wobf?Xc2!2 zwkht#_;M5$v)RG<*T42Q-&Kk;Yk3AF`KYqNM zNVt<8mkNM*O<3Lz9rSLWKWpyXzi9pX ze(Kw|soJ$Ga7F_wee12x&1*kNnd{1U(K4mrGkPrJ2{fs z|N3j!Hq+|WZM4^3Q@szXSFfJVJMTP&(CR)H{^pw=W#tJvMjMakrknKD^PlV8dCRqG z)!S;&V2}n43M+)dVjef^&A3p!S~dri2oWbV*b`5vtV0Lgd+)tkySAxTt!k%c&EC%b z!v^3J7BBv#TDN{G`XmDf4pbBBrpYyNp>fztj9n!!2p`<5m%>Aa>fL?M(Y$#RR9bqa zF1VmnO`6n^#*K4H$A=$wi9?hVhMv+N*6rGBy@=%1S6|haUw$d~`A?H*2>_beeT0=O zJE@@HCpBpBnfF2M+O<(a2v%4Rj=<)5|{;F8&14}^E&x;8= zB1tNXKvG*LUWK@0&&%bj&~+FAE}}ei7Kw23P%J8R;*up=^yinzwhbVqhN~`{+O@s zrT^zBE|#->uME#IlZ4d*x=dDT^09W$at-%Bqk3623l?~n(9p^AI46QHpm-vJcq zeBlMHy5+C>`0snE@cJ{=^$%@awN9)FhaMR@(w(f~gV-QcF_5U0E9hb`rF(`XHIWGB zt4PdprXcQl3>3?+ezo-|?UX4F?^dleZ9s{(TyUAXeRr*DKY5=QMMe{^M3@*NelQ{= zA*Y|(W7L>ek+VV%#ytZ9#YkB$n-4Dv zz4+jRD*OE3diSdDq(5Gvo_{;hQ8F+A{zf71OVmQO5>CUr?*_+!ARXumqO*kOF{o1m z1UNiEKxH02p3LL_t(2$M3(_$0I(|rw0`47Y!eD#SpO<$_e8Sy$DZ5 zwjF*R&P(q62!4Yl&{JP4UWtq&_Hm0;coBIkxLh_MxsXPURQ8t#b@$sB>*ArGs?Nu6 zmH$xo64hJ04+?<_6r#n57YOsh?abJxw^k|1I8`h!yx?+jAysvfZU>Oj~&nOf~x3vg>L%kD~6S1Xo^xwyoN+9eAj+I^MA%IQB znemU-r1EY8K;#$i3hF)8))?FydxHO9<<_YnUH&zGV?FG6I*}VrEVK#?a=INNpy^>H zp&RW=4*^ILbW%DrEo%(Diynk*Nu`T*V9tT~@DgrQBtS%v&|8YU0pkG$1;^_5k3rB= zX^}xd!b#hNhZoaZ_ZszT1Qo^tBan&_0c+@SDsm~z!dalAnjjepoF8Gm zIC90BvCp6^lZ{aboB;tOlm&@56bni9%7mR<5JFAV3{bvMQxVGVVYZ;mD-(9;7hXeB z(WsE^6L9}sC<_!jOccUinb(6r)B1!{$tWXVsQEp#B@rO0kIEbdHWE}B-W6U|Do#b! zo+#MwW)0|z1xpBBT-pA>i6eJG3M$qB;H+_kfa?sTZ zGS51|+E=`Y=)s%l97ou%8Nyk^h*Paiq+gjs&1(W_KmZBFgwi3ZK*8Y6U`U|uI3xp5 z08?2Ta1;|t2V=tP$QSwZKzJ|z&w`{9;-$arHS-;QP6UAlUxb}?fc}6BCxwACP?^GF zoha$$^{g{a0h@>SA_piVOTuPOu2>J04s|H3lfOTRFxVgDX4xN=HOXZE@m|&&#pWAy zlo3DdN8W2~W-_;47=4U4>5Gc{gHIv)kE95<`B1+lJhVRV_2+@Gx6r47H6XD_;DsWb zC>WFrf}Luf1A%8_06v=qfln5KXKv|h-krc1CB&K`px~YA>3-Ii_xcmpcyB6HWX(f4 zb5G3vh@D87&i>$i{<%>KP^<_gbL&#soiO}h?(YxuV5;+0cn^DvJ;t8my*0*wWOwbI zS2SF0`1X}ybfX(BqlAeFLKrpLXc4`8qxTZs2qV#n-o1k8qW4|~A+O$FM6dDcMi9Mx z6FK@$zwhLK@Sn52);#;V_j<0i*K_^$y`IN#|L`GSPrU{>zyVrdpnhJA zOl?%v($Yf>UB7FnR&gY^d5}S1WD<@24*paOpbac%0JXvd0>TVQ>UaLjtK;qoNCSer zSr8J zIeYfexE1E)(ZR*wORCq}strAMSgVUWj{ccOUP4h;d$H zA(78(<2#qeALr|rvu0;R_^!JDz^=8Bo}DF0UNaRIl3i_bunGKx7l4!Vj6XPlA4DLP{P=rdh!(R_4-j(+KtNjMLGC?yw;E$hTEZ8X-uQf}1b zlAdMSt7GV1C_nRa%_(K8Zb^OtVVM_odzqTJK{8!KRvTZ$D&jtd)D(Y#LN^Ljh$=phmn%j41m7ux1tA3ZjGtAr zOMia+#h~&k^VrtL{d;A~7+STSo}L15@{v8Ww#KoKUD|WN##VI_g*jAS6Z(QCBinF$ z$0Yhi*zUKFvke;*U7+F2CkLpeYvuFqiEp_9tu~dut;y8caamstt%qxjbrm6&_<&7P z;3rRWNSV~-x1Z|3M@%CHJ>DJ1kyD+Wr*)*JVp{|&Q1)hz_HRz3}-9PR=o(uMh0z+P{JQvtSn`Xr@#%$wf#&; zNom5apfo1QC3)BEq2mARX^FSXPUC_^cyJExnwaN}Ja2dNVQU3gnDS{e|Lv7>FupRK zF~^dB=jr#(SLk;3goeLWy05TRrgLh%_3^Mx4LQnVgI6qWBg7P9lTG}MThEO6s7dJ_ zZSH`Mxq#>z&9>}Wz1HKwiqrrt9*NMl!$jxKB~ki!*>on`7ct>1+*>-*6<3W#++)`0 zrI!E$2a?MKMNXglvZ_`gCYV|`yF5@M|GJm)3gMMYr<3CtYjT_x^78Aa(;<;3o%yuw z>W|LbYAl&;g{(e$aO0C4y_DEQ*S?Q4%3r22sy35pE>)LsF%dsNo%>H$uX(2|mztn_ z9k9)P7TtJ}y?Gv&S-ti4zK(j#ad%f^ut`lzb&shT)OoAbN7J~7#O6ESB0J2Ax?4?5 z`RXLQFc7!Fbxrp6VuR)Cc!*Q%bUak|JrD98!B%ar{r3Hhn~K*VlRxQvT>Oy6!%%`KEhcGX$~?Rvue8XRa$Ip<}hEcm~?c2i>&3xHA; ztzT|6xVl zWe6e90(Yl&1UEO|mh9$FZ=Z*gNgQ=?GsaJ1mJ-I-gqxeU-*G*fmJt8;C$LYWklveH zTSzIqaVluI>5c5w#v|r!9`|o5@0@)Fg`95^j;A#h?{`E(_3pRZ31lgg@h6Cg0E1-( z@C-(n-ZOy$`ofdZlMs?ZYBF@?ue~vC^R-z9RJHi=+R)(HR2ZpkX|=2DsiWuKjOuq& zf0PmYV&B+}WR+)3v~NRLxZb5|o<6`b?w9P`{qkLWD*`2##7X*ZZ(PBdKIXvWx#V@w zTQ+hi-Zmi{g~V&#yuXU0G27?;yNtwae?L0kT+<|*JHicp=cw4Nl`n3I@w%f;t=&NNSpbgVS-K=j)%Iuq>5R;yB#uuY~ ztEecZ79Aflm{C@R_|@9?h!1s^-pJ&gc}!^TCa~IR;vIrlp=&R~WK({$de9<-ddMSi3 zwiWthqOR_2BK4U|v0)vR*J;o-^_5%7hV)OZpGwZCX+qj%2jvLinW`#dy($C|5W8&+ zfBI}!$Xj2;uS7N%s;6%3Wf`^xLGrF!P0boRZ-+tpOXEGG zCOu}6-R%2Cal+=~%Dx74N6!n#8D^r2WU?$ood>i(=;eL;3C}(Ho+%~bm|kjm>3q(% zP=zn$i`sO0>a*!)H_OnT_aZ_C8r$fFTliUTDJzI9n{`KuD0De$*>0}ZdLB1_jceGz z|4ek?1hzb$>S}N~wVVg*jr+d;UTvbJD67CW>oQ~BUpw#0!^FGLU>kheZC|8p`+1XT zR5_`>1?fG#9zdY>^xW^(%j*gEWTvPGHQBvdE=aAfv{cf7)Zcp>Lq;lUu?_3D0YWZ! zxw|u7)H8S2=&IlW&)Y-q!)<;#KhBAs2(DN83N0%#Fo}yC{mPTWBBZa6<}0ZPk$k$4 z$C~(rwA6T+=k@kPO?J7U6xw%;9Gc-I6OL7wSm~I7d5%%Bqb_A3KYQ=R4VQVH;<1-| zg=Yt*Q6C61BV~nux_qc>FvYu!ds=zK6jGbVwy9~;v+liHkgc%vl)HGGe49RPY+J~u z*7NR?*Z1-9D%LoAT(eZtbpT`bOJm0KImIL{^_j`Sf3lo}?T;^GaSOxzk1^P^ph>)Lk>DdKXIgd)Hc7{H{ zozBp$6w)k$5OdAhC^PjPa7zs-%Vfw9kbiVrCcOq4spU?-%=Pq34?4HxITDV2IZsH( z0?dSkDUX7`imGmn8%{&&z4gPe2wg`_;jor_HiQ%%1;K=Ul}Y6;QE=CKE?6OYJhd#$ zZl1&bJEs03!CLiJ|tUA%3_M@WUOkBWb;4aAqx1kH5k%2}$WQ%kA~ScW}i zZoqfYrHU@?5HHkHZkOYB24$)6y6ur{jrj5!6@c~mreQ^Q?9~A{-teVaXj<^Sn4JwfI=k-W{w=K6dV}+wxY+hbx`+B&3^`*L{6?s&nY{o0$;O!gmc2hlGg{G+Y~G$>c!}7 z20Hd51udkzBB{Pi>2gUhM^bD0ULOzff{8+9x;;*8Dt0|Wvk0WV)MY0jI^Pz1P~^OT zV$xQZi+e8VVaI}(Meuie2@&5Z@D{D%D~EoE{`JHDK8_2k5)pq*L(6a5-W$!LLRTN8 z7!x<(Nl9Fez2lok^JrO8CVshGLhm*?)9oUr8SdP&w%!X{l;nK!ONNu;tp+a_9L zE0uWYhl9<3CiFOGJpXtMWa0!7P?1Cc2EY``+Dr4W(A?Kw@jvO+D+FL+Gfibn*TM`VNcjFiyi<1jLpWcd#>T zXsIUxWJ!*Rl8}Bv5feWX)M&$g0uvTFn20C*0qD!MAg0a(QxhiO0pkX;uW&zJFrIh0 ztqH#4>vhN=s%Gly?g)|#K*ed<-m{UHKM^JL43UCFH^6zfvxZoz=!N3%R$0oW#Bk=0 z8TGqf9eJM;v<49%GPpJWisojIr@`%Rl6`)`m|jhhyBd^g5uA?&iiW?S2?_)ysK~9} z*px$A4g*)$3XMdJtVN4c8O<)9UqSKwPoa-q!vll6Sbtg77VsY=+-?-Og(c_Td?0s^|ibB7(;J-O7mEs2Xgt#fEXpQyDP3L4- zjRfd?i;p=Z?mJu0h(J1_Z5OTu;;_iD8ByG1(wv70mt1w?&g3}zE+4c;-s_!#KQ;HA z`JJaY)ai-ylUpeg1r&pNw2)S&U3*G#1}YzaKb4E^Rc0$m8?|32#f`>YbgFbHvHZjM#|@q`%x z02HWUVv+@p$KoxQO#H*X6d)V}Bub5%jn{vSBmLVru9^o455_4b!(8eB2hYHNyaB>Y z8ul9hdta28xHYY^7?K_DH%ZQ7-#h`uZ<{%?hS4qq&~ zX_kQpm+VSoOyiZ~lx_Yn0PD9Ay5t)aAB>PA2I9xnVumi*V)}6~Z0`T7I*iW$c-ag8 YqRZ_&`0BUe*=>Px# literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/distance-near-and-far-cull/style.json b/test/integration/render-tests/dynamic-filter/symbols/line/distance-near-and-far-cull/style.json new file mode 100644 index 00000000000..f18d9b2f8ee --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/line/distance-near-and-far-cull/style.json @@ -0,0 +1,63 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 73.5, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-lines.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "rings-lines", + "type": "line", + "source": "rings", + "layout": {}, + "paint": { + "line-width": ["abs",["*", 10, ["to-number", ["get", "distance"]]]] + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": ["all", ["<", ["distance-from-center"], 1.5], [">", ["distance-from-center"], -0.6]], + "layout": { + "symbol-placement": "line", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/distance-near-cull/expected.png b/test/integration/render-tests/dynamic-filter/symbols/line/distance-near-cull/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..04d7112bf4f597e06aa8de70138442fb55c79e61 GIT binary patch literal 22539 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 literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/distance-near-cull/style.json b/test/integration/render-tests/dynamic-filter/symbols/line/distance-near-cull/style.json new file mode 100644 index 00000000000..33bc7bc6ea7 --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/line/distance-near-cull/style.json @@ -0,0 +1,63 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 73.5, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-lines.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "rings-lines", + "type": "line", + "source": "rings", + "layout": {}, + "paint": { + "line-width": ["abs",["*", 10, ["to-number", ["get", "distance"]]]] + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": [">", ["distance-from-center"], 1.1], + "layout": { + "symbol-placement": "line", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/distance-nofilter/expected.png b/test/integration/render-tests/dynamic-filter/symbols/line/distance-nofilter/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..7b64e6040954250214c04ffa9bad1d0196c18333 GIT binary patch literal 52788 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%0Dkjk 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 Y%XgJ+2-$cY*nVa3boFyt=akR{02N3-O8@`> literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/pitch-high-cull/style.json b/test/integration/render-tests/dynamic-filter/symbols/line/pitch-high-cull/style.json new file mode 100644 index 00000000000..1a287fbcfa8 --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/line/pitch-high-cull/style.json @@ -0,0 +1,63 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 73.5, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-lines.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "rings-lines", + "type": "line", + "source": "rings", + "layout": {}, + "paint": { + "line-width": ["abs",["*", 10, ["to-number", ["get", "distance"]]]] + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": ["<", ["pitch"], 60], + "layout": { + "symbol-placement": "line", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/pitch-high-show/expected.png b/test/integration/render-tests/dynamic-filter/symbols/line/pitch-high-show/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..2f5aca3589abf83ac0ad65f4dc30477b3d6e7ac5 GIT binary patch literal 52278 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
=7;^LV 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", ["pitch"], 60], + "layout": { + "symbol-placement": "line", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/pitch-low-cull/expected.png b/test/integration/render-tests/dynamic-filter/symbols/line/pitch-low-cull/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..0ad4d586a3d6e4427e2a7286fdc373b46c5b9035 GIT binary patch literal 2874 zcmeH}|4$QV9LM`SUiCQAc)$>KOiv(aWIBh&x=io^TWB)|ND8<~9Apc+Er5vvRGyQbs%m#dkE&Fh z->6G5nGcQ+UeTC-3)lBmZ;j!qFg39!qFHu*RINGt^n#mKwmYJxfBE2zo9DiJf0cXw zVRd(K1EDH}7dJ_)b5DK19l{G_coE~fdj+^r6I_KSaDNv<7XDE%nvL;4;A)3%U z+Cx3Qsj-2XKD)9yL+I|y122&NW_lm^9Eq2zW~CJ3`a2^`Ai|bmt>_PI$pTvC2tDW6 zZiMI?O6~5lV}Pb9ly!D|W`xMDX5x-lUylI51%$Z9Gs5NBf-veka2~e6gYjFXht5Lu zIzqj=bd}h+bjq-uMakYN-L!e^co0fNAlud_s3rZ zm3@Sykv|nLtYKY#%}=*A3kQ1p9$)+KWV}<4128sQVelUQzxel<;spr3FQP7Q9$6 z?*F0V6x8q$Jt6JeEbl3n(CF{CuYu6_F@li4Iw=*@&r`Z&^Rc7ZrSpM literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/pitch-low-cull/style.json b/test/integration/render-tests/dynamic-filter/symbols/line/pitch-low-cull/style.json new file mode 100644 index 00000000000..9124618ac7c --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/line/pitch-low-cull/style.json @@ -0,0 +1,63 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 45, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-lines.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "rings-lines", + "type": "line", + "source": "rings", + "layout": {}, + "paint": { + "line-width": ["abs",["*", 10, ["to-number", ["get", "distance"]]]] + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": [">", ["pitch"], 60], + "layout": { + "symbol-placement": "line", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/pitch-low-show/expected.png b/test/integration/render-tests/dynamic-filter/symbols/line/pitch-low-show/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..24a6453b52d2c7317ae7c62f3e4b1a29d9d0967d GIT binary patch literal 32801 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 literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/line/pitch-low-show/style.json b/test/integration/render-tests/dynamic-filter/symbols/line/pitch-low-show/style.json new file mode 100644 index 00000000000..3cb0846e8e1 --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/line/pitch-low-show/style.json @@ -0,0 +1,63 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 45, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-lines.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "rings-lines", + "type": "line", + "source": "rings", + "layout": {}, + "paint": { + "line-width": ["abs",["*", 10, ["to-number", ["get", "distance"]]]] + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": ["<", ["pitch"], 60], + "layout": { + "symbol-placement": "line", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/early-dynamic-high-pitch/expected.png b/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/early-dynamic-high-pitch/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..70b84eba2b47328fbaba7c022a39bd20b80a9d27 GIT binary patch literal 21898 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 literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/early-dynamic-high-pitch/style.json b/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/early-dynamic-high-pitch/style.json new file mode 100644 index 00000000000..99fe745a2e8 --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/early-dynamic-high-pitch/style.json @@ -0,0 +1,68 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 75, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-points.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "type": "circle", + "id": "rings-layer", + "source": "rings", + "paint": { + "circle-radius": 5, + "circle-color": "blue", + "circle-pitch-scale": "viewport" + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": ["case", + ["<", ["pitch"], 60], ["in", ["get", "distance"], ["literal", ["0.25", "0.75", "1.50"]]], + ["all", [">=", ["pitch"], 60], [">", ["distance-from-center"], 0]], ["in", ["get", "distance"], ["literal", ["1.00", "2.00"]]], + false + ], + "layout": { + "symbol-placement": "point", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/early-dynamic-low-pitch/expected.png b/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/early-dynamic-low-pitch/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..ff4ac04f8c59f6de4b713ec81cd13814f1e1ee4c GIT binary patch literal 14234 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 literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/early-dynamic-low-pitch/style.json b/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/early-dynamic-low-pitch/style.json new file mode 100644 index 00000000000..35d27a015ea --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/early-dynamic-low-pitch/style.json @@ -0,0 +1,68 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 45, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-points.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "type": "circle", + "id": "rings-layer", + "source": "rings", + "paint": { + "circle-radius": 5, + "circle-color": "blue", + "circle-pitch-scale": "viewport" + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": ["case", + ["<", ["pitch"], 60], ["in", ["get", "distance"], ["literal", ["0.25", "0.75", "1.50"]]], + ["all", [">=", ["pitch"], 60], ["<", ["distance-from-center"], 0.5]], ["in", ["get", "distance"], ["literal", ["1.00", "2.00"]]], + false + ], + "layout": { + "symbol-placement": "point", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/late-dynamic/expected.png b/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/late-dynamic/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..6eb4f64287c998c5f4b1cfd4201e39f26e783851 GIT binary patch literal 20887 zcmd>`1y>wPw6?Jj+}&Ytch|uk5`qMG4el<35AGfyK!Qtx>)euJ z#TX({{$E2`Fp8pLwqWX`z7DNY#ZG=*hYO7oMnQwCXBz3`n_ND7DmUt^)~{i1D0f`( z^*DRp6AJkHsQt;}iHDo!?c)ah4GPA>f&)q-X-S$?LPUIJk&s}isSrTH!@&wj|6Tiv z1IJC3W-_Dvmg=92@HE8#=0FNjLK+Iz3RUGm{x1t!l*NB35SZUmeL&{#pnWs+W}cfW z`M(rc-$B7>3Uu?=$^SVW3RXb;-{A!8A)FU)@?TtFsWk{-i4*Ii4t)L%B~}zxB5V@X ze}R>xL$Hu!?kUaq|A9x8;r=JwZ}CWbOZ5XG#|Q`R-#`;%4gXKm03{K>;W+pz{?|4Z zlC<#uHH8N9n;WIt1G@j*yg5PpzvSfmN-#9b+;dvd3RA+NaVOo1^0j#Zi2CVJ|5Q2X zwQXUp%hB^{%&Nvad?Dz?`f06oDa$%LFQ8Gc%=~8cHv6R2egzNua{j)-DPZ)tx(zyO zyynpL3{5v`H4>hXaJo5h$}tS|c{&lh^~;4;m-L>ok89i#^z|W)hWK=sOBEbUo4KM|tofUjP2c5Ok3G5qk4B z7@=5oJy$Krk!G37B!3A*hXy_$`P!J6a0N~(@smZaJ<)5&d;CmM=YKqpWC%hIi<4CHOtZ}VfW}9AXg{eFn7mkcaX#PAQ`kdAT$Gp9OItcK-*?1e0KD1? z1$8Uz@UZG!w{l<6(K4QdTd(VrxJ~2C-M8B z_a%}XIxf~EK+@iE(rDFSZ5?FY^KL9Za1s1^Go9I86X@|m7%w#7@cQgmh}G3L!kmI1 z^>{dH?CAM;(lH}=A=A)tJN}9hK@PvB41d*65UVqx_a(y+IxbjDh;q>;C|s78{!E_w zdn;k^dB3D?Q`f2EiNi#aleU8&{Qio)qN+A@;raHT0_LoN0rWm6w_O5$C-#2Dz5dp# zWpR;@hx|*K&(~!gQ|n*cUx;WTys`=HB$EQ~N3A#q>XQ_+DWKN*T>2K+L6PFOLJffU zbBQpsh}pA1>j)g{l8XU>@u2suNFR-QKX!+)PJ3f~o-?$LaK^F&RJuL?-54H?8L=Lk zzD917M6GeU-x;$S<6d$UX=rh~^84(ONQ?@`-S`&t1PB5Oj;M^|yYbcJt z>@tjWU9)3pD0pTq7>A$^MwDlGj`3}rV^pvfaI*jl@Q(or+Y-@GKx7B+?q?f=&O6zL zFpP4?W#oi#h!!Y4%eeA`b0&dtyQq#{Qrxx<(!|qwq?PwM)E?+w@SsK3$h7F#(tqqx zb0smBOT#)LYE|MrAy!u{cs=QDL}+_HkvnSdU$HD;;WF2m#g&>p9z z6gi^z>uD}1YsJ_8xRTu8xfA!uJ=XIdHNUy|;!pl2}Q$rPoJY#HlU}aNF3+gn4@qZ5xWz!2mvr&FuJZa< znTy=Hf`gul7i0-lUv|B^>~E$L9&GDqkYr7rcXLC0Cj9CF2q1A6@2hMMn)Ov`2D$2y zU+sy^t>?aPeZ}E9<$qb6iV|M4uFdzv*f~axb3=p<7YemQKTZw#F_v$qc|AH zq0#n3=2t55yRXKDTd?cV4k$pax_cfwalu1s+_$8Ws7U)HWg3Px^9g*+WRd&FIsV3O-%0Cc>obBK}Cri48 z>*{<*5Hmn%g*4UoQBD!hwvtBSXT;}hdSsI#9LuGC!bkwYY0hL{RuN~hQrkJitRi2T zJzD3qGeTTt&o_A@rOm+O&l3lyF%hA$xkt<@mD$z8#IA(mVhE$Ec5e^*fmDoL6lju> zXd&R%|Fa&^=IR9w~|sb1n(qHtvv$dF!w^(n?^G(&g` z_Cs#FB;px4buJ-$@ueISIFL#FxkM^?hOf$#xVBk?b!c?M2i8X7NrCNK_kePaVe6k>|#yb z=EnzRB6-*K1tEacEpr&S;bmmRJ;SpYmQ)i8StUADxJ~8^EH&Yjc-4F_BLnt5d)8MX zETxs?d=6zZ`IK)wp)h&0s;s{%@=Z6*Heemf^6HtA4NBGZ*lb%?&QeX2n+l!!@UhkI z5GcXu=$J8`J5wstkjHHwLgVr5b|h-v4f5=B6*!_|phF{)suB%xQ)RkrN*euL$6bG& zjzSncdiG@L8n|uCt?E|{lX7R0Y>GFJd76C6Z6@!y&whV!?IvLFy%^rRPhM);8!0Zb zH+NohF^pHVoucX(;RYx~IO9d#Abj2T|jL!1r9T=N{j^501NB!(QYk4vGl z_k}pcVw_LNQ4rmS1!%+V2u@QD#wDRY$S;kaqD71FFN{ny6wtYg>ze7(sNN4n-4rdi zUmr4{evhE4BPuuAR zu^+}C1O*rVnOv<23gA@=mT?vN{4uG8niNI28LFGr)bTdi@!UWTPnE~iFaRO!-7ta~)k)vK||DRO)gM zzb0y^=5M*03VifCWm-7#gKhq$`L)+yCaD@K{9u{-&!LKEIFBi*csLj^HedPXz@p`I zl`GMP*odgvx|Eg7!CxBU#O{WGS^4-IG6fkpaeG$eJXVmk7lJvsnpQj7sEW#Sf2a<3 z`a4w{r;cAMf17MI$Ki5=i}#HZk+Tub>e_z?)^z$_cU4qzbCgEwY{e`TA`d(TEdE?h z`<$<$I>g$LHG=e$RPh_W4%pHr+S;6TN~Z64`2!}KC`Bw|Ig}xej+fZRikesFGgJ05 zhtcIiraB347T_sQ2!5=t4&qOv1BU$*+gCXkFy`jsPXN2-z~g7SKqz0-diS%;Onj;u zs_qWU9j;B5VE%a5_rt6|H(pZakHwJ~<%|rrLt~bQQM&;iv94=jnR&L2%QnFTd^TgO zi)z}pXf&7lof+zr$5S4Cmn`c|U0mpw&K9w*yXhoIKG$uXF4fdEEzJ48cRb0L zR-YZy(_8h}HGEGbn7v4-D(l_#m$6iK%EWi7l<9jS>s9#O1=3&F^G>781(0AC zE*d5p%hGjM37-2cFIr>KQ5YptvB8=U7@A1(bVVM$;c(|<*3t{&Rub5*>$6Roz&q;R zpasjDV=$e=gO5Z^*l?!zUU|KivvQ4IL#s_ICzUDVK;}qfC6S%Xm26WVsUfHC*u(N5~*P5Xrvvr@iTCiC<-mwx|(NR@8m&8$LTpbQpJN`Fn>SaxhXrzje-5RE&@H>0b;1~b_ZE*kwayGV)G`#b7%BO7`!Q~fB9L&UsUtV(uw zaL`B$R$7``?Up>7=Sb6*3%q)#IwV~VE_MgGy+I_ga~;feQ*f{H^C{TFpH9~r35!i9 z0_v_r!pR^%zg05+~@QC$!)aC0+rlD zrV@1SD2cK`+Z(Q_N~7FgWLSegf>2ryWDieB$nN8rw=lhDM$7uU@64o89q0=w~Ru!pUF zgob=m!wHjB-BAymwv>#~j#gnbFXJ5?%{J2AmE}MA3U9`d6y5!;yP=R$L9E1VFW=sL zW`M?Tk40-pYnNRJI?jwo?{6kMoX<5}*LXgtQalZNh9Vm@ttb_qV)?nX-GG%j8n>O? zn_3X9G+x3?;YxyX8L+0 zDX>LTF)zUCLBi=Acha!Q3dN1dmjzCN4LGV#sDzGSvjQS?UP4G5wCLQqL=h`F(SlF1 zpnIFAfJqkj6;bne8rxfuR!_t1e4t&1k=Qy}=NcI^QVMphIG$Ms_m%#Ke{sw-pGcjQ z`_k6ExKcU_v6)2kvwQq2gdxKH)F9_}IH356;vCsYaFlGPG0b?*)RPnHGUQlP8$IW5|Zq<@x1hU^nKmXnUU2&wI zVVKYAF4Hl_)zXP@9Fhq(6D3u|&$U3VjxY>x6*{KL_$1_aoGCuhb47K%o3(nv;g1wj z9~j(D&9A>J8Ayj2!M5L^h0&q(Djw@0N#Z#-2kQN&@X6~oMP%Md)8B>M92}DF`3lfb zQ0v^o(OJ0o16p>3t}x`S>fYr?qjqzFs{=7hVzA}16~3*XOuC>U<#!)1@Hck<94fTP zkGK>!8C{kuIDf#I*^@I;?h9inT<>BOHc&AL)J9lOC}OB~9;Rzt3qh4pQ^-O*9oo2V zNf?XI2=j3i16rj+;Fzpdt#o{HF0KsO1sUv!Q zYDB~4MrdWQ^S#Y1#fw|+x}WPfsVi)hynE{aX5Ax^_*fLe*l=Wsc$?l@MJj>FS^X*R zA-0$=Vrq@1j4pu&L^#%AQ3&|NmD$+d?N*XvyO~4zY9KXHNUW;0J#2v`7sZ%qvYv|8 zc4~a>hyE!Du1sMlQv`~1D0kN$g`ZhLZ|h}46mOt%ec@x);_$inik!L}1-;ulf4ykj z@lg5^a`=N>Oq==#<@(_rZf^WkL(qzK*MOoI}@qf9R^*K3mI4-~( zAPNIeF#psjXY|)L)9p_P5)I81=P8|EsEqL471EYAbdBeMADalA9T1i${}XK%?2jDo z*7J^kZ!x?Thu-J!5S9mWPgHkKK>|@Uko5KC?1J{amK;8MoULqh7+i>iHWlNG+jyOj zPJ%3NRHCgib($b{oayn!ypZL zLe;3SGHS1ysbsw@DGg>IJw{GlGB9fc9RLeD7(%L-d1o@)Ug>+6H+=bgCLbSNV=+Dj z2Y-yfR^&6ZJWo0hXVGYqs!L3j3KQN20h#{P1QKDjkIbmCR5?e1>OP41cQI@xvp|BX zDYBZm(n$}j-a%f?B{O-^C~&Vy*BDiC#R0^hUx&TBiCJp5mi!5w(uSkn%kClBbFF$C zsHAQsaHzVOeJ~O2j_(=Z8K5?uD3jh8c%TfUaaBxq6!x5C4rEC*GbAu1fsk zwFS9E@QXU7ZdH-il(IWcO_Ii~vXL2PmvxPxagGh^!?bX4K~_QSK*4uN;u*E{zCf;v zd`bzCTvpoqI|vIRs$t#r^v$*-<(O(FZju=#qN&I+t8k3MIzr(Qd_UgMJRl#I;qhF;*l zv>}`lcaqv8iE@q2ubXSSi@~WEUNpq?bhaWSCM8T+88XTVm<*&vk<&~eraR)W0~X9v z17E$$$`oE$)WTqTM>KYLrO6W*^ZwcywVvpq`s90&;o$bm%K7>hu%LgvsAV54K}qDM z)I#yIOB~UDRU^u@`_FTXTx%@iM4bY1mSkGhb`;M>E-7p>Fma(U9%X1R!irT6gqQq_ z_@IoiS@>&wTw;ZjOjs@6pl&y&5~fNL`9sgz!Im6pTB(q!SIm7{2 zSLDx`Xne1vlG46JpOacD#KknAql&xpiHKQLS9?%JxT)NV4U+T=Aut?>CtWZ&6POnT@6{x_7>t#pj1_uDT!_e(PtSTin#7zR8E^f~2 zITHLijgbRBOQ@KP+7YQkr({}iT224-))SGKpq;JvtaaV1`uT_RF_cf~M(z3xE4JeD zMmsih3s7_y_Ad3I)Ww9UlTkuMS$`GYubeHCyXoXxe4h-kB~MgLQI!4@ytJyCPgs^^ zfMAMd1K}7z?L`~IRjchwby2r5qP_f^QAn;eB}+E_ys z$8pFu6sI!J0|$_1PONBrY-zu8dfZAC%2ctrUa^13*KYqdfB)WVaD}xzyB2C;)EO1 zcUA0J=H3Ui)0T0oBCtlYrBK`>Ot5AP8gKpmm1cYSye;=OqfmeZljuZ|#eBA~E_ zM$vGx`Ud#Db46FkF2!|_PZ4is^@u55dhG?sDtR+FOQ|LQdKsc~g_8hN>b4D!kpTk< zJ~JwD(J7mgt4GPNVqA{!ZumT08)V1xW0zk?_u}$SvDu!H2o*M%4C}Ubz*N>JRb7~4 zoyXO(bVi7IwMr!H&Znq*3LmtdeG4X7NCfpTK-2I6bk^apo}VCsl|)jx@(4I@y2e8k zc^0qmyqxNk^X3VF;|%SFLqJ2mx_ti0CCR9ZhRwYFT6h)b)Mx5N;z}tDK*@`Enj%80 z-4sKhjHIpb=M%d}?yW}xB=yfW_nn6$8PY}*;q%7#JDZ|>^%T%H}m2Or3 zkT_Fno$ODhatIL!1Z?i-#6H{~#4U4r2}<(#u(LS7*Ad5k+%T77QqQC&pW5mr#s!OXiei#OA;80%|EM{}$VT{qQ3!<|h(4I6@gd)A z$X8;_dX`6qA=dl;)G)bOJc|i96MzcX6gfz5k^D`|lA5ROO8qq5mGW>w{snWDJx}Ue z+|ZZSjq5FFTE}2yYj~ykO3K=V@P2wLxi<1(!2pK278d-P$er64cGxXS;~l zVD0|tTuhTh4qA=~)fh?H!Ogk6*v7z5Qh|-C|?RDU7F4n&8bqCuzgFV(^*$>~Xl( z_d6z$5%AU)0F1*8_x8z&(_<6X=Q5R?CWUW^y3#Bs)^ltCv3;B!yaifUpQ{-4ab@R3bIy9@?Pk>Zha-0 zD`2!6w`rKH%<}0H$br_)ADJ$_v!))S{%0@1;SLQaB$?f-hgsx|yT!=e#;7aWDwxOA z^fJ3}6dHxsth$Yh_|2y3*AarEOL9kQX)h~s^<)Wi;nuw2g)(uWvbeJG+q(d_z7k~Q zZ&fx)xoYHa2M@CNJYiu)yKPeufLMW@WTy+h74+6|*-!>ho8O{quN8`T$4rm+C@#F}aKZS?M&J*C9$qx)jtZ6xi`gZ?GWq#vuF9aU2rJwH$Y+!<58}Dmg})E) zF?J~%Ux!KoVT9_L7qFhL^X7)vE_iiqucwJ@-9szBC#&CI41ynci#E3K8e%jY`K zDI=^8uCEU0{tC)1qgBm_k3v%*Ru@2^r4V?$sVB*2UAk#tX4g0b#Q-CpECVt=Ot;4d z*Poi-`m_&|Vo3vc9>wf&i~Lr3{O#6hLf8_{1N)tb8_$(VApi^r#b?}$J|5_jb zF|8ILgk_A4*h=?vggumyK|w<(?a#Chc>|o;>ULUhgX=AM3{L_Rp>PNl$s(N14C+6 z>1JEu2yuR)R>IiGu$&&151tn+zOqw#kI$_+UVr4?dAc;iR4WSmr7$g~A)Bz`m)Zl5 zcd4gN`)V%jqP6aiPzB}>+4CG*Qm?>4g@%NPx?Md^hj8rz;c&u+lKUN5GZxjl(J4@i~NT8C{o%FbM=%GDBscQ z_O=^Qw1w;B3YxC_JMG3G@1F-b3^UK3N`=)}aWx6sKY-y_AiDFrk>ds=eFCq(q(`-+NmkS1 zddrdFz|zOP)S&z(b<0nyLLX1tjzyRo+9Xf~%A}?5grv7pPAbV?sl{-O8PjI!Jt-rS z1^t;*-Pzjw<_3AW<|gGJ%pO-A*Gc&AETcOI*e8u}{4F2leT*+rHbqTYeeXXiXhuHh zY@=wB!Hd33HUR^MAHelKthq4=r)CX)dgv9A)qXlS zs+RugOKuF=P3?$4lVC|NuX3P7{^<6#u12$2hPDV}foZx+LsLe3mG63G8WHsQsl9?6 zHuh3PNiBfwHxn8bT>~c`GwF^#na-w&FW`t|F_9|#L4hK2N30~(w&ci>_-aZr>yaPl zW>KOu!OV0)$r}T3wA7-ORoxaSAk#K_<_Feang>z z^}_L~Qsee*>qLUnm0>CtbxM1B=ZoM`OY37K^wA>R8Kqt>Gx86vCY*7add+k3lYo|N zs>c)h0G60^Ccjvz>~=qc*S5esQs!I~ucSnu$cB)1pvfr@OySuiCgh9w3RDrvc7@`> z(L%E5k*8GEitor0XGOgBN9bE0xfhm=6Z3&NtX+Y%I>kt7AC{s3IGG#%LHKM$xv(sK zPs(@LS#O!_iKICzC&|nNORgH|Gi@(rzjXxk_6WGNE3S z4V*Zl4ESmmpFFW&9p%#E7C|etJ83!%0yQfH#V{jyiPNRA4t*Vk<&xhwpZ!((ykEdW zbt;VPRr^&RmP%(EX8}rR=W&Z!yle3eUVQ^LoYnDIV;@8@1-~WGFK5VFYz-7G39_#F zFk44;jkz=GugX7SD`c3@EJ-Mbd5~4l^3IqVy@DE2=wsfyysb;g{BZ@FspAH7Yhz~2 zG8gax?mD2-ZP_JnfB#csV|{F7Sdk>3$B8M9fAW5C)-s=(LFz~$O`Ch0q;&awdkB4& z5YGo9-Q{<$F2+x1PvKJovh7ts-vLXqq-x?Ywjllw zGn%hOzGpiHaTkzqDFFA!d1Mf>wK)`;<+-*-7^Mv}oW8tcAOEtMH8WH{cxh)2;DKa;+c`S#Lj8kc1;SUji5k*O+B&KdHtTyZ{}DVveK|f zuL!(Sgm@C#CX}_Kd+Q>XY8Q3gJDl;esJK9l@^yl0*!PO<5z6PN!;wXu-+v@T zJ!~kwzs9kN0))9tD|zg-8Mu|3p(=R%9AClB+Xt-&t9N7(2+s3~=^ny%6!W-wkiL2! z(BJdBa0M7bCc^PgRDu2X^eQNLR66`Pcvc9`4aPV1>>JW@cl>RC7E~3x${VA_&1g9- zESM&Q7)a*72c@dJv@<-1zDLYT#(Ic=Nq$}qeBAF-zNQf-4gb`i>4Q#2UJ{>Va+s#G zh&|XvyI9vbD*Q@1SS1(?HkV4$<=@bVmvxA}gJg7SEp3neJ+EtQ4pA8b#MidXEpsm( zEcqNB2qGg`G0In>D7_mC<1}?1;Gj8*49&lz2TEVUOIcBn1>QYzmCB{wQI2Fj8aX%k zq;KW*q|ucQPL(tJopwZv7nK;gyq07v&Vvt$#Oplx`o6J~z;gFlnQ6esoW<PsaYT(J7#`%A-dCeE8#qf@NKTT9jEnJjvdr7X*Y^rJ@6mB4VL{$r%nNnp zPOWiS$+>9@%6ZRL-Xm_$E}3nG0DGjmhmurioS}B{cLa!MpK110GugY2YN zA2-)P>PNFAXQO40h4+EHXTsEmi+Bzh_EaA~V{9(PmiK@)OFZg87Ppu);G?jV>285-4i__Sf8E zE-8VN75K-3DoJ8a5M=^gN=6?sZki>@2yrhM)-<%T$;g;9_h)%eFdaIQ8X6*euRIwJ zu|*oRoXC7E21DIBBsT6W@IhT|rCE_pWTKvu<-;TY!w*tPuo`a^WgyDQcC& zln?;NymTKZlO&?E$21%~Nrf~J!;3cugGvN_BNPU!Soi>8f&q%~mrZ_V3?b!&WO-DoB9LoxLtFX(%)@W3_Wm&;C*eIBZ* zI~=dRC4hx26x}Jy#VWrR$Al*7+;8piVOpX9HrkBpI>GP@kr;$$`)zj@?ayUqP;Kup zgTPD|2sV269k;?V;vQa@R0JslqGjAI*nCK|^BkDtwv{|KwB8IGZGlE?;Q^k4=g4Iy z`-sPD>VIz0PJDze;DFc*g3aRmEh8A!&FRG13G}rSqbGH< z{5OusOnVz@3`ql38VW7d4f4-Oz<3}c+yi*~d}yGbAi-dcc(}{q<(`lo0Wt_(hC^wB zB7CUJS5fdLJVYPN6cH8$=Zly(){eL}*VUQz@>X5bgO6%;b>ll3UNm%3$@GpfuBO~w z`?4h>;WIr-X+Wl2tZjiK_6^09jCoqPA!hhmn7CsM_#szxSc_rh>9|Y@>iCPRct6!z zvtp{~>fk5uDOrItBvE`MR_Y%EG|~!inStgG(Zw|WwBTr+;@rUs6yFnL?V-4qsAri8 z?CQ_XtIL9?V}cMQBQfBB8eO{|FsPFCqPhF`N}h9H@3+p z1g%1)3DT$A01VBzz&(Em+4$zP$(ABx`6+26sHf5<;%z>`KT}!PfFu2WOQm z1E{ryslU;LzI*idJ_7l+Tz#PFnJZz=4%;^F?tcxk@fCr@qlg4mKCQHiKHe>FVbJioJ%@7hquEuleW&38pIMId+{hHTXW zP#G8B9Wtss-V3nIM+1?9+r=Zi(N#mY&*tH;)0Z?)JyqLMr7jn?>u5X8(GHJ|wf)I_ zqzhW)wi6)2G)RJE)inKHAZ3Y%%v;qawdQPjFJJ0)TwD8H)j6+moc^FdU z5}xqn$enkg`#C=jDU)n=xy^IarC#!uMbreS14%U5ZV1;UW~YGuB4Y4?;5zjQ6H-OK z4FEl-7e-VBQKV*~`L?NyB@9`CBYsC}Vdfal2V%0*+IH7ar znJEH)TC9&w3v$}29T>F$D4BD*aadEi(>?V@V+e^(yKA>SOudYOffWTGu3 z%2!A8=^|zCl_fIB%xU@+^Kt^y6(ZEF3HvA8;Fv~`Mp@SMwEP*|yUjE|dx*+=bKyDB z1xXV%vBf$2Kh)>CuRVB-+2W(kd*Za_u^-{&GygpFjZFO7w!nUtgNK#m_eJ@NJY(Y_ zsuzzWw)Bq4HGu1WGqFgtkU=izoobEc=7|VLDwcjTl79oT zR=8Yi?&B1c`V^KU7Vj}Ty;*zzlW(O-)OQ>8eD(6PyYBMzmxC|Mn2kXi#5sSyv(i5; zl*;XJA+NUMi(AY5>M6pMGV1V`G>v86ZjK|MKG^D&9Z)ab)*|<0m zQEH|hnz{>%;Q+j~Um{6F z!G#HYSKA8BVz}bL@*TN&)n4SuJu77c2|n5I(%m8y%pn!ov?Wr}rRrZ7W8R| zD=^15XN?e8=WVN371#2nWZmd(({XGiAM-zrnl!n&0`C{K_cwdvQ>-uDaZIm84QCrK zOj6h^XW3c#O(pjkkyR^|mq??xD=TCTyISnJ$#18ujOIV(duV4K@hDzxS0#Me2?wyO z12~eDk(sC=jRIajl_)5O41^~pweu76M4>BFti!Q!izDw_6p{~p*jj~L<@Eg|x{M2B zWV{^ImV~Gc)HWjQ4G}>>eQvgX6jbh}V*VOMaz8%jkTPVt)uhy5W4OK-ZA>F%)|mEE zD|;MqTx}d|Zn+xrx<(Oo2~d>q^q3QB+#Ukzx_t<=fgT=zOmlL%^i#N5YUE&uRrmCd zbjObLm!H#UYSyewYD7;#L$clj(NAez4gKjSi#)S`8h>a0#c^9K6Q+|N2^aKnd?l{J zr@eV8YDtuWY^nFhZRY?!S#Htl?i;HVnT9>W%xm>=44{*VYk$iZh&fjHV>j&MjdUxL zdAz2R+ZNWB8%Me&T6o9;D;de$?rsIZ>$%jZp!Jzwpc;3>{j+f~PSj>Fzd$N;NnhuH zZD}st%5Fr`Rx744U@j#CV2kRM8-NeV##x-qROOSPeU+|X+x=h}N%={i+ORK8!GQYr z?tm)3?b4*B)nB`i8Zug{VE;iDhPfu>r~Y z59Y?$0vxVI26!j=^ zk^1GB@RaOeoXwW8E?l@x^(E;jYP87cgwF}w$gpK=;s3IOCf;vMA#r{k9>YJtV2B*H z&F^5W(Ql18BgmVNk7s9VnyZXBeAqc+OJEC@Hfts+T6vy*2i#8Wl>$;SS#L?kfDUzSS6moZ%+s2i$r{^t<3LBhTEV zD8_=>+N*xeZYyUt10rx$r3sVp3%UMGfZ-By#rlUQQVkhM8Ky6nzV0b+M0YrnwP&-> z?c#;98ZKeB*!Kk=w^$#i?fv36V$~vWP;=NRU#^V6?)gY`ZNVDzcOqzfHwlGO=a&{i z8^2frVMeD@|KEgN|qxAM`zg(VvVym!4xe)pIY~-#dd@zT(fGG_9x!EIjNxk-USp`~4}-PFy*@omJ(#M6_s!M9QhD~Kk$JzgzRzdj)8=WO8hKsgxu>lu#UayifN5l>5YXP7_$po^&gyYdthNW#qeEn zZ1WdK+}J;-xqGv;Y?djo_YdXZCg{$iUDn&J`VY z=|$giZIF5!OOfWu*q(o=dq~{hH02~2I6e+{%ie8eRT2qPlLJM1rv<&3#xNB}rN+;` z4O-3neEW%C7U9>Hf-ZlSC>zX9A*mxs-i`_>jJO#7L5KG#-w5mHUTtH7e^R3H!I=xJEg#gX zhdh|_6NP(jVz7`1tdY%u!{DtCoG%X<`6JcL)jRJsW6ZC{Psk~2Byn~omy?%Tby+HJHsW-)O#O} zatZ}g;!taLp~xL#qFrI|w+zlY5XP76FygIA+Q5QPEV2lfAdS`Ug}5~>rH^xph@b-4w-vVt^K)qfPHMp-kqY$Q4p{1! zm9yNa+)lL7=Qr5*Vu!DI(&+i{&b6{~;9e=$mLCP(Na!PTMTlm8B^oJzr(dAptc1E3 z8Y#v;gf%D8R?_4pUIaR;Yd&wXzgsrM)atcr+qh`g8wW2>?a*FVFxYm=t?%(?V_>88 z2+F_EH(`#;kgLWwa!y2IUyCvf)w-Hud2Tzyn0S_w_|t?Wx8E(QpJ*@Hd6jqmj42z{ zbf49W!Lwz;XS`)VJbq5HJJ92ri@j~XT+lIR)C&$>=y{(L@V6q6LS1+mOv)eG(qnE@ zDWuL!%M%tq70r-+($Q3aI^Ov>oq?D)Q;V@pHC0IuPs8k8Vgmz%E%eX-0>IEl>+2u4)zA`Zl1VBWG2n{_6p#h_fP$ojEha7Bk!MPj79=mZr zgVJQzthkGa(zJ_?q*OaR{D-&Wu$MBh!PY3dlu+*LBChJy6mN&!cRas}e@^M3h1;p~ zjVaGuJ1~0|35;3HT$e|Gu4~HPEwT0O*I<0rn(^mVtr4Z^U$e>1C_TWJFM3K*y_)6~ zBTl^J<|=XGWusD^IU;QS*KFX%fLG2xIU&^y2#EBczX?H^ss)aX*VAu^?9AovF;;il%uk!FK0e8+CkK;KHhIGRQIZNRyw@f%%}wIPA^7cX>n{<# zc#9Ar3)!D${9xI)=@ahTXdEQ~7P9$$hwkc%yaj z2g-qgS`;?1H%A6QP4Bji^_*6k)ClHZ#VImXB34TH17`FLZ=b?WZAnPkQK_+gqR4C8 zWiJG56w?eszs$9s@UoyAA9J#D_)d%Bs>b&$hnJS!iA)pPsE1 z_D9`UB9yCu9qc}HTzmA4esMJ@x_ko6+1ww;#j{?`+(W93C5=x4N;IYmLt zmZdp%Cw@=|tu_MFRzZ1|7zJYtN>ARn2@EM435C{DgMsS$`)rvU3nDvx13Gt-POW55 z-o-b5N$b~kR9|z_3-$-~+p$*_A=z4$w?j+4)tlBO2>OiA@P8%{TEP_O36n+`(#5sM`tU)EJ}t!IG; z(otsXQ}KD28xuAoozegY0kdDaJkJ$TCz}yj!TKp4T=|D>*Vg^bvFGAwj#5HTNS3`@u1B`qr6(qnWq;R5<|mIqcnjC zxg#CIk#@P(gOb3Ti{ko{=JjZ~x~J8t*YcQ~iu0oRPe`M)s;dzpU!vg~;#iUJdg1T! zaY$+bN_QeFWG?Ju;=SgbDGsEO-u~?g(^#o{6TkjLXGI^r)2+Ov-33o@1aA|zLH(`rwC(eK+`H(K#3ji_qlQ`z}|r(ikAJ!(X28k z@N$AfI$73U0+X$nfGtbQRU7{mcjc~JDBU>y6%&k=whHrmr>Am3nXxzUO+;oEt>h5WHW>Udt-1|nkZ$@zq zK767jU4}L69e^yLo z`&}2_9z_cnF3zwqt8+=waItpuHF74XO0~YzJ`-&5x8Jg3btHk)z)|qfH?c4`F>t%Z zQWl#g*AQUa)Oaclh#X2g7y#NpjSGqhJZwPx-_!606znh^LQ+BUUiPeO7e)45>d&V> zH@05ELnLDs`lpp`f)@l`8V%9sJDhtIN$Ga)409xsD>T>R$!XS^TJ$oqJ@sx~pNVv9 zP{K&)jtj1|0vfW?5X5KYP=$X8{F>OW95OmetfMfCBHg@FVtDrKdId3C!*&jEvosGKn1qCc@0@)r zl}pDnU~hqv(}MlTSl@M3a?z!3p2q<*3w|C?yBqLDTyYW=kFT1HLjpwtsxf?XCB?^; zHxyl#pJCwiWeo0W%$=*dGwFVQ@%Xho;4hZFy`}ly(0Wq9=#`ROnLq{?T9cpV7}$-UXUq z_5^npZjq>K#}8nCduIJ=1h<1-Bya5*9{5$BGb{%-?7kRSNv_ zd#fb~2owI0PzKX}^sunG>2&#fOrsCsE8>wmE@b8DT80vMz~OyUo%q(TuI(SgnH0ZN zGKe=(G}5AF*+8J(b@dZFWdL!oR}VFI{dQoUcRNbiSR&bfSVh`L{l47+U1?ERuE+_a zh0DUM7=fnOI&|VvX$8*_XBoX&9&yBRU(?^iBV4Uw_4`q&szTM8jT0bTtSEH!kq4~t zaxGFYLu-`Q$~*n+aUz=})(*!VsdKJe95z+Bay|=giWne;ql5PJ z08Mb`fNPBC>A!IkL1| z^UMVk0wfuvn-4GJo{*_rC!*9v zbeLog`$Kq?v5-pVstBz>c;vYoZLTNgu_w!PzGbA_7(a1 zh234vgHT*xbI4AWn9A`$ayyL(+jl?&V97)FFHS?l!`*c+ik+~MD$^f`;|2OXdAb)m zCaeq={_FOQ0#zws&r7)GmZd}3q!*71|Ge zcBdhgt*eF0J-MRZ1@g&E4Xao?AeTUVu<@10kK#}AZmP|?wJtfMGZ1$w3Rphs0G2L3 zKC;|$WM=e42F-oe`kj#z;@y~>)V9Yd!S`!M(1XG~7UbHP{9rN`P^KR@RIdoNp6>&I sO2^${+mNt@pQ}#k7XNcdx`_jJ97(o#Y4f=M5n#J+c=OK+edp+Z0jIvm0ssI2 literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/late-dynamic/style.json b/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/late-dynamic/style.json new file mode 100644 index 00000000000..f4e4b6d9998 --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance-data-driven/late-dynamic/style.json @@ -0,0 +1,67 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 73.5, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-points.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "type": "circle", + "id": "rings-layer", + "source": "rings", + "paint": { + "circle-radius": 5, + "circle-color": "blue", + "circle-pitch-scale": "viewport" + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": ["all", + ["in", ["get", "distance"], ["literal", ["-0.25", "1.00", "2.00"]]], + [">", ["distance-from-center"], 0.5] + ], + "layout": { + "symbol-placement": "point", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance/high-pitch-far-hidden/expected.png b/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance/high-pitch-far-hidden/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..cb05529b6b2a34ccf378200a10c5156569412551 GIT binary patch literal 31056 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 literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance/high-pitch-far-hidden/style.json b/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance/high-pitch-far-hidden/style.json new file mode 100644 index 00000000000..d1f34b01ab7 --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance/high-pitch-far-hidden/style.json @@ -0,0 +1,68 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 73.5, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-points.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "type": "circle", + "id": "rings-layer", + "source": "rings", + "paint": { + "circle-radius": 5, + "circle-color": "blue", + "circle-pitch-scale": "viewport" + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": ["case", + ["<", ["pitch"], 60], true, + ["all", [">=", ["pitch"], 60], ["<", ["distance-from-center"], 0.5]], true, + false + ], + "layout": { + "symbol-placement": "point", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance/low-pitch-far-visible/expected.png b/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance/low-pitch-far-visible/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..461957e3e8c52d5dd137329dc621039f5b540eb2 GIT binary patch literal 28053 zcmXtfbyOV97iEA65*⁢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 literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance/low-pitch-far-visible/style.json b/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance/low-pitch-far-visible/style.json new file mode 100644 index 00000000000..42a5a8f1de3 --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/point/combined-pitch-distance/low-pitch-far-visible/style.json @@ -0,0 +1,68 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 55, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-points.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "type": "circle", + "id": "rings-layer", + "source": "rings", + "paint": { + "circle-radius": 5, + "circle-color": "blue", + "circle-pitch-scale": "viewport" + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": ["case", + ["<", ["pitch"], 60], true, + ["all", [">=", ["pitch"], 60], ["<", ["distance-from-center"], 0.5]], true, + false + ], + "layout": { + "symbol-placement": "point", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/distance-far-cull/expected.png b/test/integration/render-tests/dynamic-filter/symbols/point/distance-far-cull/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..6d0cf720a68e7429c8e2b544786cdf6c6a59f47f GIT binary patch literal 35395 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𝔙^o_IQos=-ZziqCu6GXcAtv>0*MbxI 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 bX8O;*+~~lsc`d&a7=Xaj)z4*}Q$iB}BoF@L literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/distance-far-cull/style.json b/test/integration/render-tests/dynamic-filter/symbols/point/distance-far-cull/style.json new file mode 100644 index 00000000000..8b41822e30c --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/point/distance-far-cull/style.json @@ -0,0 +1,64 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 73.5, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-points.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "type": "circle", + "id": "rings-layer", + "source": "rings", + "paint": { + "circle-radius": 5, + "circle-color": "blue", + "circle-pitch-scale": "viewport" + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": ["<", ["distance-from-center"], 1.1], + "layout": { + "symbol-placement": "point", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/distance-near-and-far-cull/expected.png b/test/integration/render-tests/dynamic-filter/symbols/point/distance-near-and-far-cull/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..c5262a25710f31bd536537701b0d85ddf92dc0fb GIT binary patch literal 36644 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
PQ8&Yg2GttyK%OYu1i%Xhz@ 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 BO85W( literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/distance-near-and-far-cull/style.json b/test/integration/render-tests/dynamic-filter/symbols/point/distance-near-and-far-cull/style.json new file mode 100644 index 00000000000..52dbe81644c --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/point/distance-near-and-far-cull/style.json @@ -0,0 +1,64 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 73.5, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-points.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "type": "circle", + "id": "rings-layer", + "source": "rings", + "paint": { + "circle-radius": 5, + "circle-color": "blue", + "circle-pitch-scale": "viewport" + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": ["all", ["<", ["distance-from-center"], 1.5], [">", ["distance-from-center"], -0.6]], + "layout": { + "symbol-placement": "point", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/distance-near-cull/expected.png b/test/integration/render-tests/dynamic-filter/symbols/point/distance-near-cull/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..f7e85383c29303dc3644bd9f60adcffec950b679 GIT binary patch literal 31438 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 Yx4!-lHzonBKsB7QyoOw@jAh9G0;${BHUIzs literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/distance-near-cull/style.json b/test/integration/render-tests/dynamic-filter/symbols/point/distance-near-cull/style.json new file mode 100644 index 00000000000..2e3b811999f --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/point/distance-near-cull/style.json @@ -0,0 +1,64 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 73.5, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-points.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "type": "circle", + "id": "rings-layer", + "source": "rings", + "paint": { + "circle-radius": 5, + "circle-color": "blue", + "circle-pitch-scale": "viewport" + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": [">", ["distance-from-center"], 1.1], + "layout": { + "symbol-placement": "point", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/distance-nofilter/expected.png b/test/integration/render-tests/dynamic-filter/symbols/point/distance-nofilter/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..df2e3884baa3902e9c1b8a5968a0becb6c42a4c8 GIT binary patch literal 42798 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 literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/distance-nofilter/style.json b/test/integration/render-tests/dynamic-filter/symbols/point/distance-nofilter/style.json new file mode 100644 index 00000000000..22fbb072400 --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/point/distance-nofilter/style.json @@ -0,0 +1,63 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 73.5, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-points.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "type": "circle", + "id": "rings-layer", + "source": "rings", + "paint": { + "circle-radius": 5, + "circle-color": "blue", + "circle-pitch-scale": "viewport" + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "layout": { + "symbol-placement": "point", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/pitch-high-cull/expected.png b/test/integration/render-tests/dynamic-filter/symbols/point/pitch-high-cull/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..eac3da291a02dd662f5682b59d758940b705b114 GIT binary patch literal 23683 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

PTSZ!%`SWuQBi6ten7<3s_w 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

2gX^L$wXt>gAk2keiLy-4& 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 literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/pitch-high-cull/style.json b/test/integration/render-tests/dynamic-filter/symbols/point/pitch-high-cull/style.json new file mode 100644 index 00000000000..2d385d319bd --- /dev/null +++ b/test/integration/render-tests/dynamic-filter/symbols/point/pitch-high-cull/style.json @@ -0,0 +1,64 @@ +{ + "version": 8, + "metadata": { + "test": { + "collisionDebug": true, + "height": 264, + "width": 400, + "operations": [["wait"]] + } + }, + "center": [-120.30344797631889, 38.11726797649675], + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "zoom": 10.852, + "pitch": 73.5, + "sources": { + "rings": { + "type": "geojson", + "data": "local://data/distance-points.geojson" + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "type": "circle", + "id": "rings-layer", + "source": "rings", + "paint": { + "circle-radius": 5, + "circle-color": "blue", + "circle-pitch-scale": "viewport" + } + }, + { + "type": "symbol", + "id": "rings-labels", + "source": "rings", + "filter": ["<", ["pitch"], 60], + "layout": { + "symbol-placement": "point", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/pitch-high-show/expected.png b/test/integration/render-tests/dynamic-filter/symbols/point/pitch-high-show/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..53409c2a0fdd2852cf2c68623a24215bef58b839 GIT binary patch literal 33703 zcmeFY^;euRw+4zk0~88_6?cjk7@XoRrAR66?m9^E0S0$>C=`bx#RvByMOxh5-RAOr z=bZab-2213-nEjQXYcGMS;738Hg5fBjLUq1{CwAT`ssKSlc zAEKM4+((4!35tCL1Zo5YX-O?_!=q))^c z-%>z#k}nwOK_npk6<;0S{CpQiOG}G}f|=jlg23@jNJ!`;ia8j9ffE0Lz7@Xv$>Yc4 zc!}`xZRx!GpUW+UY5&tlZT~~|Rks7J&uq3oFtkuuk=_PHNl;-lKHRB3E6U{4suO&F zEiM#_XGQr>&1=bT5~M#tSE%~Wn*Udgu4(aqf)5|_h2lGne;8H#FW7-Z1|qBTNIV2r1(g4<$_nIip8rwKisVo8Dr!{whx7CQ8t6g& z8SQ^emC5HssX*SxZh9#BuXV3Y0L3H!vGYHTufilesQr7iyR`n>4c1r7wMhTdq5m}Q z#D5j#TsTPkKcv@ABLDxL{9pgSGWo}``Jcak!~aW(CEu(6#`gAWLTdi&!e_cyTHp(R zoV5SzPturIXY=|#9ImnbcND?@L$|o+b=H4?L zg7;exIZ@lA6_-_ig2z)Tmzza`+ZFPXXi_jDFVh*xrr_g@t(<|4S2c4XxdtRdB5S77ro%zTL+#T7m#be`AGnO zUL~jnFKyNbyo`21mxV?4rKq9=U+yr3F5@H2GXfs}4c<^%<-9%5y_Nn7cIYFslRj!t zdpBzPBW4-=a#dD&x%%uV-9~v{%p{ZTt~vKyXKO!fjN&>esz>+e&}ba} zbTgvqQrRxv=4buSvi%0j>sw;~Yyr-{ReE*S8hyTpGEI<7tHhQ5=*zCh99)0HCid$j zL_|Nb2)*CBK5+ijfOA_vcunB=W_t7A>8F(oK%f`bF* zZ2W9Npp?eJ*-NRMByu}LCgglrWx(_GjFm@a?!l&0ZD402hOHWMHy=p(F`PX8<}#`j zz;&W!GX96$JEij#=<(&?$6#Vf6<>#4&2l^^kJ7x3b~rgdashaNm+X}JK^`!4-tOby zld|>w@_F@zpYULA+9iG+uu}Vx>|N)+;KF)1PV--Zm4#R-yqK2taOjf$3J<+RKuqMP z6^}U^zpc`&`mCLLs{0{nuhgHGgO$9KkTqKs9-%?afMdH1G?#OQH{p(fFK#H?e{Fw2 ze$GWz;zUrqIUhB$L=J#qy8K(hHOuLG;@O})9dh)0Jf`zp{;)Ab*PxC`*|g%@H_UN* zaXqIq5qo!$)=>BHPwr*5y@cVzwB+W?;-n=O)bg~|s_%#4hYjHo^hE!MI8o!f`=z}LBuJ}8};XPC_q=6edJ`;DLEvE<@%d-T&RCeM#^OQQ=8+3$r@J&9S$2F)@xG67nyp+}rtiGi0w^UO5ZDTFHB6&*G6Huk(NW2kPTu`nUtX zi+g%&L!@nZ3HEhrSMxuRSm+&tG)dMDGqQOThTK|p`sCY)2aH}Tt zGCXv(XWM$=h(Y`B_?PIAe0t(s{ha*}Ou?Joi z^%$9`4Vx4+8;(&QH|a0EY#D6!bhXoV#pP$HAatIEfl#KI!oAYxo;gfzm&9NA@s7&G z$M18^;>Ihr9gk)|@$NC_baF*8Zv8N#0(63vPgVn;qu{7IQXXHR7T`Ha?z*j*kLLFMp$(H6Z>-E3FrI67QM%lr!qTUPsQaA0(7R|3dXKCdAJ*F2$QG;z5zhnHQcvg zd4^CO4rX+NGFSypfELv|j~(ic&ee`0(HRWD zFv9vCfB55Or<@bXWv8d3=a#vSyb2&*#w?SUDYe}ZezzmQt48{{_7#J?ZacL#56aoW z=$3sz(iv|7B;dDfI`Th_7Q9`$dyoMkZ70e3k=%?!6tmL7JbgenMtAbqGkPcZDck}i zd|27Cae$lD!5K4tQ%!^XiC`Q4q&6qlbkjIvy2ywZr^n>ak4z&lLF4+%J>D?0jHHt* z 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 E1", ["pitch"], 60], + "layout": { + "symbol-placement": "point", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/pitch-low-cull/expected.png b/test/integration/render-tests/dynamic-filter/symbols/point/pitch-low-cull/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..bef3b6e9297fcac06e4295bb7057d220905a4a3d GIT binary patch literal 12423 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 j&(IW?@w)N&1~^d&CX{hJev18P0YLGU%F6;d", ["pitch"], 60], + "layout": { + "symbol-placement": "point", + "text-size": 10, + "symbol-spacing": 50, + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-field": ["get", "distance"], + "text-pitch-alignment": "viewport", + "text-allow-overlap": true + }, + "paint": { + "text-color": "red", + "text-halo-color": "white", + "text-halo-width": 2 + } + } + ] + } diff --git a/test/integration/render-tests/dynamic-filter/symbols/point/pitch-low-show/expected.png b/test/integration/render-tests/dynamic-filter/symbols/point/pitch-low-show/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..3bac5115228c54f903ea5865ec3df69f714d9728 GIT binary patch literal 20405 zcmeFZRZtyK_x6dq9NgjH1b26L3+}GLEx5Zo!QBGEB|va@3+@`+-R30kJ2z7`ck@ln z{Oh}*Xu5mv)eVR4-+I=wcBHbR6fy!n0vH$=vW&F2Di|1e0_Y144hFQxDXMS>^bOoa zRZ0}>$0Xqq7#I*tMqEVgtHIeX_zsQThj;%RS;$YBFMbgtOVb;rv5xgl!Q2*(g44su2);ZXX)o7>Z1tqVlmXWbfGFRzqf;l z*=(NKdUMs^m9v5`nB7co>HY(4ZnIU|vnx%rk<_y0qpxEmT3}u8HC@Ha4JEyyC7%@& z-8X)M{hg66jVb+LGBpaPg#(A~p2^<`{Pj7{KW(_D-n=APF$n>SHo)+i=_Bgtri7_0 z<$iU_nHiqbA@{ZqRkcKRb~_wrEvlh8T6inBik`uMUf{LX^=5(x+HO~}LOQWp^GRuw zj$7#cVKb%SU?jQZXs!f>sCc%7a^H}oW>+bO%P)@y4`nhZ=7IBitRzJ$VEUOcm=M>1`hA^Icu+UX4wpKBjM8M?c!-50bwv>fg}qkWxwi(bZ518o4|R2Hzf$?Z>-!G{(FuCQOCET?)IOPk^mPVlTd+p3RzL z!*BLu!~Ie0c0`;N|Bpv8n;B7?S+gw7Z2Z8>f?G$ScN&H4at$I`n@!&m#dIHXeXok! zHJ90Frpz5Cl+T?H7(d_nm!oW>mYNAHRD6AUeK6q=SWJU)n-Yr@u&=6m~Y=KvUujAjv3pb zSlTM=gY&VWY&&-lDkPDQ%8QD#>=EvPOUa4k)mvwE;WF*61QK9mrim?^KT4$XDiE-W zPZhEhP7{LnM`a$?$lXpXpfhMiH;DZ^Tqih=4C>&a5f~+GZ>-y;Y{SzKzzVhZ=L{?zs9Jaz(jBY*xKEz-oX*SPa zR@2b#@v{=m{83}}S2#H1nZf{ZAYgEa+HwlvS_RJEQG&kfA=mY^j+3wBnD*$b1q*7H zQ_BYGdV;HTlm-lJwV)VuG4=Uw zRTLPpf89sYv~9H6Nfj>mp;uU*ANTFoe1+)^Pk>?z%e2M1E50Xuh%omafX*TTrbmwJ z@w|QEDv%9cI#8|!t(pRBl%FDDVp(H}Mh_DfZf`I7%#FtMRg6I_>WFx)X#R*><|gTLis_uA!k8~y%>e^m&oAzGZ%QXW#_)swIa%&m!e~Q z;&TDu8kZ5Du36V5&sB^fClbkB;EV4xOMSjIO&gH2_Yj%K{}KCr(e`~JbI#5cqacAm zNHAUa_}3?a+k}COM(fg3v>>6vU|DsVH0_ zO^hO0xUkN8M#;-Xx;x%&K>rarbchLyX;{-_Ii*%&Z_kt>H)#}>oDzRssIX4csPz*m z3d|6u89LG|F56%VKQvlUY4;4YxN*$9GaQAM%g2O!en1lc%NIH3HcSiLa%+ef|v9b8pF27(z8qjD=+v0Hym`TA)W1v;0F?S*{>>RpzqS&Yp7OE2BShh8W_MvrTRUGKXn8tU_}MfA2TgnILJP(SHzLo(zx&2 zL=iC8XSNOHK2R9urQBlO6V7aGn}*@~=i$l|>{UQUeu6@VQ8oM5&na^P?uZZUpuvif zH>^nYrX2%t(cJmW!tpW(>p?|8^ zL!8L~XVWlgg0L{q2NyDbB~p`kMAQsG-Oo~F-U;(jKB;&EkQPQK{4>Myd5ESrrX6pp zAYbKTO981MyWB%Xix>j_8a`W_&LsRC4^079&Nk?JYet$mT)x|jpvnji3VK8|45@C& z4$dT(16qDkg@oT$(Hk~lxhb# zym~j=0oA*bU{~&jGWy9ehEBOZn*>1f8pxfoDQOP+4}}1W!$k6d-vu*|pFgb4>7y|T zW6@BFxd#q?oWMWeghjBbaR53uw9!RW6345`u>| z11`Fd9XVfxHxSiA1+W3jVB@vu81(Yg3b99($D2}_?^R@~gr&bmhdV@&*9V~X-#HB} zN8p|E@CD@a@RdM{XGq=!NEkpA2nr*`td$QL6FU0IO7;GP-N|smzH=my8m_>AgXN%c zOTi;R?NeEj=9R=4X9mY8QL0yo_=Mhbp1>lOf`R(7k&WZGeyh(oV?fL6lZY<8Mf3{6-JlIm% zFqt95DGp+p6LnPF$*ky-VL688X^rjWQhi9$Ih;;|uAV_i5hhz#|8SJ*MstKB3~VIZ zf=be8ed{9x2kjXqgvu6XwPaey_;+|VDgZ-TXZs%21qyT+=mKzr7|H(Ss`T$%X*vi+ zpmpe~(D=WJ#znf}DO~Pn1)Tn!TMfq@Sd3-=!TfI`R#s_; zqTY0IDpfl9!fGl}EVp`*RlYPMKydv~-BwC^Pv3cZn+(wd#dD&Szy94E-zx?b!2bHIIDZlin`0-sTL$3G~( zhjontyUB@zx&^@mnSi#vm$*ltBGj_el*?|PgOP6MI%m4IH<53kh?8-AdxzGZ&2~-8 z|Hmhby&gLYJp&BF29V>`E1@26i5eDF+sU{c7#)Akgp(W`K>UvNjacc%Bq?vz zBXivf?77?7PxrB3JU`%I6e2qi-IbJP9E)0MO-+(Jl1+g-9&0lxIgJDSKt1R!>KNRY z(!0gNPgi!bHJj&jDb;@-MD|Ci@fs1lNZA*bltI>#<%Z#wdu_*4}gL(oy zIGk$95>w)1X!XBX>RVVz9rkQTWE|INRn}hq{oNA7XDnJx`5T9jgYOWV$cS6AUf$@L z1#X-RmupH`(OTVvdIbe{3lR!Islsxo+Sk!6cT+tp0GVK|h@L>CQy@PDdP(B;n)9H7 zv7Xqd!dJcBNMvGq5D32I5X`h1$22vNZ08Kvtx9fIIzsBc+`Gf_E&AO5DL6gmNGbW! zE}QDxt4zHX0CSWqT}#mt=XQp_kFsQmN@z6@@pzEAjz->Sa`;Ql>&yY0tKipb{p~RM z0S+|M?!rX*`SE1*nq7-_wsLhVvg`s2D8kP%G5v=8X6(v9s)Z??$Vz@iE>%|gd zcYeDaP8=Qm@tHacaZ7WN-!P(|VeoAv7-rdb6_e>ac+h&@dES>LG~!1PhiU|4C%5vM z(3c;$YnMLkCtYV!cVM^&WboW1HH#cxsy6Ar-bnswKcc{xS7#mP90iBp0A|Z z6;p$n4s%z$8pxc(UiQ8{0Q9Qzx*m?P^u`od32;xS>I{5Tc8D#8vwmQcGU$uH z3u7D7kJfz~<99$tiZ6J^PRQIZeFmU>E)iBU=%PuJ-=cGC@~($#!^*o`tw8;| zFs!|`V5`kznl1&D`pv=UsQm(cR{PkZzPq}z>Cf|r400}6g-q#K{BN{C>qlhF#!`h? z^CI?hW+{%DTruDpxS&x0ah}T;pwUWGvTV((cA>tMn+P|J`HCq-owvt}cFJHz6dEBx z&-$sW8k8ubO z2{0bFqA|vcxa#x_+9puF0)P4;p)2(He6{XRfsN(RFKN$X3n(*lZ`-)LO0Sl0d!8v_ z0iuCjcWL{yKLxClU^?nO@@1@Q-JhLv6$AmXk5T#iej3+ZhC=Oqg0f;rtQ^96^4V4= zSGXP4i zKxBLxx^}1CFTbk^#+|PyTiMcihyz1q2S4e^bJ~nzu390iYMjYtdf4|s5b$)o{HV}M z3OnB!CJ*jFL2-nq)e+ZWMIv#GL$+o@C3FiA`Wwi z7b7t;GpDraT;}aqI`|c(r*|cBU=P_8p>xQ)=(L!dFMzU~E?a^{bbGvBG!)F<)$r0q zQa7fi7x82SzEcS&Xi5biB2q>7<2`Mz|2~6dR70Z{b)ZQ@B&XzZHWb6CDv#Q~+%N+7 zo>5keCJ_}5$%LST&uzuo=kw!>gMy>TZU4$j)99$+artR}!VGV&bJQo<0}u7@nGIuU zGUbGvkqSh-^EwkjojJa`0l}2L;>JX^JjdA(NYP2aFX&N-&xc#d&FRwOpK6_AC<@uz zXow|+sS3-#DsSJf#;(D!x1l58?_$)#x-(k^ zRD5OE4@al``1MZ#g5t`NV`ePD%Kax0Hj}vFNCy6P>f^@-7Z6?IfF!)Zl z!)vrNrW8xH;igIC4NEbZt?0UHh8BUD@7vvi0BI-lVCx=hSutUPr1d-w%12LfpKF`; z{r1}f!(b%NJ0iSBr5R6PO+V&3(@uyER>_Qn+mVSI9BWSmwGK@bYYxU;1iz$@QkI1v z^FptO50zyhyA9cu0uh2O5^i$Co?DB((FC#&y<-^|R zEHJSvOU!DTU-QR(67MiVPQlj=zfQ-jP%ke-B5*KR04K=UBQkqsgV;2@|B&i3nXOkO zLz8;yUl9t{5nCZ#) zB)=%PCh_J#gU!_ZRf>i*GXf)om<4*I?!f!vcj@R*`gv?2o@Z3oLr$eEoxgtQ}PQTn$fF3k_HA5oUw;XmgB0opc)Q345f?zd1qTHJ+pj?G|NKxK0s>^&+NZ34MC=HHXMULfZmNoc zc$jkORpH+#ZV)RIL;iR36Df$f(Z9S?{fEK9sR8kS;rlO+r+^S!2Ao3n|CvfrmBsbQ{Dvr`i~RG1##45W&; z?mC}4Fw!WIzYBD|nk)vAxNG$ze%gx9W0&E*=zw@HLHlTn7fiZe*Q7NR+zG|p8WO{I z=wirm(*S>;#eJ<*5=uqk2Ks3hIiRxZrM}-S&icPM2y{^jT*T%I55^=K_-U`$aaGvq znv=NJp8wKpyHS+M;guOnCqRGg&}52?y6Z)BpLwZnk(DA$Bra~=|LpfDa=fVYe5ZM| z6I~L9%;8xNQan``vK*v~B$pk?zdLlT`*>c89F^r2BQhpra;~Q-$xYd6pI|6SJ9K_h zucT;ls8Q!TD~-e`3B##^@5IItGL<6!)MU?qOknY%URU_mAsTvH<)$lWey(>^H}vI< zL09(o_mlJXlJ@f?cE@~n2ZM71kd(yk-^p&3&}ftDI)K$&;naXkQ2hQ@qTNtz8jpN! zb2N&s)1k%dbz!c0IQf%K@J=ndr6;(g;xj|u(szB2*euQF&H}L#G6|5jm{h5Or7Mc3 z{BS;7DDl&KV56=jUdVp4{a)uN<@3(r9H<1a**WX6DPx((pzqrRU=Al?OwACQGGT5! zm|$pee2!)+w)tI5;E;lV6*XRC1s@{n{r&_}uC)uV?-EGcTD;TR+*c@m|6l+~uUJba z1I2TS$;b0`g)h7D=+&c_+gI(?xeDv%ICP92Yor1X*&3SsdVCl3M-^qo9-FB)zv~sK zt%$#NuV4(r%oYo)SL16dzwW{+eIskKwe06Mi-2|xM*$C<=kbdaCoMcqT5G>xOl6?s zu(b$1P1TeKOW1R&cRMM5zAHgwY783Dp;lTbZ*fO#CcA7glNqy!aX^o!&ihi2Q|fub zU>z^8vzN;5T+D71;5sFsk$t?7s?#|Auqg*?|Gc0xXun={dHSoR(IWPYh%79~Z6{JS zi}UK*dH~@&)}p@UPgeVEcK52VPGxybeadK#VRV1yd#o-3j{0Ze4N{98$(VUTarnLI zrtk9&Wt@3B42}iU1j(`VKRRZ8Obn^y6D-D=cYyD_uC=^)i4t-^C~$B@n%ge{+}25L zsI=c1?KHFSFJ{DO4c1c7LUE=OZiXucV-+UY93r9%crnjT zmuK0gmQJBQfTSV9dZ()nb|k>S*%IUrSmNoJSZY{ZT(#0UrIw|>vftnB91Q)}+i34& zdkLZfTOXmXwo&c)%~0Q`glabZlJB){1LrGKv8XIu!-;Lode@*xZ)W8Jx8U!&>F5}V zWiEbMN+hFvJ=3W$_?6#BbfrScVV`1WXy_8#xMzDlL!TMxi{}%DjdGWH{+*PET89Mxi;YB2Ool-Im#Tg^M0Bmz>25+H zgY~?1Lw$Q~Yl(E=`sxM#deJ zY?qkVunlDxc4n^DSdYKn4JfL-8-sQv2~32?xP7@6rF~c@jQnLrLQ@~JjZL30n#z_W zm0dTKFsaBlFvPSVW=whihcL3v?~VO<2*cIsO`#bzqNVG-{`>>%-c{Ora?qZvY ziB~#VT!n(@%Fvi*d4DQ%3&JHgk`B3J%P}^@ZK>~a?URS(hVr@|8TN@v6NWo4%WHPW zk`c)6MpB zgn3J}1UeeCkN-(@LI{dOqxBs28yo-z>Dt#ZrlCNM^K1$ihc-df{WObAgnGHY?3=wk zqOt%2`gO7=MYui4!&V{I;o4VG=%VJ_G+^wJdr^Fl3 z&r?Ypn;~$E9X>KC)Y_qaVvjCRL_vaOrcSxmYDOi&iA|C)`}Y6U!g!*r<$6Jaijpd%q@=zJgUgsX&{3%u4HowZBui2V%;abh zkd$K`X>s)Sk~rg9V8IlOZNm{HACH0q2zh_VBBdnxF@rvjt5i=@=Vll4}w}&w@jHd9wTqGxXF2g6$OzA_c`uwG# zO!@(p*@^uV86CA63%*-{l522m#IphPxE`i4xTIqDF^Vy*W?taihpF=+FgL@sL`~(z>&SR^Y^sPt3G5kVVuSKCu03KP52tBVV`RyY!am?-=TQ+N zg)JsdQT-gd$F0E4vpn10VnOt> z^~1d(7W-Py@>clZT$59gNzY=-(#8Gc!>BgzWJ972&=v&cpp z^&d5lkzEC74}51SP)d}T-AY2*&gVZZYY#LHQx$n-DwRcMulGw|@0W+>Nu0VD3kqP8 z3*oL(eJN2MR_HFb?iNc%Q%in5q*VyMUqZvn6JEMmQOat`Qw&_D>fm!zD`ZiDfF;yU z*~9;1-7m~Ai&JJSZQpCqAe}KMsjLEH81%SvThw+2e_!{I12OT6ZOPC}b>d1(dgo(r z(EV0$35bAm1xg|@TuOMq^iA#9LoM7b>ar%PfdI%dr=(P&W|L zBz{_zs+8}YqA=AuGN81ix71Fz!a!i%>-(+p=0x)pnrot zLVUJXFSna(;B=1BIkH+&efL8dbW8VakD;y~cW3EpGW3Gs4#pD=zKSgBWtC79Pr-LT z-!ZUE39cIS*`o3*+sqGpN#U}?5fZz(I@3<8Gyguw2)qSXGk)jz4Q-49?*Lp@|a@3E(U@;U^_jORSZ6+T&_NVXtH>?jF!^U4A z3y9Z?-Go+cOQm}9z#TYj#u8+>Z0fj2(znM!O(;=xi`fKzsF9V5CWTC>m*=NSNY{Cl z`XwsKigvj5>;00?N+1(L!`C6rQrb`Mx}eISO-OT@w}zGF3A2A=}B=wf6=^JB`kOuaJ%817BN>^v0QEL_VLy%6v#r{x&=X= z1>)IvG+?Dhs)Rj6m93`jzHzkYjeJGtd)vzG8e4==DM27hJ>Q3q9QPiIi1ZcD0q)W5 z9L82T=CH#~viS2com{8W?)=-gD4PZON-dTlRQuo^NFE3%Je>v$R+ytHA%_=s z;~*^c;VyrF1w$9nTDLC*q`6J@)ew>eU>LCFUwP@NpbvAikkCS=#h`v&g@H1f$hM7N zcjiBjdy4ObK1QzGc41D+%ayo=Je`>(;4Oq6Gog&T{Wd%dg%f(LqTD=AN(WMHt+z#2 z+l&mk9FiD+sa2}<9dn94X1l~ldnz%9Z@SCn2><9@2`K$|yA(T0k_%$otLNN@tZzSI ztoW0ORXR^ooB#_y7WV$u0?k^45~aL$R+?3nC7f1hFI`*l`FGW>Ah_q{8G4pRrYI%B z%PmX2@x65WaQ?RorwD+D>Fw~>sJp^unIDS=a}1~?fU0b*^^$3PkU~vYj4EI@GCCZM z{q08z4qBBH*Km>v!g8`*|IVM8W0rbV;H>vuk}Q_4Wf6%_uo{W?_+&V)Z~jWVTk?+% z*7IB)E)KsAH_Ys9Wp=OI=_(UTC|zkON-P2=`#O zL^y~;6r+2XLV!gos~yq*DPJ;eGmXg(k)UCWfK9PBD4G+$4OChq@e!$Ifhj10;{#}s zU-U!zE1&J{6@=TL(Gh(jB5)#ksAJQ|wjqMpMhe-57~YCubM{3Tfb2XF3LlsXgsjdj znRY5s1VT|%4HijLY{d)7dTdy;xmd(u;vvxHAV?NGUCW)M9tm?#6mqkmM75(OxGFtH zZekK4AZ+cDNTe4Rf9~PtJ_HXkjc+PT25KIp5GoF>OXCkSt2sslIm!=os_NnXcG`*% zNjs$rKcJx771S|pt7|2ojo~&U;Rz{j4MT;>Z$7F5ViObQTag9fx~aH+EaqD8hW5*-8-pku4*N&rcW_&?nSpI`}l( z_ngj@ZYMBYIwBa8-VK5@5QwBkYf6yoWuzew-h=mE+kKgky-X&770xmb7WpkijE573 za@3e5T)~wBQ!WaXHf>^CrFB{p1&9}^Y{deRY?8bqqK@#A`K$}{g-a}pUn01V$S;Zx z;$PB4XH>I*gBVV3fI^z3z>bJ)C5S@y2cnv!UJ;#0&MWKvp(2gD1YIFYL*nqFVU}ff zATZ_HgUabHD=t_CQ}9ZQD7+%ZbVOT?i-l;imq)k^!?a3Fp83YuFxXQX0?Bv`l9Ujg z%fY@7rcivGG!7WyNGs|w!5-3}=dFko2xuw_u^IL3u`+i7d1Zh ziTlYnRQi%7+2_sSB`WVRy5`gY9ZKY#rch4YGpzV=(`P`)Alb~26#gEmCpfXI+%XE? zv}#(^&{IG>E5-jK(ZhkKr8nO03JXG}cTV%kl>3#-vH%Pyx!mwkE(~G7x%`L2L*u{F|p3q@pI>65ZbYlYIebAl60$zaTmJ zH_t3cN0oU-d4B#6i2sG_h=7Oq|B&|)C?hc0cqCAY=1v6|v8?<*7QbbZ3`S8lVnHxGCBkt+4s;lx=bAsOl%iX7kO zvxo6-vniiczp>7mr^}ScQS+fJ)Nl!Py(m_yO0->ynp?_&z~%0O37Wg(wZ746W`P@2 zgk*QKvDgmCL&TO=|1OK8R|_2u4q2?90vn#Jlm?PHeNmlgbQg9C)GEw|`r6#EQ9qEw zPgCz*cD7SK7dK3@`df}Clqw{%LWfUem9Ur=gIu_A{Hiw7!nAr?T$}Xko@HvCuDKmN z_gWS9`hDAds3nVrTw&I;;+4vz%U8A5$=jDthq~L2a|)_0_NqTsKU(~tQ2Z|gZwCp& z`byGe_s1+@Pz-$%qs0nDZGOwPJs4D+{`kqg1oz!m)B4#}E@7sq1eS!I$8SGX_3as3 z%lpDkos*94=hp2RT`VpdAl$%HB5)HKAL{OEg3H{n>n6_i;M={6qp(*G^Va22*=*;F zY`kFR7eeB%!d^!udW7ZZcPA&=E>*$COI zb~s3!FM-FP->CUXHJvy=uw^+V#02t*T!AqH;0^QqJJIOx$Jta9$wp#9#$C#L?*2eu z`(;*|Xop{vW5GBE!vlf*6?)4i;Dms!Pz0I2FiL{(vfTO%nDDFJU@hRor)W@};gb^4 z#Hc|XnQmDw?cJ$0bcwI`(M4CaZ~_n$9~YZ>D6T0)rf|kr8Bo(@&<1kzN}(R@#zTHg z3TS4&UK^IOzTDOsS*>d5Gz>;yNU-{}-oC%UP;mz+p(FoBMj4I-UWiqBgXpE@@$1r8XTdD0{$9j$1y6Y_|BIwC=5D&qObA4Xm;mcJ# z``5c=A!Jzbe$PXhmNhcFHLK(6lbY&;@f`3g0hFwOt5)-f(47;wQ~<6lHbNY8u_im%}+KjHZA8wmhC&-KKf|!%6AQo?GCl zI1yjdI%uJvghbHd_ zci#4(oZ*HxJ;PMIPeMr!Vz$ft(N@qJ=AP-mt;`+IJBkTsiU=3-BRVd0Q-q%aRAG7k z{xoG3)+=mW43y6*O{_ku$8jUEDZIM*dh9>e*`*(vULBZZ2m%np zOUq~aP~@mkV)nUDjj~5Fc;jnTBhe+%`@s**#-GKE2O@&eh)t5$0;QAbtGdDSGC3L= z1Yb>J#`@5+y+gT$8)>5Kz=T#4FOr-Ehs8~H4j2?6t412&9GQA)wl*~js1J~)0n$*Te9!>4 z0(wK}d%*c|_h&YOA(cpHR)Qc$Qq}sD(1V@?{EE0UT*UBwCg6gpZ6bpC&TH8qB2w;& z3BMx1n?oE?;K5D`E&OPD67(a_r-6fm>g>FdMk8eGT8l^_gFxZ`8e{?sn?zR; zmht$9{3fxEks|WqQ5rcv;r%MywGWw!AE+T6-XJdN%|9SX9b{7$NAa5`D*I)_ul;Fq z<1<}16yeuD5Gu$h9ce$3*#MK`8IwTfKl2$Tpx7pPRE1)&C!;*DrF7;so{j-7%n^HS zCn>4FtW?~Y`}VT1!FetRT8k2LvW@|e z4QC&(Luxo7BN4EKUs;jSWqDDAUX9=ZJKY`0Wk0M&@Kl&rEjn;^z(60~tL}0P!i;Dt zw`{yY=I~rhaYv&s@F)r7ofxQNY0F|*TaK?+*r;2=q~NeoP@ajdgnl3EK8MDMVkj&< z{a;ZEdcGNtB&BijzfVF1EsCl3Bv-O@2;gH(fYGt;Z3pXOrdT#*yipG|H`vG zizHwmYTv65iLEBdoe(LD2s-@L&x?QQovnVH&uKW1t0OECwyD5zTfPE?vv6FOgfRRA zAN9S9btJpi^Rb$>5KLCvk1;+B+VeHdrna`uFK_6R_KHNcO@lAGA~xhI*m7_ ztk$K*qH8w)4(j4?-_Wj9A%`V4K_HCAylNc{|2@W}d!FM}8LFG$@9E4A_C;#E$EV3^ zSMq3tx&*}9aRQvw3_VG&W4g)LCRjH*se};A9ok-dXh*4<^fNWTG}`vi6aRF*QR&Z_ zB!jy5{-Xay*WczpB0gEri%-*#p;{|3>+zSDOe&p}#^T2v>idgBg{2ax$*sc2^XPsx z`1E{L(`G}DR`=H7D3ZEZCb_uDwuEh}aS?29g3IAo$6;==`|6pYA?PkI-yT#!-U}Q< zX^^qP?W}SFmJlT2H#pM1o{)iB=8o1q6dLuMBSDW(P{sigUJn@Czi5Mckx<`h2=Yl%OnftyxSEwKNn_Umu~0xFv1)@CT`>q)z3z&C-6x&5Pf?&zIFEi( zJz1do#KIZ1XjX~VIwfdJAzDBVq*j=HHI%c77bsSZ?o2pule1ZxjxtGS#4ZMLgtG*S85p!B6RY=SDzfu0KAP4yYa@^8>1I16>7LO9diXFPtg*!#cG#W~853*+a zBg6Dt>}NAMG#Z$p9M{|G255PpW-F3IAc7b)s*^y1v;9xXg!w%|j?Xb)dQD)BU$4R| z#z0;mQ28K^cN9UKiXc)EVwa9WmTa+x1aqKCT@fV{9n+M#Er|c|0@OXEcT${O#ock2 zhW3RD1C~WtGivzHnzqQ8NL~AGoNz{mpo7v`LwpZzj3E$yo&p!`O9K4aMKse2Kl6nZ z9ma0-Ip!vbuNo)^weF8#(6|3MbVp=g?twjY%3fxzfhFNhLKQ+XVFt!$U%62AVm^j+ zY3h;wdaiU`GM2<9@h5aOks?n0>m!;iaW;us?0RcPLmH9E2{s3~8ts!;K_FnvPcgP@ zos4luM}%&-yTaQLaRhu7cz?{+$OKx_yR13g>r{ddupSDCtY$iVcBfIV;hGErSJ_z42CwU%!I;kcFKx72Lg`KVJBQ>)D=%WZ_<5`GI`J)K+mzV0i z{O!z}930L`Tw)qO-s{oSKi+2_uQG}B zpSfv3K>&(31Y%WSZ;9iKgH!6SX0WJMsB-=w9sKi$^)~>!Tqh!=kCa!}#QfP+U9do0 zxeSCb`0wj-c1bJEO^g|g$aN1VHIjre&v3&1&hiW!L~!H~F(&sjQrH1dR8XRtfnMXJ zfDm%*R;LSIJ|Mwmd*K?r?y3d0SN<%&9MuX#c?7_Yec#umq7 zdb|BR+5;CYgKUhAsW|A@k-O;V-b)XmA~qzccfBdkt6MZy7~E~7yaP|DY@H21)1;77 zx$S~79{|3PK`I~QB0DMD9j!9SwW)QE#bjTZy(yze?5Z3Fm0J9b4H+ZGWeDUvh1kB> z15mK~w#D&Pi|0>CFZ$k3Hg`GNk4^Dt?g$W8k-L-l>w!%B1Wp64&gg~^;N9LA9Q8&i z*N1tf3Gjkyobf}`_bOmwMH68YJh$fWsM~v72z2pL(~6c+Dj=C!I1NBaoymVJa`M`T z$|*+Kcho5w%#RDs+E%DPDWn0%V!yVerd+y2owxK2MzT&yIzNFFS`xk-pvJa`j{g-s zni)ZYtt*g4pK$<~foc()s{ExNhlt>ikUu9Z@%tWq4xXiitJ_m--jz3iN<LE$*@-N|5S~48w}>`&d;Lq!1>SMDjuw*pyn) zfKhHdt>mwKdui7c&Jo301CN|fBg`YD)(E6_Y<66`gv>j?%7^8fuo>vTeG>>?41(s| z^xpy}fJRs1S~oKZU4|U|f=^ahoW1qOzy`FCA_{?E7x z^koO%HM3-4=%^s}NcHK&5jk;#4&ENlY}MHJCXD%V#{FK*sWc+=ox_}H%n%Lu6$Z4v zQP-4zcC}7mQ38f=CwRNEG&;#+0daQ{SJDsBZny)}2qD0gG4EpV(k?Lt;X<`{H4T?H zmyv=}H1Hr@heI|p6~i{sXm9+F6?YohRvWM-Ra~)pc8TjDB91{7Dguf81Yp=~i3=Yp zCdwf=&8N!}NGMa@Hf0XGsmz^c1L95S@2MbZsLj2J4akeoras8jueZU*mOD^vx~nn{ zpo{7ia-(*-<4biDf!cy}ay%E)gkf}Tg=6Dw^}J~wjFJH-VkKhI0`+rn{4hoF(5n(z6F=St<`SzcYD-XUB|EGajb*o=@S0EB}Q_n`G+j1Ewz zwr^ZD{KQDFec$b%LeM*zN(oer#>lkcm7`29YhcU+M?BFf#v*8I5|=u#@A{{@V}Dwf4MTrx?^iEyWHov zG&4ie*phx9P*cEpTu?~|P#IweDhyzTT+wV!Ib@dwl4uzl5#CTQBuN3GJICG;|H-e8 zP^y1h*s$hb1^z2EJ40Ln|8LB)AP+Fo|3DA$|GusNKRLGl*Z#F=zCvhs8R-1dp;ecq zRin|G4?~{i+LQ*Fq|NQtfOZ?%?OFy6bBgzF?#;K0hN^WYs#iOocv9*dAhNLNiqR>N z@(5q{FhD-fk|at{meA7l;%QK({x@y-Vz|~U3HBvoMBiim`fbyXjhjv*MO;4E->TnM z@e6FvFXxhNoz`0NEFAEiSRX3xKEm|d?QqroQPml;tZMF%v{XtghRm0{O@D&P_S2o# z11T`QXiU(OC!S+UAS*y`tWb$eL zwWzzbSVk0MEpuKK|aGJ(tP1@Nn0M3DVY2Bd&b30Q_+X1jnE`nWHq;0Gcz6R?P` zw5sra_#930HTk$X5jll~?(~$T$tq;g0=K4hnp1wX$!4-j9M4ICUh0wD7V(v8Bl+E{ zD4Kr-Wsv9@*Kc$A1o8(IgO(H+j2Vg59uCeQZ1ZU80(D7dN`s&+>E4~5 z?#h93x#D{=HNi4^R<-WQSWP|1P{HH#woa`fbdw|&PYnJpQiX~OWH4kT^6%L0xaj=U zr|JlG{c2?Ke?A#U?oQg=t)_HYNgCZw{a(E?zc0 zelxU4n+}bdfck-|sEj%~JzYRK8YCI&z4@6Ac_GO3@mya--~_{%z(gUOL&Pe+{M!}^ z8Q$@X-L_4wCU?Hw!(P+p`6$fcY(>Mtc7Z(x{x+OM5$|^pc>>pFBld2pX0d5pqJh^4 z=CW;#wbM-0Gbl~dh`pQjJk$mzlp7cH*)G*75_wON_-oA;HhyyFtM5TcV3iFHF>Q99 zm1%xr(1Ai8$@4!b=P4#qXUeeL$6X&RmYJQe;Kc5Dvao*liQK`9Gj><=>A^6ea>uKi z)=o$%k~-<&)%JQaub{B`;pYo&_&+HSuEp)iVA-T=CA7ji9Ym68XOtknbQ=eeucjlQ!I*4<~n)xBjP3|Ky5uC&@ zqu9d^O9`6oBM_1ZL&=grv{NJ$r#K&cV6Ev3FKGRV)q+^6RdbW{$RqZ8NP=z!P#%BW zf{A$?>I2n5r-D)?Tdi4s+K$Ts4YQ%A%P#@8g+j2XJ@+LD2Q-gVgz3YdhL zW)90Y>(;g8q?_YhYXALh)=viw(O+=Ej)bcD`st@Rt+4D+4$_54s#dkG8A4%p)uKh9 zD}xRMA;ajKhdtdQFdUnT zVqn8z3OWn|0;w@-l(LVl5tR0W&hv!buK)K!F(@g_61dj%KJ>MkE;H z5tK2bDCWZ)=2ow6Gv+4Y_u-Y`n-nI*VwL!VT*2((i-QNV2t8)@Ta2+6@e00l(wu#U;xUYS#)vzbk+&3m?0^HT z*yo7H;Cs{oz#KL#2xaO(-iI%PNe`0<3NT$DVx8PaJTjGN+ty;9-<^V`P9S_335YQo zf$2~kkO2oZBr2^G4&xco!l;V(goO(SIP~Se1XqO$HV;K@5O@R-&hKc3QVt)r=Ki|>E=)&i~ds_^C`K82RIcl1jGp}b~P{TZ!KvzO10z!qa-!RU|f_@j@k8$m@glOdKbywI@T5iN{aY60;F z*+Q}~G2?6qmOA>?SJp`|_NFVQE+aUJ>vH96T*WBs*=MB_Pc*Vd0C5JGqL|!10?E6X zBp2-!N{q7$+9Y~aIt$uY&PBR*wXTFYGQq|e1vcf0D}sf#49C9x)~FO^xTB3({wYDi z!!MGOQ6V#9NEbq3m<)EDA7MOAL^2XQsA0aQ<>fsjFP+VU4;m@$=myb-$wizohM|Bl zA4Uu@v!^gp_)x?sYzVx4drL$gMx^Moc%H=KP>~rvi$~#cpiALH-C_LW5az|< zoB%dt^u=771cpW33;~oaNk*aLu#sfrX$sUcqZgi1ARtg25Cyn~ZRvsqwlB1?s5!bj zH$#B43r13Od?;W>u}hcQ!v>HGSn|v%Nl2Wc_!ui<;7L5wG4l^cc>VvGdF`M;L%gVD z2$wu2W~l*?3Rv<49Kr`dLzh9f$D^kxWsG>{91kHxEK^V13;{4B_o=OP!4NCrhc1}M zrm4gHI}yl*dO=)=_;KdMC=ilHtaBj09p_2~OCY|%j({WJ2si>e3<6FdJIq$QqmFLoKN5Bzq1a=q%oIrM%t#(Hp0Y|_QC|CrXKnfO5|80(dBj5<^FbMoV X*orqE9A?a$00000NkvXXu0mjf6H { t.end(); }); + t.test('dynamic filters', (t) => { + + const DYNAMIC_FILTERS = [ + ["case", + ["<", ["pitch"], 60], true, + ["all", [">=", ["pitch"], 60], ["<", ["distance-from-center"], 2]], true, + false + ], + ["case", + ["<", ["pitch"], 60], ["<", ["get", "filter_rank"], 2], + [">", ["get", "filter_rank"], 4], + ], + ["all", ["<", ["get", "filter_rank"], 2 ], [ "<", ["pitch"], 60]], + ["any", ["<", ["get", "filter_rank"], 2 ], [ "<", ["pitch"], 60]], + ["<", ["pitch"], 60], + ["all", + [ + "<=", + ["get", "filterrank"], + 3 + ], + [ + "match", + ["get", "class"], + "settlement", + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ], + "disputed_settlement", + [ + "all", + [ + "==", + ["get", "disputed"], + "true" + ], + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ], + ["all", [">=", ["pitch"], 60], ["<", ["distance-from-center"], 2]] + ], + false + ], + [ + "step", + ["zoom"], + false, + 8, + [ + "<", + ["get", "symbolrank"], + 11 + ], + 10, + [ + "<", + ["get", "symbolrank"], + 12 + ], + 11, + [ + "<", + ["get", "symbolrank"], + 13 + ], + 12, + [ + "<", + ["get", "symbolrank"], + 15 + ], + 13, + [ + ">=", + ["get", "symbolrank"], + 11 + ], + 14, + [ + ">=", + ["get", "symbolrank"], + 13 + ] + ] + ] + ]; + + const STATIC_FILTERS = [ + ["match", + ["get", "class"], + "country", + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ], + "disputed_country", + [ + "all", + [ + "==", + ["get", "disputed"], + "true" + ], + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ] + ], + false + ], + ["all", + [ + "<=", + ["get", "filterrank"], + 3 + ], + [ + "match", + ["get", "class"], + "settlement", + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ], + "disputed_settlement", + [ + "all", + [ + "==", + ["get", "disputed"], + "true" + ], + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ] + ], + false + ], + [ + "step", + ["zoom"], + false, + 8, + [ + "<", + ["get", "symbolrank"], + 11 + ], + 10, + [ + "<", + ["get", "symbolrank"], + 12 + ], + 11, + [ + "<", + ["get", "symbolrank"], + 13 + ], + 12, + [ + "<", + ["get", "symbolrank"], + 15 + ], + 13, + [ + ">=", + ["get", "symbolrank"], + 11 + ], + 14, + [ + ">=", + ["get", "symbolrank"], + 13 + ] + ] + ], + ["all", + [ + "match", + ["get", "class"], + "settlement_subdivision", + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ], + "disputed_settlement_subdivision", + [ + "all", + [ + "==", + ["get", "disputed"], + "true" + ], + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ] + ], + false + ], + [ + "<=", + ["get", "filterrank"], + 4 + ] + ], + ["<=", + ["get", "filterrank"], + [ + "+", + [ + "step", + ["zoom"], + 0, + 16, + 1, + 17, + 2 + ], + 3 + ] + ], + ["<=", ["get", "test_param"], null] + ]; + + t.test('isDynamicFilter', (t) => { + t.test('true', (t) => { + for (const filter of DYNAMIC_FILTERS) { + t.ok(isDynamicFilter(filter), `Filter ${JSON.stringify(filter, null, 2)} should be classified as dynamic.`); + } + t.end(); + }); + + t.test('false', (t) => { + for (const filter of STATIC_FILTERS) { + t.notOk(isDynamicFilter(filter), `Filter ${JSON.stringify(filter, null, 2)} should be classified as static.`); + } + t.end(); + }); + + t.end(); + }); + + t.test('extractStaticFilter', (t) => { + t.test('it lets static filters pass through', (t) => { + for (const filter of STATIC_FILTERS) { + t.equal(extractStaticFilter(filter), filter); + } + t.end(); + }); + + t.test('it collapses dynamic case expressions to any expressions', (t) => { + const testCases = [ + { + dynamic: ["case", + ["<", ["pitch"], 60], true, + ["all", [">=", ["pitch"], 60], ["<", ["distance-from-center"], 2]], true, + false + ], + static: ["any", true, true, false] + }, + { + dynamic: ["case", + ["<", ["pitch"], 60], ["<", ["get", "filter_rank"], 2], + [">", ["get", "filter_rank"], 4], + ], + static: ["any", ["<", ["get", "filter_rank"], 2], [">", ["get", "filter_rank"], 4]] + }, + { + dynamic: ["case", + ["<", ["pitch"], 60], ["<", ["get", "filter_rank"], 2], + ["all", [">=", ["pitch"], 60], ["<", ["distance-from-center"], 2]], [">", ["get", "filter_rank"], 4], + false + ], + static: ["any", ["<", ["get", "filter_rank"], 2], [">", ["get", "filter_rank"], 4], false] + }, + { + dynamic: ["case", + ["<", ["pitch"], 60], ["<", ["get", "filter_rank"], 2], + ["all", [">=", ["pitch"], 60], ["<", ["distance-from-center"], 2]], [">", ["get", "filter_rank"], 4], + ["any", ["==", ["get", "filter_rank"], 2], ["==", ["get", "filter_rank"], 3]] + ], + static: ["any", + ["<", ["get", "filter_rank"], 2], + [">", ["get", "filter_rank"], 4], + ["any", ["==", ["get", "filter_rank"], 2], ["==", ["get", "filter_rank"], 3]] + ] + }, + { + dynamic: ["all", + [ + "match", + ["get", "class"], + "settlement_subdivision", + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ], + "disputed_settlement_subdivision", + [ + "all", + [ + "==", + ["get", "disputed"], + "true" + ], + [ + "case", + ["<", ["pitch"], 60], ["==", ["get", "worldview"], "US"], + ["all", [">=", ["pitch"], 60], ["<", ["distance-from-center"], 2]], ["==", ["get", "worldview"], "IND"], + ["==", ["get", "worldview"], "INTL"] + ] + ], + false + ], + [ + "<=", + ["get", "filterrank"], + 4 + ] + ], + static: ["all", + [ + "match", + ["get", "class"], + "settlement_subdivision", + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ], + "disputed_settlement_subdivision", + [ + "all", + [ + "==", + ["get", "disputed"], + "true" + ], + [ + "any", + ["==", ["get", "worldview"], "US"], + ["==", ["get", "worldview"], "IND"], + ["==", ["get", "worldview"], "INTL"] + ] + ], + false + ], + [ + "<=", + ["get", "filterrank"], + 4 + ] + ] + }, + { + dynamic: ["all", + [ + "match", + ["get", "class"], + "settlement_subdivision", + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ], + "disputed_settlement_subdivision", + [ + "all", + [ + "==", + ["get", "disputed"], + "true" + ], + [ + "case", + ["<", ["pitch"], 60], ["==", ["get", "worldview"], "US"], + ["all", [">=", ["pitch"], 60], ["<", ["distance-from-center"], 2]], ["==", ["get", "worldview"], "IND"], + ["==", ["get", "worldview"], "INTL"] + ] + ], + false + ], + [ + "case", + ["<", ["pitch"], 60], ["<", ["get", "filterrank"], 4], + [">=", ["get", "filterrank"], 5] + ] + ], + static: ["all", + [ + "match", + ["get", "class"], + "settlement_subdivision", + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ], + "disputed_settlement_subdivision", + [ + "all", + [ + "==", + ["get", "disputed"], + "true" + ], + [ + "any", + ["==", ["get", "worldview"], "US"], + ["==", ["get", "worldview"], "IND"], + ["==", ["get", "worldview"], "INTL"] + ] + ], + false + ], + [ + "any", + ["<", ["get", "filterrank"], 4], + [">=", ["get", "filterrank"], 5] + ] + ] + } + ]; + + for (const testCase of testCases) { + t.deepEqual(extractStaticFilter(testCase.dynamic), testCase.static); + } + + t.end(); + }); + + t.test('it collapses dynamic match expressions to any expressions', (t) => { + const testCases = [ + { + dynamic: ["match", + ["pitch"], + [10, 20, 30], [ "<", ["get", "filterrank"], 2], + [70, 80], [ ">", ["get", "filterrank"], 5], + ["all", [ ">", ["get", "filterrank"], 2], [ "<", ["get", "filterrank"], 5]] + ], + static: ["any", + [ "<", ["get", "filterrank"], 2], + [ ">", ["get", "filterrank"], 5], + ["all", [ ">", ["get", "filterrank"], 2], [ "<", ["get", "filterrank"], 5]] + ] + }, + { + dynamic: ["all", + [ + "match", + ["get", "class"], + "settlement_subdivision", + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ], + "disputed_settlement_subdivision", + [ + "all", + [ + "match", + ["distance-from-center"], + [1, 2], ["==", ["get", "worldview"], "US"], + [4, 5], ["==", ["get", "worldview"], "IND"], + ["==", ["get", "worldview"], "INTL"] + ], + [ + "case", + ["<", ["pitch"], 60], ["==", ["get", "worldview"], "US"], + ["all", [">=", ["pitch"], 60], ["<", ["distance-from-center"], 2]], ["==", ["get", "worldview"], "IND"], + ["==", ["get", "worldview"], "INTL"] + ] + ], + false + ], + [ + "<=", + ["get", "filterrank"], + 4 + ] + ], + static: ["all", + [ + "match", + ["get", "class"], + "settlement_subdivision", + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ], + "disputed_settlement_subdivision", + [ + "all", + [ + "any", + ["==", ["get", "worldview"], "US"], + ["==", ["get", "worldview"], "IND"], + ["==", ["get", "worldview"], "INTL"] + ], + [ + "any", + ["==", ["get", "worldview"], "US"], + ["==", ["get", "worldview"], "IND"], + ["==", ["get", "worldview"], "INTL"] + ] + ], + false + ], + [ + "<=", + ["get", "filterrank"], + 4 + ] + ] + } + ]; + + for (const testCase of testCases) { + t.deepEqual(extractStaticFilter(testCase.dynamic), testCase.static); + } + + t.end(); + }); + + t.test('it collapses dynamic step expressions to any expressions', (t) => { + const testCases = [ + { + dynamic: [ + "all", + [ + "<=", + ["get", "filterrank"], + 3 + ], + [ + "match", + ["get", "class"], + "settlement", + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ], + "disputed_settlement", + [ + "all", + [ + "==", + ["get", "disputed"], + "true" + ], + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ] + ], + false + ], + [ + "step", + ["pitch"], + true, + 10, + [ + ">=", + ["get", "symbolrank"], + 10 + ], + 20, + [ + ">=", + ["get", "symbolrank"], + 20 + ], + 30, + [ + ">=", + ["get", "symbolrank"], + 30 + ], + 40, + [ + ">=", + ["get", "symbolrank"], + 40 + ], + 50, + [ + ">=", + ["get", "symbolrank"], + 50 + ], + 60, + [ + ">=", + ["get", "symbolrank"], + 60 + ] + ] + ], + static: [ + "all", + [ + "<=", + ["get", "filterrank"], + 3 + ], + [ + "match", + ["get", "class"], + "settlement", + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ], + "disputed_settlement", + [ + "all", + [ + "==", + ["get", "disputed"], + "true" + ], + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ] + ], + false + ], + [ + "any", + true, + [ + ">=", + ["get", "symbolrank"], + 10 + ], + [ + ">=", + ["get", "symbolrank"], + 20 + ], + [ + ">=", + ["get", "symbolrank"], + 30 + ], + [ + ">=", + ["get", "symbolrank"], + 40 + ], + [ + ">=", + ["get", "symbolrank"], + 50 + ], + [ + ">=", + ["get", "symbolrank"], + 60 + ] + ] + ] + } + ]; + + for (const testCase of testCases) { + t.deepEqual(extractStaticFilter(testCase.dynamic), testCase.static); + } + + t.end(); + + }); + + t.test('it collapses dynamic conditionals to true', (t) => { + const testCases = [ + { + dynamic: ["<", ["pitch"], 60], + static: true + }, + { + dynamic: ["all", ["<", ["pitch"], 60], ["<", ["distance-from-center"], 4]], + static: ["all", true, true] + }, + { + dynamic: ["all", ["<", ["+", ["*", ["pitch"], 2], 5], 60], ["<", ["+", ["distance-from-center"], 1], 4]], + static: ["all", true, true] + }, + { + dynamic: [ + "all", + [ + "<=", + ["get", "filterrank"], + 3 + ], + [ + "match", + ["get", "class"], + "settlement", + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ], + "disputed_settlement", + [ + "all", + [ + "==", + ["get", "disputed"], + "true" + ], + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ] + ], + false + ], + [ + "step", + ["zoom"], + true, + 8, + [ + ">=", + ["get", "symbolrank"], + 11 + ], + 10, + [ + ">=", + ["get", "symbolrank"], + 12 + ], + 11, + [ + ">=", + ["get", "symbolrank"], + 13 + ], + 12, + [ + ">=", + ["get", "symbolrank"], + 15 + ], + 13, + [ + ">=", + ["get", "symbolrank"], + 11 + ], + 14, + [ + ">=", + ["get", "symbolrank"], + 13 + ] + ], + [ + "<=", + ["pitch"], + 60 + ], + [ + "<=", + ["distance-from-center"], + 2 + ] + ], + static: [ + "all", + [ + "<=", + ["get", "filterrank"], + 3 + ], + [ + "match", + ["get", "class"], + "settlement", + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ], + "disputed_settlement", + [ + "all", + [ + "==", + ["get", "disputed"], + "true" + ], + [ + "match", + ["get", "worldview"], + ["all", "US"], + true, + false + ] + ], + false + ], + [ + "step", + ["zoom"], + true, + 8, + [ + ">=", + ["get", "symbolrank"], + 11 + ], + 10, + [ + ">=", + ["get", "symbolrank"], + 12 + ], + 11, + [ + ">=", + ["get", "symbolrank"], + 13 + ], + 12, + [ + ">=", + ["get", "symbolrank"], + 15 + ], + 13, + [ + ">=", + ["get", "symbolrank"], + 11 + ], + 14, + [ + ">=", + ["get", "symbolrank"], + 13 + ] + ], + true, + true + ] + } + ]; + for (const testCase of testCases) { + t.deepEqual(extractStaticFilter(testCase.dynamic), testCase.static); + } + + t.end(); + }); + + t.end(); + }); + + t.end(); + }); + legacyFilterTests(t, createFilter); t.end(); diff --git a/test/unit/style-spec/fixture/bad-dasharray.output.json b/test/unit/style-spec/fixture/bad-dasharray.output.json index b7b7dcf0077..9b9529d9417 100644 --- a/test/unit/style-spec/fixture/bad-dasharray.output.json +++ b/test/unit/style-spec/fixture/bad-dasharray.output.json @@ -1,10 +1,10 @@ [ { - "line": 16, - "message": "layers[0].paint.line-dasharray[1]: -2 is less than the minimum value 0" + "message": "layers[0].paint.line-dasharray[1]: -2 is less than the minimum value 0", + "line": 16 }, { - "line": 16, - "message": "layers[0].paint.line-dasharray[2]: -1 is less than the minimum value 0" + "message": "layers[0].paint.line-dasharray[2]: -1 is less than the minimum value 0", + "line": 16 } ] \ No newline at end of file diff --git a/test/unit/style-spec/fixture/bad-sky.output.json b/test/unit/style-spec/fixture/bad-sky.output.json index f6a5e63fff2..4e3ca7c81f0 100644 --- a/test/unit/style-spec/fixture/bad-sky.output.json +++ b/test/unit/style-spec/fixture/bad-sky.output.json @@ -1,18 +1,18 @@ [ { - "line": 23, - "message": "layers[1].paint.sky-atmosphere-sun[0]: -1 is less than the minimum value 0" + "message": "layers[1].paint.sky-atmosphere-sun[0]: -1 is less than the minimum value 0", + "line": 23 }, { - "line": 23, - "message": "layers[1].paint.sky-atmosphere-sun[1]: 181 is greater than the maximum value 180" + "message": "layers[1].paint.sky-atmosphere-sun[1]: 181 is greater than the maximum value 180", + "line": 23 }, { - "line": 39, - "message": "layers[3].paint.sky-gradient-center[0]: 361 is greater than the maximum value 360" + "message": "layers[3].paint.sky-gradient-center[0]: 361 is greater than the maximum value 360", + "line": 39 }, { - "line": 39, - "message": "layers[3].paint.sky-gradient-center[1]: -1 is less than the minimum value 0" + "message": "layers[3].paint.sky-gradient-center[1]: -1 is less than the minimum value 0", + "line": 39 } ] \ No newline at end of file diff --git a/test/unit/style-spec/fixture/filters-dynamic-distance.input.json b/test/unit/style-spec/fixture/filters-dynamic-distance.input.json new file mode 100644 index 00000000000..5e8844ad950 --- /dev/null +++ b/test/unit/style-spec/fixture/filters-dynamic-distance.input.json @@ -0,0 +1,53 @@ +{ + "version": 8, + "sources": { + "source": { + "type": "vector", + "url": "mapbox://mapbox.mapbox-streets-v5" + } + }, + "layers": [ + { + "id": "symbol-supported", + "type": "symbol", + "source": "source", + "source-layer": "source-layer", + "filter": ["any", ["<", ["get", "filter_rank"], 2 ], [ "<", ["distance-from-center"], 60]] + }, + { + "id": "fill-not-supported", + "type": "fill", + "source": "source", + "source-layer": "source-layer", + "filter": ["any", ["<", ["get", "filter_rank"], 2 ], [ "<", ["distance-from-center"], 60]] + }, + { + "id": "line-not-supported", + "type": "line", + "source": "source", + "source-layer": "source-layer", + "filter": ["any", ["<", ["get", "filter_rank"], 2 ], [ "<", ["distance-from-center"], 60]] + }, + { + "id": "circle-not-supported", + "type": "circle", + "source": "source", + "source-layer": "source-layer", + "filter": ["any", ["<", ["get", "filter_rank"], 2 ], [ "<", ["distance-from-center"], 60]] + }, + { + "id": "fill-extrusion-not-supported", + "type": "fill-extrusion", + "source": "source", + "source-layer": "source-layer", + "filter": ["any", ["<", ["get", "filter_rank"], 2 ], [ "<", ["distance-from-center"], 60]] + }, + { + "id": "heatmap-not-supported", + "type": "heatmap", + "source": "source", + "source-layer": "source-layer", + "filter": ["any", ["<", ["get", "filter_rank"], 2 ], [ "<", ["distance-from-center"], 60]] + } + ] +} diff --git a/test/unit/style-spec/fixture/filters-dynamic-distance.output-api-supported.json b/test/unit/style-spec/fixture/filters-dynamic-distance.output-api-supported.json new file mode 100644 index 00000000000..f449526e74f --- /dev/null +++ b/test/unit/style-spec/fixture/filters-dynamic-distance.output-api-supported.json @@ -0,0 +1,22 @@ +[ + { + "message": "layers[1].filter: [\"distance-from-center\"] expression is not supported in a filter for a fill layer with id: fill-not-supported", + "line": 22 + }, + { + "message": "layers[2].filter: [\"distance-from-center\"] expression is not supported in a filter for a line layer with id: line-not-supported", + "line": 29 + }, + { + "message": "layers[3].filter: [\"distance-from-center\"] expression is not supported in a filter for a circle layer with id: circle-not-supported", + "line": 36 + }, + { + "message": "layers[4].filter: [\"distance-from-center\"] expression is not supported in a filter for a fill-extrusion layer with id: fill-extrusion-not-supported", + "line": 43 + }, + { + "message": "layers[5].filter: [\"distance-from-center\"] expression is not supported in a filter for a heatmap layer with id: heatmap-not-supported", + "line": 50 + } +] \ No newline at end of file diff --git a/test/unit/style-spec/fixture/filters-dynamic-distance.output.json b/test/unit/style-spec/fixture/filters-dynamic-distance.output.json new file mode 100644 index 00000000000..f449526e74f --- /dev/null +++ b/test/unit/style-spec/fixture/filters-dynamic-distance.output.json @@ -0,0 +1,22 @@ +[ + { + "message": "layers[1].filter: [\"distance-from-center\"] expression is not supported in a filter for a fill layer with id: fill-not-supported", + "line": 22 + }, + { + "message": "layers[2].filter: [\"distance-from-center\"] expression is not supported in a filter for a line layer with id: line-not-supported", + "line": 29 + }, + { + "message": "layers[3].filter: [\"distance-from-center\"] expression is not supported in a filter for a circle layer with id: circle-not-supported", + "line": 36 + }, + { + "message": "layers[4].filter: [\"distance-from-center\"] expression is not supported in a filter for a fill-extrusion layer with id: fill-extrusion-not-supported", + "line": 43 + }, + { + "message": "layers[5].filter: [\"distance-from-center\"] expression is not supported in a filter for a heatmap layer with id: heatmap-not-supported", + "line": 50 + } +] \ No newline at end of file diff --git a/test/unit/style-spec/fixture/filters-dynamic-pitch.input.json b/test/unit/style-spec/fixture/filters-dynamic-pitch.input.json new file mode 100644 index 00000000000..026a57cc6d1 --- /dev/null +++ b/test/unit/style-spec/fixture/filters-dynamic-pitch.input.json @@ -0,0 +1,53 @@ +{ + "version": 8, + "sources": { + "source": { + "type": "vector", + "url": "mapbox://mapbox.mapbox-streets-v5" + } + }, + "layers": [ + { + "id": "symbol-supported", + "type": "symbol", + "source": "source", + "source-layer": "source-layer", + "filter": ["any", ["<", ["get", "filter_rank"], 2 ], [ "<", ["pitch"], 60]] + }, + { + "id": "fill-not-supported", + "type": "fill", + "source": "source", + "source-layer": "source-layer", + "filter": ["any", ["<", ["get", "filter_rank"], 2 ], [ "<", ["pitch"], 60]] + }, + { + "id": "line-not-supported", + "type": "line", + "source": "source", + "source-layer": "source-layer", + "filter": ["any", ["<", ["get", "filter_rank"], 2 ], [ "<", ["pitch"], 60]] + }, + { + "id": "circle-not-supported", + "type": "circle", + "source": "source", + "source-layer": "source-layer", + "filter": ["any", ["<", ["get", "filter_rank"], 2 ], [ "<", ["pitch"], 60]] + }, + { + "id": "fill-extrusion-not-supported", + "type": "fill-extrusion", + "source": "source", + "source-layer": "source-layer", + "filter": ["any", ["<", ["get", "filter_rank"], 2 ], [ "<", ["pitch"], 60]] + }, + { + "id": "heatmap-not-supported", + "type": "heatmap", + "source": "source", + "source-layer": "source-layer", + "filter": ["any", ["<", ["get", "filter_rank"], 2 ], [ "<", ["pitch"], 60]] + } + ] +} diff --git a/test/unit/style-spec/fixture/filters-dynamic-pitch.output-api-supported.json b/test/unit/style-spec/fixture/filters-dynamic-pitch.output-api-supported.json new file mode 100644 index 00000000000..23ee46fb204 --- /dev/null +++ b/test/unit/style-spec/fixture/filters-dynamic-pitch.output-api-supported.json @@ -0,0 +1,22 @@ +[ + { + "message": "layers[1].filter: [\"pitch\"] expression is not supported in a filter for a fill layer with id: fill-not-supported", + "line": 22 + }, + { + "message": "layers[2].filter: [\"pitch\"] expression is not supported in a filter for a line layer with id: line-not-supported", + "line": 29 + }, + { + "message": "layers[3].filter: [\"pitch\"] expression is not supported in a filter for a circle layer with id: circle-not-supported", + "line": 36 + }, + { + "message": "layers[4].filter: [\"pitch\"] expression is not supported in a filter for a fill-extrusion layer with id: fill-extrusion-not-supported", + "line": 43 + }, + { + "message": "layers[5].filter: [\"pitch\"] expression is not supported in a filter for a heatmap layer with id: heatmap-not-supported", + "line": 50 + } +] \ No newline at end of file diff --git a/test/unit/style-spec/fixture/filters-dynamic-pitch.output.json b/test/unit/style-spec/fixture/filters-dynamic-pitch.output.json new file mode 100644 index 00000000000..23ee46fb204 --- /dev/null +++ b/test/unit/style-spec/fixture/filters-dynamic-pitch.output.json @@ -0,0 +1,22 @@ +[ + { + "message": "layers[1].filter: [\"pitch\"] expression is not supported in a filter for a fill layer with id: fill-not-supported", + "line": 22 + }, + { + "message": "layers[2].filter: [\"pitch\"] expression is not supported in a filter for a line layer with id: line-not-supported", + "line": 29 + }, + { + "message": "layers[3].filter: [\"pitch\"] expression is not supported in a filter for a circle layer with id: circle-not-supported", + "line": 36 + }, + { + "message": "layers[4].filter: [\"pitch\"] expression is not supported in a filter for a fill-extrusion layer with id: fill-extrusion-not-supported", + "line": 43 + }, + { + "message": "layers[5].filter: [\"pitch\"] expression is not supported in a filter for a heatmap layer with id: heatmap-not-supported", + "line": 50 + } +] \ No newline at end of file diff --git a/test/unit/style-spec/fixture/filters.output-api-supported.json b/test/unit/style-spec/fixture/filters.output-api-supported.json index c47ac48984e..4b32d93c15d 100644 --- a/test/unit/style-spec/fixture/filters.output-api-supported.json +++ b/test/unit/style-spec/fixture/filters.output-api-supported.json @@ -56,7 +56,7 @@ "line": 152 }, { - "message": "layers[15].filter: \"feature-state\" data expressions are not supported with filters.", + "message": "layers[15].filter: [\"feature-state\"] expression is not supported in a filter for a line layer with id: filter expressions with feature-state", "line": 159 } ] \ No newline at end of file diff --git a/test/unit/style-spec/fixture/filters.output.json b/test/unit/style-spec/fixture/filters.output.json index c47ac48984e..4b32d93c15d 100644 --- a/test/unit/style-spec/fixture/filters.output.json +++ b/test/unit/style-spec/fixture/filters.output.json @@ -56,7 +56,7 @@ "line": 152 }, { - "message": "layers[15].filter: \"feature-state\" data expressions are not supported with filters.", + "message": "layers[15].filter: [\"feature-state\"] expression is not supported in a filter for a line layer with id: filter expressions with feature-state", "line": 159 } ] \ No newline at end of file diff --git a/test/unit/style-spec/fixture/fog-invalid-input.output.json b/test/unit/style-spec/fixture/fog-invalid-input.output.json index 59542a3f2d2..514516df2b7 100644 --- a/test/unit/style-spec/fixture/fog-invalid-input.output.json +++ b/test/unit/style-spec/fixture/fog-invalid-input.output.json @@ -1,14 +1,14 @@ [ { - "line": 11, - "message": "range[0]: -100 is less than the minimum value -20" + "message": "range[0]: -100 is less than the minimum value -20", + "line": 11 }, { - "line": 11, - "message": "range[1]: -80 is less than the minimum value -20" + "message": "range[1]: -80 is less than the minimum value -20", + "line": 11 }, { - "line": 12, - "message": "horizon-blend: -4 is less than the minimum value 0" + "message": "horizon-blend: -4 is less than the minimum value 0", + "line": 12 } -] +] \ No newline at end of file diff --git a/test/unit/style-spec/fixture/numbers.output.json b/test/unit/style-spec/fixture/numbers.output.json index 8fadd34d7ee..04c23b820c5 100644 --- a/test/unit/style-spec/fixture/numbers.output.json +++ b/test/unit/style-spec/fixture/numbers.output.json @@ -1,21 +1,21 @@ [ - { - "message": "layers[2].paint.circle-radius: -1 is less than the minimum value 0", - "line": 42 - }, - { - "message": "layers[3].paint.circle-radius: number expected, null found" - }, - { - "message": "layers[4].paint.circle-radius: missing required property \"stops\"", - "line": 58 - }, - { - "message": "layers[5].paint.circle-radius: number expected, array found", - "line": 66 - }, - { - "message": "layers[6].paint.circle-radius: number expected, boolean found", - "line": 74 - } -] + { + "message": "layers[2].paint.circle-radius: -1 is less than the minimum value 0", + "line": 42 + }, + { + "message": "layers[3].paint.circle-radius: number expected, null found" + }, + { + "message": "layers[4].paint.circle-radius: missing required property \"stops\"", + "line": 58 + }, + { + "message": "layers[5].paint.circle-radius: number expected, array found", + "line": 66 + }, + { + "message": "layers[6].paint.circle-radius: number expected, boolean found", + "line": 74 + } +] \ No newline at end of file diff --git a/test/unit/style-spec/spec.test.js b/test/unit/style-spec/spec.test.js index 0d3e12c3b38..4df03298ad3 100644 --- a/test/unit/style-spec/spec.test.js +++ b/test/unit/style-spec/spec.test.js @@ -163,7 +163,16 @@ function validSchema(k, t, obj, ref, version, kind) { t.ok(ref['property-type'][obj['property-type']], `${k}.expression: property-type: ${obj['property-type']}`); t.equal('boolean', typeof expression.interpolated, `${k}.expression.interpolated.required (boolean)`); t.equal(true, Array.isArray(expression.parameters), `${k}.expression.parameters array`); - if (obj['property-type'] !== 'color-ramp') t.equal(true, expression.parameters.every(k => k === 'zoom' || k === 'feature' || k === 'feature-state')); + if (obj['property-type'] !== 'color-ramp') { + t.equal(true, expression.parameters.every(k => { + return k === 'zoom' || + k === 'feature' || + k === 'feature-state' || + k === 'pitch' || + k === 'distance-from-center'; + }) + ); + } } // schema key required checks From dc2e33ee8c77a64c44f62620df5d4f4d278e6d57 Mon Sep 17 00:00:00 2001 From: Michael Oliver Date: Fri, 8 Oct 2021 01:57:43 +0100 Subject: [PATCH 07/20] Fixed doc usage of map.getCenter (#11093) --- src/ui/camera.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/camera.js b/src/ui/camera.js index fe3728c77fd..f00dda5ef32 100644 --- a/src/ui/camera.js +++ b/src/ui/camera.js @@ -172,7 +172,7 @@ class Camera extends Evented { * // Return a LngLat object such as {lng: 0, lat: 0}. * const center = map.getCenter(); * // Access longitude and latitude values directly. - * const {longitude, latitude} = map.getCenter(); + * const {lng, lat} = map.getCenter(); * @see [Tutorial: Use Mapbox GL JS in a React app](https://docs.mapbox.com/help/tutorials/use-mapbox-gl-js-with-react/#store-the-new-coordinates) */ getCenter(): LngLat { return new LngLat(this.transform.center.lng, this.transform.center.lat); } From b29da331367b596dc31e1e3a9a074ffae0090b75 Mon Sep 17 00:00:00 2001 From: Arindam Bose Date: Fri, 8 Oct 2021 09:44:51 -0700 Subject: [PATCH 08/20] One weird JSON.parse() trick (#11098) --- build/rollup_plugin_minify_style_spec.js | 2 +- build/rollup_plugins.js | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/build/rollup_plugin_minify_style_spec.js b/build/rollup_plugin_minify_style_spec.js index c3554b4923a..10a30415590 100644 --- a/build/rollup_plugin_minify_style_spec.js +++ b/build/rollup_plugin_minify_style_spec.js @@ -16,7 +16,7 @@ export default function minifyStyleSpec() { delete spec['expression_name']; return { - code: JSON.stringify(spec, replacer, 0), + code: `export default JSON.parse('${JSON.stringify(spec, replacer, 0)}');`, map: {mappings: ''} }; } diff --git a/build/rollup_plugins.js b/build/rollup_plugins.js index dc084bea3ba..b2bdb4e8cae 100644 --- a/build/rollup_plugins.js +++ b/build/rollup_plugins.js @@ -16,7 +16,9 @@ import replace from '@rollup/plugin-replace'; export const plugins = (minified, production, test, bench) => [ flow(), minifyStyleSpec(), - json(), + json({ + exclude: 'src/style-spec/reference/v8.json' + }), production ? strip({ sourceMap: true, functions: ['PerformanceUtils.*', 'WorkerPerformanceUtils.*', 'Debug.*'] From da68d3da2550012c400551698dd5856c80b6fafa Mon Sep 17 00:00:00 2001 From: Anna Peery <42715836+avpeery@users.noreply.github.com> Date: Fri, 8 Oct 2021 16:38:28 -0700 Subject: [PATCH 09/20] Added v1.13.2 changelog entry (#11108) * Added v1.13.2 changelog entry * updated changelog and local node version to pass render tests * cleaned local environment, attempting circle ci trigger again * Updated mbxcli, hopefully fixes render test issue * version-ordered changlog --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c5357d00b06..7639c555494 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -176,6 +176,12 @@ - Run render tests in browser. +## 1.13.2 + +### 🐞 Bug fixes + +* Backports a fix for an iOS 15 issue where the iOS Safari tab bar interrupts touch interactions. ([#11084](https://github.com/mapbox/mapbox-gl-js/pull/11084)) + ## 1.13.0 ### ✨ Features and improvements From 1c261a7dee23f5b7a8049d44b3711463365df006 Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Tue, 12 Oct 2021 18:56:55 +0300 Subject: [PATCH 10/20] upgrade to supercluster v7.1.4, earcut v2.2.3, vt-pbf v3.1.3, geojson-rewind v0.5.1 (#11110) --- package.json | 8 ++++---- yarn.lock | 43 ++++++++++++++++++++++++------------------- 2 files changed, 28 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index b0c50ca5948..b3ad4d3786c 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "url": "git://github.com/mapbox/mapbox-gl-js.git" }, "dependencies": { - "@mapbox/geojson-rewind": "^0.5.0", + "@mapbox/geojson-rewind": "^0.5.1", "@mapbox/geojson-types": "^1.0.2", "@mapbox/jsonlint-lines-primitives": "^2.0.2", "@mapbox/mapbox-gl-supported": "^2.0.0", @@ -21,7 +21,7 @@ "@mapbox/vector-tile": "^1.3.1", "@mapbox/whoots-js": "^3.1.0", "csscolorparser": "~1.0.3", - "earcut": "^2.2.2", + "earcut": "^2.2.3", "geojson-vt": "^3.2.1", "gl-matrix": "^3.3.0", "grid-index": "^1.1.0", @@ -31,9 +31,9 @@ "potpack": "^1.0.1", "quickselect": "^2.0.0", "rw": "^1.3.3", - "supercluster": "^7.1.3", + "supercluster": "^7.1.4", "tinyqueue": "^2.0.3", - "vt-pbf": "^3.1.1" + "vt-pbf": "^3.1.3" }, "devDependencies": { "@babel/core": "^7.12.16", diff --git a/yarn.lock b/yarn.lock index c26b12b8e79..6b09fba267a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1111,12 +1111,12 @@ dependencies: "@mapbox/geojsonhint" "^2.2.0" -"@mapbox/geojson-rewind@^0.5.0": - version "0.5.0" - resolved "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.0.tgz" - integrity sha512-73l/qJQgj/T/zO1JXVfuVvvKDgikD/7D/rHAD28S9BG1OTstgmftrmqfCx4U+zQAmtsB6HcDA3a7ymdnJZAQgg== +"@mapbox/geojson-rewind@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@mapbox/geojson-rewind/-/geojson-rewind-0.5.1.tgz#adbe16dc683eb40e90934c51a5e28c7bbf44f4e1" + integrity sha512-eL7fMmfTBKjrb+VFHXCGv9Ot0zc3C0U+CwXo1IrP+EPwDczLoXv34Tgq3y+2mPSFNVUXgU42ILWJTC7145KPTA== dependencies: - concat-stream "~2.0.0" + get-stream "^6.0.1" minimist "^1.2.5" "@mapbox/geojson-types@^1.0.2": @@ -2857,7 +2857,7 @@ concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0: readable-stream "^2.2.2" typedarray "^0.0.6" -concat-stream@^2.0.0, concat-stream@~2.0.0: +concat-stream@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz" integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== @@ -4196,10 +4196,10 @@ duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" -earcut@^2.2.2: - version "2.2.2" - resolved "https://registry.npmjs.org/earcut/-/earcut-2.2.2.tgz" - integrity sha512-eZoZPPJcUHnfRZ0PjLvx2qBordSiO8ofC3vt+qACLM95u+4DovnbYNpQtJh0DNsWj8RnxrQytD4WA8gj5cRIaQ== +earcut@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.3.tgz#d44ced2ff5a18859568e327dd9c7d46b16f55cf4" + integrity sha512-iRDI1QeCQIhMCZk48DRDMVgQSSBDmbzzNhnxIo+pwx3swkfjMh6vh0nWLq1NdvGHLKH6wIrAM3vQWeTj6qeoug== ecc-jsbn@~0.1.1: version "0.1.2" @@ -5294,6 +5294,11 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" @@ -11184,10 +11189,10 @@ sugarss@^2.0.0: dependencies: postcss "^7.0.2" -supercluster@^7.1.3: - version "7.1.3" - resolved "https://registry.npmjs.org/supercluster/-/supercluster-7.1.3.tgz" - integrity sha512-7+bR4FbF5SYsmkHfDp61QiwCKtwNDyPsddk9TzfsDA5DQr5Goii5CVD2SXjglweFCxjrzVZf945ahqYfUIk8UA== +supercluster@^7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-7.1.4.tgz#6762aabfd985d3390b49f13b815567d5116a828a" + integrity sha512-GhKkRM1jMR6WUwGPw05fs66pOFWhf59lXq+Q3J3SxPvhNcmgOtLRV6aVQPMRsmXdpaeFJGivt+t7QXUPL3ff4g== dependencies: kdbush "^3.0.0" @@ -12315,14 +12320,14 @@ vm-browserify@^1.0.0: resolved "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -vt-pbf@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.1.tgz" - integrity sha512-pHjWdrIoxurpmTcbfBWXaPwSmtPAHS105253P1qyEfSTV2HJddqjM+kIHquaT/L6lVJIk9ltTGc0IxR/G47hYA== +vt-pbf@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/vt-pbf/-/vt-pbf-3.1.3.tgz#68fd150756465e2edae1cc5c048e063916dcfaac" + integrity sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA== dependencies: "@mapbox/point-geometry" "0.1.0" "@mapbox/vector-tile" "^1.3.1" - pbf "^3.0.5" + pbf "^3.2.1" vue-template-compiler@^2.5.16: version "2.6.12" From 1c416c6610f102943740452330a6287d662d2f3d Mon Sep 17 00:00:00 2001 From: Arindam Bose Date: Tue, 12 Oct 2021 12:05:06 -0700 Subject: [PATCH 11/20] render-test-flakiness:clear worker storage (#11111) --- .circleci/config.yml | 14 +++++--------- src/source/worker.js | 8 ++++++++ src/style/style.js | 4 ++++ src/ui/map.js | 3 +++ test/integration/lib/query.js | 2 +- test/integration/lib/render.js | 3 ++- 6 files changed, 23 insertions(+), 11 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 61cbe4b16a4..9c6c67f873f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,7 +1,7 @@ version: 2.1 orbs: aws-cli: circleci/aws-cli@1.4.0 - browser-tools: circleci/browser-tools@1.1.1 + browser-tools: circleci/browser-tools@1.2.3 workflows: version: 2 @@ -245,8 +245,7 @@ jobs: steps: - attach_workspace: at: ~/ - - browser-tools/install-chrome: - chrome-version: 91.0.4472.164 + - browser-tools/install-chrome - run: yarn run test-render - store_test_results: path: test/integration/render-tests @@ -258,8 +257,7 @@ jobs: steps: - attach_workspace: at: ~/ - - browser-tools/install-chrome: - chrome-version: 91.0.4472.164 + - browser-tools/install-chrome - run: yarn run test-render-prod - store_test_results: path: test/integration/render-tests @@ -271,8 +269,7 @@ jobs: steps: - attach_workspace: at: ~/ - - browser-tools/install-chrome: - chrome-version: 91.0.4472.164 + - browser-tools/install-chrome - run: yarn run test-query - store_test_results: path: test/integration/query-tests @@ -299,8 +296,7 @@ jobs: steps: - attach_workspace: at: ~/ - - browser-tools/install-chrome: - chrome-version: 91.0.4472.164 + - browser-tools/install-chrome - run: name: Collect performance stats command: node bench/gl-stats.js diff --git a/src/source/worker.js b/src/source/worker.js index b1336bec6bd..621ee02ff49 100644 --- a/src/source/worker.js +++ b/src/source/worker.js @@ -78,6 +78,14 @@ export default class Worker { }; } + clearCaches(mapId: string, unused: mixed, callback: WorkerTileCallback) { + delete this.layerIndexes[mapId]; + delete this.availableImages[mapId]; + delete this.workerSources[mapId]; + delete this.demWorkerSources[mapId]; + callback(); + } + checkIfReady(mapID: string, unused: mixed, callback: WorkerTileCallback) { // noop, used to check if a worker is fully set up and ready to receive messages callback(); diff --git a/src/style/style.js b/src/style/style.js index b9d9035d328..c7c4e9737ef 100644 --- a/src/style/style.js +++ b/src/style/style.js @@ -1765,6 +1765,10 @@ class Style extends Evented { hasCircleLayers(): boolean { return this._numCircleLayers > 0; } + + clearWorkerCaches() { + this.dispatcher.broadcast('clearCaches'); + } } Style.getSourceType = getSourceType; diff --git a/src/ui/map.js b/src/ui/map.js index adea9b40d35..5ba4ba75a15 100755 --- a/src/ui/map.js +++ b/src/ui/map.js @@ -3078,6 +3078,9 @@ class Map extends Camera { } this._renderTaskQueue.clear(); this._domRenderTaskQueue.clear(); + if (this.style) { + this.style.clearWorkerCaches(); + } this.painter.destroy(); this.handlers.destroy(); delete this.handlers; diff --git a/test/integration/lib/query.js b/test/integration/lib/query.js index 29ca4ed9a44..6e8fc86a2ca 100644 --- a/test/integration/lib/query.js +++ b/test/integration/lib/query.js @@ -149,7 +149,7 @@ async function runTest(t) { ]; } - browserWriteFile.postMessage(fileInfo); + if (!process.env.CI) browserWriteFile.postMessage(fileInfo); } catch (e) { t.error(e); diff --git a/test/integration/lib/render.js b/test/integration/lib/render.js index 93902815d3b..623fed8abf7 100644 --- a/test/integration/lib/render.js +++ b/test/integration/lib/render.js @@ -74,6 +74,7 @@ function ensureTeardown(t) { delete map.painter.context.gl; map = null; } + mapboxgl.clearStorage(); expectedCtx.clearRect(0, 0, expectedCanvas.width, expectedCanvas.height); diffCtx.clearRect(0, 0, diffCanvas.width, diffCanvas.height); @@ -308,7 +309,7 @@ async function runTest(t) { updateHTML(testMetaData); } - browserWriteFile.postMessage(fileInfo); + if (!process.env.CI) browserWriteFile.postMessage(fileInfo); } catch (e) { t.error(e); From a1e764ef00d87d91a04716768d3eb10b5cfc8c36 Mon Sep 17 00:00:00 2001 From: Arindam Bose Date: Tue, 12 Oct 2021 15:26:58 -0700 Subject: [PATCH 12/20] Allow adding multiple layers to `map.on()` event handler (h/t @omerbn) (#11114) Co-authored-by: Omer Ben Co-authored-by: Karim Naaji --- src/ui/events.js | 13 +- src/ui/map.js | 98 +++++-- test/unit/ui/map_events.test.js | 470 ++++++++++++++++++++++++++++++++ 3 files changed, 549 insertions(+), 32 deletions(-) diff --git a/src/ui/events.js b/src/ui/events.js index 50a378c7674..21a0f17d7a6 100644 --- a/src/ui/events.js +++ b/src/ui/events.js @@ -74,9 +74,10 @@ export class MapMouseEvent extends Event { lngLat: LngLat; /** - * If a `layerId` was specified when adding the event listener with {@link Map#on}, `features` will be an array of - * [GeoJSON](http://geojson.org/) [Feature objects](https://tools.ietf.org/html/rfc7946#section-3.2). - * The array will contain all features from that layer that are rendered at the event's point. + * If a single `layerId`(as a single string) or multiple `layerIds` (as an array of strings) were specified when adding the event listener with {@link Map#on}, + * `features` will be an array of [GeoJSON](http://geojson.org/) [Feature objects](https://tools.ietf.org/html/rfc7946#section-3.2). + * The array will contain all features from that layer that are rendered at the event's point, + * in the order that they are rendered with the topmost feature being at the start of the array. * The `features` are identical to those returned by {@link Map#queryRenderedFeatures}. * * If no `layerId` was specified when adding the event listener, `features` will be `undefined`. @@ -89,6 +90,12 @@ export class MapMouseEvent extends Event { * }); * * @example + * // logging features for two layers (with `e.features`) + * map.on('click', ['layer1', 'layer2'], (e) => { + * console.log(`There are ${e.features.length} features at point ${e.point}`); + * }); + * + * @example * // logging all features for all layers (without `e.features`) * map.on('click', (e) => { * const features = map.queryRenderedFeatures(e.point); diff --git a/src/ui/map.js b/src/ui/map.js index 5ba4ba75a15..2f7bf56cbee 100755 --- a/src/ui/map.js +++ b/src/ui/map.js @@ -1053,11 +1053,12 @@ class Map extends Camera { return this._rotating || this.handlers && this.handlers.isRotating(); } - _createDelegatedListener(type: MapEvent, layerId: any, listener: any) { + _createDelegatedListener(type: MapEvent, layers: Array, listener: any) { if (type === 'mouseenter' || type === 'mouseover') { let mousein = false; const mousemove = (e) => { - const features = this.getLayer(layerId) ? this.queryRenderedFeatures(e.point, {layers: [layerId]}) : []; + const filteredLayers = layers.filter(layerId => this.getLayer(layerId)); + const features = filteredLayers.length ? this.queryRenderedFeatures(e.point, {layers: filteredLayers}) : []; if (!features.length) { mousein = false; } else if (!mousein) { @@ -1068,11 +1069,13 @@ class Map extends Camera { const mouseout = () => { mousein = false; }; - return {layer: layerId, listener, delegates: {mousemove, mouseout}}; + + return {layers: new Set(layers), listener, delegates: {mousemove, mouseout}}; } else if (type === 'mouseleave' || type === 'mouseout') { let mousein = false; const mousemove = (e) => { - const features = this.getLayer(layerId) ? this.queryRenderedFeatures(e.point, {layers: [layerId]}) : []; + const filteredLayers = layers.filter(layerId => this.getLayer(layerId)); + const features = filteredLayers.length ? this.queryRenderedFeatures(e.point, {layers: filteredLayers}) : []; if (features.length) { mousein = true; } else if (mousein) { @@ -1086,10 +1089,12 @@ class Map extends Camera { listener.call(this, new MapMouseEvent(type, this, e.originalEvent)); } }; - return {layer: layerId, listener, delegates: {mousemove, mouseout}}; + + return {layers: new Set(layers), listener, delegates: {mousemove, mouseout}}; } else { const delegate = (e) => { - const features = this.getLayer(layerId) ? this.queryRenderedFeatures(e.point, {layers: [layerId]}) : []; + const filteredLayers = layers.filter(layerId => this.getLayer(layerId)); + const features = filteredLayers.length ? this.queryRenderedFeatures(e.point, {layers: filteredLayers}) : []; if (features.length) { // Here we need to mutate the original event, so that preventDefault works as expected. e.features = features; @@ -1097,7 +1102,8 @@ class Map extends Camera { delete e.features; } }; - return {layer: layerId, listener, delegates: {[type]: delegate}}; + + return {layers: new Set(layers), listener, delegates: {[type]: delegate}}; } } @@ -1162,12 +1168,12 @@ class Map extends Camera { * | [`sourcedataloading`](#map.event:sourcedataloading) | | * | [`styleimagemissing`](#map.event:styleimagemissing) | | * - * @param {string} layerId (optional) The ID of a style layer. If you provide a `layerId`, - * the listener will be triggered only if its location is within a visible feature in this layer, + * @param {string | Array} layerIds (optional) The ID(s) of a style layer(s). If you provide a `layerId`, + * the listener will be triggered only if its location is within a visible feature in these layers, * and the event will have a `features` property containing an array of the matching features. - * If you do not provide a `layerId`, the listener will be triggered by a corresponding event + * If you do not provide `layerIds`, the listener will be triggered by a corresponding event * happening anywhere on the map, and the event will not have a `features` property. - * Note that many event types are not compatible with the optional `layerId` parameter. + * Note that many event types are not compatible with the optional `layerIds` parameter. * @param {Function} listener The function to be called when the event is fired. * @returns {Map} Returns itself to allow for method chaining. * @example @@ -1200,18 +1206,30 @@ class Map extends Camera { * .setHTML(`Country name: ${e.features[0].properties.name}`) * .addTo(map); * }); + * @example + * // Set an event listener that will fire + * // when a feature on the countries or background layers of the map is clicked. + * map.on('click', ['countries', 'background'], (e) => { + * new mapboxgl.Popup() + * .setLngLat(e.lngLat) + * .setHTML(`Country name: ${e.features[0].properties.name}`) + * .addTo(map); + * }); * @see [Example: Add 3D terrain to a map](https://docs.mapbox.com/mapbox-gl-js/example/add-terrain/) * @see [Example: Center the map on a clicked symbol](https://docs.mapbox.com/mapbox-gl-js/example/center-on-symbol/) * @see [Example: Create a draggable marker](https://docs.mapbox.com/mapbox-gl-js/example/drag-a-point/) * @see [Example: Create a hover effect](https://docs.mapbox.com/mapbox-gl-js/example/hover-styles/) * @see [Example: Display popup on click](https://docs.mapbox.com/mapbox-gl-js/example/popup-on-click/) */ - on(type: MapEvent, layerId: any, listener: any) { + on(type: MapEvent, layerIds: any, listener: any) { if (listener === undefined) { - return super.on(type, layerId); + return super.on(type, layerIds); } - const delegatedListener = this._createDelegatedListener(type, layerId, listener); + if (!Array.isArray(layerIds)) { + layerIds = [layerIds]; + } + const delegatedListener = this._createDelegatedListener(type, layerIds, listener); this._delegatedListeners = this._delegatedListeners || {}; this._delegatedListeners[type] = this._delegatedListeners[type] || []; @@ -1234,12 +1252,12 @@ class Map extends Camera { * a visible portion of the specified layer from outside that layer or outside the map canvas. `mouseleave` * and `mouseout` events are triggered when the cursor leaves a visible portion of the specified layer, or leaves * the map canvas. - * @param {string} layerId (optional) The ID of a style layer. If you provide a `layerId`, - * the listener will be triggered only if its location is within a visible feature in this layer, + * @param {string | Array} layerIds (optional) The ID(s) of a style layer(s). If you provide `layerIds`, + * the listener will be triggered only if its location is within a visible feature in these layers, * and the event will have a `features` property containing an array of the matching features. - * If you do not provide a `layerId`, the listener will be triggered by a corresponding event + * If you do not provide `layerIds`, the listener will be triggered by a corresponding event * happening anywhere on the map, and the event will not have a `features` property. - * Note that many event types are not compatible with the optional `layerId` parameter. + * Note that many event types are not compatible with the optional `layerIds` parameter. * @param {Function} listener The function to be called when the event is fired. * @returns {Map} Returns itself to allow for method chaining. * @example @@ -1253,17 +1271,26 @@ class Map extends Camera { * map.once('touchstart', 'my-point-layer', (e) => { * console.log(`The first map touch on the point layer was at: ${e.lnglat}`); * }); + * @example + * // Log the coordinates of a user's first map touch + * // on specific layers. + * map.once('touchstart', ['my-point-layer', 'my-point-layer-2'], (e) => { + * console.log(`The first map touch on the point layer was at: ${e.lnglat}`); + * }); * @see [Example: Create a draggable point](https://docs.mapbox.com/mapbox-gl-js/example/drag-a-point/) * @see [Example: Animate the camera around a point with 3D terrain](https://docs.mapbox.com/mapbox-gl-js/example/free-camera-point/) * @see [Example: Play map locations as a slideshow](https://docs.mapbox.com/mapbox-gl-js/example/playback-locations/) */ - once(type: MapEvent, layerId: any, listener: any) { + once(type: MapEvent, layerIds: any, listener: any) { if (listener === undefined) { - return super.once(type, layerId); + return super.once(type, layerIds); } - const delegatedListener = this._createDelegatedListener(type, layerId, listener); + if (!Array.isArray(layerIds)) { + layerIds = [layerIds]; + } + const delegatedListener = this._createDelegatedListener(type, layerIds, listener); for (const event in delegatedListener.delegates) { this.once((event: any), delegatedListener.delegates[event]); @@ -1277,7 +1304,7 @@ class Map extends Camera { * optionally limited to layer-specific events. * * @param {string} type The event type previously used to install the listener. - * @param {string} layerId (optional) The layer ID previously used to install the listener. + * @param {string | Array} layerIds (optional) The layer ID(s) previously used to install the listener. * @param {Function} listener The function previously installed as a listener. * @returns {Map} Returns itself to allow for method chaining. * @example @@ -1297,16 +1324,28 @@ class Map extends Camera { * }); * @see [Example: Create a draggable point](https://docs.mapbox.com/mapbox-gl-js/example/drag-a-point/) */ - off(type: MapEvent, layerId: any, listener: any) { + off(type: MapEvent, layerIds: any, listener: any) { if (listener === undefined) { - return super.off(type, layerId); + return super.off(type, layerIds); } - const removeDelegatedListener = (delegatedListeners) => { - const listeners = delegatedListeners[type]; + layerIds = new Set(Array.isArray(layerIds) ? layerIds : [layerIds]); + const areLayerArraysEqual = (hash1, hash2) => { + if (hash1.size !== hash2.size) { + return false; // at-least 1 arr has duplicate value(s) + } + + // comparing values + for (const value of hash1) { + if (!hash2.has(value)) return false; + } + return true; + }; + + const removeDelegatedListeners = (listeners: Array) => { for (let i = 0; i < listeners.length; i++) { const delegatedListener = listeners[i]; - if (delegatedListener.layer === layerId && delegatedListener.listener === listener) { + if (delegatedListener.listener === listener && areLayerArraysEqual(delegatedListener.layers, layerIds)) { for (const event in delegatedListener.delegates) { this.off((event: any), delegatedListener.delegates[event]); } @@ -1316,8 +1355,9 @@ class Map extends Camera { } }; - if (this._delegatedListeners && this._delegatedListeners[type]) { - removeDelegatedListener(this._delegatedListeners); + const delegatedListeners = this._delegatedListeners ? this._delegatedListeners[type] : undefined; + if (delegatedListeners) { + removeDelegatedListeners(delegatedListeners); } return this; diff --git a/test/unit/ui/map_events.test.js b/test/unit/ui/map_events.test.js index e8d48a3ff8b..200676b4f7a 100644 --- a/test/unit/ui/map_events.test.js +++ b/test/unit/ui/map_events.test.js @@ -657,3 +657,473 @@ test("Map#on click should fire preclick before click", (t) => { map.remove(); t.end(); }); + +test('Map#on adds a listener for an event on multiple layers which do not exist', (t) => { + const map = createMap(t); + const features = [{}]; + + t.stub(map, 'getLayer').returns(undefined); + t.stub(map, 'queryRenderedFeatures').callsFake((point, options) => { + t.deepEqual(options, {layers: []}); + return features; + }); + + const spy = t.spy(); + + map.on('click', ['layer1', 'layer2'], spy); + simulate.click(map.getCanvas()); + + t.ok(spy.notCalled); + t.end(); +}); + +test('Map#on adds a listener for an event on multiple layers which some do not exist', (t) => { + const map = createMap(t); + const features = [{}]; + + const getLayerCB = t.stub(map, 'getLayer'); + getLayerCB.onCall(0).returns(undefined); + getLayerCB.onCall(1).returns({}); + getLayerCB.returns({}); + + t.stub(map, 'queryRenderedFeatures').callsFake((point, options) => { + t.deepEqual(options, {layers: ['background']}); + return features; + }); + + const spy = t.spy(function (e) { + t.equal(this, map); + t.equal(e.type, 'click'); + t.equal(e.features, features); + }); + + map.on('click', ['layer', 'background'], spy); + simulate.click(map.getCanvas()); + + t.ok(spy.calledOnce); + t.end(); +}); + +test('Map#on distinguishes distinct event types - multiple layers', (t) => { + const map = createMap(t); + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures').callsFake((point, options) => { + t.deepEqual(options, {layers: ['layer1', 'layer2']}); + return [{}]; + }); + + const spyDown = t.spy((e) => { + t.equal(e.type, 'mousedown'); + }); + + const spyUp = t.spy((e) => { + t.equal(e.type, 'mouseup'); + }); + + map.on('mousedown', ['layer1', 'layer2'], spyDown); + map.on('mouseup', ['layer1', 'layer2'], spyUp); + simulate.click(map.getCanvas()); + + t.ok(spyDown.calledOnce); + t.ok(spyUp.calledOnce); + t.end(); +}); + +test('Map#on distinguishes distinct multiple layers', (t) => { + const map = createMap(t); + const featuresA = [{}]; + const featuresB = [{}]; + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures').callsFake((point, options) => { + return options.layers[0] === 'A' ? featuresA : featuresB; + }); + + const spyA = t.spy((e) => { + t.equal(e.features, featuresA); + }); + + const spyB = t.spy((e) => { + t.equal(e.features, featuresB); + }); + + map.on('click', ['A', 'A2'], spyA); + map.on('click', ['B', 'B2'], spyB); + simulate.click(map.getCanvas()); + + t.ok(spyA.calledOnce); + t.ok(spyB.calledOnce); + t.end(); +}); + +test('Map#off removes a delegated event listener - multiple layers', (t) => { + const map = createMap(t); + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures').returns([{}]); + + const spy = t.spy(); + + map.on('click', ['layer1', 'layer2'], spy); + map.off('click', ['layer2', 'layer1'], spy); + simulate.click(map.getCanvas()); + + t.ok(spy.notCalled); + t.end(); +}); + +test('Map#off distinguishes distinct event types - multiple layers', (t) => { + const map = createMap(t); + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures').returns([{}]); + + const spy = t.spy((e) => { + t.equal(e.type, 'mousedown'); + }); + + map.on('mousedown', ['layer1', 'layer2'], spy); + map.on('mouseup', ['layer1', 'layer2'], spy); + map.off('mouseup', ['layer1', 'layer2'], spy); + simulate.click(map.getCanvas()); + + t.ok(spy.calledOnce); + t.end(); +}); + +test('Map#off distinguishes distinct layers - multiple layers', (t) => { + const map = createMap(t); + const featuresA = [{}]; + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures').callsFake((point, options) => { + t.deepEqual(options, {layers: ['A', 'B']}); + return featuresA; + }); + + const spy = t.spy((e) => { + t.equal(e.features, featuresA); + }); + + map.on('click', ['A', 'B'], spy); + map.on('click', ['C', 'D'], spy); + map.off('click', ['C', 'D'], spy); + simulate.click(map.getCanvas()); + + t.ok(spy.calledOnce); + t.end(); +}); + +test('Map#off distinguishes distinct listeners - multiple layers', (t) => { + const map = createMap(t); + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures').returns([{}]); + + const spyA = t.spy(); + const spyB = t.spy(); + + map.on('click', ['layer1', 'layer2'], spyA); + map.on('click', ['layer1', 'layer2'], spyB); + map.off('click', ['layer1', 'layer2'], spyB); + simulate.click(map.getCanvas()); + + t.ok(spyA.calledOnce); + t.ok(spyB.notCalled); + t.end(); +}); + +['mouseenter', 'mouseover'].forEach((event) => { + test(`Map#on ${event} does not fire if the specified layer does not exist - multiple layers`, (t) => { + const map = createMap(t); + + t.stub(map, 'getLayer').returns(null); + + const spy = t.spy(); + + map.on(event, ['layer1', 'layer2'], spy); + simulate.mousemove(map.getCanvas()); + simulate.mousemove(map.getCanvas()); + + t.ok(spy.notCalled); + t.end(); + }); + + test(`Map#on ${event} fires when entering the specified layer - multiple layers`, (t) => { + const map = createMap(t); + const features = [{}]; + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures').callsFake((point, options) => { + t.deepEqual(options, {layers: ['layer1', 'layer2']}); + return features; + }); + + const spy = t.spy(function (e) { + t.equal(this, map); + t.equal(e.type, event); + t.equal(e.target, map); + t.equal(e.features, features); + }); + + map.on(event, ['layer1', 'layer2'], spy); + simulate.mousemove(map.getCanvas()); + + t.ok(spy.calledOnce); + t.end(); + }); + + test(`Map#on ${event} does not fire on mousemove within the specified layer - multiple layers`, (t) => { + const map = createMap(t); + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures').returns([{}]); + + const spy = t.spy(); + + map.on(event, ['layer1', 'layer2'], spy); + simulate.mousemove(map.getCanvas()); + simulate.mousemove(map.getCanvas()); + + t.ok(spy.calledOnce); + t.end(); + }); + + test(`Map#on ${event} fires when reentering the specified layer - multiple layers`, (t) => { + const map = createMap(t); + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures') + .onFirstCall().returns([{}]) + .onSecondCall().returns([]) + .onThirdCall().returns([{}]); + + const spy = t.spy(); + + map.on(event, ['layer1', 'layer2'], spy); + simulate.mousemove(map.getCanvas()); + simulate.mousemove(map.getCanvas()); + simulate.mousemove(map.getCanvas()); + + t.ok(spy.calledTwice); + t.end(); + }); + + test(`Map#on ${event} fires when reentering the specified layer after leaving the canvas - multiple layers`, (t) => { + const map = createMap(t); + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures').returns([{}]); + + const spy = t.spy(); + + map.on(event, ['layer1', 'layer2'], spy); + simulate.mousemove(map.getCanvas()); + simulate.mouseout(map.getCanvas()); + simulate.mousemove(map.getCanvas()); + + t.ok(spy.calledTwice); + t.end(); + }); + + test(`Map#on ${event} distinguishes distinct layers - multiple layers`, (t) => { + const map = createMap(t); + const featuresA = [{}]; + const featuresB = [{}]; + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures').callsFake((point, options) => { + return options.layers[0] === 'A' ? featuresA : featuresB; + }); + + const spyA = t.spy((e) => { + t.equal(e.features, featuresA); + }); + + const spyB = t.spy((e) => { + t.equal(e.features, featuresB); + }); + + map.on(event, ['A', 'A2'], spyA); + map.on(event, ['B', 'B2'], spyB); + + simulate.mousemove(map.getCanvas()); + simulate.mousemove(map.getCanvas()); + + t.ok(spyA.calledOnce); + t.ok(spyB.calledOnce); + t.end(); + }); + + test(`Map#on ${event} distinguishes distinct listeners - multiple layers`, (t) => { + const map = createMap(t); + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures').returns([{}]); + + const spyA = t.spy(); + const spyB = t.spy(); + + map.on(event, ['layer1', 'layer2'], spyA); + map.on(event, ['layer1', 'layer2'], spyB); + simulate.mousemove(map.getCanvas()); + + t.ok(spyA.calledOnce); + t.ok(spyB.calledOnce); + t.end(); + }); + + test(`Map#off ${event} removes a delegated event listener - multiple layers`, (t) => { + const map = createMap(t); + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures').returns([{}]); + + const spy = t.spy(); + + map.on(event, ['layer1', 'layer2'], spy); + map.off(event, ['layer1', 'layer2'], spy); + simulate.mousemove(map.getCanvas()); + + t.ok(spy.notCalled); + t.end(); + }); + + test(`Map#off ${event} distinguishes distinct layers - multiple layers`, (t) => { + const map = createMap(t); + const featuresA = [{}]; + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures').callsFake((point, options) => { + t.deepEqual(options, {layers: ['A', 'A2']}); + return featuresA; + }); + + const spy = t.spy((e) => { + t.equal(e.features, featuresA); + }); + + map.on(event, ['A', 'A2'], spy); + map.on(event, ['B', 'B2'], spy); + map.off(event, ['B', 'B2'], spy); + simulate.mousemove(map.getCanvas()); + + t.ok(spy.calledOnce); + t.end(); + }); + + test(`Map#off ${event} distinguishes distinct listeners - multiple layers`, (t) => { + const map = createMap(t); + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures').returns([{}]); + + const spyA = t.spy(); + const spyB = t.spy(); + + map.on(event, ['layer1', 'layer2'], spyA); + map.on(event, ['layer1', 'layer2'], spyB); + map.off(event, ['layer1', 'layer2'], spyB); + simulate.mousemove(map.getCanvas()); + + t.ok(spyA.calledOnce); + t.ok(spyB.notCalled); + t.end(); + }); +}); + +['mouseleave', 'mouseout'].forEach((event) => { + test(`Map#on ${event} does not fire if the specified layer does not exist - multiple layers`, (t) => { + const map = createMap(t); + + t.stub(map, 'getLayer').returns(null); + + const spy = t.spy(); + + map.on(event, ['layer1', 'layer2'], spy); + simulate.mousemove(map.getCanvas()); + simulate.mousemove(map.getCanvas()); + + t.ok(spy.notCalled); + t.end(); + }); + + test(`Map#on ${event} does not fire on mousemove when entering or within the specified layer - multiple layers`, (t) => { + const map = createMap(t); + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures').returns([{}]); + + const spy = t.spy(); + + map.on(event, ['layer1', 'layer2'], spy); + simulate.mousemove(map.getCanvas()); + simulate.mousemove(map.getCanvas()); + + t.ok(spy.notCalled); + t.end(); + }); + + test(`Map#on ${event} fires when exiting the specified layer - multiple layers`, (t) => { + const map = createMap(t); + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures') + .onFirstCall().returns([{}]) + .onSecondCall().returns([]); + + const spy = t.spy(function (e) { + t.equal(this, map); + t.equal(e.type, event); + t.equal(e.features, undefined); + }); + + map.on(event, ['layer1', 'layer2'], spy); + simulate.mousemove(map.getCanvas()); + simulate.mousemove(map.getCanvas()); + + t.ok(spy.calledOnce); + t.end(); + }); + + test(`Map#on ${event} fires when exiting the canvas - multiple layers`, (t) => { + const map = createMap(t); + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures').returns([{}]); + + const spy = t.spy(function (e) { + t.equal(this, map); + t.equal(e.type, event); + t.equal(e.features, undefined); + }); + + map.on(event, ['layer1', 'layer2'], spy); + simulate.mousemove(map.getCanvas()); + simulate.mouseout(map.getCanvas()); + + t.ok(spy.calledOnce); + t.end(); + }); + + test(`Map#off ${event} removes a delegated event listener - multiple layers`, (t) => { + const map = createMap(t); + + t.stub(map, 'getLayer').returns({}); + t.stub(map, 'queryRenderedFeatures') + .onFirstCall().returns([{}]) + .onSecondCall().returns([]); + + const spy = t.spy(); + + map.on(event, ['layer1', 'layer2'], spy); + map.off(event, ['layer1', 'layer2'], spy); + simulate.mousemove(map.getCanvas()); + simulate.mousemove(map.getCanvas()); + simulate.mouseout(map.getCanvas()); + + t.ok(spy.notCalled); + t.end(); + }); +}); From ddaa1f74652feaa613b498507a5c15079a74a832 Mon Sep 17 00:00:00 2001 From: Dom Brassey Date: Wed, 13 Oct 2021 11:14:45 -0700 Subject: [PATCH 13/20] consistify YOUR_MAPBOX_ACCESS_TOKEN as placeholder string (#11113) --- CONTRIBUTING.md | 2 +- bench/README.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6ab915c1d9a..6113b2cf892 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -78,7 +78,7 @@ copy node_modules/headless-gl/deps/windows/dll/x64/*.dll c:\windows\system32 Start the debug server ```bash -MAPBOX_ACCESS_TOKEN={YOUR MAPBOX ACCESS TOKEN} yarn run start-debug +MAPBOX_ACCESS_TOKEN={YOUR_MAPBOX_ACCESS_TOKEN} yarn run start-debug ``` Open the debug page at [http://localhost:9966/debug](http://localhost:9966/debug) diff --git a/bench/README.md b/bench/README.md index 93bad575e05..e1647b40bc7 100644 --- a/bench/README.md +++ b/bench/README.md @@ -7,7 +7,7 @@ Benchmarks help us catch performance regressions and improve performance. Start the benchmark server ```bash -MAPBOX_ACCESS_TOKEN={YOUR MAPBOX ACCESS TOKEN} yarn start +MAPBOX_ACCESS_TOKEN={YOUR_MAPBOX_ACCESS_TOKEN} yarn start ``` To run all benchmarks, open [the benchmark page, `http://localhost:9966/bench/versions`](http://localhost:9966/bench/versions). @@ -21,7 +21,7 @@ By default, the benchmark page will compare the local branch against `main` and Start the benchmark server ```bash -MAPBOX_ACCESS_TOKEN={YOUR MAPBOX ACCESS TOKEN} MAPBOX_STYLES={YOUR STYLES HERE} yarn start +MAPBOX_ACCESS_TOKEN={YOUR_MAPBOX_ACCESS_TOKEN} MAPBOX_STYLES={YOUR STYLES HERE} yarn start ``` Note: `MAPBOX_STYLES` takes a comma-separated list of up to 3 Mapbox styles provided as a style URL or file system path (e.g. `./path/to/style.json,mapbox://styles/mapbox/streets-v10` or `mapbox://styles/mapbox/streets-v10,mapbox://styles/mapbox/streets-v9`) From e258b7e6c343f2bf4ec647d56d467bf68326359f Mon Sep 17 00:00:00 2001 From: Karim Naaji Date: Wed, 13 Oct 2021 16:24:31 -0700 Subject: [PATCH 14/20] Exclude flaky test (#11118) --- test/ignores.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/ignores.json b/test/ignores.json index 14aac644ed4..ecfaa189d62 100644 --- a/test/ignores.json +++ b/test/ignores.json @@ -34,5 +34,6 @@ "render-tests/skybox/atmosphere-padding": "skip - https://github.com/mapbox/mapbox-gl-js/issues/10314", "render-tests/terrain/symbol-draping/style.json": "skip - https://github.com/mapbox/mapbox-gl-js/issues/10365", "render-tests/fill-extrusion-terrain/flat-roof-over-border-of-different-zoom-zoomin": "skip - https://github.com/mapbox/mapbox-gl-js/issues/11041", - "render-tests/fill-extrusion-terrain/flat-roof-over-border-of-different-zoom": "skip - https://github.com/mapbox/mapbox-gl-js/issues/11041" + "render-tests/fill-extrusion-terrain/flat-roof-over-border-of-different-zoom": "skip - https://github.com/mapbox/mapbox-gl-js/issues/11041", + "render-tests/text-variable-anchor/pitched": "skip - non-deterministic symbol placement on tile boundaries" } From 6c1b30b14fad387477cc72edf71c7fbfdf01d296 Mon Sep 17 00:00:00 2001 From: Mikko Pulkki <55925868+mpulkki-mapbox@users.noreply.github.com> Date: Thu, 14 Oct 2021 22:42:29 +0300 Subject: [PATCH 15/20] Add globe view support to heatmap shaders (#11120) --- src/shaders/heatmap.vertex.glsl | 34 ++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/shaders/heatmap.vertex.glsl b/src/shaders/heatmap.vertex.glsl index dda815d3973..a2308f86f01 100644 --- a/src/shaders/heatmap.vertex.glsl +++ b/src/shaders/heatmap.vertex.glsl @@ -6,6 +6,19 @@ uniform float u_intensity; attribute vec2 a_pos; +#ifdef PROJECTION_GLOBE_VIEW +attribute vec3 a_pos_3; // Projected position on the globe +attribute vec3 a_pos_normal_3; // Surface normal at the position +attribute float a_scale; + +// Uniforms required for transition between globe and mercator +uniform mat4 u_inv_rot_matrix; +uniform vec2 u_merc_center; +uniform vec3 u_tile_id; +uniform float u_zoom_transition; +uniform vec3 u_up_dir; +#endif + varying vec2 v_extrude; #pragma mapbox: define highp float weight @@ -48,7 +61,26 @@ void main(void) { // multiply a_pos by 0.5, since we had it * 2 in order to sneak // in extrusion data - vec3 pos = vec3(floor(a_pos * 0.5) + extrude, elevation(floor(a_pos * 0.5))); + vec2 tilePos = floor(a_pos * 0.5); + +#ifdef PROJECTION_GLOBE_VIEW + // Apply extra scaling to extrusion to cover different pixel space ratios (which is dependant on the latitude) + extrude *= a_scale; + + vec3 normal = normalize(mix(a_pos_normal_3 / 16384.0, u_up_dir, u_zoom_transition)); + + // Coordinate frame for the extrusion is the tangent plane at the point location on the globe surface + vec3 xAxis = normalize(vec3(normal.z, 0.0, -normal.x)); + vec3 yAxis = normalize(cross(normal, xAxis)); + + // Compute positions on both globe and mercator plane to support transition between the two modes + vec3 globePos = a_pos_3 + xAxis * extrude.x + yAxis * extrude.y + elevationVector(tilePos) * elevation(tilePos); + vec3 mercPos = mercator_tile_position(u_inv_rot_matrix, tilePos, u_tile_id, u_merc_center) + xAxis * extrude.x + yAxis * extrude.y; + + vec3 pos = mix_globe_mercator(globePos, mercPos, u_zoom_transition); +#else + vec3 pos = vec3(tilePos + extrude, elevation(tilePos)); +#endif gl_Position = u_matrix * vec4(pos, 1); From 19e7cef009650393351d0561db18fe27a4da947f Mon Sep 17 00:00:00 2001 From: Dom Brassey Date: Fri, 15 Oct 2021 15:25:35 -0700 Subject: [PATCH 16/20] Replaces EPSG:4326 with OGC:CRS84 in GL JS `LngLat` doc (#11072) * replace EPSG:4326 with OGC:CRS84 --- src/geo/lng_lat.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/geo/lng_lat.js b/src/geo/lng_lat.js index 1315243fe75..f071ddb4af8 100644 --- a/src/geo/lng_lat.js +++ b/src/geo/lng_lat.js @@ -12,10 +12,9 @@ export const earthRadius = 6371008.8; /** * A `LngLat` object represents a given longitude and latitude coordinate, measured in degrees. - * These coordinates are based on the [WGS84 (EPSG:4326) standard](https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84). - * - * Mapbox GL uses longitude, latitude coordinate order (as opposed to latitude, longitude) to match the - * [GeoJSON specification](https://tools.ietf.org/html/rfc7946). + * These coordinates use longitude, latitude coordinate order (as opposed to latitude, longitude) + * to match the [GeoJSON specification](https://datatracker.ietf.org/doc/html/rfc7946#section-4), + * which is equivalent to the OGC:CRS84 coordinate reference system. * * Note that any Mapbox GL method that accepts a `LngLat` object as an argument or option * can also accept an `Array` of two numbers and will perform an implicit conversion. From f95b8fab753b2ae29e92adda604fdee4ce9b7e11 Mon Sep 17 00:00:00 2001 From: Aidan H Date: Mon, 18 Oct 2021 12:39:43 -0600 Subject: [PATCH 17/20] Image fallback expressions within paint properties (#11049) * Adding tests for icon-color, line-color and text-color * Expanded tests to cover opacity, circle-radius and line-width * Adding zoom render test * Added tests for feature-state * Feature state fix * Added Flow type to painter * Shallow copy of style._availableImages * Updating benchmark to use images --- bench/benchmarks/symbol_layout.js | 1 + src/data/bucket.js | 2 +- src/data/bucket/circle_bucket.js | 10 +- src/data/bucket/fill_bucket.js | 14 +- src/data/bucket/fill_extrusion_bucket.js | 14 +- src/data/bucket/line_bucket.js | 14 +- src/data/bucket/symbol_bucket.js | 9 +- src/data/program_configuration.js | 43 +++--- src/source/source_state.js | 3 +- src/source/tile.js | 9 +- src/source/worker.js | 8 +- src/source/worker_tile.js | 6 +- src/style/style.js | 5 +- src/symbol/symbol_layout.js | 24 +++- .../image-fallback-nested/circle/expected.png | Bin 0 -> 672 bytes .../image-fallback-nested/circle/style.json | 83 +++++++++++ .../feature-state-inside/expected.png | Bin 0 -> 472 bytes .../feature-state-inside/style.json | 134 ++++++++++++++++++ .../feature-state-outside/expected.png | Bin 0 -> 472 bytes .../feature-state-outside/style.json | 127 +++++++++++++++++ .../image-fallback-nested/icon/expected.png | Bin 0 -> 3050 bytes .../image-fallback-nested/icon/style.json | 112 +++++++++++++++ .../image-fallback-nested/line/expected.png | Bin 0 -> 289 bytes .../image-fallback-nested/line/style.json | 88 ++++++++++++ .../image-fallback-nested/text/expected.png | Bin 0 -> 5546 bytes .../image-fallback-nested/text/style.json | 95 +++++++++++++ .../image-fallback-nested/zoom/expected.png | Bin 0 -> 226 bytes .../image-fallback-nested/zoom/style.json | 70 +++++++++ 28 files changed, 799 insertions(+), 72 deletions(-) create mode 100644 test/integration/render-tests/image-fallback-nested/circle/expected.png create mode 100644 test/integration/render-tests/image-fallback-nested/circle/style.json create mode 100644 test/integration/render-tests/image-fallback-nested/feature-state-inside/expected.png create mode 100644 test/integration/render-tests/image-fallback-nested/feature-state-inside/style.json create mode 100644 test/integration/render-tests/image-fallback-nested/feature-state-outside/expected.png create mode 100644 test/integration/render-tests/image-fallback-nested/feature-state-outside/style.json create mode 100644 test/integration/render-tests/image-fallback-nested/icon/expected.png create mode 100644 test/integration/render-tests/image-fallback-nested/icon/style.json create mode 100644 test/integration/render-tests/image-fallback-nested/line/expected.png create mode 100644 test/integration/render-tests/image-fallback-nested/line/style.json create mode 100644 test/integration/render-tests/image-fallback-nested/text/expected.png create mode 100644 test/integration/render-tests/image-fallback-nested/text/style.json create mode 100644 test/integration/render-tests/image-fallback-nested/zoom/expected.png create mode 100644 test/integration/render-tests/image-fallback-nested/zoom/style.json diff --git a/bench/benchmarks/symbol_layout.js b/bench/benchmarks/symbol_layout.js index 73e767a7239..d03ee8b4979 100644 --- a/bench/benchmarks/symbol_layout.js +++ b/bench/benchmarks/symbol_layout.js @@ -38,6 +38,7 @@ export default class SymbolLayout extends Layout { tileResult.iconMap, tileResult.imageAtlas.iconPositions, false, + this.parser.style.listImages(), tileResult.tileID.canonical, tileResult.tileZoom); } diff --git a/src/data/bucket.js b/src/data/bucket.js index b2c5c1a47d0..b286d445c07 100644 --- a/src/data/bucket.js +++ b/src/data/bucket.js @@ -79,7 +79,7 @@ export interface Bucket { +stateDependentLayers: Array; +stateDependentLayerIds: Array; populate(features: Array, options: PopulateParameters, canonical: CanonicalTileID): void; - update(states: FeatureStates, vtLayer: VectorTileLayer, imagePositions: {[_: string]: ImagePosition}): void; + update(states: FeatureStates, vtLayer: VectorTileLayer, availableImages: Array, imagePositions: {[_: string]: ImagePosition}): void; isEmpty(): boolean; upload(context: Context): void; diff --git a/src/data/bucket/circle_bucket.js b/src/data/bucket/circle_bucket.js index b350d64f0ff..6afe789757a 100644 --- a/src/data/bucket/circle_bucket.js +++ b/src/data/bucket/circle_bucket.js @@ -123,14 +123,14 @@ class CircleBucket implements Bucke const {geometry, index, sourceLayerIndex} = bucketFeature; const feature = features[index].feature; - this.addFeature(bucketFeature, geometry, index, canonical); + this.addFeature(bucketFeature, geometry, index, options.availableImages, canonical); options.featureIndex.insert(feature, geometry, index, sourceLayerIndex, this.index); } } - update(states: FeatureStates, vtLayer: VectorTileLayer, imagePositions: {[_: string]: ImagePosition}) { + update(states: FeatureStates, vtLayer: VectorTileLayer, availableImages: Array, imagePositions: {[_: string]: ImagePosition}) { if (!this.stateDependentLayers.length) return; - this.programConfigurations.updatePaintArrays(states, vtLayer, this.stateDependentLayers, imagePositions); + this.programConfigurations.updatePaintArrays(states, vtLayer, this.stateDependentLayers, availableImages, imagePositions); } isEmpty() { @@ -158,7 +158,7 @@ class CircleBucket implements Bucke this.segments.destroy(); } - addFeature(feature: BucketFeature, geometry: Array>, index: number, canonical: CanonicalTileID) { + addFeature(feature: BucketFeature, geometry: Array>, index: number, availableImages: Array, canonical: CanonicalTileID) { for (const ring of geometry) { for (const point of ring) { const x = point.x; @@ -192,7 +192,7 @@ class CircleBucket implements Bucke } } - this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, feature, index, {}, canonical); + this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, feature, index, {}, availableImages, canonical); } } diff --git a/src/data/bucket/fill_bucket.js b/src/data/bucket/fill_bucket.js index bf73ff00393..2c2e6da9b62 100644 --- a/src/data/bucket/fill_bucket.js +++ b/src/data/bucket/fill_bucket.js @@ -120,7 +120,7 @@ class FillBucket implements Bucket { // so are stored during populate until later updated with positions by tile worker in addFeatures this.patternFeatures.push(patternFeature); } else { - this.addFeature(bucketFeature, geometry, index, canonical, {}); + this.addFeature(bucketFeature, geometry, index, canonical, {}, options.availableImages); } const feature = features[index].feature; @@ -128,14 +128,14 @@ class FillBucket implements Bucket { } } - update(states: FeatureStates, vtLayer: VectorTileLayer, imagePositions: {[_: string]: ImagePosition}) { + update(states: FeatureStates, vtLayer: VectorTileLayer, availableImages: Array, imagePositions: {[_: string]: ImagePosition}) { if (!this.stateDependentLayers.length) return; - this.programConfigurations.updatePaintArrays(states, vtLayer, this.stateDependentLayers, imagePositions); + this.programConfigurations.updatePaintArrays(states, vtLayer, this.stateDependentLayers, availableImages, imagePositions); } - addFeatures(options: PopulateParameters, canonical: CanonicalTileID, imagePositions: {[_: string]: ImagePosition}) { + addFeatures(options: PopulateParameters, canonical: CanonicalTileID, imagePositions: {[_: string]: ImagePosition}, availableImages: Array) { for (const feature of this.patternFeatures) { - this.addFeature(feature, feature.geometry, feature.index, canonical, imagePositions); + this.addFeature(feature, feature.geometry, feature.index, canonical, imagePositions, availableImages); } } @@ -166,7 +166,7 @@ class FillBucket implements Bucket { this.segments2.destroy(); } - addFeature(feature: BucketFeature, geometry: Array>, index: number, canonical: CanonicalTileID, imagePositions: {[_: string]: ImagePosition}) { + addFeature(feature: BucketFeature, geometry: Array>, index: number, canonical: CanonicalTileID, imagePositions: {[_: string]: ImagePosition}, availableImages: Array = []) { for (const polygon of classifyRings(geometry, EARCUT_MAX_RINGS)) { let numVertices = 0; for (const ring of polygon) { @@ -220,7 +220,7 @@ class FillBucket implements Bucket { triangleSegment.vertexLength += numVertices; triangleSegment.primitiveLength += indices.length / 3; } - this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, feature, index, imagePositions, canonical); + this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, feature, index, imagePositions, availableImages, canonical); } } diff --git a/src/data/bucket/fill_extrusion_bucket.js b/src/data/bucket/fill_extrusion_bucket.js index 703a86c91de..16505a40d6c 100644 --- a/src/data/bucket/fill_extrusion_bucket.js +++ b/src/data/bucket/fill_extrusion_bucket.js @@ -244,7 +244,7 @@ class FillExtrusionBucket implements Bucket { if (this.hasPattern) { this.features.push(addPatternDependencies('fill-extrusion', this.layers, bucketFeature, this.zoom, options)); } else { - this.addFeature(bucketFeature, bucketFeature.geometry, index, canonical, {}); + this.addFeature(bucketFeature, bucketFeature.geometry, index, canonical, {}, options.availableImages); } options.featureIndex.insert(feature, bucketFeature.geometry, index, sourceLayerIndex, this.index, vertexArrayOffset); @@ -252,17 +252,17 @@ class FillExtrusionBucket implements Bucket { this.sortBorders(); } - addFeatures(options: PopulateParameters, canonical: CanonicalTileID, imagePositions: {[_: string]: ImagePosition}) { + addFeatures(options: PopulateParameters, canonical: CanonicalTileID, imagePositions: {[_: string]: ImagePosition}, availableImages: Array) { for (const feature of this.features) { const {geometry} = feature; - this.addFeature(feature, geometry, feature.index, canonical, imagePositions); + this.addFeature(feature, geometry, feature.index, canonical, imagePositions, availableImages); } this.sortBorders(); } - update(states: FeatureStates, vtLayer: VectorTileLayer, imagePositions: {[_: string]: ImagePosition}) { + update(states: FeatureStates, vtLayer: VectorTileLayer, availableImages: Array, imagePositions: {[_: string]: ImagePosition}) { if (!this.stateDependentLayers.length) return; - this.programConfigurations.updatePaintArrays(states, vtLayer, this.stateDependentLayers, imagePositions); + this.programConfigurations.updatePaintArrays(states, vtLayer, this.stateDependentLayers, availableImages, imagePositions); } isEmpty() { @@ -301,7 +301,7 @@ class FillExtrusionBucket implements Bucket { this.segments.destroy(); } - addFeature(feature: BucketFeature, geometry: Array>, index: number, canonical: CanonicalTileID, imagePositions: {[_: string]: ImagePosition}) { + addFeature(feature: BucketFeature, geometry: Array>, index: number, canonical: CanonicalTileID, imagePositions: {[_: string]: ImagePosition}, availableImages: Array) { const metadata = this.enableTerrain ? new PartMetadata() : null; for (const polygon of classifyRings(geometry, EARCUT_MAX_RINGS)) { @@ -432,7 +432,7 @@ class FillExtrusionBucket implements Bucket { assert(!this.centroidVertexArray.length || this.centroidVertexArray.length === this.layoutVertexArray.length); } - this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, feature, index, imagePositions, canonical); + this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, feature, index, imagePositions, availableImages, canonical); } sortBorders() { diff --git a/src/data/bucket/line_bucket.js b/src/data/bucket/line_bucket.js index 4dfd299598c..f63758a9eae 100644 --- a/src/data/bucket/line_bucket.js +++ b/src/data/bucket/line_bucket.js @@ -187,7 +187,7 @@ class LineBucket implements Bucket { this.patternFeatures.push(patternBucketFeature); } else { - this.addFeature(bucketFeature, geometry, index, canonical, lineAtlas.positions); + this.addFeature(bucketFeature, geometry, index, canonical, lineAtlas.positions, options.availableImages); } const feature = features[index].feature; @@ -266,14 +266,14 @@ class LineBucket implements Bucket { } - update(states: FeatureStates, vtLayer: VectorTileLayer, imagePositions: {[_: string]: ImagePosition}) { + update(states: FeatureStates, vtLayer: VectorTileLayer, availableImages: Array, imagePositions: {[_: string]: ImagePosition}) { if (!this.stateDependentLayers.length) return; - this.programConfigurations.updatePaintArrays(states, vtLayer, this.stateDependentLayers, imagePositions); + this.programConfigurations.updatePaintArrays(states, vtLayer, this.stateDependentLayers, availableImages, imagePositions); } - addFeatures(options: PopulateParameters, canonical: CanonicalTileID, imagePositions: {[_: string]: ImagePosition}) { + addFeatures(options: PopulateParameters, canonical: CanonicalTileID, imagePositions: {[_: string]: ImagePosition}, availableImages: Array) { for (const feature of this.patternFeatures) { - this.addFeature(feature, feature.geometry, feature.index, canonical, imagePositions); + this.addFeature(feature, feature.geometry, feature.index, canonical, imagePositions, availableImages); } } @@ -313,7 +313,7 @@ class LineBucket implements Bucket { } } - addFeature(feature: BucketFeature, geometry: Array>, index: number, canonical: CanonicalTileID, imagePositions: {[_: string]: ImagePosition}) { + addFeature(feature: BucketFeature, geometry: Array>, index: number, canonical: CanonicalTileID, imagePositions: {[_: string]: ImagePosition}, availableImages: Array) { const layout = this.layers[0].layout; const join = layout.get('line-join').evaluate(feature, {}); const cap = layout.get('line-cap').evaluate(feature, {}); @@ -325,7 +325,7 @@ class LineBucket implements Bucket { this.addLine(line, feature, join, cap, miterLimit, roundLimit); } - this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, feature, index, imagePositions, canonical); + this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, feature, index, imagePositions, availableImages, canonical); } addLine(vertices: Array, feature: BucketFeature, join: string, cap: string, miterLimit: number, roundLimit: number) { diff --git a/src/data/bucket/symbol_bucket.js b/src/data/bucket/symbol_bucket.js index b7e836e7792..50cc769f276 100644 --- a/src/data/bucket/symbol_bucket.js +++ b/src/data/bucket/symbol_bucket.js @@ -553,10 +553,10 @@ class SymbolBucket implements Bucket { } } - update(states: FeatureStates, vtLayer: VectorTileLayer, imagePositions: {[_: string]: ImagePosition}) { + update(states: FeatureStates, vtLayer: VectorTileLayer, availableImages: Array, imagePositions: {[_: string]: ImagePosition}) { if (!this.stateDependentLayers.length) return; - this.text.programConfigurations.updatePaintArrays(states, vtLayer, this.layers, imagePositions); - this.icon.programConfigurations.updatePaintArrays(states, vtLayer, this.layers, imagePositions); + this.text.programConfigurations.updatePaintArrays(states, vtLayer, this.layers, availableImages, imagePositions); + this.icon.programConfigurations.updatePaintArrays(states, vtLayer, this.layers, availableImages, imagePositions); } isEmpty() { @@ -634,6 +634,7 @@ class SymbolBucket implements Bucket { lineStartIndex: number, lineLength: number, associatedIconIndex: number, + availableImages: Array, canonical: CanonicalTileID) { const indexArray = arrays.indexArray; const layoutVertexArray = arrays.layoutVertexArray; @@ -667,7 +668,7 @@ class SymbolBucket implements Bucket { this.glyphOffsetArray.emplaceBack(glyphOffset[0]); if (i === quads.length - 1 || sectionIndex !== quads[i + 1].sectionIndex) { - arrays.programConfigurations.populatePaintArrays(layoutVertexArray.length, feature, feature.index, {}, canonical, sections && sections[sectionIndex]); + arrays.programConfigurations.populatePaintArrays(layoutVertexArray.length, feature, feature.index, {}, availableImages, canonical, sections && sections[sectionIndex]); } } diff --git a/src/data/program_configuration.js b/src/data/program_configuration.js index dc8c0602ee2..f4605127351 100644 --- a/src/data/program_configuration.js +++ b/src/data/program_configuration.js @@ -80,8 +80,8 @@ function packColor(color: Color): [number, number] { */ interface AttributeBinder { - populatePaintArray(length: number, feature: Feature, imagePositions: {[_: string]: ImagePosition}, canonical?: CanonicalTileID, formattedSection?: FormattedSection): void; - updatePaintArray(start: number, length: number, feature: Feature, featureState: FeatureState, imagePositions: {[_: string]: ImagePosition}): void; + populatePaintArray(length: number, feature: Feature, imagePositions: {[_: string]: ImagePosition}, availableImages: Array, canonical?: CanonicalTileID, formattedSection?: FormattedSection): void; + updatePaintArray(start: number, length: number, feature: Feature, featureState: FeatureState, availableImages: Array, imagePositions: {[_: string]: ImagePosition}): void; upload(Context): void; destroy(): void; } @@ -174,15 +174,16 @@ class SourceExpressionBinder implements AttributeBinder { this.paintVertexArray = new PaintVertexArray(); } - populatePaintArray(newLength: number, feature: Feature, imagePositions: {[_: string]: ImagePosition}, canonical?: CanonicalTileID, formattedSection?: FormattedSection) { + populatePaintArray(newLength: number, feature: Feature, imagePositions: {[_: string]: ImagePosition}, availableImages: Array, canonical?: CanonicalTileID, formattedSection?: FormattedSection) { const start = this.paintVertexArray.length; - const value = this.expression.evaluate(new EvaluationParameters(0), feature, {}, canonical, [], formattedSection); + assert(Array.isArray(availableImages)); + const value = this.expression.evaluate(new EvaluationParameters(0), feature, {}, canonical, availableImages, formattedSection); this.paintVertexArray.resize(newLength); this._setPaintValue(start, newLength, value); } - updatePaintArray(start: number, end: number, feature: Feature, featureState: FeatureState) { - const value = this.expression.evaluate({zoom: 0}, feature, featureState); + updatePaintArray(start: number, end: number, feature: Feature, featureState: FeatureState, availableImages: Array) { + const value = this.expression.evaluate({zoom: 0}, feature, featureState, undefined, availableImages); this._setPaintValue(start, end, value); } @@ -245,17 +246,17 @@ class CompositeExpressionBinder implements AttributeBinder, UniformBinder { this.paintVertexArray = new PaintVertexArray(); } - populatePaintArray(newLength: number, feature: Feature, imagePositions: {[_: string]: ImagePosition}, canonical?: CanonicalTileID, formattedSection?: FormattedSection) { - const min = this.expression.evaluate(new EvaluationParameters(this.zoom), feature, {}, canonical, [], formattedSection); - const max = this.expression.evaluate(new EvaluationParameters(this.zoom + 1), feature, {}, canonical, [], formattedSection); + populatePaintArray(newLength: number, feature: Feature, imagePositions: {[_: string]: ImagePosition}, availableImages: Array, canonical?: CanonicalTileID, formattedSection?: FormattedSection) { + const min = this.expression.evaluate(new EvaluationParameters(this.zoom), feature, {}, canonical, availableImages, formattedSection); + const max = this.expression.evaluate(new EvaluationParameters(this.zoom + 1), feature, {}, canonical, availableImages, formattedSection); const start = this.paintVertexArray.length; this.paintVertexArray.resize(newLength); this._setPaintValue(start, newLength, min, max); } - updatePaintArray(start: number, end: number, feature: Feature, featureState: FeatureState) { - const min = this.expression.evaluate({zoom: this.zoom}, feature, featureState); - const max = this.expression.evaluate({zoom: this.zoom + 1}, feature, featureState); + updatePaintArray(start: number, end: number, feature: Feature, featureState: FeatureState, availableImages: Array) { + const min = this.expression.evaluate({zoom: this.zoom}, feature, featureState, undefined, availableImages); + const max = this.expression.evaluate({zoom: this.zoom + 1}, feature, featureState, undefined, availableImages); this._setPaintValue(start, end, min, max); } @@ -337,7 +338,7 @@ class CrossFadedCompositeBinder implements AttributeBinder { this._setPaintValues(start, length, feature.patterns && feature.patterns[this.layerId], imagePositions); } - updatePaintArray(start: number, end: number, feature: Feature, featureState: FeatureState, imagePositions: {[_: string]: ImagePosition}) { + updatePaintArray(start: number, end: number, feature: Feature, featureState: FeatureState, availableImages: Array, imagePositions: {[_: string]: ImagePosition}) { this._setPaintValues(start, end, feature.patterns && feature.patterns[this.layerId], imagePositions); } @@ -455,11 +456,11 @@ export default class ProgramConfiguration { return binder instanceof SourceExpressionBinder || binder instanceof CompositeExpressionBinder ? binder.maxValue : 0; } - populatePaintArrays(newLength: number, feature: Feature, imagePositions: {[_: string]: ImagePosition}, canonical?: CanonicalTileID, formattedSection?: FormattedSection) { + populatePaintArrays(newLength: number, feature: Feature, imagePositions: {[_: string]: ImagePosition}, availableImages: Array, canonical?: CanonicalTileID, formattedSection?: FormattedSection) { for (const property in this.binders) { const binder = this.binders[property]; if (binder instanceof SourceExpressionBinder || binder instanceof CompositeExpressionBinder || binder instanceof CrossFadedCompositeBinder) - (binder: AttributeBinder).populatePaintArray(newLength, feature, imagePositions, canonical, formattedSection); + (binder: AttributeBinder).populatePaintArray(newLength, feature, imagePositions, availableImages, canonical, formattedSection); } } setConstantPatternPositions(posTo: ImagePosition, posFrom: ImagePosition) { @@ -470,7 +471,7 @@ export default class ProgramConfiguration { } } - updatePaintArrays(featureStates: FeatureStates, featureMap: FeaturePositionMap, vtLayer: VectorTileLayer, layer: TypedStyleLayer, imagePositions: {[_: string]: ImagePosition}): boolean { + updatePaintArrays(featureStates: FeatureStates, featureMap: FeaturePositionMap, vtLayer: VectorTileLayer, layer: TypedStyleLayer, availableImages: Array, imagePositions: {[_: string]: ImagePosition}): boolean { let dirty: boolean = false; for (const id in featureStates) { const positions = featureMap.getPositions(id); @@ -485,7 +486,7 @@ export default class ProgramConfiguration { //AHM: Remove after https://github.com/mapbox/mapbox-gl-js/issues/6255 const value = layer.paint.get(property); (binder: any).expression = value.value; - (binder: AttributeBinder).updatePaintArray(pos.start, pos.end, feature, featureStates[id], imagePositions); + (binder: AttributeBinder).updatePaintArray(pos.start, pos.end, feature, featureStates[id], availableImages, imagePositions); dirty = true; } } @@ -608,9 +609,9 @@ export class ProgramConfigurationSet { this._bufferOffset = 0; } - populatePaintArrays(length: number, feature: Feature, index: number, imagePositions: {[_: string]: ImagePosition}, canonical: CanonicalTileID, formattedSection?: FormattedSection) { + populatePaintArrays(length: number, feature: Feature, index: number, imagePositions: {[_: string]: ImagePosition}, availableImages: Array, canonical: CanonicalTileID, formattedSection?: FormattedSection) { for (const key in this.programConfigurations) { - this.programConfigurations[key].populatePaintArrays(length, feature, imagePositions, canonical, formattedSection); + this.programConfigurations[key].populatePaintArrays(length, feature, imagePositions, availableImages, canonical, formattedSection); } if (feature.id !== undefined) { @@ -621,9 +622,9 @@ export class ProgramConfigurationSet { this.needsUpload = true; } - updatePaintArrays(featureStates: FeatureStates, vtLayer: VectorTileLayer, layers: $ReadOnlyArray, imagePositions: {[_: string]: ImagePosition}) { + updatePaintArrays(featureStates: FeatureStates, vtLayer: VectorTileLayer, layers: $ReadOnlyArray, availableImages: Array, imagePositions: {[_: string]: ImagePosition}) { for (const layer of layers) { - this.needsUpload = this.programConfigurations[layer.id].updatePaintArrays(featureStates, this._featureMap, vtLayer, layer, imagePositions) || this.needsUpload; + this.needsUpload = this.programConfigurations[layer.id].updatePaintArrays(featureStates, this._featureMap, vtLayer, layer, availableImages, imagePositions) || this.needsUpload; } } diff --git a/src/source/source_state.js b/src/source/source_state.js index f41fea5783c..ceb78178b7e 100644 --- a/src/source/source_state.js +++ b/src/source/source_state.js @@ -3,6 +3,7 @@ import {extend} from '../util/util.js'; import Tile from './tile.js'; import type {FeatureState} from '../style-spec/expression/index.js'; +import type Painter from '../render/painter.js'; export type FeatureStates = {[feature_id: string]: FeatureState}; export type LayerFeatureStates = {[layer: string]: FeatureStates}; @@ -99,7 +100,7 @@ class SourceFeatureState { return reconciledState; } - initializeTileState(tile: Tile, painter: any) { + initializeTileState(tile: Tile, painter: ?Painter) { tile.setFeatureState(this.state, painter); } diff --git a/src/source/tile.js b/src/source/tile.js index a29dc1629ee..e72b38db13d 100644 --- a/src/source/tile.js +++ b/src/source/tile.js @@ -36,6 +36,7 @@ import type {LayerFeatureStates} from './source_state.js'; import type {Cancelable} from '../types/cancelable.js'; import type {FilterSpecification} from '../style-spec/types.js'; import type {TilespaceQueryGeometry} from '../style/query_geometry.js'; +import type Painter from '../render/painter.js'; export type TileState = | 'loading' // Tile data is in the process of loading. @@ -436,14 +437,16 @@ class Tile { } } - setFeatureState(states: LayerFeatureStates, painter: any) { + setFeatureState(states: LayerFeatureStates, painter: ?Painter) { if (!this.latestFeatureIndex || !this.latestFeatureIndex.rawTileData || - Object.keys(states).length === 0) { + Object.keys(states).length === 0 || + !painter) { return; } const vtLayers = this.latestFeatureIndex.loadVTLayers(); + const availableImages = painter.style.listImages(); for (const id in this.buckets) { if (!painter.style.hasLayer(id)) continue; @@ -455,7 +458,7 @@ class Tile { const sourceLayerStates = states[sourceLayerId]; if (!sourceLayer || !sourceLayerStates || Object.keys(sourceLayerStates).length === 0) continue; - bucket.update(sourceLayerStates, sourceLayer, this.imageAtlas && this.imageAtlas.patternPositions || {}); + bucket.update(sourceLayerStates, sourceLayer, availableImages, this.imageAtlas && this.imageAtlas.patternPositions || {}); const layer = painter && painter.style && painter.style.getLayer(id); if (layer) { this.queryPadding = Math.max(this.queryPadding, layer.queryRadius(bucket)); diff --git a/src/source/worker.js b/src/source/worker.js index 621ee02ff49..f78f6bd70c4 100644 --- a/src/source/worker.js +++ b/src/source/worker.js @@ -38,7 +38,7 @@ export default class Worker { workerSourceTypes: {[_: string]: Class }; workerSources: {[_: string]: {[_: string]: {[_: string]: WorkerSource } } }; demWorkerSources: {[_: string]: {[_: string]: RasterDEMTileWorkerSource } }; - isSpriteLoaded: boolean; + isSpriteLoaded: {[_: string]: boolean }; referrer: ?string; terrain: ?boolean; @@ -49,7 +49,7 @@ export default class Worker { this.layerIndexes = {}; this.availableImages = {}; - this.isSpriteLoaded = false; + this.isSpriteLoaded = {}; this.workerSourceTypes = { vector: VectorTileWorkerSource, @@ -96,7 +96,7 @@ export default class Worker { } spriteLoaded(mapId: string, bool: boolean) { - this.isSpriteLoaded = bool; + this.isSpriteLoaded[mapId] = bool; for (const workerSource in this.workerSources[mapId]) { const ws = this.workerSources[mapId][workerSource]; for (const source in ws) { @@ -248,7 +248,7 @@ export default class Worker { }, scheduler: this.actor.scheduler }; - this.workerSources[mapId][type][source] = new (this.workerSourceTypes[type]: any)((actor: any), this.getLayerIndex(mapId), this.getAvailableImages(mapId), this.isSpriteLoaded); + this.workerSources[mapId][type][source] = new (this.workerSourceTypes[type]: any)((actor: any), this.getLayerIndex(mapId), this.getAvailableImages(mapId), this.isSpriteLoaded[mapId]); } return this.workerSources[mapId][type][source]; diff --git a/src/source/worker_tile.js b/src/source/worker_tile.js index 4831ddb792f..948fa6b68bf 100644 --- a/src/source/worker_tile.js +++ b/src/source/worker_tile.js @@ -152,7 +152,8 @@ class WorkerTile { collisionBoxArray: this.collisionBoxArray, sourceLayerIndex, sourceID: this.source, - enableTerrain: this.enableTerrain + enableTerrain: this.enableTerrain, + availableImages }); bucket.populate(features, options, this.tileID.canonical); @@ -229,6 +230,7 @@ class WorkerTile { iconMap, imageAtlas.iconPositions, this.showCollisionBoxes, + availableImages, this.tileID.canonical, this.tileZoom); } else if (bucket.hasPattern && @@ -236,7 +238,7 @@ class WorkerTile { bucket instanceof FillBucket || bucket instanceof FillExtrusionBucket)) { recalculateLayers(bucket.layers, this.zoom, availableImages); - bucket.addFeatures(options, this.tileID.canonical, imageAtlas.patternPositions); + bucket.addFeatures(options, this.tileID.canonical, imageAtlas.patternPositions, availableImages); } } diff --git a/src/style/style.js b/src/style/style.js index c7c4e9737ef..ca5a4cb4e10 100644 --- a/src/style/style.js +++ b/src/style/style.js @@ -652,10 +652,9 @@ class Style extends Evented { this.fire(new Event('data', {dataType: 'style'})); } - listImages() { + listImages(): Array { this._checkLoaded(); - - return this.imageManager.listImages(); + return this._availableImages.slice(); } addSource(id: string, source: SourceSpecification, options: StyleSetterOptions = {}) { diff --git a/src/symbol/symbol_layout.js b/src/symbol/symbol_layout.js index 850d5676ab6..b888b6739e7 100644 --- a/src/symbol/symbol_layout.js +++ b/src/symbol/symbol_layout.js @@ -153,6 +153,7 @@ export function performSymbolLayout(bucket: SymbolBucket, imageMap: {[_: string]: StyleImage}, imagePositions: {[_: string]: ImagePosition}, showCollisionBoxes: boolean, + availableImages: Array, canonical: CanonicalTileID, tileZoom: number) { bucket.createArrays(); @@ -315,7 +316,7 @@ export function performSymbolLayout(bucket: SymbolBucket, bucket.iconsInText = shapedText ? shapedText.iconsInText : false; } if (shapedText || shapedIcon) { - addFeature(bucket, feature, shapedTextOrientations, shapedIcon, imageMap, sizes, layoutTextSize, layoutIconSize, textOffset, isSDFIcon, canonical); + addFeature(bucket, feature, shapedTextOrientations, shapedIcon, imageMap, sizes, layoutTextSize, layoutIconSize, textOffset, isSDFIcon, availableImages, canonical); } } @@ -355,7 +356,9 @@ function addFeature(bucket: SymbolBucket, layoutTextSize: number, layoutIconSize: number, textOffset: [number, number], - isSDFIcon: boolean, canonical: CanonicalTileID) { + isSDFIcon: boolean, + availableImages: Array, + canonical: CanonicalTileID) { // To reduce the number of labels that jump around when zooming we need // to use a text-size value that is the same for all zoom levels. // bucket calculates text-size at a high zoom level so that all tiles can @@ -407,7 +410,7 @@ function addFeature(bucket: SymbolBucket, bucket.collisionBoxArray, feature.index, feature.sourceLayerIndex, bucket.index, textPadding, textAlongLine, textOffset, iconBoxScale, iconPadding, iconAlongLine, iconOffset, - feature, sizes, isSDFIcon, canonical); + feature, sizes, isSDFIcon, availableImages, canonical); }; if (symbolPlacement === 'line') { @@ -486,6 +489,7 @@ function addTextVertices(bucket: SymbolBucket, placedTextSymbolIndices: {[_: string]: number}, placedIconIndex: number, sizes: Sizes, + availableImages: Array, canonical: CanonicalTileID) { const glyphQuads = getGlyphQuads(anchor, shapedText, textOffset, layer, textAlongLine, feature, imageMap, bucket.allowVerticalPlacement); @@ -523,6 +527,7 @@ function addTextVertices(bucket: SymbolBucket, lineArray.lineStartIndex, lineArray.lineLength, placedIconIndex, + availableImages, canonical); // The placedSymbolArray is used at render time in drawTileSymbols @@ -643,6 +648,7 @@ function addSymbol(bucket: SymbolBucket, feature: SymbolFeature, sizes: Sizes, isSDFIcon: boolean, + availableImages: Array, canonical: CanonicalTileID) { const lineArray = bucket.addToLineVertexArray(anchor, line); @@ -729,7 +735,9 @@ function addSymbol(bucket: SymbolBucket, lineArray.lineStartIndex, lineArray.lineLength, // The icon itself does not have an associated symbol since the text isnt placed yet - -1, canonical); + -1, + availableImages, + canonical); placedIconSymbolIndex = bucket.icon.placedSymbolArray.length - 1; @@ -749,7 +757,9 @@ function addSymbol(bucket: SymbolBucket, lineArray.lineStartIndex, lineArray.lineLength, // The icon itself does not have an associated symbol since the text isnt placed yet - -1, canonical); + -1, + availableImages, + canonical); verticalPlacedIconSymbolIndex = bucket.icon.placedSymbolArray.length - 1; } @@ -775,7 +785,7 @@ function addSymbol(bucket: SymbolBucket, bucket, projectedAnchor, anchor, shaping, imageMap, layer, textAlongLine, feature, textOffset, lineArray, shapedTextOrientations.vertical ? WritingMode.horizontal : WritingMode.horizontalOnly, singleLine ? (Object.keys(shapedTextOrientations.horizontal): any) : [justification], - placedTextSymbolIndices, placedIconSymbolIndex, sizes, canonical); + placedTextSymbolIndices, placedIconSymbolIndex, sizes, availableImages, canonical); if (singleLine) { break; @@ -785,7 +795,7 @@ function addSymbol(bucket: SymbolBucket, if (shapedTextOrientations.vertical) { numVerticalGlyphVertices += addTextVertices( bucket, projectedAnchor, anchor, shapedTextOrientations.vertical, imageMap, layer, textAlongLine, feature, - textOffset, lineArray, WritingMode.vertical, ['vertical'], placedTextSymbolIndices, verticalPlacedIconSymbolIndex, sizes, canonical); + textOffset, lineArray, WritingMode.vertical, ['vertical'], placedTextSymbolIndices, verticalPlacedIconSymbolIndex, sizes, availableImages, canonical); } // Check if runtime collision circles should be used for any of the collision features. diff --git a/test/integration/render-tests/image-fallback-nested/circle/expected.png b/test/integration/render-tests/image-fallback-nested/circle/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..743399c2c7cf07c7c4a94612ab309f64395ec795 GIT binary patch literal 672 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrU`qFNaSW-L^Y-pRug3`@M?VHf z&sZt4I$)xfaYyvgRgaZ-d=-s3X z#fy3I&ukgC-+IGfHCdjWo7GAy-^L7U%n(T+F9o@&Yxq>ES_LoRh5#?5XgOC zri1kl6NNvQU##31@;aR%OmsePM*oD{4FCV#UV4#Pk+132$#mY9dNEtouunT0StZ>4 zJGbr$PX1wi@$$kcQPUbe>^>SFdY0W)?B>=Bf%p75>g{(`ha59Ld0f@WUaZ}w_PPG4 zeSCJOvuEuEMFt9Z!Qjp8J$+i;v(n7Y_rJf#%Kh1^x_(8q*uv#HZ=gzEy&Pb*ve z+qG4PS9k9ej{Pgdy>0jx= zf5N?O1XlU$%#Enh7W_AR>Esu6fy~~)-u~H#>NlD6z7saxye0SLu}kasp=fS?83{1OQ0|8I%A3 literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/image-fallback-nested/circle/style.json b/test/integration/render-tests/image-fallback-nested/circle/style.json new file mode 100644 index 00000000000..7a309997db5 --- /dev/null +++ b/test/integration/render-tests/image-fallback-nested/circle/style.json @@ -0,0 +1,83 @@ +{ + "version": 8, + "metadata": { + "test": { + "height": 128, + "width": 128 + } + }, + "center": [ 0, 0 ], + "zoom": 0, + "sprite": "local://sprites/sprite", + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { "icon": "fav-bicycle-18"}, + "geometry": { + "type": "Point", + "coordinates": [ + 0, + 16 + ] + } + }, + { + "type": "Feature", + "properties": { "icon": "missing-icon"}, + "geometry": { + "type": "Point", + "coordinates": [ + 0, + -16 + ] + } + } + ] + } + } + }, + "layers": [ + { + "id": "text", + "type": "circle", + "source": "geojson", + "paint": { + "circle-color": [ "case", + ["==", "missing", + ["to-string", ["coalesce", + ["image", ["get", "icon"]], + "missing" + ]] + ], + "red", + "blue" + ], + "circle-radius": [ "case", + ["==", "missing", + ["to-string", ["coalesce", + ["image", ["get", "icon"]], + "missing" + ]] + ], + 8, + 16 + ], + "circle-opacity": [ "case", + ["==", "missing", + ["to-string", ["coalesce", + ["image", ["get", "icon"]], + "missing" + ]] + ], + 1, + 0.2 + ] + } + } + ] +} diff --git a/test/integration/render-tests/image-fallback-nested/feature-state-inside/expected.png b/test/integration/render-tests/image-fallback-nested/feature-state-inside/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..820b2ef40ae43e9c8c1dabee9420ed3b60288548 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl-@25QX7?+*12gz79<~aS@K=nv#-3PP0%SdueX5KfWc86W0)v$n>nVFfH znVDIth7*B~z(~VDpe`3&HD~~hpbm5@7rTT&OF+L?L!Td9JxDiJn;*M``OW`M{%d7C zsM?j}Kh_R*!o2O*3(zp72iFuSKvyo2RDm(F14K==J+P`s@|t_XtIZAXegOi9?SXZ8 zpa4Vhd^QWzkt1+U53X~h00nQF91Z2^{&JQ4_1eckL{LWtcgZ8MA8-EFdi_XDFvKR8DLr91^Y@aM z#PEcaHa;kf4-{Z?^OC3@D8TE-;({)ceDaTxrQzKx!0UgE2u_g#BzJ6yHd25c{2Jr) z3cQtkcBhu;SCZe|Rd`yC!?-lYVjWtdmKY>PiEcM<-ptI*%*@Qp{-t-I8Bg;h0l?Y- O00006P)Nkl-@25QX7?+*12gz79<~aS@K=nv#-3PP0%SdueX5KfWc86W0)v$n>nVFfH znVDIth7*B~z(~VDpe`3&HD~~hpbm5@7rTT&OF+L?L!Td9JxDiJn;*M``OW`M{%d7C zsM?j}Kh_R*!o2O*3(zp72iFuSKvyo2RDm(F14K==J+P`s@|t_XtIZAXegOi9?SXZ8 zpa4Vhd^QWzkt1+U53X~h00nQF91Z2^{&JQ4_1eckL{LWtcgZ8MA8-EFdi_XDFvKR8DLr91^Y@aM z#PEcaHa;kf4-{Z?^OC3@D8TE-;({)ceDaTxrQzKx!0UgE2u_g#BzJ6yHd25c{2Jr) z3cQtkcBhu;SCZe|Rd`yC!?-lYVjWtdmKY>PiEcM<-ptI*%*@Qp{-t-I8Bg;h0l?Y- O0000-+wF*L6Sl^XIvqANP;@zOTBvVBk1L#XpGf20sH6k{co2Kh$a$FLvOs__kV*u;i^qT@Hf>CjH`zC zy22u4|Bx#L9#3x~K17=nd_`D$EV4h5BR^V3#UYR&f2pN=c`#H;;-Vild*#xReN6_-(35CJugjq!u zLCCRUHWf}4%z1QJyeZHA4jv4%^&`EqQGGD^xP2#p(NLeurkdAWSfIKMwve|s-=8Oo zR!MFbLtQUYmTT<+jUR5#)keX@>Ofj|Q>`9jbMwGtu4^`7#M`wR&Qkv>ml7q})LQN{ zAK&|~uY(%!I)mjl`2it=p1%&SP8@tVbQzm&vt*QeY8NpvfxICv{PqnWRCd$tk`n5r z>ukZ|$gNgjrN(loZbYMZG1~A%HD#|IAhMxl!`7w}!V4AJz~!50c8abJ(JE?|b(iL` zLDfQGdjCeZ=IuAdwCp0E9dya74-b#f1KmH&S&1+0qzEG2fBZ20u46aAT)D$YJajb3 z3^UokUsz+so6wT8j3LA_%k)IJyM_IWdzGH6wv{#hyhnc-)ZGCh5mmBy#>Nk`=SP?V>++YqD_{ud6T)}G}tz6!UZ$*}A4;g{AvGdON8GZ3K z!iKTOX#`ne53or*6dFG_Q1@fdq!4~a`SYwnw`T&jX@h>uPIK>3M*z8Xu)#cH3Zlfq znH;-~ILxlf&5RvdEHaF(t}U0jU-{GlA<&@=hSrwIQNXzGX37)og^bUaQ2`4RuwB4& z_5}XPi7|Y?eCKIrOI1Z^yswcUE;N=O2urT?0%Ye6Z@tEe8#*T0X_kkp_0#!CQ95iB zL@R215UriWoMD0o6b}aln+1Vit~gQGv zR)T?U+wv^~VrcL_+dE)$1-}R}FjD^^`}8Uy%Jn?@(+=?i4KMk_)?DYI0@k@;Am2;7 zUyt}?I3TK$#%;{Ir4{Tl(EvDY#7QLeT(8%4K4jposbjOx9nkCD{Uz042A!bo4)~QJ z&|tVXUfZt$pm&<#UglPjjd~5YgQoVj-JF`PD;?4bj99ydGz!5i6jJvYe{5(;51Z-+ zISw5?j#RO`2N>&ByUe!>is+>r1JbMGcsRzewAcI5Z~2tQBDuoro#99#*RU?>q#9oJOFvdvD zv(MQb;M$Q43-qT74B~Rr1L}}ei7Nw zhtjrv?R`*PIWK*t&)>1$<}(Q4!pCBQ9Na$F2|l|-(>{BS{DQ9dEG-R;EB-b}2HZLQ zrTlbz7Z}|E5RlkmBNh(&Nc!{*xGV zcUjT1E$EWKw?8jRdUP6r)G#{5EB|tdxYDLYc6gc+`sT!i` zCDRnGIH4`QFI45iNd=D4rLD#ffx}uW_+fx#u5AU{Y^pZY4dFJbz<#cgJ*J3j)8PZ1I6b}7y zGCm4?#aq2pZy#2o#g6TT#O1bj8ACN(N5fKZk__Rr{=^-gh4>Yz4U(p4t=-ZwG3^j{ zjZ7$;w3Iujo8%5jGNnPl9%&W~Sd6I*0EYMv%|VUkY96-;i???=TbOdzEt!W@za!cmOQnko%nX~De1 zE>A*t__ihyjqfLA%*k_Q$nKUeU>#K^2N(*e&ygZqF4cBvjgFWu2^%{28e8&*#2~NR z61-8)0v5nvmYYRT66=MHP#dvhln?{XrHmB?VK~A~Q9q-=8==FpUfY!UEE|&qNiheQQ(slbq5KkYC3X<`i_N51LzK|`*bJP$lA5<=@=8KWrjc!LtC$xrp6~0JKW5!3D?CNAyBl6Y zdOQBwAgPAj>fowG_C-n4ZR=6r(_({x`Yr2a(6ze}{W-h2vmGdk=(}!~A6P<Dc_p*u)cz=oltHLqI<0Y5W{5F7hnKa zdz@fG3v`I`9u(2JPxcpS#)#Nb?umJ~d2djv@AmsZ%4VRYPl!gY!dGcad4)*DTXm`K zZ$bK1K?f;czRY@G7wSP5Q=OPympYEW{8Nb=2Hlgw0wrB1ZS=+2b&?QBDJ|MaDcar3 zYLaepZwZ;3IJ{f3pR7GzulUG5C~Km|#9$n6b2dNlq(p|S_2CltX|Q;JspAajLG}Y< zJnqCj_u4X9!R({48DfKx_;oifW(rh2bSam2@}q5A>>ogzGw_S`q?F?VO(y|cv*)qz!9QpN=2xPxTROL8?qmVi(UZs*hdU|!GTIvuh5FczjF)yCu zyz&l4PK_~`XOpbA0M+&+g*{Y2Jb$ZsGZ`12{RP){PsK5Xm)v=H?t3C+DK3w9s~(j+ zQf{JFTrN}}zBh%7j-C6Z%C4GTuIKesm*k1uuIa|R-AS)FdqO{2A2HfuUzw*|BN{MqIw9oE<-yI%s)WOBR&Nh(rFI}k4 A@c;k- literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/image-fallback-nested/icon/style.json b/test/integration/render-tests/image-fallback-nested/icon/style.json new file mode 100644 index 00000000000..6b3d01c0bbf --- /dev/null +++ b/test/integration/render-tests/image-fallback-nested/icon/style.json @@ -0,0 +1,112 @@ +{ + "version": 8, + "metadata": { + "test": { + "height": 128, + "width": 128 + } + }, + "center": [ 0, 0 ], + "zoom": 0, + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { "icon": "fav-bicycle-18"}, + "geometry": { + "type": "Point", + "coordinates": [ + 0, + 16 + ] + } + }, + { + "type": "Feature", + "properties": { "icon": "missing-icon"}, + "geometry": { + "type": "Point", + "coordinates": [ + 0, + -16 + ] + } + } + ] + } + } + }, + "layers": [ + { + "id": "text", + "type": "symbol", + "source": "geojson", + "layout": { + "text-allow-overlap": true, + "icon-allow-overlap": true, + "icon-image": "dot.sdf", + "text-field": ["to-string", + ["coalesce", + ["image", ["get", "icon"]], + "no icon found" + ] + ], + + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-offset": [0, 0.6], + "text-anchor": "top" + }, + "paint": { + "icon-color": [ "case", + ["==", "missing", + ["to-string", ["coalesce", + ["image", ["get", "icon"]], + "missing" + ]] + ], + "red", + "blue" + ], + "text-color": [ "case", + ["==", "missing", + ["to-string", ["coalesce", + ["image", ["get", "icon"]], + "missing" + ]] + ], + "red", + "blue" + ], + "icon-opacity": [ "case", + ["==", "missing", + ["to-string", ["coalesce", + ["image", ["get", "icon"]], + "missing" + ]] + ], + 1, + 0.2 + ], + "text-opacity": [ "case", + ["==", "missing", + ["to-string", ["coalesce", + ["image", ["get", "icon"]], + "missing" + ]] + ], + 1, + 0.2 + ] + } + } + ] +} diff --git a/test/integration/render-tests/image-fallback-nested/line/expected.png b/test/integration/render-tests/image-fallback-nested/line/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..4c9c0110c24be1fb5be815124f496bbdf8828bcf GIT binary patch literal 289 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSFFaiwLn`LHy~N1L9LU3Z(1AC^ zYvDiB&_njZ?B45)1(++XnSsiXK*8eAw<_;EsVSE;U)e6=utqM3VPlmCro!7n{ZX-F|!pLF28B-}i?9=S4G!q2a3DN^TodCa>LV OK~kQselF{r5}E*^%2we3 literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/image-fallback-nested/line/style.json b/test/integration/render-tests/image-fallback-nested/line/style.json new file mode 100644 index 00000000000..b6fc6dace13 --- /dev/null +++ b/test/integration/render-tests/image-fallback-nested/line/style.json @@ -0,0 +1,88 @@ +{ + "version": 8, + "metadata": { + "test": { + "height": 128, + "width": 128 + } + }, + "center": [ 0, 0 ], + "zoom": 0, + "sprite": "local://sprites/sprite", + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { "icon": "fav-bicycle-18"}, + "geometry": { + "type": "LineString", + "coordinates": [ + [ -16, 16], + [16, 16] + ] + } + }, + { + "type": "Feature", + "properties": { "icon": "missing-icon"}, + "geometry": { + "type": "LineString", + "coordinates": [ + [ -16, -16], + [16, -16] + ] + } + } + ] + } + } + }, + "layers": [ + { + "id": "text", + "type": "line", + "source": "geojson", + "layout": { + }, + "paint": { + "line-color": + [ "case", + ["==", "missing", + ["to-string", ["coalesce", + ["image", ["get", "icon"]], + "missing" + ]] + ], + "red", + "blue" + ], + "line-width": + [ "case", + ["==", "missing", + ["to-string", ["coalesce", + ["image", ["get", "icon"]], + "missing" + ]] + ], + 10, + 20 + ], + "line-opacity": + [ "case", + ["==", "missing", + ["to-string", ["coalesce", + ["image", ["get", "icon"]], + "missing" + ]] + ], + 1, + 0.2 + ] + } + } + ] +} diff --git a/test/integration/render-tests/image-fallback-nested/text/expected.png b/test/integration/render-tests/image-fallback-nested/text/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..ad51ebf12fab0f782fc63d6ac5c98b1f06681172 GIT binary patch literal 5546 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 literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/image-fallback-nested/text/style.json b/test/integration/render-tests/image-fallback-nested/text/style.json new file mode 100644 index 00000000000..f5ee0d116ad --- /dev/null +++ b/test/integration/render-tests/image-fallback-nested/text/style.json @@ -0,0 +1,95 @@ +{ + "version": 8, + "metadata": { + "test": { + "height": 128, + "width": 128 + } + }, + "center": [ 0, 0 ], + "zoom": 0, + "sprite": "local://sprites/sprite", + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { "icon": "fav-bicycle-18"}, + "geometry": { + "type": "Point", + "coordinates": [ + 0, + 16 + ] + } + }, + { + "type": "Feature", + "properties": { "icon": "missing-icon"}, + "geometry": { + "type": "Point", + "coordinates": [ + 0, + -16 + ] + } + } + ] + } + } + }, + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "layers": [ + { + "id": "text", + "type": "symbol", + "source": "geojson", + "layout": { + "text-allow-overlap": true, + "icon-allow-overlap": true, + "icon-image": [ + "coalesce", + ["image", ["get", "icon"]], + ["image", "park"] + ], + "text-field": ["to-string", + ["coalesce", + ["image", ["get", "icon"]], + "no icon found" + ] + ], + "text-font": [ + "Open Sans Semibold", + "Arial Unicode MS Bold" + ], + "text-offset": [0, 0.6], + "text-anchor": "top" + }, + "paint": { + "text-color": [ "case", + ["==", "missing", + ["to-string", ["coalesce", + ["image", ["get", "icon"]], + "missing" + ]] + ], + "red", + "blue" + ], + "text-opacity": [ "case", + ["==", "missing", + ["to-string", ["coalesce", + ["image", ["get", "icon"]], + "missing" + ]] + ], + 1, + 0.2 + ] + } + } + ] +} diff --git a/test/integration/render-tests/image-fallback-nested/zoom/expected.png b/test/integration/render-tests/image-fallback-nested/zoom/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..64bc1adfda7bdb223f4715355cdff4e9335e052e GIT binary patch literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=D?MEtLn`LHy=KkVY#`!t@pj;n zG~+dmvu3$o*eqw}?r)kY*p>8fN5>J{Nw+87_xRVK;yDR|mi#ty3Om75Y3kh?p1`-J zabswnv!nvM%Ji*&=J1?0H7Q_e6SK}&_}hN)eD*58wwKWb3-T>Jm*%uGeS4L1gPS!+ zSAFG_y#Wpici)D*@LJgTsz`cM!*Th> Date: Tue, 19 Oct 2021 17:24:23 -0400 Subject: [PATCH 18/20] add support for non-mercator projections (#11124) * rough projection support * projections stencil clipping and refactor (#410) * Enable stencil clipping for line and fill layers * Use buffers from tile * Refactor tile bounds buffers * Rename things to not exclusively be RasterBounds * Create projections directory * More refactoring * Combine matrix calculations * Cleanup * Refactor projections to new folder * Begin debug work * Tile boundaries are working * Refactor indexbuffer and segmentvector to per painter * merge projectx and projecty functions * nits Co-authored-by: Ansis Brammanis * Projections fix location issues (#414) * Add debug page * Add projection option * Wire up projection code with worker * Rename projections folder to projection * Refactor and update free camera * Add Projection type and fix center calculations * Fix bug with transform._center * Make Winkel projection noop for now * Update demo HTML and CSS * temp remove undistortion Co-authored-by: Ansis Brammanis * [projections] Adaptive geometry resampling for alternative projections (#10753) * implement adaptive resampling of reprojected geometry * address feedback * Refactor projections code to get all tests passing (#10732) * [projections] Simplify and optimize tile transform code (#10780) * simplify projections tile transform * skip resampling for mercator * [projections] Fix performance regression in draw_background (#10747) * separate tiles for background layers * additional lint & flow fixes * try fixing tests * try fixing render tests Co-authored-by: Ansis Brammanis * Pin chrome to version 91 (#10887) (#10896) * Pin to chrome version 91 * Pin chrome version for test-browser Co-authored-by: Arindam Bose * Refactor raw projections, handle projection options (#10913) * refactor raw projections, handle projection options * add unprojection to winkel tripel * fix flow * Pin chrome to version 91 (#10887) * Pin to chrome version 91 * Pin chrome version for test-browser * fix lint * remove to superfluous sin calls Co-authored-by: Arindam Bose * Fix bearing for non-mercator projections (#10781) * Use adaptive resampling with MARTINI & Earcut for non-Mercator tiles (#10980) * use adaptive resampling and earcut for non-Mercator tile bounds * fix unit test * use adaptive MARTINI mesh for non-Mercator raster tiles * Clamp unproject to valid geo range in alternate projections (#10992) * clamp unproject to mercator bounds in all projections * fix marker test * avoid wrapping center for non-Mercator projections * extend alt projections clamping to full lat range * correct zoom, bearing and shear for projections (#10976) * fix zoom, bearing and skew for projections * refactor adjustments * lint * add comments * Fix circle and heatmap on alternate projections (#11074) * fix circle & heatmap on alternate projections (blunder) * fix unit test * fix pitch, line-width and other properties for projections (#11080) and: - fix fill-extrusions - remove global projection variable to allow multiple maps on one page - avoid recalculating tileTransform * Add Equal Earth, Natural Earth and Lambert Conformal Conic projections (#11091) * Fix constraining logic for alternate projections (#11092) * adaptive bbox for projections, refactor resampling * better precision for adaptive bounds * remove leftover * fix zoom/shear adjustments near poles * optimize tile transform * fix lint * attempt to fix tests * simplify, clarify and consolidate constraining logic * minor renames in transform * safer clamping for zoom adjustments * Projections public API (#11002) Co-authored-by: Ansis Brammanis * fix conflicts * fix seams around alternate-projected tiles (#11119) * fix unit tests * remove alaska * Basic support for custom maxBounds in alternate projections (#11121) * rudimentary support for custom maxBounds in alternate projections * fix flow * fix image and video sources in alternate projections (#11123) * clean up debug pages * remove uncessary deg <--> rad conversions * fix filename casing * fix queryRenderedFeatures for alternate projections (#11125) * Projections fixups (#11127) * disable terrain and fog for alternate projections (#11126) * Lazily instantiate projected tile debug buffers and release projected buffers when tiles are unloaded (#11128) * enable lod tile loading for projections (#11129) * enable lod tile loading for projections to significantly reduce the number of tiles at low zoom levels * use Math.hypot(...) Co-authored-by: Vladimir Agafonkin * add comments Co-authored-by: Vladimir Agafonkin * allow map.setProjection(null) * add limitations * avoid recreating tile buffer Co-authored-by: Karim Naaji * fix assertion error * fix requires * center projections vertically Center projections vertically in 0 to 1 range. This shouldn't matter but there is some constraining behavior that is currently affected by this. * Fix tile buffer destroyed but not reset (#11134) * mention settin bounds in projection docs Co-authored-by: Ryan Hamley Co-authored-by: Vladimir Agafonkin Co-authored-by: Arindam Bose Co-authored-by: Karim Naaji --- LICENSE.txt | 4 +- build/generate-flow-typed-style-spec.js | 4 + build/generate-struct-arrays.js | 9 +- debug/projections.html | 189 +++++++++ src/data/array_types.js | 40 +- ...nds_attributes.js => bounds_attributes.js} | 0 src/data/bucket.js | 3 +- src/data/bucket/circle_bucket.js | 5 +- src/data/bucket/fill_bucket.js | 5 +- src/data/bucket/fill_extrusion_bucket.js | 5 +- src/data/bucket/line_bucket.js | 5 +- src/data/bucket/symbol_bucket.js | 5 +- src/data/feature_index.js | 4 +- src/data/load_geometry.js | 74 +++- src/geo/mercator_coordinate.js | 8 +- src/geo/projection/adjustments.js | 147 +++++++ src/geo/projection/albers.js | 44 ++ src/geo/projection/equal_earth.js | 56 +++ src/geo/projection/equirectangular.js | 18 + src/geo/projection/index.js | 36 ++ src/geo/projection/lambert.js | 70 +++ src/geo/projection/mercator.js | 18 + src/geo/projection/natural_earth.js | 51 +++ src/geo/projection/resample.js | 49 +++ src/geo/projection/tile_transform.js | 99 +++++ src/geo/projection/winkel_tripel.js | 64 +++ src/geo/transform.js | 398 ++++++++++++------ src/render/draw_background.js | 17 +- src/render/draw_debug.js | 8 +- src/render/draw_hillshade.js | 12 +- src/render/draw_raster.js | 6 +- src/render/draw_symbol.js | 7 +- src/render/painter.js | 81 ++-- src/render/program/circle_program.js | 18 +- src/render/program/line_program.js | 15 +- src/render/uniform_binding.js | 19 + src/shaders/circle.vertex.glsl | 2 +- src/shaders/line.vertex.glsl | 6 +- src/shaders/line_pattern.vertex.glsl | 6 +- src/source/canvas_source.js | 8 +- src/source/image_source.js | 23 +- src/source/pixels_to_tile_units.js | 10 + src/source/source_cache.js | 7 +- src/source/tile.js | 121 +++++- src/source/tile_id.js | 26 -- src/source/tile_mesh.js | 162 +++++++ src/source/video_source.js | 8 +- src/source/worker.js | 15 +- src/source/worker_source.js | 4 +- src/source/worker_tile.js | 16 +- src/style-spec/diff.js | 9 +- src/style-spec/reference/v8.json | 95 +++++ src/style-spec/types.js | 7 + src/style-spec/validate/validate.js | 4 +- .../validate/validate_projection.js | 30 ++ src/style/fog.js | 6 + src/style/query_geometry.js | 10 +- src/style/style.js | 30 +- src/symbol/placement.js | 3 +- src/symbol/projection.js | 19 +- src/terrain/terrain.js | 4 +- src/ui/camera.js | 6 +- src/ui/free_camera.js | 1 + src/ui/map.js | 88 +++- test/expression.test.js | 6 +- test/integration/lib/render.js | 1 + .../albers-configured/expected.png | Bin 0 -> 25356 bytes .../albers-configured/style.json | 18 + .../map-projections/albers/expected.png | Bin 0 -> 34447 bytes .../map-projections/albers/style.json | 18 + .../map-projections/equal-earth/expected.png | Bin 0 -> 36510 bytes .../map-projections/equal-earth/style.json | 17 + .../equirectangular/expected.png | Bin 0 -> 33937 bytes .../equirectangular/style.json | 17 + .../map-projections/lambert/expected.png | Bin 0 -> 32116 bytes .../map-projections/lambert/style.json | 18 + .../natural-earth/expected.png | Bin 0 -> 36504 bytes .../map-projections/natural-earth/style.json | 17 + .../winkel-tripel/expected.png | Bin 0 -> 38955 bytes .../map-projections/winkel-tripel/style.json | 17 + test/unit/data/symbol_bucket.test.js | 6 +- test/unit/geo/transform.test.js | 44 +- .../unit/source/geojson_worker_source.test.js | 4 +- test/unit/source/source_cache.test.js | 8 +- .../source/vector_tile_worker_source.test.js | 6 +- test/unit/source/worker.test.js | 1 + test/unit/source/worker_tile.test.js | 4 +- test/unit/terrain/terrain.test.js | 9 +- test/unit/ui/map.test.js | 125 +++++- test/unit/ui/marker.test.js | 2 +- 90 files changed, 2256 insertions(+), 401 deletions(-) create mode 100644 debug/projections.html rename src/data/{raster_bounds_attributes.js => bounds_attributes.js} (100%) create mode 100644 src/geo/projection/adjustments.js create mode 100644 src/geo/projection/albers.js create mode 100644 src/geo/projection/equal_earth.js create mode 100644 src/geo/projection/equirectangular.js create mode 100644 src/geo/projection/index.js create mode 100644 src/geo/projection/lambert.js create mode 100644 src/geo/projection/mercator.js create mode 100644 src/geo/projection/natural_earth.js create mode 100644 src/geo/projection/resample.js create mode 100644 src/geo/projection/tile_transform.js create mode 100644 src/geo/projection/winkel_tripel.js create mode 100644 src/source/tile_mesh.js create mode 100644 src/style-spec/validate/validate_projection.js create mode 100644 test/integration/render-tests/map-projections/albers-configured/expected.png create mode 100644 test/integration/render-tests/map-projections/albers-configured/style.json create mode 100644 test/integration/render-tests/map-projections/albers/expected.png create mode 100644 test/integration/render-tests/map-projections/albers/style.json create mode 100644 test/integration/render-tests/map-projections/equal-earth/expected.png create mode 100644 test/integration/render-tests/map-projections/equal-earth/style.json create mode 100644 test/integration/render-tests/map-projections/equirectangular/expected.png create mode 100644 test/integration/render-tests/map-projections/equirectangular/style.json create mode 100644 test/integration/render-tests/map-projections/lambert/expected.png create mode 100644 test/integration/render-tests/map-projections/lambert/style.json create mode 100644 test/integration/render-tests/map-projections/natural-earth/expected.png create mode 100644 test/integration/render-tests/map-projections/natural-earth/style.json create mode 100644 test/integration/render-tests/map-projections/winkel-tripel/expected.png create mode 100644 test/integration/render-tests/map-projections/winkel-tripel/style.json diff --git a/LICENSE.txt b/LICENSE.txt index 1054bedc9f8..e5424065cce 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -53,8 +53,10 @@ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -------------------------------------------------------------------------------- Contains a portion of d3-color https://github.com/d3/d3-color +Contains a portion of d3-geo https://github.com/d3/d3-geo +Contains a portion of d3-geo-projection https://github.com/d3/d3-geo-projection -Copyright 2010-2016 Mike Bostock +Copyright 2010-2021 Mike Bostock All rights reserved. Redistribution and use in source and binary forms, with or without modification, diff --git a/build/generate-flow-typed-style-spec.js b/build/generate-flow-typed-style-spec.js index 2cc8ccf22ba..f174ba2bd6f 100644 --- a/build/generate-flow-typed-style-spec.js +++ b/build/generate-flow-typed-style-spec.js @@ -38,6 +38,8 @@ function flowType(property) { return 'TerrainSpecification'; case 'fog': return 'FogSpecification'; + case 'projection': + return 'ProjectionSpecification'; case 'sources': return '{[_: string]: SourceSpecification}'; case '*': @@ -185,6 +187,8 @@ ${flowObjectDeclaration('TerrainSpecification', spec.terrain)} ${flowObjectDeclaration('FogSpecification', spec.fog)} +${flowObjectDeclaration('ProjectionSpecification', spec.projection)} + ${spec.source.map(key => flowObjectDeclaration(flowSourceTypeName(key), spec[key])).join('\n\n')} export type SourceSpecification = diff --git a/build/generate-struct-arrays.js b/build/generate-struct-arrays.js index 6a3e8cf86ea..a6e14614fd4 100644 --- a/build/generate-struct-arrays.js +++ b/build/generate-struct-arrays.js @@ -118,10 +118,10 @@ function camelize (str) { global.camelize = camelize; import posAttributes from '../src/data/pos_attributes.js'; -import rasterBoundsAttributes from '../src/data/raster_bounds_attributes.js'; +import boundsAttributes from '../src/data/bounds_attributes.js'; createStructArrayType('pos', posAttributes); -createStructArrayType('raster_bounds', rasterBoundsAttributes); +createStructArrayType('raster_bounds', boundsAttributes); import circleAttributes from '../src/data/bucket/circle_attributes.js'; import fillAttributes from '../src/data/bucket/fill_attributes.js'; @@ -130,6 +130,7 @@ import lineAttributesExt from '../src/data/bucket/line_attributes_ext.js'; import patternAttributes from '../src/data/bucket/pattern_attributes.js'; import dashAttributes from '../src/data/bucket/dash_attributes.js'; import skyboxAttributes from '../src/render/skybox_attributes.js'; +import tileBoundsAttributes from '../src/data/bounds_attributes.js'; import {fillExtrusionAttributes, centroidAttributes} from '../src/data/bucket/fill_extrusion_attributes.js'; // layout vertex arrays @@ -208,6 +209,9 @@ createStructArrayType('line_strip_index', createLayout([ // skybox vertex array createStructArrayType(`skybox_vertex`, skyboxAttributes); +// tile bounds vertex array +createStructArrayType(`tile_bounds`, tileBoundsAttributes); + // paint vertex arrays // used by SourceBinder for float properties @@ -244,7 +248,6 @@ fs.writeFileSync('src/data/array_types.js', import assert from 'assert'; import {Struct, StructArray} from '../util/struct_array.js'; import {register} from '../util/web_worker_transfer.js'; -import Point from '@mapbox/point-geometry'; ${layouts.map(structArrayLayoutJs).join('\n')} ${arraysWithStructAccessors.map(structArrayJs).join('\n')} diff --git a/debug/projections.html b/debug/projections.html new file mode 100644 index 00000000000..94754f0c925 --- /dev/null +++ b/debug/projections.html @@ -0,0 +1,189 @@ + + + + Mapbox GL JS debug page + + + + + + + +

+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + + + + + diff --git a/src/data/array_types.js b/src/data/array_types.js index b14fc62d934..38d46b82217 100644 --- a/src/data/array_types.js +++ b/src/data/array_types.js @@ -815,41 +815,6 @@ class StructArrayLayout1ui2 extends StructArray { StructArrayLayout1ui2.prototype.bytesPerElement = 2; register('StructArrayLayout1ui2', StructArrayLayout1ui2); -/** - * Implementation of the StructArray layout: - * [0]: Float32[5] - * - * @private - */ -class StructArrayLayout5f20 extends StructArray { - uint8: Uint8Array; - float32: Float32Array; - - _refreshViews() { - this.uint8 = new Uint8Array(this.arrayBuffer); - this.float32 = new Float32Array(this.arrayBuffer); - } - - emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number) { - const i = this.length; - this.resize(i + 1); - return this.emplace(i, v0, v1, v2, v3, v4); - } - - emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number) { - const o4 = i * 5; - this.float32[o4 + 0] = v0; - this.float32[o4 + 1] = v1; - this.float32[o4 + 2] = v2; - this.float32[o4 + 3] = v3; - this.float32[o4 + 4] = v4; - return i; - } -} - -StructArrayLayout5f20.prototype.bytesPerElement = 20; -register('StructArrayLayout5f20', StructArrayLayout5f20); - /** * Implementation of the StructArray layout: * [0]: Float32[2] @@ -1227,7 +1192,6 @@ export { StructArrayLayout1ul3ui12, StructArrayLayout2ui4, StructArrayLayout1ui2, - StructArrayLayout5f20, StructArrayLayout2f8, StructArrayLayout4f16, StructArrayLayout2i4 as PosArray, @@ -1251,6 +1215,6 @@ export { StructArrayLayout3ui6 as TriangleIndexArray, StructArrayLayout2ui4 as LineIndexArray, StructArrayLayout1ui2 as LineStripIndexArray, - StructArrayLayout5f20 as GlobeVertexArray, - StructArrayLayout3f12 as SkyboxVertexArray + StructArrayLayout3f12 as SkyboxVertexArray, + StructArrayLayout4i8 as TileBoundsArray }; diff --git a/src/data/raster_bounds_attributes.js b/src/data/bounds_attributes.js similarity index 100% rename from src/data/raster_bounds_attributes.js rename to src/data/bounds_attributes.js diff --git a/src/data/bucket.js b/src/data/bucket.js index b286d445c07..cc02377b070 100644 --- a/src/data/bucket.js +++ b/src/data/bucket.js @@ -9,6 +9,7 @@ import type {FeatureStates} from '../source/source_state.js'; import type {ImagePosition} from '../render/image_atlas.js'; import type LineAtlas from '../render/line_atlas.js'; import type {CanonicalTileID} from '../source/tile_id.js'; +import type {TileTransform} from '../geo/projection/tile_transform.js'; export type BucketParameters = { index: number, @@ -78,7 +79,7 @@ export interface Bucket { +layers: Array; +stateDependentLayers: Array; +stateDependentLayerIds: Array; - populate(features: Array, options: PopulateParameters, canonical: CanonicalTileID): void; + populate(features: Array, options: PopulateParameters, canonical: CanonicalTileID, tileTransform: TileTransform): void; update(states: FeatureStates, vtLayer: VectorTileLayer, availableImages: Array, imagePositions: {[_: string]: ImagePosition}): void; isEmpty(): boolean; diff --git a/src/data/bucket/circle_bucket.js b/src/data/bucket/circle_bucket.js index 6afe789757a..8193e806376 100644 --- a/src/data/bucket/circle_bucket.js +++ b/src/data/bucket/circle_bucket.js @@ -28,6 +28,7 @@ import type VertexBuffer from '../../gl/vertex_buffer.js'; import type Point from '@mapbox/point-geometry'; import type {FeatureStates} from '../../source/source_state.js'; import type {ImagePosition} from '../../render/image_atlas.js'; +import type {TileTransform} from '../../geo/projection/tile_transform.js'; function addCircleVertex(layoutVertexArray, x, y, extrudeX, extrudeY) { layoutVertexArray.emplaceBack( @@ -77,7 +78,7 @@ class CircleBucket implements Bucke this.stateDependentLayerIds = this.layers.filter((l) => l.isStateDependent()).map((l) => l.id); } - populate(features: Array, options: PopulateParameters, canonical: CanonicalTileID) { + populate(features: Array, options: PopulateParameters, canonical: CanonicalTileID, tileTransform: TileTransform) { const styleLayer = this.layers[0]; const bucketFeatures = []; let circleSortKey = null; @@ -103,7 +104,7 @@ class CircleBucket implements Bucke type: feature.type, sourceLayerIndex, index, - geometry: needGeometry ? evaluationFeature.geometry : loadGeometry(feature), + geometry: needGeometry ? evaluationFeature.geometry : loadGeometry(feature, canonical, tileTransform), patterns: {}, sortKey }; diff --git a/src/data/bucket/fill_bucket.js b/src/data/bucket/fill_bucket.js index 2c2e6da9b62..57c9b84b356 100644 --- a/src/data/bucket/fill_bucket.js +++ b/src/data/bucket/fill_bucket.js @@ -31,6 +31,7 @@ import type VertexBuffer from '../../gl/vertex_buffer.js'; import type Point from '@mapbox/point-geometry'; import type {FeatureStates} from '../../source/source_state.js'; import type {ImagePosition} from '../../render/image_atlas.js'; +import type {TileTransform} from '../../geo/projection/tile_transform.js'; class FillBucket implements Bucket { index: number; @@ -75,7 +76,7 @@ class FillBucket implements Bucket { this.stateDependentLayerIds = this.layers.filter((l) => l.isStateDependent()).map((l) => l.id); } - populate(features: Array, options: PopulateParameters, canonical: CanonicalTileID) { + populate(features: Array, options: PopulateParameters, canonical: CanonicalTileID, tileTransform: TileTransform) { this.hasPattern = hasPattern('fill', this.layers, options); const fillSortKey = this.layers[0].layout.get('fill-sort-key'); const bucketFeatures = []; @@ -96,7 +97,7 @@ class FillBucket implements Bucket { type: feature.type, sourceLayerIndex, index, - geometry: needGeometry ? evaluationFeature.geometry : loadGeometry(feature), + geometry: needGeometry ? evaluationFeature.geometry : loadGeometry(feature, canonical, tileTransform), patterns: {}, sortKey }; diff --git a/src/data/bucket/fill_extrusion_bucket.js b/src/data/bucket/fill_extrusion_bucket.js index 16505a40d6c..3c2d38cd53b 100644 --- a/src/data/bucket/fill_extrusion_bucket.js +++ b/src/data/bucket/fill_extrusion_bucket.js @@ -36,6 +36,7 @@ import type IndexBuffer from '../../gl/index_buffer.js'; import type VertexBuffer from '../../gl/vertex_buffer.js'; import type {FeatureStates} from '../../source/source_state.js'; import type {ImagePosition} from '../../render/image_atlas.js'; +import type {TileTransform} from '../../geo/projection/tile_transform.js'; const FACTOR = Math.pow(2, 13); @@ -216,7 +217,7 @@ class FillExtrusionBucket implements Bucket { this.enableTerrain = options.enableTerrain; } - populate(features: Array, options: PopulateParameters, canonical: CanonicalTileID) { + populate(features: Array, options: PopulateParameters, canonical: CanonicalTileID, tileTransform: TileTransform) { this.features = []; this.hasPattern = hasPattern('fill-extrusion', this.layers, options); this.featuresOnBorder = []; @@ -234,7 +235,7 @@ class FillExtrusionBucket implements Bucket { id, sourceLayerIndex, index, - geometry: needGeometry ? evaluationFeature.geometry : loadGeometry(feature), + geometry: needGeometry ? evaluationFeature.geometry : loadGeometry(feature, canonical, tileTransform), properties: feature.properties, type: feature.type, patterns: {} diff --git a/src/data/bucket/line_bucket.js b/src/data/bucket/line_bucket.js index f63758a9eae..99039cf969d 100644 --- a/src/data/bucket/line_bucket.js +++ b/src/data/bucket/line_bucket.js @@ -35,6 +35,7 @@ import type VertexBuffer from '../../gl/vertex_buffer.js'; import type {FeatureStates} from '../../source/source_state.js'; import type {ImagePosition} from '../../render/image_atlas.js'; import type LineAtlas from '../../render/line_atlas.js'; +import type {TileTransform} from '../../geo/projection/tile_transform.js'; // NOTE ON EXTRUDE SCALE: // scale the extrusion vector so that the normal length is this value. @@ -134,7 +135,7 @@ class LineBucket implements Bucket { this.stateDependentLayerIds = this.layers.filter((l) => l.isStateDependent()).map((l) => l.id); } - populate(features: Array, options: PopulateParameters, canonical: CanonicalTileID) { + populate(features: Array, options: PopulateParameters, canonical: CanonicalTileID, tileTransform: TileTransform) { this.hasPattern = hasPattern('line', this.layers, options); const lineSortKey = this.layers[0].layout.get('line-sort-key'); const bucketFeatures = []; @@ -155,7 +156,7 @@ class LineBucket implements Bucket { type: feature.type, sourceLayerIndex, index, - geometry: needGeometry ? evaluationFeature.geometry : loadGeometry(feature), + geometry: needGeometry ? evaluationFeature.geometry : loadGeometry(feature, canonical, tileTransform), patterns: {}, sortKey }; diff --git a/src/data/bucket/symbol_bucket.js b/src/data/bucket/symbol_bucket.js index 50cc769f276..77977ebcb81 100644 --- a/src/data/bucket/symbol_bucket.js +++ b/src/data/bucket/symbol_bucket.js @@ -61,6 +61,7 @@ import type {SymbolQuad} from '../../symbol/quads.js'; import type {SizeData} from '../../symbol/symbol_size.js'; import type {FeatureStates} from '../../source/source_state.js'; import type {ImagePosition} from '../../render/image_atlas.js'; +import type {TileTransform} from '../../geo/projection/tile_transform.js'; export type SingleCollisionBox = { x1: number; y1: number; @@ -425,7 +426,7 @@ class SymbolBucket implements Bucket { } } - populate(features: Array, options: PopulateParameters, canonical: CanonicalTileID) { + populate(features: Array, options: PopulateParameters, canonical: CanonicalTileID, tileTransform: TileTransform) { const layer = this.layers[0]; const layout = layer.layout; @@ -463,7 +464,7 @@ class SymbolBucket implements Bucket { continue; } - if (!needGeometry) evaluationFeature.geometry = loadGeometry(feature); + if (!needGeometry) evaluationFeature.geometry = loadGeometry(feature, canonical, tileTransform); let text: Formatted | void; if (hasText) { diff --git a/src/data/feature_index.js b/src/data/feature_index.js index 5a291b703b5..8f13d52b33f 100644 --- a/src/data/feature_index.js +++ b/src/data/feature_index.js @@ -27,11 +27,13 @@ import type Transform from '../geo/transform.js'; import type {FilterSpecification, PromoteIdSpecification} from '../style-spec/types.js'; import type {TilespaceQueryGeometry} from '../style/query_geometry.js'; import type {FeatureIndex as FeatureIndexStruct} from './array_types.js'; +import type {TileTransform} from '../geo/projection/tile_transform.js'; type QueryParameters = { pixelPosMatrix: Float32Array, transform: Transform, tileResult: TilespaceQueryGeometry, + tileTransform: TileTransform, params: { filter: FilterSpecification, layers: Array, @@ -153,7 +155,7 @@ class FeatureIndex { sourceFeatureState, (feature: VectorTileFeature, styleLayer: StyleLayer, featureState: Object, layoutVertexArrayOffset: number = 0) => { if (!featureGeometry) { - featureGeometry = loadGeometry(feature); + featureGeometry = loadGeometry(feature, this.tileID.canonical, args.tileTransform); } return styleLayer.queryIntersectsFeature(tilespaceGeometry, feature, featureState, featureGeometry, this.z, args.transform, args.pixelPosMatrix, elevationHelper, layoutVertexArrayOffset); diff --git a/src/data/load_geometry.js b/src/data/load_geometry.js index e85cb7324c3..64c3ed93f60 100644 --- a/src/data/load_geometry.js +++ b/src/data/load_geometry.js @@ -3,8 +3,12 @@ import {warnOnce, clamp} from '../util/util.js'; import EXTENT from './extent.js'; +import {lngFromMercatorX, latFromMercatorY} from '../geo/mercator_coordinate.js'; +import resample from '../geo/projection/resample.js'; +import Point from '@mapbox/point-geometry'; -import type Point from '@mapbox/point-geometry'; +import type {CanonicalTileID} from '../source/tile_id.js'; +import type {TileTransform} from '../geo/projection/tile_transform.js'; // These bounds define the minimum and maximum supported coordinate values. // While visible coordinates are within [0, EXTENT], tiles may theoretically @@ -14,33 +18,61 @@ const BITS = 15; const MAX = Math.pow(2, BITS - 1) - 1; const MIN = -MAX - 1; +function clampPoint(point: Point) { + const {x, y} = point; + point.x = clamp(x, MIN, MAX); + point.y = clamp(y, MIN, MAX); + if (x < point.x || x > point.x + 1 || y < point.y || y > point.y + 1) { + // warn when exceeding allowed extent except for the 1-px-off case + // https://github.com/mapbox/mapbox-gl-js/issues/8992 + warnOnce('Geometry exceeds allowed extent, reduce your vector tile buffer size'); + } + return point; +} + +// a subset of VectorTileGeometry +type FeatureWithGeometry = { + extent: number; + type: 1 | 2 | 3; + loadGeometry(): Array>; +} + /** * Loads a geometry from a VectorTileFeature and scales it to the common extent * used internally. * @param {VectorTileFeature} feature * @private */ -export default function loadGeometry(feature: VectorTileFeature): Array> { - const scale = EXTENT / feature.extent; - const geometry = feature.loadGeometry(); - for (let r = 0; r < geometry.length; r++) { - const ring = geometry[r]; - for (let p = 0; p < ring.length; p++) { - const point = ring[p]; - // round here because mapbox-gl-native uses integers to represent - // points and we need to do the same to avoid rendering differences. - const x = Math.round(point.x * scale); - const y = Math.round(point.y * scale); - - point.x = clamp(x, MIN, MAX); - point.y = clamp(y, MIN, MAX); - - if (x < point.x || x > point.x + 1 || y < point.y || y > point.y + 1) { - // warn when exceeding allowed extent except for the 1-px-off case - // https://github.com/mapbox/mapbox-gl-js/issues/8992 - warnOnce('Geometry exceeds allowed extent, reduce your vector tile buffer size'); - } +export default function loadGeometry(feature: FeatureWithGeometry, canonical?: CanonicalTileID, tileTransform?: TileTransform): Array> { + const featureExtent = feature.extent; + const scale = EXTENT / featureExtent; + const projection = tileTransform ? tileTransform.projection : undefined; + const isMercator = !projection || projection.name === 'mercator'; + + function reproject(p) { + if (isMercator || !canonical || !tileTransform || !projection) { + return new Point(p.x * scale, p.y * scale); + } else { + const z2 = 1 << canonical.z; + const lng = lngFromMercatorX((canonical.x + p.x / featureExtent) / z2); + const lat = latFromMercatorY((canonical.y + p.y / featureExtent) / z2); + const {x, y} = projection.project(lng, lat); + return new Point( + (x * tileTransform.scale - tileTransform.x) * EXTENT, + (y * tileTransform.scale - tileTransform.y) * EXTENT + ); } } + + const geometry = feature.loadGeometry(); + + for (let i = 0; i < geometry.length; i++) { + geometry[i] = !isMercator && feature.type !== 1 ? + resample(geometry[i], reproject, 1) : + geometry[i].map(reproject); + + geometry[i].forEach(p => clampPoint(p._round())); + } + return geometry; } diff --git a/src/geo/mercator_coordinate.js b/src/geo/mercator_coordinate.js index cb952ce89aa..1cc9d4f9aa8 100644 --- a/src/geo/mercator_coordinate.js +++ b/src/geo/mercator_coordinate.js @@ -6,13 +6,13 @@ import type {LngLatLike} from '../geo/lng_lat.js'; /* * The average circumference of the world in meters. */ -const earthCircumfrence = 2 * Math.PI * earthRadius; // meters +const earthCircumference = 2 * Math.PI * earthRadius; // meters /* * The circumference at a line of latitude in meters. */ function circumferenceAtLatitude(latitude: number) { - return earthCircumfrence * Math.cos(latitude * Math.PI / 180); + return earthCircumference * Math.cos(latitude * Math.PI / 180); } export function mercatorXfromLng(lng: number) { @@ -40,6 +40,8 @@ export function altitudeFromMercatorZ(z: number, y: number) { return z * circumferenceAtLatitude(latFromMercatorY(y)); } +export const MAX_MERCATOR_LATITUDE = 85.051129; + /** * Determine the Mercator scale factor for a given latitude, see * https://en.wikipedia.org/wiki/Mercator_projection#Scale_factor @@ -148,7 +150,7 @@ class MercatorCoordinate { */ meterInMercatorCoordinateUnits() { // 1 meter / circumference at equator in meters * Mercator projection scale factor at this latitude - return 1 / earthCircumfrence * mercatorScale(latFromMercatorY(this.y)); + return 1 / earthCircumference * mercatorScale(latFromMercatorY(this.y)); } } diff --git a/src/geo/projection/adjustments.js b/src/geo/projection/adjustments.js new file mode 100644 index 00000000000..2b834012114 --- /dev/null +++ b/src/geo/projection/adjustments.js @@ -0,0 +1,147 @@ +// @flow + +import LngLat from '../lng_lat.js'; +import MercatorCoordinate, {MAX_MERCATOR_LATITUDE} from '../mercator_coordinate.js'; +import {mat4, mat2} from 'gl-matrix'; +import {clamp} from '../../util/util.js'; +import type {Projection} from './index.js'; +import type Transform from '../transform.js'; + +export default function getProjectionAdjustments(transform: Transform, withoutRotation?: boolean) { + const projection = transform.projection; + + const interpT = getInterpolationT(transform); + + const zoomAdjustment = getZoomAdjustment(projection, transform.center); + const zoomAdjustmentOrigin = getZoomAdjustment(projection, LngLat.convert(projection.center)); + const scaleAdjustment = Math.pow(2, zoomAdjustment * interpT + (1 - interpT) * zoomAdjustmentOrigin); + + const matrix = getShearAdjustment(transform.projection, transform.zoom, transform.center, interpT, withoutRotation); + + mat4.scale(matrix, matrix, [scaleAdjustment, scaleAdjustment, 1]); + + return matrix; +} + +export function getProjectionAdjustmentInverted(transform: Transform) { + const m = getProjectionAdjustments(transform, true); + return mat2.invert([], [ + m[0], m[1], + m[4], m[5]]); +} + +function getInterpolationT(transform: Transform) { + const range = transform.projection.range; + if (!range) return 0; + + const size = Math.max(transform.width, transform.height); + // The interpolation ranges are manually defined based on what makes + // sense in a 1024px wide map. Adjust the ranges to the current size + // of the map. The smaller the map, the earlier you can start unskewing. + const rangeAdjustment = Math.log(size / 1024) / Math.LN2; + const zoomA = range[0] + rangeAdjustment; + const zoomB = range[1] + rangeAdjustment; + const t = clamp((transform.zoom - zoomA) / (zoomB - zoomA), 0, 1); + return t; +} + +// approx. kilometers per longitude degree at equator +const offset = 1 / 40000; + +/* + * Calculates the scale difference between Mercator and the given projection at a certain location. + */ +function getZoomAdjustment(projection: Projection, loc: LngLat) { + // make sure we operate within mercator space for adjustments (they can go over for other projections) + const lat = clamp(loc.lat, -MAX_MERCATOR_LATITUDE, MAX_MERCATOR_LATITUDE); + + const loc1 = new LngLat(loc.lng - 180 * offset, lat); + const loc2 = new LngLat(loc.lng + 180 * offset, lat); + + const p1 = projection.project(loc1.lng, lat); + const p2 = projection.project(loc2.lng, lat); + + const m1 = MercatorCoordinate.fromLngLat(loc1); + const m2 = MercatorCoordinate.fromLngLat(loc2); + + const pdx = p2.x - p1.x; + const pdy = p2.y - p1.y; + const mdx = m2.x - m1.x; + const mdy = m2.y - m1.y; + + const scale = Math.sqrt((mdx * mdx + mdy * mdy) / (pdx * pdx + pdy * pdy)); + + return Math.log(scale) / Math.LN2; +} + +function getShearAdjustment(projection, zoom, loc, interpT, withoutRotation?: boolean) { + + // create two locations a tiny amount (~1km) east and west of the given location + const locw = new LngLat(loc.lng - 180 * offset, loc.lat); + const loce = new LngLat(loc.lng + 180 * offset, loc.lat); + + const pw = projection.project(locw.lng, locw.lat); + const pe = projection.project(loce.lng, loce.lat); + + const pdx = pe.x - pw.x; + const pdy = pe.y - pw.y; + + // Calculate how much the map would need to be rotated to make east-west in + // projected coordinates be left-right + const angleAdjust = -Math.atan(pdy / pdx); + + // Pick a location identical to the original one except for poles to make sure we're within mercator bounds + const mc2 = MercatorCoordinate.fromLngLat(loc); + mc2.y = clamp(mc2.y, -1 + offset, 1 - offset); + const loc2 = mc2.toLngLat(); + const p2 = projection.project(loc2.lng, loc2.lat); + + // Find the projected coordinates of two locations, one slightly south and one slightly east. + // Then calculate the transform that would make the projected coordinates of the two locations be: + // - equal distances from the original location + // - perpendicular to one another + // + // Only the position of the coordinate to the north is adjusted. + // The coordinate to the east stays where it is. + const mc3 = MercatorCoordinate.fromLngLat(loc2); + mc3.x += offset; + const loc3 = mc3.toLngLat(); + const p3 = projection.project(loc3.lng, loc3.lat); + const pdx3 = p3.x - p2.x; + const pdy3 = p3.y - p2.y; + const delta3 = rotate(pdx3, pdy3, angleAdjust); + + const mc4 = MercatorCoordinate.fromLngLat(loc2); + mc4.y += offset; + const loc4 = mc4.toLngLat(); + const p4 = projection.project(loc4.lng, loc4.lat); + const pdx4 = p4.x - p2.x; + const pdy4 = p4.y - p2.y; + const delta4 = rotate(pdx4, pdy4, angleAdjust); + + const scale = Math.abs(delta3.x) / Math.abs(delta4.y); + + const unrotate = mat4.identity([]); + mat4.rotateZ(unrotate, unrotate, (-angleAdjust) * (1 - (withoutRotation ? 0 : interpT))); + + // unskew + const shear = mat4.identity([]); + mat4.scale(shear, shear, [1, 1 - (1 - scale) * interpT, 1]); + shear[4] = -delta4.x / delta4.y * interpT; + + // unrotate + mat4.rotateZ(shear, shear, angleAdjust); + + mat4.multiply(shear, unrotate, shear); + + return shear; +} + +function rotate(x, y, angle) { + const cos = Math.cos(angle); + const sin = Math.sin(angle); + return { + x: x * cos - y * sin, + y: x * sin + y * cos + }; +} diff --git a/src/geo/projection/albers.js b/src/geo/projection/albers.js new file mode 100644 index 00000000000..0b14cd609ee --- /dev/null +++ b/src/geo/projection/albers.js @@ -0,0 +1,44 @@ +// @flow +import LngLat from '../lng_lat.js'; +import {clamp} from '../../util/util.js'; + +export default { + name: 'albers', + range: [4, 7], + + center: [-96, 37.5], + parallels: [29.5, 45.5], + + conical: true, + + project(lng: number, lat: number) { + const p1 = this.parallels[0] / 180 * Math.PI; + const p2 = this.parallels[1] / 180 * Math.PI; + const n = 0.5 * (Math.sin(p1) + Math.sin(p2)); + const theta = n * ((lng - this.center[0]) / 180 * Math.PI); + const c = Math.pow(Math.cos(p1), 2) + 2 * n * Math.sin(p1); + const r = 0.5; + const a = r / n * Math.sqrt(c - 2 * n * Math.sin(lat / 180 * Math.PI)); + const b = r / n * Math.sqrt(c - 2 * n * Math.sin(0 / 180 * Math.PI)); + const x = a * Math.sin(theta); + const y = b - a * Math.cos(theta); + return {x: 1 + 0.5 * x, y: 1 - 0.5 * y}; + }, + unproject(x: number, y: number) { + const p1 = this.parallels[0] / 180 * Math.PI; + const p2 = this.parallels[1] / 180 * Math.PI; + const n = 0.5 * (Math.sin(p1) + Math.sin(p2)); + const c = Math.pow(Math.cos(p1), 2) + 2 * n * Math.sin(p1); + const r = 0.5; + const b = r / n * Math.sqrt(c - 2 * n * Math.sin(0 / 180 * Math.PI)); + const x_ = (x - 1) * 2; + const y_ = (y - 1) * -2; + const y2 = -(y_ - b); + const theta = Math.atan2(x_, y2); + const lng = clamp((theta / n * 180 / Math.PI) + this.center[0], -180, 180); + const a = x_ / Math.sin(theta); + const s = clamp((Math.pow(a / r * n, 2) - c) / (-2 * n), -1, 1); + const lat = clamp(Math.asin(s) * 180 / Math.PI, -90, 90); + return new LngLat(lng, lat); + } +}; diff --git a/src/geo/projection/equal_earth.js b/src/geo/projection/equal_earth.js new file mode 100644 index 00000000000..888db26f72b --- /dev/null +++ b/src/geo/projection/equal_earth.js @@ -0,0 +1,56 @@ +// @flow +import LngLat from '../lng_lat.js'; +import {clamp} from '../../util/util.js'; + +const a1 = 1.340264; +const a2 = -0.081106; +const a3 = 0.000893; +const a4 = 0.003796; +const M = Math.sqrt(3) / 2; + +export default { + name: 'equalEarth', + center: [0, 0], + range: [3.5, 7], + + project(lng: number, lat: number) { + // based on https://github.com/d3/d3-geo, MIT-licensed + lat = lat / 180 * Math.PI; + lng = lng / 180 * Math.PI; + const theta = Math.asin(M * Math.sin(lat)); + const theta2 = theta * theta; + const theta6 = theta2 * theta2 * theta2; + const x = lng * Math.cos(theta) / (M * (a1 + 3 * a2 * theta2 + theta6 * (7 * a3 + 9 * a4 * theta2))); + const y = theta * (a1 + a2 * theta2 + theta6 * (a3 + a4 * theta2)); + + return { + x: (x / Math.PI + 0.5) * 0.5, + y: 1 - (y / Math.PI + 1) * 0.5 + }; + }, + + unproject(x: number, y: number) { + // based on https://github.com/d3/d3-geo, MIT-licensed + x = (2 * x - 0.5) * Math.PI; + y = (2 * (1 - y) - 1) * Math.PI; + let theta = y; + let theta2 = theta * theta; + let theta6 = theta2 * theta2 * theta2; + + for (let i = 0, delta, fy, fpy; i < 12; ++i) { + fy = theta * (a1 + a2 * theta2 + theta6 * (a3 + a4 * theta2)) - y; + fpy = a1 + 3 * a2 * theta2 + theta6 * (7 * a3 + 9 * a4 * theta2); + theta -= delta = fy / fpy; + theta2 = theta * theta; + theta6 = theta2 * theta2 * theta2; + if (Math.abs(delta) < 1e-12) break; + } + + const lambda = M * x * (a1 + 3 * a2 * theta2 + theta6 * (7 * a3 + 9 * a4 * theta2)) / Math.cos(theta); + const phi = Math.asin(clamp(Math.sin(theta) / M, -1, 1)); + const lng = clamp(lambda * 180 / Math.PI, -180, 180); + const lat = clamp(phi * 180 / Math.PI, -90, 90); + + return new LngLat(lng, lat); + } +}; diff --git a/src/geo/projection/equirectangular.js b/src/geo/projection/equirectangular.js new file mode 100644 index 00000000000..b6f694f4b6f --- /dev/null +++ b/src/geo/projection/equirectangular.js @@ -0,0 +1,18 @@ +// @flow +import LngLat from '../lng_lat.js'; +import {clamp} from '../../util/util.js'; + +export default { + name: 'equirectangular', + center: [0, 0], + project(lng: number, lat: number) { + const x = 0.5 + lng / 360; + const y = 0.5 - lat / 360; + return {x, y}; + }, + unproject(x: number, y: number) { + const lng = (x - 0.5) * 360; + const lat = clamp((0.5 - y) * 360, -90, 90); + return new LngLat(lng, lat); + } +}; diff --git a/src/geo/projection/index.js b/src/geo/projection/index.js new file mode 100644 index 00000000000..304383d5e46 --- /dev/null +++ b/src/geo/projection/index.js @@ -0,0 +1,36 @@ +// @flow +import albers from './albers.js'; +import equalEarth from './equal_earth.js'; +import equirectangular from './equirectangular.js'; +import lambertConformalConic from './lambert.js'; +import mercator from './mercator.js'; +import naturalEarth from './natural_earth.js'; +import winkelTripel from './winkel_tripel.js'; +import LngLat from '../lng_lat.js'; +import type {ProjectionSpecification} from '../../style-spec/types.js'; + +export type Projection = { + name: string, + center: [number, number], + parallels?: [number, number], + range?: [number, number], + conical?: boolean, + project: (lng: number, lat: number) => {x: number, y: number}, + unproject: (x: number, y: number) => LngLat +}; + +const projections = { + albers, + equalEarth, + equirectangular, + lambertConformalConic, + mercator, + naturalEarth, + winkelTripel +}; + +export function getProjection(config: ProjectionSpecification) { + const projection = projections[config.name]; + if (!projection) throw new Error(`Invalid projection name: ${config.name}`); + return projection.conical ? {...projection, ...config} : projection; +} diff --git a/src/geo/projection/lambert.js b/src/geo/projection/lambert.js new file mode 100644 index 00000000000..eae0cc3ebee --- /dev/null +++ b/src/geo/projection/lambert.js @@ -0,0 +1,70 @@ +// @flow +import LngLat from '../lng_lat.js'; +import {clamp} from '../../util/util.js'; + +const halfPi = Math.PI / 2; + +function tany(y) { + return Math.tan((halfPi + y) / 2); +} + +function getParams([lat0, lat1]) { + const y0 = lat0 * Math.PI / 180; + const y1 = lat1 * Math.PI / 180; + const cy0 = Math.cos(y0); + const n = y0 === y1 ? Math.sin(y0) : Math.log(cy0 / Math.cos(y1)) / Math.log(tany(y1) / tany(y0)); + const f = cy0 * Math.pow(tany(y0), n) / n; + + return {n, f}; +} + +export default { + name: 'lambertConformalConic', + range: [3.5, 7], + + center: [0, 30], + parallels: [30, 30], + + conical: true, + + project(lng: number, lat: number) { + // based on https://github.com/d3/d3-geo, MIT-licensed + lat = lat / 180 * Math.PI; + lng = lng / 180 * Math.PI; + + const epsilon = 1e-6; + const {n, f} = getParams(this.parallels); + + if (f > 0) { + if (lat < -halfPi + epsilon) lat = -halfPi + epsilon; + } else { + if (lat > halfPi - epsilon) lat = halfPi - epsilon; + } + + const r = f / Math.pow(tany(lat), n); + const x = r * Math.sin(n * lng); + const y = f - r * Math.cos(n * lng); + + return { + x: (x / Math.PI + 0.5) * 0.5, + y: 1 - (y / Math.PI + 0.5) * 0.5 + }; + }, + + unproject(x: number, y: number) { + // based on https://github.com/d3/d3-geo, MIT-licensed + x = (2 * x - 0.5) * Math.PI; + y = (2 * (1 - y) - 0.5) * Math.PI; + const {n, f} = getParams(this.parallels); + const fy = f - y; + const r = Math.sign(n) * Math.sqrt(x * x + fy * fy); + let l = Math.atan2(x, Math.abs(fy)) * Math.sign(fy); + + if (fy * n < 0) l -= Math.PI * Math.sign(x) * Math.sign(fy); + + const lng = clamp((l / n) * 180 / Math.PI, -180, 180); + const lat = clamp((2 * Math.atan(Math.pow(f / r, 1 / n)) - halfPi) * 180 / Math.PI, -90, 90); + + return new LngLat(lng, lat); + } +}; diff --git a/src/geo/projection/mercator.js b/src/geo/projection/mercator.js new file mode 100644 index 00000000000..7c76340678e --- /dev/null +++ b/src/geo/projection/mercator.js @@ -0,0 +1,18 @@ +// @flow +import {mercatorXfromLng, mercatorYfromLat, lngFromMercatorX, latFromMercatorY} from '../mercator_coordinate.js'; +import LngLat from '../lng_lat.js'; + +export default { + name: 'mercator', + center: [0, 0], + project(lng: number, lat: number) { + const x = mercatorXfromLng(lng); + const y = mercatorYfromLat(lat); + return {x, y}; + }, + unproject(x: number, y: number) { + const lng = lngFromMercatorX(x); + const lat = latFromMercatorY(y); + return new LngLat(lng, lat); + } +}; diff --git a/src/geo/projection/natural_earth.js b/src/geo/projection/natural_earth.js new file mode 100644 index 00000000000..4223e7a00be --- /dev/null +++ b/src/geo/projection/natural_earth.js @@ -0,0 +1,51 @@ +// @flow +import LngLat from '../lng_lat.js'; +import {clamp} from '../../util/util.js'; + +export default { + name: 'naturalEarth', + center: [0, 0], + range: [3.5, 7], + + project(lng: number, lat: number) { + // based on https://github.com/d3/d3-geo, MIT-licensed + lat = lat / 180 * Math.PI; + lng = lng / 180 * Math.PI; + + const phi2 = lat * lat; + const phi4 = phi2 * phi2; + const x = lng * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))); + const y = lat * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))); + + return { + x: (x / Math.PI + 0.5) * 0.5, + y: 1 - (y / Math.PI + 1) * 0.5 + }; + }, + + unproject(x: number, y: number) { + // based on https://github.com/d3/d3-geo, MIT-licensed + x = (2 * x - 0.5) * Math.PI; + y = (2 * (1 - y) - 1) * Math.PI; + const epsilon = 1e-6; + let phi = y; + let i = 25; + let delta = 0; + let phi2 = phi * phi; + + do { + phi2 = phi * phi; + const phi4 = phi2 * phi2; + phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) / + (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4))); + } while (Math.abs(delta) > epsilon && --i > 0); + + phi2 = phi * phi; + const lambda = x / (0.8707 + phi2 * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))); + + const lng = clamp(lambda * 180 / Math.PI, -180, 180); + const lat = clamp(phi * 180 / Math.PI, -90, 90); + + return new LngLat(lng, lat); + } +}; diff --git a/src/geo/projection/resample.js b/src/geo/projection/resample.js new file mode 100644 index 00000000000..74389807236 --- /dev/null +++ b/src/geo/projection/resample.js @@ -0,0 +1,49 @@ +// @flow + +import Point from '@mapbox/point-geometry'; + +function pointToLineDist(px, py, ax, ay, bx, by) { + const dx = ax - bx; + const dy = ay - by; + return Math.abs((ay - py) * dx - (ax - px) * dy) / Math.hypot(dx, dy); +} + +function addResampled(resampled, startMerc, endMerc, startProj, endProj, reproject, tolerance) { + const midMerc = new Point( + (startMerc.x + endMerc.x) / 2, + (startMerc.y + endMerc.y) / 2); + + const midProj = reproject(midMerc); + const err = pointToLineDist(midProj.x, midProj.y, startProj.x, startProj.y, endProj.x, endProj.y); + + // if reprojected midPoint is too far from geometric midpoint, recurse into two halves + if (err >= tolerance) { + // we're very unlikely to hit max call stack exceeded here, + // but we might want to safeguard against it in the future + addResampled(resampled, startMerc, midMerc, startProj, midProj, reproject, tolerance); + addResampled(resampled, midMerc, endMerc, midProj, endProj, reproject, tolerance); + + } else { // otherwise, just add the point + resampled.push(endProj); + } +} + +export default function resample(line: Array, reproject: (Point) => Point, tolerance: number): Array { + const resampled = []; + let prevMerc, prevProj; + + for (const pointMerc of line) { + const pointProj = reproject(pointMerc); + + if (prevMerc && prevProj) { + addResampled(resampled, prevMerc, pointMerc, prevProj, pointProj, reproject, tolerance); + } else { + resampled.push(pointProj); + } + + prevMerc = pointMerc; + prevProj = pointProj; + } + + return resampled; +} diff --git a/src/geo/projection/tile_transform.js b/src/geo/projection/tile_transform.js new file mode 100644 index 00000000000..eddce3d9894 --- /dev/null +++ b/src/geo/projection/tile_transform.js @@ -0,0 +1,99 @@ +// @flow +import Point from '@mapbox/point-geometry'; +import MercatorCoordinate, {altitudeFromMercatorZ, lngFromMercatorX, latFromMercatorY} from '../mercator_coordinate.js'; +import EXTENT from '../../data/extent.js'; +import {vec3} from 'gl-matrix'; +import type {Projection} from './index.js'; + +export type TileTransform = { + scale: number, + x: number, + y: number, + x2: number, + y2: number, + projection: Projection +}; + +export default function tileTransform(id: Object, projection: Projection) { + const s = Math.pow(2, -id.z); + + const x1 = (id.x) * s; + const x2 = (id.x + 1) * s; + const y1 = (id.y) * s; + const y2 = (id.y + 1) * s; + + if (projection.name === 'mercator') { + return {scale: 1 << id.z, x: id.x, y: id.y, x2: id.x + 1, y2: id.y + 1, projection}; + } + + const lng1 = lngFromMercatorX(x1); + const lng2 = lngFromMercatorX(x2); + const lat1 = latFromMercatorY(y1); + const lat2 = latFromMercatorY(y2); + + const p0 = projection.project(lng1, lat1); + const p1 = projection.project(lng2, lat1); + const p2 = projection.project(lng2, lat2); + const p3 = projection.project(lng1, lat2); + + let minX = Math.min(p0.x, p1.x, p2.x, p3.x); + let minY = Math.min(p0.y, p1.y, p2.y, p3.y); + let maxX = Math.max(p0.x, p1.x, p2.x, p3.x); + let maxY = Math.max(p0.y, p1.y, p2.y, p3.y); + + // we pick an error threshold for calculating the bbox that balances between performance and precision + const maxErr = s / 16; + + function processSegment(pa, pb, ax, ay, bx, by) { + const mx = (ax + bx) / 2; + const my = (ay + by) / 2; + + const pm = projection.project(lngFromMercatorX(mx), latFromMercatorY(my)); + const err = Math.max(0, minX - pm.x, minY - pm.y, pm.x - maxX, pm.y - maxY); + + minX = Math.min(minX, pm.x); + maxX = Math.max(maxX, pm.x); + minY = Math.min(minY, pm.y); + maxY = Math.max(maxY, pm.y); + + if (err > maxErr) { + processSegment(pa, pm, ax, ay, mx, my); + processSegment(pm, pb, mx, my, bx, by); + } + } + + processSegment(p0, p1, x1, y1, x2, y1); + processSegment(p1, p2, x2, y1, x2, y2); + processSegment(p2, p3, x2, y2, x1, y2); + processSegment(p3, p0, x1, y2, x1, y1); + + // extend the bbox by max error to make sure coords don't go past tile extent + minX -= maxErr; + minY -= maxErr; + maxX += maxErr; + maxY += maxErr; + + const max = Math.max(maxX - minX, maxY - minY); + const scale = 1 / max; + + return { + scale, + x: minX * scale, + y: minY * scale, + x2: maxX * scale, + y2: maxY * scale, + projection + }; +} + +export function getTilePoint(tileTransform: TileTransform, {x, y}: {x: number, y: number}, wrap: number = 0) { + return new Point( + ((x - wrap) * tileTransform.scale - tileTransform.x) * EXTENT, + (y * tileTransform.scale - tileTransform.y) * EXTENT); +} + +export function getTileVec3(tileTransform: TileTransform, coord: MercatorCoordinate, wrap: number = 0): vec3 { + const x = ((coord.x - wrap) * tileTransform.scale - tileTransform.x) * EXTENT; + const y = (coord.y * tileTransform.scale - tileTransform.y) * EXTENT; + return vec3.fromValues(x, y, altitudeFromMercatorZ(coord.z, coord.y)); +} diff --git a/src/geo/projection/winkel_tripel.js b/src/geo/projection/winkel_tripel.js new file mode 100644 index 00000000000..8ce2d8616d7 --- /dev/null +++ b/src/geo/projection/winkel_tripel.js @@ -0,0 +1,64 @@ +// @flow +import LngLat from '../lng_lat.js'; +import {clamp} from '../../util/util.js'; + +export default { + name: 'winkelTripel', + center: [0, 0], + range: [3.5, 7], + + project(lng: number, lat: number) { + lat = lat / 180 * Math.PI; + lng = lng / 180 * Math.PI; + const phi1 = Math.acos(2 / Math.PI); + const alpha = Math.acos(Math.cos(lat) * Math.cos(lng / 2)); + const x = 0.5 * (lng * Math.cos(phi1) + (2 * Math.cos(lat) * Math.sin(lng / 2)) / (Math.sin(alpha) / alpha)) || 0; + const y = 0.5 * (lat + Math.sin(lat) / (Math.sin(alpha) / alpha)) || 0; + return { + x: (x / Math.PI + 0.5) * 0.5, + y: 1 - (y / Math.PI + 1) * 0.5 + }; + }, + + unproject(x: number, y: number) { + // based on https://github.com/d3/d3-geo-projection, MIT-licensed + x = (2 * x - 0.5) * Math.PI; + y = (2 * (1 - y) - 1) * Math.PI; + let lambda = x; + let phi = y; + let i = 25; + const epsilon = 1e-6; + let dlambda = 0, dphi = 0; + do { + const cosphi = Math.cos(phi), + sinphi = Math.sin(phi), + sinphi2 = 2 * sinphi * cosphi, + sin2phi = sinphi * sinphi, + cos2phi = cosphi * cosphi, + coslambda2 = Math.cos(lambda / 2), + sinlambda2 = Math.sin(lambda / 2), + sinlambda = 2 * coslambda2 * sinlambda2, + sin2lambda2 = sinlambda2 * sinlambda2, + C = 1 - cos2phi * coslambda2 * coslambda2, + F = C ? 1 / C : 0, + E = C ? Math.acos(cosphi * coslambda2) * Math.sqrt(1 / C) : 0, + fx = 0.5 * (2 * E * cosphi * sinlambda2 + lambda * 2 / Math.PI) - x, + fy = 0.5 * (E * sinphi + phi) - y, + dxdlambda = 0.5 * F * (cos2phi * sin2lambda2 + E * cosphi * coslambda2 * sin2phi) + 1 / Math.PI, + dxdphi = F * (sinlambda * sinphi2 / 4 - E * sinphi * sinlambda2), + dydlambda = 0.125 * F * (sinphi2 * sinlambda2 - E * sinphi * cos2phi * sinlambda), + dydphi = 0.5 * F * (sin2phi * coslambda2 + E * sin2lambda2 * cosphi) + 0.5, + denominator = dxdphi * dydlambda - dydphi * dxdlambda; + + dlambda = (fy * dxdphi - fx * dydphi) / denominator; + dphi = (fx * dydlambda - fy * dxdlambda) / denominator; + lambda -= dlambda; + phi -= dphi; + } while ((Math.abs(dlambda) > epsilon || Math.abs(dphi) > epsilon) && --i > 0); + + const lng = clamp(lambda * 180 / Math.PI, -180, 180); + const lat = clamp(phi * 180 / Math.PI, -90, 90); + + return new LngLat(lng, lat); + } +}; diff --git a/src/geo/transform.js b/src/geo/transform.js index d8f30068af8..0ce5c87baf6 100644 --- a/src/geo/transform.js +++ b/src/geo/transform.js @@ -2,9 +2,11 @@ import LngLat from './lng_lat.js'; import LngLatBounds from './lng_lat_bounds.js'; -import MercatorCoordinate, {mercatorXfromLng, mercatorYfromLat, mercatorZfromAltitude, latFromMercatorY} from './mercator_coordinate.js'; +import MercatorCoordinate, {mercatorXfromLng, mercatorYfromLat, mercatorZfromAltitude, latFromMercatorY, MAX_MERCATOR_LATITUDE} from './mercator_coordinate.js'; +import {getProjection} from './projection/index.js'; +import tileTransform from '../geo/projection/tile_transform.js'; import Point from '@mapbox/point-geometry'; -import {wrap, clamp, radToDeg, degToRad, getAABBPointSquareDist, furthestTileCorner} from '../util/util.js'; +import {wrap, clamp, pick, radToDeg, degToRad, getAABBPointSquareDist, furthestTileCorner, warnOnce} from '../util/util.js'; import {number as interpolate} from '../style-spec/util/interpolate.js'; import EXTENT from '../data/extent.js'; import {vec4, mat4, mat2, vec3, quat} from 'gl-matrix'; @@ -12,10 +14,15 @@ import {Aabb, Frustum, Ray} from '../util/primitives.js'; import EdgeInsets from './edge_insets.js'; import {FreeCamera, FreeCameraOptions, orientationFromFrame} from '../ui/free_camera.js'; import assert from 'assert'; +import getProjectionAdjustments, {getProjectionAdjustmentInverted} from './projection/adjustments.js'; +import {getPixelsToTileUnitsMatrix} from '../source/pixels_to_tile_units.js'; import {UnwrappedTileID, OverscaledTileID, CanonicalTileID} from '../source/tile_id.js'; import type {Elevation} from '../terrain/elevation.js'; import type {PaddingOptions} from './edge_insets.js'; +import type {Projection} from './projection/index.js'; +import type Tile from '../source/tile.js'; +import type {ProjectionSpecification} from '../style-spec/types.js'; import type {FeatureDistanceData} from '../style-spec/feature_filter/index.js'; const NUM_WORLD_COPIES = 3; @@ -32,9 +39,7 @@ type ElevationReference = "sea" | "ground"; class Transform { tileSize: number; tileZoom: number; - lngRange: ?[number, number]; - latRange: ?[number, number]; - maxValidLatitude: number; + maxBounds: ?LngLatBounds; // 2^zoom (worldSize = tileSize * scale) scale: number; @@ -87,16 +92,26 @@ class Transform { // Inverse of glCoordMatrix, from NDC to screen coordinates, [-1, 1] x [-1, 1] --> [0, w] x [h, 0] labelPlaneMatrix: Float32Array; + inverseAdjustmentMatrix: Array; + + worldMinX: number; + worldMaxX: number; + worldMinY: number; + worldMaxY: number; + freezeTileCoverage: boolean; cameraElevationReference: ElevationReference; fogCullDistSq: ?number; _averageElevation: number; + projectionOptions: ProjectionSpecification; + projection: Projection; _elevation: ?Elevation; _fov: number; _pitch: number; _zoom: number; _cameraZoom: ?number; _unmodified: boolean; + _unmodifiedProjection: boolean; _renderWorldCopies: boolean; _minZoom: number; _maxZoom: number; @@ -107,6 +122,7 @@ class Transform { _constraining: boolean; _projMatrixCache: {[_: number]: Float32Array}; _alignedProjMatrixCache: {[_: number]: Float32Array}; + _pixelsToTileUnitsCache: {[_: number]: Float32Array}; _fogTileMatrixCache: {[_: number]: Float32Array}; _distanceTileDataCache: {[_: number]: FeatureDistanceData}; _camera: FreeCamera; @@ -115,7 +131,6 @@ class Transform { constructor(minZoom: ?number, maxZoom: ?number, minPitch: ?number, maxPitch: ?number, renderWorldCopies: boolean | void) { this.tileSize = 512; // constant - this.maxValidLatitude = 85.051129; // constant this._renderWorldCopies = renderWorldCopies === undefined ? true : renderWorldCopies; this._minZoom = minZoom || DEFAULT_MIN_ZOOM; @@ -124,6 +139,7 @@ class Transform { this._minPitch = (minPitch === undefined || minPitch === null) ? 0 : minPitch; this._maxPitch = (maxPitch === undefined || maxPitch === null) ? 60 : maxPitch; + this.setProjection(); this.setMaxBounds(); this.width = 0; @@ -153,7 +169,7 @@ class Transform { clone._elevation = this._elevation; clone._centerAltitude = this._centerAltitude; clone.tileSize = this.tileSize; - clone.latRange = this.latRange; + clone.setMaxBounds(this.getMaxBounds()); clone.width = this.width; clone.height = this.height; clone.cameraElevationReference = this.cameraElevationReference; @@ -169,6 +185,7 @@ class Transform { clone._camera = this._camera.clone(); clone._calcMatrices(); clone.freezeTileCoverage = this.freezeTileCoverage; + if (!this._unmodifiedProjection) clone.setProjection(this.getProjection()); return clone; } @@ -196,6 +213,18 @@ class Transform { this._calcMatrices(); } + getProjection() { + return pick(this.projection, ['name', 'center', 'parallels']); + } + + setProjection(projection?: ?ProjectionSpecification) { + this._unmodifiedProjection = !projection; + if (projection === undefined || projection === null) projection = {name: 'mercator'}; + this.projectionOptions = projection; + this.projection = getProjection(projection); + this._calcMatrices(); + } + get minZoom(): number { return this._minZoom; } set minZoom(zoom: number) { if (this._minZoom === zoom) return; @@ -224,7 +253,9 @@ class Transform { this.pitch = Math.min(this.pitch, pitch); } - get renderWorldCopies(): boolean { return this._renderWorldCopies; } + get renderWorldCopies(): boolean { + return this.projection.name === 'mercator' && this._renderWorldCopies; + } set renderWorldCopies(renderWorldCopies?: ?boolean) { if (renderWorldCopies === undefined) { renderWorldCopies = true; @@ -261,10 +292,19 @@ class Transform { } get bearing(): number { - return -this.angle / Math.PI * 180; + return wrap(this.rotation, -180, 180); } + set bearing(bearing: number) { - const b = -wrap(bearing, -180, 180) * Math.PI / 180; + this.rotation = bearing; + } + + get rotation(): number { + return -this.angle / Math.PI * 180; + } + + set rotation(rotation: number) { + const b = -rotation * Math.PI / 180; if (this.angle === b) return; this._unmodified = false; this.angle = b; @@ -331,7 +371,7 @@ class Transform { // Camera zoom describes the distance of the camera to the sea level (altitude). It is used only for manipulating the camera location. // The standard zoom (this._zoom) defines the camera distance to the terrain (height). Its behavior and conceptual meaning in determining // which tiles to stream is same with or without the terrain. - const elevationAtCenter = this._elevation.getAtPointOrZero(MercatorCoordinate.fromLngLat(this.center), -1); + const elevationAtCenter = this._elevation.getAtPointOrZero(this.locationCoordinate(this.center), -1); if (elevationAtCenter === -1) { // Elevation data not loaded yet @@ -414,7 +454,7 @@ class Transform { // Compute zoom level from the height of the camera relative to the terrain const cameraZoom: number = this._cameraZoom; - const elevationAtCenter = this._elevation.getAtPointOrZero(MercatorCoordinate.fromLngLat(this.center)); + const elevationAtCenter = this._elevation.getAtPointOrZero(this.locationCoordinate(this.center)); const mercatorElevation = mercatorZfromAltitude(elevationAtCenter, this.center.lat); const altitude = this._mercatorZfromZoom(cameraZoom); const minHeight = this._mercatorZfromZoom(this._maxZoom); @@ -648,11 +688,12 @@ class Transform { const actualZ = z; const useElevationData = this.elevation && !options.isTerrainDEM; + const isMercator = this.projection.name === 'mercator'; if (options.minzoom !== undefined && z < options.minzoom) return []; if (options.maxzoom !== undefined && z > options.maxzoom) z = options.maxzoom; - const centerCoord = MercatorCoordinate.fromLngLat(this.center); + const centerCoord = this.locationCoordinate(this.center); const numTiles = 1 << z; const centerPoint = [numTiles * centerCoord.x, numTiles * centerCoord.y, 0]; const cameraFrustum = Frustum.fromInvProjectionMatrix(this.invProjMatrix, this.worldSize, z); @@ -667,19 +708,67 @@ class Transform { const zoomSplitDistance = this.cameraToCenterDistance / options.tileSize * (options.roundZoom ? 1 : 0.502); // No change of LOD behavior for pitch lower than 60 and when there is no top padding: return only tile ids from the requested zoom level - const minZoom = this.pitch <= 60.0 && this._edgeInsets.top <= this._edgeInsets.bottom && !this._elevation ? z : 0; + const minZoom = this.pitch <= 60.0 && this._edgeInsets.top <= this._edgeInsets.bottom && !this._elevation && isMercator ? z : 0; // When calculating tile cover for terrain, create deep AABB for nodes, to ensure they intersect frustum: for sources, // other than DEM, use minimum of visible DEM tiles and center altitude as upper bound (pitch is always less than 90°). const maxRange = options.isTerrainDEM && this._elevation ? this._elevation.exaggeration() * 10000 : this._centerAltitude; const minRange = options.isTerrainDEM ? -maxRange : this._elevation ? this._elevation.getMinElevationBelowMSL() : 0; + + const sizeAtMercatorCoord = mc => { + // Calculate how scale compares between projected coordinates and mercator coordinates. + // Returns a length. The units don't matter since the result is only + // used in a ratio with other values returned by this function. + + // Construct a small square in Mercator coordinates. + const offset = 1 / 40000; + const mcEast = new MercatorCoordinate(mc.x + offset, mc.y, mc.z); + const mcSouth = new MercatorCoordinate(mc.x, mc.y + offset, mc.z); + + // Convert the square to projected coordinates. + const ll = mc.toLngLat(); + const llEast = mcEast.toLngLat(); + const llSouth = mcSouth.toLngLat(); + const p = this.locationCoordinate(ll); + const pEast = this.locationCoordinate(llEast); + const pSouth = this.locationCoordinate(llSouth); + + // Calculate the size of each edge of the reprojected square + const dx = Math.hypot(pEast.x - p.x, pEast.y - p.y); + const dy = Math.hypot(pSouth.x - p.x, pSouth.y - p.y); + + // Calculate the size of a projected square that would have the + // same area as the reprojected square. + return Math.sqrt(dx * dy) / offset; + }; + + const centerSize = sizeAtMercatorCoord(MercatorCoordinate.fromLngLat(this.center)); + + const aabbForTile = (z, x, y, wrap, min, max) => { + const tt = tileTransform({z, x, y}, this.projection); + const tx = tt.x / tt.scale; + const ty = tt.y / tt.scale; + const tx2 = tt.x2 / tt.scale; + const ty2 = tt.y2 / tt.scale; + if (isNaN(tx) || isNaN(tx2) || isNaN(ty) || isNaN(ty2)) { + assert(false); + } + const ret = new Aabb( + [(wrap + tx) * numTiles, numTiles * ty, min], + [(wrap + tx2) * numTiles, numTiles * ty2, max]); + return ret; + }; + const newRootTile = (wrap: number): any => { const max = maxRange; const min = minRange; + const aabb = this.projection.name === 'mercator' ? + new Aabb([wrap * numTiles, 0, min], [(wrap + 1) * numTiles, numTiles, max]) : + aabbForTile(0, 0, 0, wrap, min, max); return { // With elevation, this._elevation provides z coordinate values. For 2D: // All tiles are on zero elevation plane => z difference is zero - aabb: new Aabb([wrap * numTiles, 0, min], [(wrap + 1) * numTiles, numTiles, max]), + aabb, zoom: 0, x: 0, y: 0, @@ -758,8 +847,21 @@ class Transform { dzSqr = square(it.aabb.distanceZ(cameraPoint) * meterToTile); } + let scaleAdjustment = 1; + if (!isMercator && actualZ <= 5) { + // In other projections, not all tiles are the same size. + // Account for the tile size difference by adjusting the distToSplit. + // Adjust by the ratio of the area at the tile center to the area at the map center. + // Adjustments are only needed at lower zooms where tiles are not similarly sized. + const numTiles = Math.pow(2, it.zoom); + const tileCenterSize = sizeAtMercatorCoord(new MercatorCoordinate((it.x + 0.5) / numTiles, (it.y + 0.5) / numTiles)); + const areaRatio = tileCenterSize / centerSize; + // Fudge the ratio slightly so that all tiles near the center have the same zoom level. + scaleAdjustment = areaRatio > 0.85 ? 1 : areaRatio; + } + const distanceSqr = dx * dx + dy * dy + dzSqr; - const distToSplit = (1 << maxZoom - it.zoom) * zoomSplitDistance; + const distToSplit = (1 << maxZoom - it.zoom) * zoomSplitDistance * scaleAdjustment; const distToSplitSqr = square(distToSplit * distToSplitScale(Math.max(dzSqr, cameraHeightSqr), distanceSqr)); return distanceSqr < distToSplitSqr; @@ -802,7 +904,6 @@ class Transform { const dx = centerPoint[0] - ((0.5 + x + (it.wrap << it.zoom)) * (1 << (z - it.zoom))); const dy = centerPoint[1] - 0.5 - y; const id = it.tileID ? it.tileID : new OverscaledTileID(tileZoom, it.wrap, it.zoom, x, y); - result.push({tileID: id, distanceSq: dx * dx + dy * dy}); continue; } @@ -811,7 +912,7 @@ class Transform { const childX = (x << 1) + (i % 2); const childY = (y << 1) + (i >> 1); - const aabb = it.aabb.quadrant(i); + const aabb = this.projection.name === 'mercator' ? it.aabb.quadrant(i) : aabbForTile(it.zoom + 1, childX, childY, it.wrap, 0, 0); const child = {aabb, zoom: it.zoom + 1, x: childX, y: childY, wrap: it.wrap, fullyVisible, tileID: undefined, shouldSplit: undefined}; if (useElevationData) { child.tileID = new OverscaledTileID(it.zoom + 1 === maxZoom ? overscaledZ : it.zoom + 1, it.wrap, it.zoom + 1, childX, childY); @@ -857,7 +958,8 @@ class Transform { if (!minmax) { minmax = {min: minRange, max: maxRange}; } - const cornerFar = furthestTileCorner(this.bearing); + // ensure that we want `this.rotation` instead of `this.bearing` here + const cornerFar = furthestTileCorner(this.rotation); const farX = cornerFar[0] * EXTENT; const farY = cornerFar[1] * EXTENT; @@ -882,7 +984,7 @@ class Transform { const cover = result.sort((a, b) => a.distanceSq - b.distanceSq).map(a => a.tileID); // Relax the assertion on terrain, on high zoom we use distance to center of tile // while camera might be closer to selected center of map. - assert(!cover.length || this.elevation || cover[0].overscaledZ === overscaledZ); + assert(!cover.length || this.elevation || cover[0].overscaledZ === overscaledZ || !isMercator); return cover; } @@ -902,15 +1004,16 @@ class Transform { // Transform from LngLat to Point in world coordinates [-180, 180] x [90, -90] --> [0, this.worldSize] x [0, this.worldSize] project(lnglat: LngLat) { - const lat = clamp(lnglat.lat, -this.maxValidLatitude, this.maxValidLatitude); + const lat = clamp(lnglat.lat, -MAX_MERCATOR_LATITUDE, MAX_MERCATOR_LATITUDE); + const projectedLngLat = this.projection.project(lnglat.lng, lat); return new Point( - mercatorXfromLng(lnglat.lng) * this.worldSize, - mercatorYfromLat(lat) * this.worldSize); + projectedLngLat.x * this.worldSize, + projectedLngLat.y * this.worldSize); } // Transform from Point in world coordinates to LngLat [0, this.worldSize] x [0, this.worldSize] --> [-180, 180] x [90, -90] unproject(point: Point): LngLat { - return new MercatorCoordinate(point.x / this.worldSize, point.y / this.worldSize).toLngLat(); + return this.projection.unproject(point.x / this.worldSize, point.y / this.worldSize); } // Point at center in world coordinates. @@ -920,18 +1023,14 @@ class Transform { const a = this.pointCoordinate(point); const b = this.pointCoordinate(this.centerPoint); const loc = this.locationCoordinate(lnglat); - const newCenter = new MercatorCoordinate( - loc.x - (a.x - b.x), - loc.y - (a.y - b.y)); - this.center = this.coordinateLocation(newCenter); - if (this._renderWorldCopies) { - this.center = this.center.wrap(); - } + this.setLocation(new MercatorCoordinate( + loc.x - (a.x - b.x), + loc.y - (a.y - b.y))); } setLocation(location: MercatorCoordinate) { this.center = this.coordinateLocation(location); - if (this._renderWorldCopies) { + if (this.renderWorldCopies) { this.center = this.center.wrap(); } } @@ -984,24 +1083,31 @@ class Transform { } /** - * Given a geographical lnglat, return an unrounded + * Given a geographical lngLat, return an unrounded * coordinate that represents it at this transform's zoom level. - * @param {LngLat} lnglat + * @param {LngLat} lngLat * @returns {Coordinate} * @private */ - locationCoordinate(lnglat: LngLat) { - return MercatorCoordinate.fromLngLat(lnglat); + locationCoordinate(lngLat: LngLat, altitude?: number) { + const z = altitude ? + mercatorZfromAltitude(altitude, lngLat.lat) : + undefined; + const projectedLngLat = this.projection.project(lngLat.lng, lngLat.lat); + return new MercatorCoordinate( + projectedLngLat.x, + projectedLngLat.y, + z); } /** * Given a Coordinate, return its geographical position. * @param {Coordinate} coord - * @returns {LngLat} lnglat + * @returns {LngLat} lngLat * @private */ coordinateLocation(coord: MercatorCoordinate) { - return coord.toLngLat(); + return this.projection.unproject(coord.x, coord.y); } /** @@ -1227,11 +1333,8 @@ class Transform { * Returns the maximum geographical bounds the map is constrained to, or `null` if none set. * @returns {LngLatBounds} {@link LngLatBounds}. */ - getMaxBounds(): LngLatBounds | null { - if (!this.latRange || this.latRange.length !== 2 || - !this.lngRange || this.lngRange.length !== 2) return null; - - return new LngLatBounds([this.lngRange[0], this.latRange[0]], [this.lngRange[1], this.latRange[1]]); + getMaxBounds(): ?LngLatBounds { + return this.maxBounds; } /** @@ -1239,27 +1342,49 @@ class Transform { * * @param {LngLatBounds} bounds A {@link LngLatBounds} object describing the new geographic boundaries of the map. */ - setMaxBounds(bounds?: LngLatBounds) { + setMaxBounds(bounds: ?LngLatBounds) { + this.maxBounds = bounds; + + let minLat = -MAX_MERCATOR_LATITUDE; + let maxLat = MAX_MERCATOR_LATITUDE; + let minLng = -180; + let maxLng = 180; + if (bounds) { - const eastBound = bounds.getEast(); - const westBound = bounds.getWest(); - // Unwrap bounds if they cross the 180th meridian - this.lngRange = [westBound, eastBound > westBound ? eastBound : eastBound + 360]; - this.latRange = [bounds.getSouth(), bounds.getNorth()]; - this._constrain(); - } else { - this.lngRange = null; - this.latRange = [-this.maxValidLatitude, this.maxValidLatitude]; + minLat = bounds.getSouth(); + maxLat = bounds.getNorth(); + minLng = bounds.getWest(); + maxLng = bounds.getEast(); + if (maxLng < minLng) maxLng += 360; } + + this.worldMinX = mercatorXfromLng(minLng) * this.tileSize; + this.worldMaxX = mercatorXfromLng(maxLng) * this.tileSize; + this.worldMinY = mercatorYfromLat(maxLat) * this.tileSize; + this.worldMaxY = mercatorYfromLat(minLat) * this.tileSize; + + this._constrain(); } calculatePosMatrix(unwrappedTileID: UnwrappedTileID, worldSize: number): Float32Array { + let scale, scaledX, scaledY; const canonical = unwrappedTileID.canonical; - const scale = worldSize / this.zoomScale(canonical.z); - const unwrappedX = canonical.x + Math.pow(2, canonical.z) * unwrappedTileID.wrap; - const posMatrix = mat4.identity(new Float64Array(16)); - mat4.translate(posMatrix, posMatrix, [unwrappedX * scale, canonical.y * scale, 0]); + + if (this.projection.name === 'mercator') { + scale = worldSize / this.zoomScale(canonical.z); + const unwrappedX = canonical.x + Math.pow(2, canonical.z) * unwrappedTileID.wrap; + scaledX = unwrappedX * scale; + scaledY = canonical.y * scale; + } else { + const cs = tileTransform(canonical, this.projection); + scale = 1; + scaledX = cs.x; + scaledY = cs.y; + mat4.scale(posMatrix, posMatrix, [scale / cs.scale, scale / cs.scale, this.pixelsPerMeter / this.worldSize]); + } + + mat4.translate(posMatrix, posMatrix, [scaledX, scaledY, 0]); mat4.scale(posMatrix, posMatrix, [scale / EXTENT, scale / EXTENT, 1]); return posMatrix; @@ -1334,12 +1459,25 @@ class Transform { } const posMatrix = this.calculatePosMatrix(unwrappedTileID, this.worldSize); - mat4.multiply(posMatrix, aligned ? this.alignedProjMatrix : this.projMatrix, posMatrix); + const projMatrix = this.projection.name === 'mercator' ? aligned ? this.alignedProjMatrix : this.projMatrix : this.mercatorMatrix; + mat4.multiply(posMatrix, projMatrix, posMatrix); cache[projMatrixKey] = new Float32Array(posMatrix); return cache[projMatrixKey]; } + calculatePixelsToTileUnitsMatrix(tile: Tile): Float32Array { + const key = tile.tileID.key; + const cache = this._pixelsToTileUnitsCache; + if (cache[key]) { + return cache[key]; + } + + const matrix = getPixelsToTileUnitsMatrix(tile, this); + cache[key] = matrix; + return cache[key]; + } + customLayerMatrix(): Array { return this.mercatorMatrix.slice(); } @@ -1377,7 +1515,7 @@ class Transform { // Camera zoom has to be updated as the orbit distance might have changed this._cameraZoom = this._zoomFromMercatorZ(maxAltitude); this._centerAltitude = newCenter.toAltitude(); - this._center = newCenter.toLngLat(); + this._center = this.coordinateLocation(newCenter); this._updateZoomFromElevation(); this._constrain(); this._calcMatrices(); @@ -1397,7 +1535,7 @@ class Transform { const cameraHeight = this._camera.position[2] - terrainElevation; if (cameraHeight < minHeight) { - const center = MercatorCoordinate.fromLngLat(this._center, this._centerAltitude); + const center = this.locationCoordinate(this._center, this._centerAltitude); const cameraPos = this._camera.mercatorPosition; const cameraToCenter = [center.x - cameraPos.x, center.y - cameraPos.y, center.z - cameraPos.z]; const prevDistToCamera = vec3.length(cameraToCenter); @@ -1422,106 +1560,80 @@ class Transform { this._constraining = true; - let minY = Infinity; - let maxY = -Infinity; - let minX, maxX, sy, sx, y2; - const size = this.size, - unmodified = this._unmodified; - - if (this.latRange) { - const latRange = this.latRange; - minY = mercatorYfromLat(latRange[1]) * this.worldSize; - maxY = mercatorYfromLat(latRange[0]) * this.worldSize; - sy = maxY - minY < size.y ? size.y / (maxY - minY) : 0; - } - - if (this.lngRange) { - const lngRange = this.lngRange; - minX = mercatorXfromLng(lngRange[0]) * this.worldSize; - maxX = mercatorXfromLng(lngRange[1]) * this.worldSize; - sx = maxX - minX < size.x ? size.x / (maxX - minX) : 0; - } - - const point = this.point; - - // how much the map should scale to fit the screen into given latitude/longitude ranges - const s = Math.max(sx || 0, sy || 0); - - if (s) { - this.center = this.unproject(new Point( - sx ? (maxX + minX) / 2 : point.x, - sy ? (maxY + minY) / 2 : point.y)); - this.zoom += this.scaleZoom(s); - this._unmodified = unmodified; + // alternate constraining for non-Mercator projections + const maxBounds = this.maxBounds; + if (this.projection.name !== 'mercator' && maxBounds) { + const center = this.center; + center.lat = clamp(center.lat, maxBounds.getSouth(), maxBounds.getNorth()); + center.lng = clamp(center.lng, maxBounds.getWest(), maxBounds.getEast()); + this.center = center; this._constraining = false; return; } - if (this.latRange) { - const y = point.y, - h2 = size.y / 2; - - if (y - h2 < minY) y2 = minY + h2; - if (y + h2 > maxY) y2 = maxY - h2; + const unmodified = this._unmodified; + const {x, y} = this.point; + let s = 0; + let x2 = x; + let y2 = y; + const w2 = this.width / 2; + const h2 = this.height / 2; + + const minY = this.worldMinY * this.scale; + const maxY = this.worldMaxY * this.scale; + if (y - h2 < minY) y2 = minY + h2; + if (y + h2 > maxY) y2 = maxY - h2; + if (maxY - minY < this.height) { + s = Math.max(s, this.height / (maxY - minY)); + y2 = (maxY + minY) / 2; } - let x = point.x; + if (this.maxBounds) { + const minX = this.worldMinX * this.scale; + const maxX = this.worldMaxX * this.scale; - if (this.lngRange) { // Translate to positive positions with the map center in the center position. // This ensures that the map snaps to the correct edge. const shift = this.worldSize / 2 - (minX + maxX) / 2; - x = (x + shift + this.worldSize) % this.worldSize; - minX += shift; - maxX += shift; + x2 = (x + shift + this.worldSize) % this.worldSize - shift; - const w2 = size.x / 2; - if (x - w2 < minX) x = minX + w2; - if (x + w2 > maxX) x = maxX - w2; - - x -= shift; + if (x2 - w2 < minX) x2 = minX + w2; + if (x2 + w2 > maxX) x2 = maxX - w2; + if (maxX - minX < this.width) { + s = Math.max(s, this.width / (maxX - minX)); + x2 = (maxX + minX) / 2; + } } - // pan the map if the screen goes off the range - if (x !== point.x || y2 !== undefined) { - this.center = this.unproject(new Point( - x, - y2 !== undefined ? y2 : point.y)); + if (x2 !== x || y2 !== y) { // pan the map to fit the range + this.center = this.unproject(new Point(x2, y2)); + } + if (s) { // scale the map to fit the range + this.zoom += this.scaleZoom(s); } this._constrainCameraAltitude(); - this._unmodified = unmodified; this._constraining = false; } /** - * Returns the minimum zoom at which `this.width` can fit `this.lngRange` - * and `this.height` can fit `this.latRange`. + * Returns the minimum zoom at which `this.width` can fit max longitude range + * and `this.height` can fit max latitude range. * * @returns {number} The zoom value. */ _minZoomForBounds(): number { - const minZoomForDim = (dim: number, range: [number, number]): number => { - return Math.log2(dim / (this.tileSize * Math.abs(range[1] - range[0]))); - }; - let minLatZoom = DEFAULT_MIN_ZOOM; - if (this.latRange) { - const latRange = this.latRange; - minLatZoom = minZoomForDim(this.height, [mercatorYfromLat(latRange[0]), mercatorYfromLat(latRange[1])]); + let minZoom = Math.max(0, this.scaleZoom(this.height / (this.worldMaxY - this.worldMinY))); + if (this.maxBounds) { + minZoom = Math.max(minZoom, this.scaleZoom(this.width / (this.worldMaxX - this.worldMinX))); } - let minLngZoom = DEFAULT_MIN_ZOOM; - if (this.lngRange) { - const lngRange = this.lngRange; - minLngZoom = minZoomForDim(this.width, [mercatorXfromLng(lngRange[0]), mercatorXfromLng(lngRange[1])]); - } - - return Math.max(minLatZoom, minLngZoom); + return minZoom; } /** * Returns the maximum distance of the camera from the center of the bounds, such that - * `this.width` can fit `this.lngRange` and `this.height` can fit `this.latRange`. + * `this.width` can fit max longitude range and `this.height` can fit max latitude range. * In mercator units. * * @returns {number} The mercator z coordinate. @@ -1583,6 +1695,20 @@ class Transform { let m = mat4.mul([], cameraToClip, worldToCamera); + if (this.projection.name !== 'mercator') { + // Projections undistort as you zoom in (shear, scale, rotate). + // Apply the undistortion around the center of the map. + const mc = this.locationCoordinate(this.center); + const adjustments = mat4.identity([]); + mat4.translate(adjustments, adjustments, [mc.x * this.worldSize, mc.y * this.worldSize, 0]); + mat4.multiply(adjustments, adjustments, getProjectionAdjustments(this)); + mat4.translate(adjustments, adjustments, [-mc.x * this.worldSize, -mc.y * this.worldSize, 0]); + mat4.multiply(m, m, adjustments); + this.inverseAdjustmentMatrix = getProjectionAdjustmentInverted(this); + } else { + this.inverseAdjustmentMatrix = [1, 0, 0, 1]; + } + // The mercatorMatrix can be used to transform points from mercator coordinates // ([0, 0] nw, [1, 1] se) to GL coordinates. this.mercatorMatrix = mat4.scale([], m, [this.worldSize, this.worldSize, this.worldSize / pixelsPerMeter]); @@ -1645,6 +1771,7 @@ class Transform { this._projMatrixCache = {}; this._alignedProjMatrixCache = {}; + this._pixelsToTileUnitsCache = {}; } _calcFogMatrices() { @@ -1703,7 +1830,7 @@ class Transform { /** * Apply a 3d translation to the camera position, but clamping it so that - * it respects the bounds set by `this.latRange` and `this.lngRange`. + * it respects the maximum longitude and latitude range set. * * @param {vec3} translation The translation vector. */ @@ -1744,7 +1871,7 @@ class Transform { if (this._terrainEnabled()) this._updateCameraOnTerrain(); - this._center = new MercatorCoordinate(position[0], position[1], position[2]).toLngLat(); + this._center = this.coordinateLocation(new MercatorCoordinate(position[0], position[1], position[2])); this._unmodified = false; this._constrain(); this._calcMatrices(); @@ -1773,7 +1900,12 @@ class Transform { } _terrainEnabled(): boolean { - return !!this._elevation; + if (!this._elevation) return false; + if (this.projection.name !== 'mercator') { + warnOnce('Terrain is not yet supported with alternate projections. Use mercator to enable terrain.'); + return false; + } + return true; } // Check if any of the four corners are off the edge of the rendered map diff --git a/src/render/draw_background.js b/src/render/draw_background.js index d2b15f51e7c..bd786aa8889 100644 --- a/src/render/draw_background.js +++ b/src/render/draw_background.js @@ -3,6 +3,7 @@ import StencilMode from '../gl/stencil_mode.js'; import DepthMode from '../gl/depth_mode.js'; import CullFaceMode from '../gl/cull_face_mode.js'; +import Tile from '../source/tile.js'; import { backgroundUniformValues, backgroundPatternUniformValues @@ -37,7 +38,12 @@ function drawBackground(painter: Painter, sourceCache: SourceCache, layer: Backg const program = painter.useProgram(image ? 'backgroundPattern' : 'background'); - const tileIDs = coords ? coords : transform.coveringTiles({tileSize}); + let tileIDs = coords; + let backgroundTiles; + if (!tileIDs) { + backgroundTiles = painter.getBackgroundTiles(); + tileIDs = Object.values(backgroundTiles).map(tile => (tile: any).tileID); + } if (image) { context.activeTexture.set(gl.TEXTURE0); @@ -50,14 +56,19 @@ function drawBackground(painter: Painter, sourceCache: SourceCache, layer: Backg const matrix = coords ? tileID.projMatrix : painter.transform.calculateProjMatrix(unwrappedTileID); painter.prepareDrawTile(tileID); + const tile = sourceCache ? sourceCache.getTile(tileID) : + backgroundTiles ? backgroundTiles[tileID.key] : new Tile(tileID, tileSize, transform.zoom, painter); + const uniformValues = image ? backgroundPatternUniformValues(matrix, opacity, painter, image, {tileID, tileSize}, crossfade) : backgroundUniformValues(matrix, opacity, color); painter.prepareDrawProgram(context, program, unwrappedTileID); + const {tileBoundsBuffer, tileBoundsIndexBuffer, tileBoundsSegments} = painter.getTileBoundsBuffers(tile); + program.draw(context, gl.TRIANGLES, depthMode, stencilMode, colorMode, CullFaceMode.disabled, - uniformValues, layer.id, painter.tileExtentBuffer, - painter.quadTriangleIndexBuffer, painter.tileExtentSegments); + uniformValues, layer.id, tileBoundsBuffer, + tileBoundsIndexBuffer, tileBoundsSegments); } } diff --git a/src/render/draw_debug.js b/src/render/draw_debug.js index 18101641c1f..63ba163c6e6 100644 --- a/src/render/draw_debug.js +++ b/src/render/draw_debug.js @@ -136,9 +136,15 @@ function drawDebugTile(painter, sourceCache, coord: OverscaledTileID) { // Bind the empty texture for drawing outlines painter.emptyTexture.bind(gl.LINEAR, gl.CLAMP_TO_EDGE); + tile._makeDebugTileBoundsBuffers(painter.context, painter.transform.projection); + + const debugBuffer = tile._tileDebugBuffer || painter.debugBuffer; + const debugIndexBuffer = tile._tileDebugIndexBuffer || painter.debugIndexBuffer; + const debugSegments = tile._tileDebugSegments || painter.debugSegments; + program.draw(context, gl.LINE_STRIP, depthMode, stencilMode, colorMode, CullFaceMode.disabled, debugUniformValues(posMatrix, Color.red), id, - painter.debugBuffer, painter.tileBorderIndexBuffer, painter.debugSegments); + debugBuffer, debugIndexBuffer, debugSegments); const tileRawData = tile.latestRawTileData; const tileByteLength = (tileRawData && tileRawData.byteLength) || 0; diff --git a/src/render/draw_hillshade.js b/src/render/draw_hillshade.js index dc4ea0aaf9f..ef678574693 100644 --- a/src/render/draw_hillshade.js +++ b/src/render/draw_hillshade.js @@ -63,9 +63,11 @@ function renderHillshade(painter, coord, tile, layer, depthMode, stencilMode, co painter.prepareDrawProgram(context, program, coord.toUnwrapped()); + const {tileBoundsBuffer, tileBoundsIndexBuffer, tileBoundsSegments} = painter.getTileBoundsBuffers(tile); + program.draw(context, gl.TRIANGLES, depthMode, stencilMode, colorMode, CullFaceMode.disabled, - uniformValues, layer.id, painter.rasterBoundsBuffer, - painter.quadTriangleIndexBuffer, painter.rasterBoundsSegments); + uniformValues, layer.id, tileBoundsBuffer, + tileBoundsIndexBuffer, tileBoundsSegments); } export function prepareDEMTexture(painter: Painter, tile: Tile, dem: DEMData) { @@ -114,11 +116,13 @@ function prepareHillshade(painter, tile, layer, depthMode, stencilMode, colorMod context.bindFramebuffer.set(fbo.framebuffer); context.viewport.set([0, 0, tileSize, tileSize]); + const {tileBoundsBuffer, tileBoundsIndexBuffer, tileBoundsSegments} = painter.getTileBoundsBuffers(tile); + painter.useProgram('hillshadePrepare').draw(context, gl.TRIANGLES, depthMode, stencilMode, colorMode, CullFaceMode.disabled, hillshadeUniformPrepareValues(tile.tileID, dem), - layer.id, painter.rasterBoundsBuffer, - painter.quadTriangleIndexBuffer, painter.rasterBoundsSegments); + layer.id, tileBoundsBuffer, + tileBoundsIndexBuffer, tileBoundsSegments); tile.needsHillshadePrepare = false; } diff --git a/src/render/draw_raster.js b/src/render/draw_raster.js index 19b1caaef50..beaea4fc0a6 100644 --- a/src/render/draw_raster.js +++ b/src/render/draw_raster.js @@ -87,9 +87,11 @@ function drawRaster(painter: Painter, sourceCache: SourceCache, layer: RasterSty uniformValues, layer.id, source.boundsBuffer, painter.quadTriangleIndexBuffer, source.boundsSegments); } else { + const {tileBoundsBuffer, tileBoundsIndexBuffer, tileBoundsSegments} = painter.getTileBoundsBuffers(tile); + program.draw(context, gl.TRIANGLES, depthMode, stencilMode, colorMode, CullFaceMode.disabled, - uniformValues, layer.id, painter.rasterBoundsBuffer, - painter.quadTriangleIndexBuffer, painter.rasterBoundsSegments); + uniformValues, layer.id, tileBoundsBuffer, + tileBoundsIndexBuffer, tileBoundsSegments); } } } diff --git a/src/render/draw_symbol.js b/src/render/draw_symbol.js index dc94dbfeb38..e796564df82 100644 --- a/src/render/draw_symbol.js +++ b/src/render/draw_symbol.js @@ -4,7 +4,6 @@ import Point from '@mapbox/point-geometry'; import drawCollisionDebug from './draw_collision_debug.js'; import SegmentVector from '../data/segment.js'; -import pixelsToTileUnits from '../source/pixels_to_tile_units.js'; import * as symbolProjection from '../symbol/projection.js'; import * as symbolSize from '../symbol/symbol_size.js'; import {mat4} from 'gl-matrix'; @@ -126,8 +125,8 @@ function updateVariableAnchors(coords, painter, layer, sourceCache, rotationAlig const sizeData = bucket.textSizeData; const size = symbolSize.evaluateSizeForZoom(sizeData, tr.zoom); - const pixelToTileScale = pixelsToTileUnits(tile, 1, painter.transform.zoom); - const labelPlaneMatrix = symbolProjection.getLabelPlaneMatrix(coord.projMatrix, pitchWithMap, rotateWithMap, painter.transform, pixelToTileScale); + const pixelsToTileUnits = painter.transform.calculatePixelsToTileUnitsMatrix(tile); + const labelPlaneMatrix = symbolProjection.getLabelPlaneMatrix(coord.projMatrix, pitchWithMap, rotateWithMap, painter.transform, pixelsToTileUnits); const updateTextFitIcon = layer.layout.get('icon-text-fit') !== 'none' && bucket.hasIconData(); if (size) { @@ -298,7 +297,7 @@ function drawLayerSymbols(painter, sourceCache, layer, coords, isText, translate texSize = tile.imageAtlasTexture.size; } - const s = pixelsToTileUnits(tile, 1, painter.transform.zoom); + const s = painter.transform.calculatePixelsToTileUnitsMatrix(tile); const labelPlaneMatrix = symbolProjection.getLabelPlaneMatrix(coord.projMatrix, pitchWithMap, rotateWithMap, painter.transform, s); // labelPlaneMatrixInv is used for converting vertex pos to tile coordinates needed for sampling elevation. const labelPlaneMatrixInv = painter.terrain && pitchWithMap && alongLine ? mat4.invert(new Float32Array(16), labelPlaneMatrix) : identityMat4; diff --git a/src/render/painter.js b/src/render/painter.js index 88de16aec79..7ad554175ef 100644 --- a/src/render/painter.js +++ b/src/render/painter.js @@ -8,11 +8,11 @@ import SourceCache from '../source/source_cache.js'; import EXTENT from '../data/extent.js'; import pixelsToTileUnits from '../source/pixels_to_tile_units.js'; import SegmentVector from '../data/segment.js'; -import {RasterBoundsArray, PosArray, TriangleIndexArray, LineStripIndexArray} from '../data/array_types.js'; +import {PosArray, TileBoundsArray, TriangleIndexArray, LineStripIndexArray} from '../data/array_types.js'; import {values, MAX_SAFE_INTEGER} from '../util/util.js'; import {isMapAuthenticated} from '../util/mapbox.js'; -import rasterBoundsAttributes from '../data/raster_bounds_attributes.js'; import posAttributes from '../data/pos_attributes.js'; +import boundsAttributes from '../data/bounds_attributes.js'; import ProgramConfiguration from '../data/program_configuration.js'; import CrossTileSymbolIndex from '../symbol/cross_tile_symbol_index.js'; import shaders from '../shaders/shaders.js'; @@ -42,6 +42,7 @@ import custom from './draw_custom.js'; import sky from './draw_sky.js'; import {Terrain} from '../terrain/terrain.js'; import {Debug} from '../util/debug.js'; +import Tile from '../source/tile.js'; const draw = { symbol, @@ -59,7 +60,6 @@ const draw = { }; import type Transform from '../geo/transform.js'; -import type Tile from '../source/tile.js'; import type {OverscaledTileID, UnwrappedTileID} from '../source/tile_id.js'; import type Style from '../style/style.js'; import type StyleLayer from '../style/style_layer.js'; @@ -112,13 +112,13 @@ class Painter { tileExtentBuffer: VertexBuffer; tileExtentSegments: SegmentVector; debugBuffer: VertexBuffer; + debugIndexBuffer: IndexBuffer; debugSegments: SegmentVector; - rasterBoundsBuffer: VertexBuffer; - rasterBoundsSegments: SegmentVector; viewportBuffer: VertexBuffer; viewportSegments: SegmentVector; quadTriangleIndexBuffer: IndexBuffer; - tileBorderIndexBuffer: IndexBuffer; + mercatorBoundsBuffer: VertexBuffer; + mercatorBoundsSegments: SegmentVector; _tileClippingMaskIDs: {[_: number]: number }; stencilClearMode: StencilMode; style: Style; @@ -147,6 +147,7 @@ class Painter { tileLoaded: boolean; frameCopies: Array; loadTimeStamps: Array; + _backgroundTiles: {[_: number | string]: Tile}; constructor(gl: WebGLRenderingContext, transform: Transform) { this.context = new Context(gl); @@ -166,10 +167,11 @@ class Painter { this.gpuTimers = {}; this.frameCounter = 0; + this._backgroundTiles = {}; } updateTerrain(style: Style, cameraChanging: boolean) { - const enabled = !!style && !!style.terrain; + const enabled = !!style && !!style.terrain && this.transform.projection.name === 'mercator'; if (!enabled && (!this._terrain || !this._terrain.enabled)) return; if (!this._terrain) { this._terrain = new Terrain(this, style); @@ -202,7 +204,7 @@ class Painter { } get terrain(): ?Terrain { - return this._terrain && this._terrain.enabled ? this._terrain : null; + return this.transform._terrainEnabled() && this._terrain && this._terrain.enabled ? this._terrain : null; } /* @@ -240,14 +242,6 @@ class Painter { this.debugBuffer = context.createVertexBuffer(debugArray, posAttributes.members); this.debugSegments = SegmentVector.simpleSegment(0, 0, 4, 5); - const rasterBoundsArray = new RasterBoundsArray(); - rasterBoundsArray.emplaceBack(0, 0, 0, 0); - rasterBoundsArray.emplaceBack(EXTENT, 0, EXTENT, 0); - rasterBoundsArray.emplaceBack(0, EXTENT, 0, EXTENT); - rasterBoundsArray.emplaceBack(EXTENT, EXTENT, EXTENT, EXTENT); - this.rasterBoundsBuffer = context.createVertexBuffer(rasterBoundsArray, rasterBoundsAttributes.members); - this.rasterBoundsSegments = SegmentVector.simpleSegment(0, 0, 4, 2); - const viewportArray = new PosArray(); viewportArray.emplaceBack(-1, -1); viewportArray.emplaceBack(1, -1); @@ -256,19 +250,23 @@ class Painter { this.viewportBuffer = context.createVertexBuffer(viewportArray, posAttributes.members); this.viewportSegments = SegmentVector.simpleSegment(0, 0, 4, 2); - const tileLineStripIndices = new LineStripIndexArray(); - tileLineStripIndices.emplaceBack(0); - tileLineStripIndices.emplaceBack(1); - tileLineStripIndices.emplaceBack(3); - tileLineStripIndices.emplaceBack(2); - tileLineStripIndices.emplaceBack(0); - this.tileBorderIndexBuffer = context.createIndexBuffer(tileLineStripIndices); + const tileBoundsArray = new TileBoundsArray(); + tileBoundsArray.emplaceBack(0, 0, 0, 0); + tileBoundsArray.emplaceBack(EXTENT, 0, EXTENT, 0); + tileBoundsArray.emplaceBack(0, EXTENT, 0, EXTENT); + tileBoundsArray.emplaceBack(EXTENT, EXTENT, EXTENT, EXTENT); + this.mercatorBoundsBuffer = context.createVertexBuffer(tileBoundsArray, boundsAttributes.members); + this.mercatorBoundsSegments = SegmentVector.simpleSegment(0, 0, 4, 2); const quadTriangleIndices = new TriangleIndexArray(); quadTriangleIndices.emplaceBack(0, 1, 2); quadTriangleIndices.emplaceBack(2, 1, 3); this.quadTriangleIndexBuffer = context.createIndexBuffer(quadTriangleIndices); + const tileLineStripIndices = new LineStripIndexArray(); + for (const i of [0, 1, 3, 2, 0]) tileLineStripIndices.emplaceBack(i); + this.debugIndexBuffer = context.createIndexBuffer(tileLineStripIndices); + this.emptyTexture = new Texture(context, { width: 1, height: 1, @@ -282,6 +280,21 @@ class Painter { this.loadTimeStamps.push(window.performance.now()); } + getTileBoundsBuffers(tile: Tile) { + let tileBoundsBuffer, tileBoundsIndexBuffer, tileBoundsSegments; + if (tile._tileBoundsBuffer) { + tileBoundsBuffer = tile._tileBoundsBuffer; + tileBoundsIndexBuffer = tile._tileBoundsIndexBuffer; + tileBoundsSegments = tile._tileBoundsSegments; + } else { + tileBoundsBuffer = this.mercatorBoundsBuffer; + tileBoundsIndexBuffer = this.quadTriangleIndexBuffer; + tileBoundsSegments = this.mercatorBoundsSegments; + } + + return {tileBoundsBuffer, tileBoundsIndexBuffer, tileBoundsSegments}; + } + /* * Reset the drawing canvas by clearing the stencil buffer so that we can draw * new tiles at the same location, while retaining previously drawn pixels. @@ -325,14 +338,16 @@ class Painter { this._tileClippingMaskIDs = {}; for (const tileID of tileIDs) { + const tile = sourceCache.getTile(tileID); const id = this._tileClippingMaskIDs[tileID.key] = this.nextStencilID++; + const {tileBoundsBuffer, tileBoundsIndexBuffer, tileBoundsSegments} = this.getTileBoundsBuffers(tile); program.draw(context, gl.TRIANGLES, DepthMode.disabled, // Tests will always pass, and ref value will be written to stencil buffer. new StencilMode({func: gl.ALWAYS, mask: 0}, id, 0xFF, gl.KEEP, gl.KEEP, gl.REPLACE), ColorMode.disabled, CullFaceMode.disabled, clippingMaskUniformValues(tileID.projMatrix), - '$clipping', this.tileExtentBuffer, - this.quadTriangleIndexBuffer, this.tileExtentSegments); + '$clipping', tileBoundsBuffer, + tileBoundsIndexBuffer, tileBoundsSegments); } } @@ -890,6 +905,22 @@ class Painter { return true; } + + getBackgroundTiles() { + const oldTiles = this._backgroundTiles; + const newTiles = this._backgroundTiles = {}; + + const tileSize = 512; + const tileIDs = this.transform.coveringTiles({tileSize}); + for (const tileID of tileIDs) { + newTiles[tileID.key] = oldTiles[tileID.key] || new Tile(tileID, tileSize, this.transform.tileZoom, this); + } + return newTiles; + } + + clearBackgroundTiles() { + this._backgroundTiles = {}; + } } export default Painter; diff --git a/src/render/program/circle_program.js b/src/render/program/circle_program.js index 2e07158f3e9..552ac9cc60d 100644 --- a/src/render/program/circle_program.js +++ b/src/render/program/circle_program.js @@ -2,10 +2,9 @@ import { Uniform1f, - Uniform2f, + UniformMatrix2f, UniformMatrix4f } from '../uniform_binding.js'; -import pixelsToTileUnits from '../../source/pixels_to_tile_units.js'; import type Context from '../../gl/context.js'; import type {UniformValues, UniformLocations} from '../uniform_binding.js'; @@ -17,7 +16,7 @@ import browser from '../../util/browser.js'; export type CircleUniformsType = {| 'u_camera_to_center_distance': Uniform1f, - 'u_extrude_scale': Uniform2f, + 'u_extrude_scale': UniformMatrix2f, 'u_device_pixel_ratio': Uniform1f, 'u_matrix': UniformMatrix4f |}; @@ -26,7 +25,7 @@ export type CircleDefinesType = 'PITCH_WITH_MAP' | 'SCALE_WITH_MAP'; const circleUniforms = (context: Context, locations: UniformLocations): CircleUniformsType => ({ 'u_camera_to_center_distance': new Uniform1f(context, locations.u_camera_to_center_distance), - 'u_extrude_scale': new Uniform2f(context, locations.u_extrude_scale), + 'u_extrude_scale': new UniformMatrix2f(context, locations.u_extrude_scale), 'u_device_pixel_ratio': new Uniform1f(context, locations.u_device_pixel_ratio), 'u_matrix': new UniformMatrix4f(context, locations.u_matrix) }); @@ -39,12 +38,15 @@ const circleUniformValues = ( ): UniformValues => { const transform = painter.transform; - let extrudeScale: [number, number]; + let extrudeScale; if (layer.paint.get('circle-pitch-alignment') === 'map') { - const pixelRatio = pixelsToTileUnits(tile, 1, transform.zoom); - extrudeScale = [pixelRatio, pixelRatio]; + extrudeScale = transform.calculatePixelsToTileUnitsMatrix(tile); } else { - extrudeScale = transform.pixelsToGLUnits; + extrudeScale = new Float32Array([ + transform.pixelsToGLUnits[0], + 0, + 0, + transform.pixelsToGLUnits[1]]); } return { diff --git a/src/render/program/line_program.js b/src/render/program/line_program.js index 804e2b1b672..685bbe524c4 100644 --- a/src/render/program/line_program.js +++ b/src/render/program/line_program.js @@ -5,6 +5,7 @@ import { Uniform1f, Uniform2f, Uniform3f, + UniformMatrix2f, UniformMatrix4f } from '../uniform_binding.js'; import pixelsToTileUnits from '../../source/pixels_to_tile_units.js'; @@ -20,7 +21,7 @@ import type {CrossfadeParameters} from '../../style/evaluation_parameters.js'; export type LineUniformsType = {| 'u_matrix': UniformMatrix4f, - 'u_ratio': Uniform1f, + 'u_pixels_to_tile_units': UniformMatrix2f, 'u_device_pixel_ratio': Uniform1f, 'u_units_to_pixels': Uniform2f, 'u_dash_image': Uniform1i, @@ -34,7 +35,7 @@ export type LineUniformsType = {| export type LinePatternUniformsType = {| 'u_matrix': UniformMatrix4f, 'u_texsize': Uniform2f, - 'u_ratio': Uniform1f, + 'u_pixels_to_tile_units': UniformMatrix2f, 'u_device_pixel_ratio': Uniform1f, 'u_units_to_pixels': Uniform2f, 'u_image': Uniform1i, @@ -46,7 +47,7 @@ export type LineDefinesType = 'RENDER_LINE_GRADIENT' | 'RENDER_LINE_DASH'; const lineUniforms = (context: Context, locations: UniformLocations): LineUniformsType => ({ 'u_matrix': new UniformMatrix4f(context, locations.u_matrix), - 'u_ratio': new Uniform1f(context, locations.u_ratio), + 'u_pixels_to_tile_units': new UniformMatrix2f(context, locations.u_pixels_to_tile_units), 'u_device_pixel_ratio': new Uniform1f(context, locations.u_device_pixel_ratio), 'u_units_to_pixels': new Uniform2f(context, locations.u_units_to_pixels), 'u_dash_image': new Uniform1i(context, locations.u_dash_image), @@ -60,7 +61,7 @@ const lineUniforms = (context: Context, locations: UniformLocations): LineUnifor const linePatternUniforms = (context: Context, locations: UniformLocations): LinePatternUniformsType => ({ 'u_matrix': new UniformMatrix4f(context, locations.u_matrix), 'u_texsize': new Uniform2f(context, locations.u_texsize), - 'u_ratio': new Uniform1f(context, locations.u_ratio), + 'u_pixels_to_tile_units': new UniformMatrix2f(context, locations.u_pixels_to_tile_units), 'u_device_pixel_ratio': new Uniform1f(context, locations.u_device_pixel_ratio), 'u_image': new Uniform1i(context, locations.u_image), 'u_units_to_pixels': new Uniform2f(context, locations.u_units_to_pixels), @@ -77,9 +78,11 @@ const lineUniformValues = ( imageHeight: number ): UniformValues => { const transform = painter.transform; + const pixelsToTileUnits = transform.calculatePixelsToTileUnitsMatrix(tile); + const values = { 'u_matrix': calculateMatrix(painter, tile, layer, matrix), - 'u_ratio': 1 / pixelsToTileUnits(tile, 1, transform.zoom), + 'u_pixels_to_tile_units': pixelsToTileUnits, 'u_device_pixel_ratio': browser.devicePixelRatio, 'u_units_to_pixels': [ 1 / transform.pixelsToGLUnits[0], @@ -114,7 +117,7 @@ const linePatternUniformValues = ( 'u_matrix': calculateMatrix(painter, tile, layer, matrix), 'u_texsize': tile.imageAtlasTexture.size, // camera zoom ratio - 'u_ratio': 1 / pixelsToTileUnits(tile, 1, transform.zoom), + 'u_pixels_to_tile_units': transform.calculatePixelsToTileUnitsMatrix(tile), 'u_device_pixel_ratio': browser.devicePixelRatio, 'u_image': 0, 'u_scale': [tileZoomRatio, crossfade.fromScale, crossfade.toScale], diff --git a/src/render/uniform_binding.js b/src/render/uniform_binding.js index 86ea382d792..8fb623ca890 100644 --- a/src/render/uniform_binding.js +++ b/src/render/uniform_binding.js @@ -151,6 +151,24 @@ class UniformMatrix3f extends Uniform { } } +const emptyMat2 = new Float32Array(4); +class UniformMatrix2f extends Uniform { + constructor(context: Context, location: WebGLUniformLocation) { + super(context, location); + this.current = emptyMat2; + } + + set(v: Float32Array): void { + for (let i = 0; i < 4; i++) { + if (v[i] !== this.current[i]) { + this.current = v; + this.gl.uniformMatrix2fv(this.location, false, v); + break; + } + } + } +} + export { Uniform, Uniform1i, @@ -159,6 +177,7 @@ export { Uniform3f, Uniform4f, UniformColor, + UniformMatrix2f, UniformMatrix3f, UniformMatrix4f }; diff --git a/src/shaders/circle.vertex.glsl b/src/shaders/circle.vertex.glsl index f9a1942276a..171b964a54e 100644 --- a/src/shaders/circle.vertex.glsl +++ b/src/shaders/circle.vertex.glsl @@ -5,7 +5,7 @@ #define NUM_SAMPLES_PER_RING 16 uniform mat4 u_matrix; -uniform vec2 u_extrude_scale; +uniform mat2 u_extrude_scale; uniform lowp float u_device_pixel_ratio; uniform highp float u_camera_to_center_distance; diff --git a/src/shaders/line.vertex.glsl b/src/shaders/line.vertex.glsl index 06287c1fd2a..14977f808f6 100644 --- a/src/shaders/line.vertex.glsl +++ b/src/shaders/line.vertex.glsl @@ -18,7 +18,7 @@ attribute float a_linesofar; #endif uniform mat4 u_matrix; -uniform mediump float u_ratio; +uniform mat2 u_pixels_to_tile_units; uniform vec2 u_units_to_pixels; uniform lowp float u_device_pixel_ratio; @@ -95,8 +95,8 @@ void main() { mediump float t = 1.0 - abs(u); mediump vec2 offset2 = offset * a_extrude * EXTRUDE_SCALE * normal.y * mat2(t, -u, u, t); - vec4 projected_extrude = u_matrix * vec4(dist / u_ratio, 0.0, 0.0); - gl_Position = u_matrix * vec4(pos + offset2 / u_ratio, 0.0, 1.0) + projected_extrude; + vec4 projected_extrude = u_matrix * vec4(dist * u_pixels_to_tile_units, 0.0, 0.0); + gl_Position = u_matrix * vec4(pos + offset2 * u_pixels_to_tile_units, 0.0, 1.0) + projected_extrude; #ifndef RENDER_TO_TEXTURE // calculate how much the perspective view squishes or stretches the extrude diff --git a/src/shaders/line_pattern.vertex.glsl b/src/shaders/line_pattern.vertex.glsl index 89994fb972b..dcf94d5afdf 100644 --- a/src/shaders/line_pattern.vertex.glsl +++ b/src/shaders/line_pattern.vertex.glsl @@ -12,7 +12,7 @@ attribute float a_linesofar; uniform mat4 u_matrix; uniform vec2 u_units_to_pixels; -uniform mediump float u_ratio; +uniform mat2 u_pixels_to_tile_units; uniform lowp float u_device_pixel_ratio; varying vec2 v_normal; @@ -82,8 +82,8 @@ void main() { mediump float t = 1.0 - abs(u); mediump vec2 offset2 = offset * a_extrude * scale * normal.y * mat2(t, -u, u, t); - vec4 projected_extrude = u_matrix * vec4(dist / u_ratio, 0.0, 0.0); - gl_Position = u_matrix * vec4(pos + offset2 / u_ratio, 0.0, 1.0) + projected_extrude; + vec4 projected_extrude = u_matrix * vec4(dist * u_pixels_to_tile_units, 0.0, 0.0); + gl_Position = u_matrix * vec4(pos + offset2 * u_pixels_to_tile_units, 0.0, 1.0) + projected_extrude; #ifndef RENDER_TO_TEXTURE // calculate how much the perspective view squishes or stretches the extrude diff --git a/src/source/canvas_source.js b/src/source/canvas_source.js index 49f11c3dae6..7f5dc9ecda2 100644 --- a/src/source/canvas_source.js +++ b/src/source/canvas_source.js @@ -3,7 +3,7 @@ import ImageSource from './image_source.js'; import window from '../util/window.js'; -import rasterBoundsAttributes from '../data/raster_bounds_attributes.js'; +import boundsAttributes from '../data/bounds_attributes.js'; import SegmentVector from '../data/segment.js'; import Texture from '../render/texture.js'; import {ErrorEvent} from '../util/evented.js'; @@ -211,8 +211,12 @@ class CanvasSource extends ImageSource { const context = this.map.painter.context; const gl = context.gl; + if (!this._boundsArray) { + this._makeBoundsArray(); + } + if (!this.boundsBuffer) { - this.boundsBuffer = context.createVertexBuffer(this._boundsArray, rasterBoundsAttributes.members); + this.boundsBuffer = context.createVertexBuffer(this._boundsArray, boundsAttributes.members); } if (!this.boundsSegments) { diff --git a/src/source/image_source.js b/src/source/image_source.js index d76737bcc0c..1ebf0dcd230 100644 --- a/src/source/image_source.js +++ b/src/source/image_source.js @@ -5,11 +5,12 @@ import {Event, ErrorEvent, Evented} from '../util/evented.js'; import {getImage, ResourceType} from '../util/ajax.js'; import EXTENT from '../data/extent.js'; import {RasterBoundsArray} from '../data/array_types.js'; -import rasterBoundsAttributes from '../data/raster_bounds_attributes.js'; +import boundsAttributes from '../data/bounds_attributes.js'; import SegmentVector from '../data/segment.js'; import Texture from '../render/texture.js'; import MercatorCoordinate from '../geo/mercator_coordinate.js'; import browser from '../util/browser.js'; +import tileTransform, {getTilePoint} from '../geo/projection/tile_transform.js'; import type {Source} from './source.js'; import type {CanvasSourceSpecification} from './canvas_source.js'; @@ -219,6 +220,7 @@ class ImageSource extends Evented implements Source { */ setCoordinates(coordinates: Coordinates) { this.coordinates = coordinates; + delete this._boundsArray; // Calculate which mercator tile is suitable for rendering the video in // and create a buffer with the corner coordinates. These coordinates @@ -236,9 +238,19 @@ class ImageSource extends Evented implements Source { // level) this.minzoom = this.maxzoom = this.tileID.z; + this.fire(new Event('data', {dataType:'source', sourceDataType: 'content'})); + return this; + } + + _makeBoundsArray() { + const tileTr = tileTransform(this.tileID, this.map.transform.projection); + // Transform the corner coordinates into the coordinate space of our // tile. - const tileCoords = cornerCoords.map((coord) => this.tileID.getTilePoint(coord)._round()); + const tileCoords = this.coordinates.map((coord) => { + const projectedCoord = tileTr.projection.project(coord[0], coord[1]); + return getTilePoint(tileTr, projectedCoord)._round(); + }); this._boundsArray = new RasterBoundsArray(); this._boundsArray.emplaceBack(tileCoords[0].x, tileCoords[0].y, 0, 0); @@ -251,7 +263,6 @@ class ImageSource extends Evented implements Source { delete this.boundsBuffer; } - this.fire(new Event('data', {dataType:'source', sourceDataType: 'content'})); return this; } @@ -263,8 +274,12 @@ class ImageSource extends Evented implements Source { const context = this.map.painter.context; const gl = context.gl; + if (!this._boundsArray) { + this._makeBoundsArray(); + } + if (!this.boundsBuffer) { - this.boundsBuffer = context.createVertexBuffer(this._boundsArray, rasterBoundsAttributes.members); + this.boundsBuffer = context.createVertexBuffer(this._boundsArray, boundsAttributes.members); } if (!this.boundsSegments) { diff --git a/src/source/pixels_to_tile_units.js b/src/source/pixels_to_tile_units.js index 33fd3bfa8eb..35d863e93e3 100644 --- a/src/source/pixels_to_tile_units.js +++ b/src/source/pixels_to_tile_units.js @@ -1,8 +1,12 @@ // @flow +import {mat2} from 'gl-matrix'; + import EXTENT from '../data/extent.js'; import type {OverscaledTileID} from './tile_id.js'; +import type Transform from '../geo/transform.js'; +import type {TileTransform} from '../geo/projection/tile_transform.js'; /** * Converts a pixel value at a the given zoom level to tile units. @@ -19,3 +23,9 @@ import type {OverscaledTileID} from './tile_id.js'; export default function(tile: {tileID: OverscaledTileID, tileSize: number}, pixelValue: number, z: number): number { return pixelValue * (EXTENT / (tile.tileSize * Math.pow(2, z - tile.tileID.overscaledZ))); } + +export function getPixelsToTileUnitsMatrix(tile: {tileID: OverscaledTileID, tileSize: number, tileTransform: TileTransform}, transform: Transform): Float32Array { + const {scale} = tile.tileTransform; + const s = scale * EXTENT / (tile.tileSize * Math.pow(2, transform.zoom - tile.tileID.overscaledZ + tile.tileID.canonical.z)); + return mat2.scale(new Float32Array(4), transform.inverseAdjustmentMatrix, [s, s]); +} diff --git a/src/source/source_cache.js b/src/source/source_cache.js index 730a5f98beb..a9c47bdf5a7 100644 --- a/src/source/source_cache.js +++ b/src/source/source_cache.js @@ -415,7 +415,7 @@ class SourceCache extends Evented { handleWrapJump(lng: number) { // On top of the regular z/x/y values, TileIDs have a `wrap` value that specify - // which cppy of the world the tile belongs to. For example, at `lng: 10` you + // which copy of the world the tile belongs to. For example, at `lng: 10` you // might render z/x/y/0 while at `lng: 370` you would render z/x/y/1. // // When lng values get wrapped (going from `lng: 370` to `long: 10`) you expect @@ -595,7 +595,7 @@ class SourceCache extends Evented { if (idealTileIDs.length === 0) { return retain; } const checked: {[_: number | string]: boolean } = {}; - const minZoom = idealTileIDs[idealTileIDs.length - 1].overscaledZ; + const minZoom = idealTileIDs.reduce((min, id) => Math.min(min, id.overscaledZ), Infinity); const maxZoom = idealTileIDs[0].overscaledZ; assert(minZoom <= maxZoom); const minCoveringZoom = Math.max(maxZoom - SourceCache.maxOverzooming, this._source.minzoom); @@ -737,7 +737,8 @@ class SourceCache extends Evented { const cached = Boolean(tile); if (!cached) { - tile = new Tile(tileID, this._source.tileSize * tileID.overscaleFactor(), this.transform.tileZoom); + const painter = this.map ? this.map.painter : null; + tile = new Tile(tileID, this._source.tileSize * tileID.overscaleFactor(), this.transform.tileZoom, painter, this._source.type === 'raster'); this._loadTile(tile, this._tileLoaded.bind(this, tile, tileID.key, tile.state)); } diff --git a/src/source/tile.js b/src/source/tile.js index e72b38db13d..00a13ebee35 100644 --- a/src/source/tile.js +++ b/src/source/tile.js @@ -6,7 +6,7 @@ import FeatureIndex from '../data/feature_index.js'; import GeoJSONFeature from '../util/vectortile_to_geojson.js'; import featureFilter from '../style-spec/feature_filter/index.js'; import SymbolBucket from '../data/bucket/symbol_bucket.js'; -import {CollisionBoxArray} from '../data/array_types.js'; +import {CollisionBoxArray, TileBoundsArray, PosArray, TriangleIndexArray, LineStripIndexArray} from '../data/array_types.js'; import Texture from '../render/texture.js'; import browser from '../util/browser.js'; import {Debug} from '../util/debug.js'; @@ -16,6 +16,15 @@ import SourceFeatureState from '../source/source_state.js'; import {lazyLoadRTLTextPlugin} from './rtl_text_plugin.js'; import {TileSpaceDebugBuffer} from '../data/debug_viz.js'; import Color from '../style-spec/util/color.js'; +import loadGeometry from '../data/load_geometry.js'; +import earcut from 'earcut'; +import getTileMesh from './tile_mesh.js'; +import tileTransform from '../geo/projection/tile_transform.js'; + +import boundsAttributes from '../data/bounds_attributes.js'; +import EXTENT from '../data/extent.js'; +import Point from '@mapbox/point-geometry'; +import SegmentVector from '../data/segment.js'; const CLOCK_SKEW_RETRY_TIMEOUT = 30000; @@ -36,6 +45,10 @@ import type {LayerFeatureStates} from './source_state.js'; import type {Cancelable} from '../types/cancelable.js'; import type {FilterSpecification} from '../style-spec/types.js'; import type {TilespaceQueryGeometry} from '../style/query_geometry.js'; +import type VertexBuffer from '../gl/vertex_buffer.js'; +import type IndexBuffer from '../gl/index_buffer.js'; +import type {Projection} from '../geo/projection/index.js'; +import type {TileTransform} from '../geo/projection/tile_transform.js'; import type Painter from '../render/painter.js'; export type TileState = @@ -47,6 +60,20 @@ export type TileState = | 'expired'; /* Tile data was previously loaded, but has expired per its * HTTP headers and is in the process of refreshing. */ +// a tile bounds outline used for getting reprojected tile geometry in non-mercator projections +const BOUNDS_FEATURE = (() => { + const c0 = new Point(0, 0); + const c1 = new Point(EXTENT + 1, 0); + const c2 = new Point(EXTENT + 1, EXTENT + 1); + const c3 = new Point(0, EXTENT + 1); + const coords = [[c0, c1, c2, c3, c0]]; + return { + type: 2, + extent: EXTENT, + loadGeometry() { return coords.slice(); } + }; +})(); + /** * A tile object is the combination of a Coordinate, which defines * its place, as well as a unique ID and data tracking for its content @@ -80,6 +107,8 @@ class Tile { actor: ?Actor; vtLayers: {[_: string]: VectorTileLayer}; isSymbolTile: ?boolean; + isRaster: ?boolean; + tileTransform: TileTransform; neighboringTiles: ?Object; dem: ?DEMData; @@ -102,12 +131,20 @@ class Tile { queryGeometryDebugViz: TileSpaceDebugBuffer; queryBoundsDebugViz: TileSpaceDebugBuffer; + + _tileDebugBuffer: ?VertexBuffer; + _tileBoundsBuffer: ?VertexBuffer; + _tileDebugIndexBuffer: IndexBuffer; + _tileBoundsIndexBuffer: IndexBuffer; + _tileDebugSegments: SegmentVector; + _tileBoundsSegments: SegmentVector; + /** * @param {OverscaledTileID} tileID * @param size * @private */ - constructor(tileID: OverscaledTileID, size: number, tileZoom: number) { + constructor(tileID: OverscaledTileID, size: number, tileZoom: number, painter: any, isRaster?: boolean) { this.tileID = tileID; this.uid = uniqueId(); this.uses = 0; @@ -119,6 +156,7 @@ class Tile { this.hasSymbolBuckets = false; this.hasRTLText = false; this.dependencies = {}; + this.isRaster = isRaster; // Counts the number of times a response was already expired when // received. We're using this to add a delay when making a new request @@ -127,6 +165,14 @@ class Tile { this.expiredRequestCount = 0; this.state = 'loading'; + + if (painter) { + const {projection} = painter.transform; + this.tileTransform = tileTransform(tileID.canonical, projection); + if (painter.context) { + this._makeTileBoundsBuffers(painter.context, projection); + } + } } registerFadeDuration(duration: number) { @@ -255,6 +301,20 @@ class Tile { this.lineAtlasTexture.destroy(); } + if (this._tileBoundsBuffer) { + this._tileBoundsBuffer.destroy(); + this._tileBoundsIndexBuffer.destroy(); + this._tileBoundsSegments.destroy(); + this._tileBoundsBuffer = null; + } + + if (this._tileDebugBuffer) { + this._tileDebugBuffer.destroy(); + this._tileDebugIndexBuffer.destroy(); + this._tileDebugSegments.destroy(); + this._tileDebugBuffer = null; + } + Debug.run(() => { if (this.queryGeometryDebugViz) { this.queryGeometryDebugViz.unload(); @@ -335,7 +395,8 @@ class Tile { tileResult, pixelPosMatrix, transform, - params + params, + tileTransform: this.tileTransform }, layers, serializedLayers, sourceFeatureState); } @@ -514,6 +575,60 @@ class Tile { } }); } + + _makeDebugTileBoundsBuffers(context: Context, projection: Projection) { + if (!projection || projection.name === 'mercator' || this._tileDebugBuffer) return; + + // reproject tile outline with adaptive resampling + const boundsLine = loadGeometry(BOUNDS_FEATURE, this.tileID.canonical, this.tileTransform)[0]; + + // generate vertices for debugging tile boundaries + const debugVertices = new PosArray(); + const debugIndices = new LineStripIndexArray(); + + for (let i = 0; i < boundsLine.length; i++) { + const {x, y} = boundsLine[i]; + debugVertices.emplaceBack(x, y); + debugIndices.emplaceBack(i); + } + debugIndices.emplaceBack(0); + + this._tileDebugIndexBuffer = context.createIndexBuffer(debugIndices); + this._tileDebugBuffer = context.createVertexBuffer(debugVertices, boundsAttributes.members); + this._tileDebugSegments = SegmentVector.simpleSegment(0, 0, debugVertices.length, debugIndices.length); + } + + _makeTileBoundsBuffers(context: Context, projection: Projection) { + if (this._tileBoundsBuffer || !projection || projection.name === 'mercator') return; + + // reproject tile outline with adaptive resampling + const boundsLine = loadGeometry(BOUNDS_FEATURE, this.tileID.canonical, this.tileTransform)[0]; + + let boundsVertices, boundsIndices; + if (this.isRaster) { + // for raster tiles, generate an adaptive MARTINI mesh + const mesh = getTileMesh(this.tileID.canonical, projection); + boundsVertices = mesh.vertices; + boundsIndices = mesh.indices; + + } else { + // for vector tiles, generate an Earcut triangulation of the outline + boundsVertices = new TileBoundsArray(); + boundsIndices = new TriangleIndexArray(); + + for (const {x, y} of boundsLine) { + boundsVertices.emplaceBack(x, y, 0, 0); + } + const indices = earcut(boundsVertices.int16, undefined, 4); + for (let i = 0; i < indices.length; i += 3) { + boundsIndices.emplaceBack(indices[i], indices[i + 1], indices[i + 2]); + } + } + + this._tileBoundsBuffer = context.createVertexBuffer(boundsVertices, boundsAttributes.members); + this._tileBoundsIndexBuffer = context.createIndexBuffer(boundsIndices); + this._tileBoundsSegments = SegmentVector.simpleSegment(0, 0, boundsVertices.length, boundsIndices.length); + } } export default Tile; diff --git a/src/source/tile_id.js b/src/source/tile_id.js index bae57ca5cf0..69e7b690cb0 100644 --- a/src/source/tile_id.js +++ b/src/source/tile_id.js @@ -1,13 +1,9 @@ // @flow import {getTileBBox} from '@mapbox/whoots-js'; -import EXTENT from '../data/extent.js'; -import Point from '@mapbox/point-geometry'; -import MercatorCoordinate, {altitudeFromMercatorZ} from '../geo/mercator_coordinate.js'; import {MAX_SAFE_INTEGER} from '../util/util.js'; import assert from 'assert'; import {register} from '../util/web_worker_transfer.js'; -import {vec3} from 'gl-matrix'; export class CanonicalTileID { z: number; @@ -43,20 +39,6 @@ export class CanonicalTileID { .replace('{bbox-epsg-3857}', bbox); } - getTilePoint(coord: MercatorCoordinate) { - const tilesAtZoom = Math.pow(2, this.z); - return new Point( - (coord.x * tilesAtZoom - this.x) * EXTENT, - (coord.y * tilesAtZoom - this.y) * EXTENT); - } - - getTileVec3(coord: MercatorCoordinate): vec3 { - const tilesAtZoom = Math.pow(2, this.z); - const x = (coord.x * tilesAtZoom - this.x) * EXTENT; - const y = (coord.y * tilesAtZoom - this.y) * EXTENT; - return vec3.fromValues(x, y, altitudeFromMercatorZ(coord.z, coord.y)); - } - toString() { return `${this.z}/${this.x}/${this.y}`; } @@ -181,14 +163,6 @@ export class OverscaledTileID { toString() { return `${this.overscaledZ}/${this.canonical.x}/${this.canonical.y}`; } - - getTilePoint(coord: MercatorCoordinate) { - return this.canonical.getTilePoint(new MercatorCoordinate(coord.x - this.wrap, coord.y)); - } - - getTileVec3(coord: MercatorCoordinate) { - return this.canonical.getTileVec3(new MercatorCoordinate(coord.x - this.wrap, coord.y, coord.z)); - } } function calculateKey(wrap: number, overscaledZ: number, z: number, x: number, y: number): number { diff --git a/src/source/tile_mesh.js b/src/source/tile_mesh.js new file mode 100644 index 00000000000..eefbf5cac9f --- /dev/null +++ b/src/source/tile_mesh.js @@ -0,0 +1,162 @@ +// @flow +// logic for generating non-Mercator adaptive raster tile reprojection meshes with MARTINI + +import tileTransform from '../geo/projection/tile_transform.js'; +import EXTENT from '../data/extent.js'; +import {lngFromMercatorX, latFromMercatorY} from '../geo/mercator_coordinate.js'; +import {TileBoundsArray, TriangleIndexArray} from '../data/array_types.js'; + +import type {CanonicalTileID} from './tile_id.js'; +import type {Projection} from '../geo/projection/index.js'; + +const meshSize = 32; +const gridSize = meshSize + 1; + +const numTriangles = meshSize * meshSize * 2 - 2; +const numParentTriangles = numTriangles - meshSize * meshSize; + +const coords = new Uint16Array(numTriangles * 4); + +// precalculate RTIN triangle coordinates +for (let i = 0; i < numTriangles; i++) { + let id = i + 2; + let ax = 0, ay = 0, bx = 0, by = 0, cx = 0, cy = 0; + + if (id & 1) { + bx = by = cx = meshSize; // bottom-left triangle + + } else { + ax = ay = cy = meshSize; // top-right triangle + } + + while ((id >>= 1) > 1) { + const mx = (ax + bx) >> 1; + const my = (ay + by) >> 1; + + if (id & 1) { // left half + bx = ax; by = ay; + ax = cx; ay = cy; + + } else { // right half + ax = bx; ay = by; + bx = cx; by = cy; + } + + cx = mx; cy = my; + } + + const k = i * 4; + coords[k + 0] = ax; + coords[k + 1] = ay; + coords[k + 2] = bx; + coords[k + 3] = by; +} + +// temporary arrays we'll reuse for MARTINI mesh code +const reprojectedCoords = new Uint16Array(gridSize * gridSize * 2); +const used = new Uint8Array(gridSize * gridSize); +const indexMap = new Uint16Array(gridSize * gridSize); + +type TileMesh = { + vertices: TileBoundsArray, + indices: TriangleIndexArray +}; + +export default function getTileMesh(canonical: CanonicalTileID, projection: Projection): TileMesh { + const cs = tileTransform(canonical, projection); + const z2 = Math.pow(2, canonical.z); + + for (let y = 0; y < gridSize; y++) { + for (let x = 0; x < gridSize; x++) { + const lng = lngFromMercatorX((canonical.x + x / meshSize) / z2); + const lat = latFromMercatorY((canonical.y + y / meshSize) / z2); + const p = projection.project(lng, lat); + const k = y * gridSize + x; + reprojectedCoords[2 * k + 0] = Math.round((p.x * cs.scale - cs.x) * EXTENT); + reprojectedCoords[2 * k + 1] = Math.round((p.y * cs.scale - cs.y) * EXTENT); + } + } + + used.fill(0); + indexMap.fill(0); + + // iterate over all possible triangles, starting from the smallest level + for (let i = numTriangles - 1; i >= 0; i--) { + const k = i * 4; + const ax = coords[k + 0]; + const ay = coords[k + 1]; + const bx = coords[k + 2]; + const by = coords[k + 3]; + const mx = (ax + bx) >> 1; + const my = (ay + by) >> 1; + const cx = mx + my - ay; + const cy = my + ax - mx; + + const aIndex = ay * gridSize + ax; + const bIndex = by * gridSize + bx; + const mIndex = my * gridSize + mx; + + // calculate error in the middle of the long edge of the triangle + const rax = reprojectedCoords[2 * aIndex + 0]; + const ray = reprojectedCoords[2 * aIndex + 1]; + const rbx = reprojectedCoords[2 * bIndex + 0]; + const rby = reprojectedCoords[2 * bIndex + 1]; + const rmx = reprojectedCoords[2 * mIndex + 0]; + const rmy = reprojectedCoords[2 * mIndex + 1]; + + // raster tiles are typically 512px, and we use 1px as an error threshold; 8192 / 512 = 16 + const isUsed = Math.hypot((rax + rbx) / 2 - rmx, (ray + rby) / 2 - rmy) >= 16; + + used[mIndex] = used[mIndex] || (isUsed ? 1 : 0); + + if (i < numParentTriangles) { // bigger triangles; accumulate error with children + const leftChildIndex = ((ay + cy) >> 1) * gridSize + ((ax + cx) >> 1); + const rightChildIndex = ((by + cy) >> 1) * gridSize + ((bx + cx) >> 1); + used[mIndex] = used[mIndex] || used[leftChildIndex] || used[rightChildIndex]; + } + } + + const vertices = new TileBoundsArray(); + const indices = new TriangleIndexArray(); + + let numVertices = 0; + + function addVertex(x, y) { + const k = y * gridSize + x; + + if (indexMap[k] === 0) { + vertices.emplaceBack( + reprojectedCoords[2 * k + 0], + reprojectedCoords[2 * k + 1], + x * EXTENT / meshSize, + y * EXTENT / meshSize); + + // save new vertex index so that we can reuse it + indexMap[k] = ++numVertices; + } + + return indexMap[k] - 1; + } + + function addTriangles(ax, ay, bx, by, cx, cy) { + const mx = (ax + bx) >> 1; + const my = (ay + by) >> 1; + + if (Math.abs(ax - cx) + Math.abs(ay - cy) > 1 && used[my * gridSize + mx]) { + // triangle doesn't approximate the surface well enough; drill down further + addTriangles(cx, cy, ax, ay, mx, my); + addTriangles(bx, by, cx, cy, mx, my); + + } else { + const ai = addVertex(ax, ay); + const bi = addVertex(bx, by); + const ci = addVertex(cx, cy); + indices.emplaceBack(ai, bi, ci); + } + } + + addTriangles(0, 0, meshSize, meshSize, meshSize, 0); + addTriangles(meshSize, meshSize, 0, 0, 0, meshSize); + + return {vertices, indices}; +} diff --git a/src/source/video_source.js b/src/source/video_source.js index 3bf4e04807e..0ed5cc59991 100644 --- a/src/source/video_source.js +++ b/src/source/video_source.js @@ -3,7 +3,7 @@ import {getVideo, ResourceType} from '../util/ajax.js'; import ImageSource from './image_source.js'; -import rasterBoundsAttributes from '../data/raster_bounds_attributes.js'; +import boundsAttributes from '../data/bounds_attributes.js'; import SegmentVector from '../data/segment.js'; import Texture from '../render/texture.js'; import {ErrorEvent} from '../util/evented.js'; @@ -208,8 +208,12 @@ class VideoSource extends ImageSource { const context = this.map.painter.context; const gl = context.gl; + if (!this._boundsArray) { + this._makeBoundsArray(); + } + if (!this.boundsBuffer) { - this.boundsBuffer = context.createVertexBuffer(this._boundsArray, rasterBoundsAttributes.members); + this.boundsBuffer = context.createVertexBuffer(this._boundsArray, boundsAttributes.members); } if (!this.boundsSegments) { diff --git a/src/source/worker.js b/src/source/worker.js index f78f6bd70c4..715fd101117 100644 --- a/src/source/worker.js +++ b/src/source/worker.js @@ -12,6 +12,7 @@ import {enforceCacheSizeLimit} from '../util/tile_request_cache.js'; import {extend} from '../util/util.js'; import {PerformanceUtils} from '../util/performance.js'; import {Event} from '../util/evented.js'; +import {getProjection} from '../geo/projection/index.js'; import type { WorkerSource, @@ -24,8 +25,9 @@ import type { import type {WorkerGlobalScopeInterface} from '../util/web_worker.js'; import type {Callback} from '../types/callback.js'; -import type {LayerSpecification} from '../style-spec/types.js'; +import type {LayerSpecification, ProjectionSpecification} from '../style-spec/types.js'; import type {PluginState} from './rtl_text_plugin.js'; +import type {Projection} from '../geo/projection/index.js'; /** * @private @@ -38,6 +40,8 @@ export default class Worker { workerSourceTypes: {[_: string]: Class }; workerSources: {[_: string]: {[_: string]: {[_: string]: WorkerSource } } }; demWorkerSources: {[_: string]: {[_: string]: RasterDEMTileWorkerSource } }; + projections: {[_: string]: Projection }; + defaultProjection: Projection; isSpriteLoaded: {[_: string]: boolean }; referrer: ?string; terrain: ?boolean; @@ -51,6 +55,9 @@ export default class Worker { this.availableImages = {}; this.isSpriteLoaded = {}; + this.projections = {}; + this.defaultProjection = getProjection({name: 'mercator'}); + this.workerSourceTypes = { vector: VectorTileWorkerSource, geojson: GeoJSONWorkerSource @@ -124,6 +131,10 @@ export default class Worker { callback(); } + setProjection(mapId: string, config: ProjectionSpecification) { + this.projections[mapId] = getProjection(config); + } + setLayers(mapId: string, layers: Array, callback: WorkerTileCallback) { this.getLayerIndex(mapId).replace(layers); callback(); @@ -137,6 +148,7 @@ export default class Worker { loadTile(mapId: string, params: WorkerTileParameters & {type: string}, callback: WorkerTileCallback) { assert(params.type); const p = this.enableTerrain ? extend({enableTerrain: this.terrain}, params) : params; + p.projection = this.projections[mapId] || this.defaultProjection; this.getWorkerSource(mapId, params.type, params.source).loadTile(p, callback); } @@ -148,6 +160,7 @@ export default class Worker { reloadTile(mapId: string, params: WorkerTileParameters & {type: string}, callback: WorkerTileCallback) { assert(params.type); const p = this.enableTerrain ? extend({enableTerrain: this.terrain}, params) : params; + p.projection = this.projections[mapId] || this.defaultProjection; this.getWorkerSource(mapId, params.type, params.source).reloadTile(p, callback); } diff --git a/src/source/worker_source.js b/src/source/worker_source.js index 781a181b627..4f0791be448 100644 --- a/src/source/worker_source.js +++ b/src/source/worker_source.js @@ -13,6 +13,7 @@ import type DEMData from '../data/dem_data.js'; import type {StyleGlyph} from '../style/style_glyph.js'; import type {StyleImage} from '../style/style_image.js'; import type {PromoteIdSpecification} from '../style-spec/types.js'; +import type {Projection} from '../geo/projection/index.js'; import window from '../util/window.js'; const {ImageBitmap} = window; @@ -38,7 +39,8 @@ export type WorkerTileParameters = RequestedTileParameters & { showCollisionBoxes: boolean, collectResourceTiming?: boolean, returnDependencies?: boolean, - enableTerrain?: boolean + enableTerrain?: boolean, + projection?: Projection }; export type WorkerDEMTileParameters = TileParameters & { diff --git a/src/source/worker_tile.js b/src/source/worker_tile.js index 948fa6b68bf..b1ca42a983c 100644 --- a/src/source/worker_tile.js +++ b/src/source/worker_tile.js @@ -15,8 +15,9 @@ import LineAtlas from '../render/line_atlas.js'; import ImageAtlas from '../render/image_atlas.js'; import GlyphAtlas from '../render/glyph_atlas.js'; import EvaluationParameters from '../style/evaluation_parameters.js'; -import {OverscaledTileID} from './tile_id.js'; +import {CanonicalTileID, OverscaledTileID} from './tile_id.js'; import {PerformanceUtils} from '../util/performance.js'; +import tileTransform from '../geo/projection/tile_transform.js'; import type {Bucket} from '../data/bucket.js'; import type Actor from '../util/actor.js'; @@ -29,12 +30,14 @@ import type { WorkerTileCallback, } from '../source/worker_source.js'; import type {PromoteIdSpecification} from '../style-spec/types.js'; +import type {TileTransform} from '../geo/projection/tile_transform.js'; class WorkerTile { tileID: OverscaledTileID; uid: number; zoom: number; tileZoom: number; + canonical: CanonicalTileID; pixelRatio: number; tileSize: number; source: string; @@ -45,6 +48,7 @@ class WorkerTile { returnDependencies: boolean; enableTerrain: boolean; isSymbolTile: ?boolean; + tileTransform: TileTransform; status: 'parsing' | 'done'; data: VectorTile; @@ -59,6 +63,7 @@ class WorkerTile { this.tileZoom = params.tileZoom; this.uid = params.uid; this.zoom = params.zoom; + this.canonical = params.tileID.canonical; this.pixelRatio = params.pixelRatio; this.tileSize = params.tileSize; this.source = params.source; @@ -69,6 +74,12 @@ class WorkerTile { this.promoteId = params.promoteId; this.enableTerrain = !!params.enableTerrain; this.isSymbolTile = params.isSymbolTile; + if (params.projection) { + this.tileTransform = tileTransform(params.tileID.canonical, params.projection); + } else { + // silence flow + assert(params.projection); + } } parse(data: VectorTile, layerIndex: StyleLayerIndex, availableImages: Array, actor: Actor, callback: WorkerTileCallback) { @@ -147,6 +158,7 @@ class WorkerTile { index: featureIndex.bucketLayerIDs.length, layers: family, zoom: this.zoom, + canonical: this.canonical, pixelRatio: this.pixelRatio, overscaling: this.overscaling, collisionBoxArray: this.collisionBoxArray, @@ -156,7 +168,7 @@ class WorkerTile { availableImages }); - bucket.populate(features, options, this.tileID.canonical); + bucket.populate(features, options, this.tileID.canonical, this.tileTransform); featureIndex.bucketLayerIDs.push(family.map((l) => l.id)); } } diff --git a/src/style-spec/diff.js b/src/style-spec/diff.js index 4baa19f7997..44dc24f449a 100644 --- a/src/style-spec/diff.js +++ b/src/style-spec/diff.js @@ -106,8 +106,12 @@ const operations = { /* * { command: 'setFog', args: [fogProperties] } */ - setFog: 'setFog' + setFog: 'setFog', + /* + * { command: 'setProjection', args: [projectionProperties] } + */ + setProjection: 'setProjection' }; function addSource(sourceId, after, commands) { @@ -363,6 +367,9 @@ function diffStyles(before, after) { if (!isEqual(before.fog, after.fog)) { commands.push({command: operations.setFog, args: [after.fog]}); } + if (!isEqual(before.projection, after.projection)) { + commands.push({command: operations.setProjection, args: [after.projection]}); + } // Handle changes to `sources` // If a source is to be removed, we also--before the removeSource diff --git a/src/style-spec/reference/v8.json b/src/style-spec/reference/v8.json index 2b036408c14..e25044a9bd5 100644 --- a/src/style-spec/reference/v8.json +++ b/src/style-spec/reference/v8.json @@ -94,6 +94,15 @@ "delay": 0 } }, + "projection": { + "type": "projection", + "doc": "The projection the map should be rendered in. Suported projections are Albers, Equal Earth, Equirectangular (WGS84), Globe, Lambert conformal conic, Mercator, Natural Earth, and Winkel Tripel. Terrain and fog are not supported for projections other than mercator.", + "example": { + "name": "albers", + "center": [-154, 50], + "parallels": [55, 65] + } + }, "layers": { "required": true, "type": "array", @@ -3958,6 +3967,92 @@ } } }, + "projection": { + "name": { + "type": "enum", + "values": { + "albers": { + "doc": "An Albers equal-area projection centered on the continental United States. You can configure the projection for a different region by setting `center` and `parallels` properties. You may want to set max bounds to constrain the map to the relevant region." + }, + "equalEarth": { + "doc": "An Equal Earth projection." + }, + "equirectangular": { + "doc": "An Equirectangular projection. This projection is very similar to the Plate Carrée projection." + }, + "lambertConformalConic": { + "doc": "A Lambert conformal conic projection. You can configure the projection for a region by setting `center` and `parallels` properties. You may want to set max bounds to constrain the map to the relevant region." + }, + "mercator": { + "doc": "The Mercator projection is the default projection." + }, + "naturalEarth": { + "doc": "A Natural Earth projection." + }, + "winkelTripel": { + "doc": "A Winkel Tripel projection." + } + }, + "default": "mercator", + "doc": "The name of the projection to be used for rendering the map.", + "required": true, + "sdk-support": { + "basic functionality": { + "js": "2.6.0" + } + } + }, + "center": { + "type": "array", + "length": 2, + "value": "number", + "property-type": "data-constant", + "transition": false, + "doc": "The reference longitude and latitude of the projection. `center` takes the form of [lng, lat]. This property is only configurable for conic projections (Albers and Lambert Conformal Conic). All other projections are centered on [0, 0].", + "example": [ + -96, + 37.5 + ], + "requires": [ + { + "name": [ + "albers", + "lambertConformalConic" + ] + } + ], + "sdk-support": { + "basic functionality": { + "js": "2.6.0" + } + } + }, + "parallels": { + "type": "array", + "length": 2, + "value": "number", + "property-type": "data-constant", + "transition": false, + "doc": "The standard parallels of the projection, denoting the desired latitude range with minimal distortion. `parallels` takes the form of [lat0, lat1]. This property is only configurable for conic projections (Albers and Lambert Conformal Conic).", + "example": [ + 29.5, + 45.5 + ], + "requires": [ + { + "name": [ + "albers", + "lambertConformalConic" + ] + } + ], + "sdk-support": { + "basic functionality": { + "js": "2.6.0" + } + } + } + }, "terrain" : { "source": { "type": "string", diff --git a/src/style-spec/types.js b/src/style-spec/types.js index 55118fdc198..892c0abcad8 100644 --- a/src/style-spec/types.js +++ b/src/style-spec/types.js @@ -72,6 +72,7 @@ export type StyleSpecification = {| "sprite"?: string, "glyphs"?: string, "transition"?: TransitionSpecification, + "projection"?: ProjectionSpecification, "layers": Array |} @@ -93,6 +94,12 @@ export type FogSpecification = {| "horizon-blend"?: PropertyValueSpecification |} +export type ProjectionSpecification = {| + "name": "albers" | "equalEarth" | "equirectangular" | "lambertConformalConic" | "mercator" | "naturalEarth" | "winkelTripel", + "center"?: [number, number], + "parallels"?: [number, number] +|} + export type VectorSourceSpecification = { "type": "vector", "url"?: string, diff --git a/src/style-spec/validate/validate.js b/src/style-spec/validate/validate.js index c810a7a6476..6aad0833572 100644 --- a/src/style-spec/validate/validate.js +++ b/src/style-spec/validate/validate.js @@ -22,6 +22,7 @@ import validateFog from './validate_fog.js'; import validateString from './validate_string.js'; import validateFormatted from './validate_formatted.js'; import validateImage from './validate_image.js'; +import validateProjection from './validate_projection.js'; const VALIDATORS = { '*'() { @@ -43,7 +44,8 @@ const VALIDATORS = { 'fog': validateFog, 'string': validateString, 'formatted': validateFormatted, - 'resolvedImage': validateImage + 'resolvedImage': validateImage, + 'projection': validateProjection }; // Main recursive validation function. Tracks: diff --git a/src/style-spec/validate/validate_projection.js b/src/style-spec/validate/validate_projection.js new file mode 100644 index 00000000000..dba6d53b329 --- /dev/null +++ b/src/style-spec/validate/validate_projection.js @@ -0,0 +1,30 @@ +import ValidationError from '../error/validation_error.js'; +import getType from '../util/get_type.js'; +import validate from './validate.js'; + +export default function validateProjection(options) { + const projection = options.value; + const styleSpec = options.styleSpec; + const projectionSpec = styleSpec.projection; + const style = options.style; + + let errors = []; + + const rootType = getType(projection); + + if (rootType === 'object') { + for (const key in projection) { + errors = errors.concat(validate({ + key, + value: projection[key], + valueSpec: projectionSpec[key], + style, + styleSpec + })); + } + } else if (rootType !== 'string') { + errors = errors.concat([new ValidationError('projection', projection, `object or string expected, ${rootType} found`)]); + } + + return errors; +} diff --git a/src/style/fog.js b/src/style/fog.js index 5cafafa1dc9..1fdd1747e63 100644 --- a/src/style/fog.js +++ b/src/style/fog.js @@ -34,11 +34,16 @@ class Fog extends Evented { _transitioning: Transitioning; properties: PossiblyEvaluated; + // Alternate projections do not yet support fog. + // Disable fog rendering until they do. + _disabledForProjections: boolean; + constructor(fogOptions?: FogSpecification) { super(); this._transitionable = new Transitionable(fogProperties); this.set(fogOptions); this._transitioning = this._transitionable.untransitioned(); + this._disabledForProjections = false; } get state(): FogState { @@ -69,6 +74,7 @@ class Fog extends Evented { } getOpacity(pitch: number): number { + if (this._disabledForProjections) return 0; const fogColor = (this.properties && this.properties.get('color')) || 1.0; const pitchFactor = smoothstep(FOG_PITCH_START, FOG_PITCH_END, pitch); return pitchFactor * fogColor.a; diff --git a/src/style/query_geometry.js b/src/style/query_geometry.js index 7cd1547a7c1..646dadf73da 100644 --- a/src/style/query_geometry.js +++ b/src/style/query_geometry.js @@ -12,6 +12,7 @@ import {vec3} from 'gl-matrix'; import {Ray} from '../util/primitives.js'; import MercatorCoordinate from '../geo/mercator_coordinate.js'; import type {OverscaledTileID} from '../source/tile_id.js'; +import {getTilePoint, getTileVec3} from '../geo/projection/tile_transform.js'; /** * A data-class that represents a screenspace query from `Map#queryRenderedFeatures`. @@ -179,15 +180,16 @@ export class QueryGeometry { // outside the query volume even if it looks like it overlaps visually, a 1px bias value overcomes that. const bias = 1; const padding = tile.queryPadding + bias; + const wrap = tile.tileID.wrap; const geometryForTileCheck = use3D ? - this._bufferedCameraMercator(padding, transform).map((p) => tile.tileID.getTilePoint(p)) : - this._bufferedScreenMercator(padding, transform).map((p) => tile.tileID.getTilePoint(p)); - const tilespaceVec3s = this.screenGeometryMercator.map((p) => tile.tileID.getTileVec3(p)); + this._bufferedCameraMercator(padding, transform).map((p) => getTilePoint(tile.tileTransform, p, wrap)) : + this._bufferedScreenMercator(padding, transform).map((p) => getTilePoint(tile.tileTransform, p, wrap)); + const tilespaceVec3s = this.screenGeometryMercator.map((p) => getTileVec3(tile.tileTransform, p, wrap)); const tilespaceGeometry = tilespaceVec3s.map((v) => new Point(v[0], v[1])); const cameraMercator = transform.getFreeCameraOptions().position || new MercatorCoordinate(0, 0, 0); - const tilespaceCameraPosition = tile.tileID.getTileVec3(cameraMercator); + const tilespaceCameraPosition = getTileVec3(tile.tileTransform, cameraMercator, wrap); const tilespaceRays = tilespaceVec3s.map((tileVec) => { const dir = vec3.sub(tileVec, tileVec, tilespaceCameraPosition); vec3.normalize(dir, dir); diff --git a/src/style/style.js b/src/style/style.js index ca5a4cb4e10..f5a23c3e604 100644 --- a/src/style/style.js +++ b/src/style/style.js @@ -66,7 +66,8 @@ import type { LightSpecification, SourceSpecification, TerrainSpecification, - FogSpecification + FogSpecification, + ProjectionSpecification } from '../style-spec/types.js'; import type {CustomLayerInterface} from './style_layer/custom_style_layer.js'; import type {Validator} from './validate_style.js'; @@ -86,7 +87,8 @@ const supportedDiffOperations = pick(diffOperations, [ 'setTransition', 'setGeoJSONSourceData', 'setTerrain', - 'setFog' + 'setFog', + 'setProjection' // 'setGlyphs', // 'setSprite', ]); @@ -95,7 +97,8 @@ const ignoredDiffOperations = pick(diffOperations, [ 'setCenter', 'setZoom', 'setBearing', - 'setPitch' + 'setPitch', + 'setProjection' ]); const empty = emptyStyle(); @@ -322,6 +325,11 @@ class Style extends Evented { this._serializedLayers[layer.id] = layer.serialize(); this._updateLayerCount(layer, true); } + + if (this.stylesheet.projection && this.map.transform._unmodifiedProjection) { + this.setProjection(this.stylesheet.projection); + } + this.dispatcher.broadcast('setLayers', this._serializeLayers(this._order)); this.light = new Light(this.stylesheet.light); @@ -337,6 +345,21 @@ class Style extends Evented { this.fire(new Event('style.load')); } + setProjection(projection?: ?ProjectionSpecification) { + this.map.painter.clearBackgroundTiles(); + for (const id in this._sourceCaches) { + this._sourceCaches[id].clearTiles(); + } + + this.map.transform.setProjection(projection); + this.dispatcher.broadcast('setProjection', this.map.transform.projectionOptions); + + const fog = this.fog; + if (fog) fog._disabledForProjections = Boolean(projection && projection.name !== 'mercator'); + + this.map._update(true); + } + _loadSprite(url: string) { this._spriteRequest = loadSprite(url, this.map._requestManager, (err, images) => { this._spriteRequest = null; @@ -1177,6 +1200,7 @@ class Style extends Evented { sprite: this.stylesheet.sprite, glyphs: this.stylesheet.glyphs, transition: this.stylesheet.transition, + projection: this.stylesheet.projection, sources, layers: this._serializeLayers(this._order) }, (value) => { return value !== undefined; }); diff --git a/src/symbol/placement.js b/src/symbol/placement.js index b6cdc645ee8..b1a4d70b7b8 100644 --- a/src/symbol/placement.js +++ b/src/symbol/placement.js @@ -9,7 +9,6 @@ import {getAnchorJustification, evaluateVariableOffset} from './symbol_layout.js import {getAnchorAlignment, WritingMode} from './shaping.js'; import {mat4} from 'gl-matrix'; import assert from 'assert'; -import pixelsToTileUnits from '../source/pixels_to_tile_units.js'; import Point from '@mapbox/point-geometry'; import type Transform from '../geo/transform.js'; import type StyleLayer from '../style/style_layer.js'; @@ -250,7 +249,7 @@ export class Placement { const dynamicFilter = styleLayer.dynamicFilter(); const dynamicFilterNeedsFeature = styleLayer.dynamicFilterNeedsFeature(); - const pixelsToTiles = pixelsToTileUnits(tile, 1, this.transform.zoom); + const pixelsToTiles = this.transform.calculatePixelsToTileUnitsMatrix(tile); const textLabelPlaneMatrix = projection.getLabelPlaneMatrix(posMatrix, pitchWithMap, diff --git a/src/symbol/projection.js b/src/symbol/projection.js index 7ae83849571..a61dde4422c 100644 --- a/src/symbol/projection.js +++ b/src/symbol/projection.js @@ -2,7 +2,7 @@ import Point from '@mapbox/point-geometry'; -import {mat4, vec3, vec4} from 'gl-matrix'; +import {mat2, mat4, vec3, vec4} from 'gl-matrix'; import * as symbolSize from './symbol_size.js'; import {addDynamicAttributes} from '../data/bucket/symbol_bucket.js'; @@ -78,10 +78,14 @@ function getLabelPlaneMatrix(posMatrix: mat4, pitchWithMap: boolean, rotateWithMap: boolean, transform: Transform, - pixelsToTileUnits: number) { + pixelsToTileUnits: Float32Array) { const m = mat4.create(); if (pitchWithMap) { - mat4.scale(m, m, [1 / pixelsToTileUnits, 1 / pixelsToTileUnits, 1]); + const s = mat2.invert([], pixelsToTileUnits); + m[0] = s[0]; + m[1] = s[1]; + m[4] = s[2]; + m[5] = s[3]; if (!rotateWithMap) { mat4.rotateZ(m, m, transform.angle); } @@ -98,10 +102,15 @@ function getGlCoordMatrix(posMatrix: mat4, pitchWithMap: boolean, rotateWithMap: boolean, transform: Transform, - pixelsToTileUnits: number) { + pixelsToTileUnits: Float32Array) { if (pitchWithMap) { const m = mat4.clone(posMatrix); - mat4.scale(m, m, [pixelsToTileUnits, pixelsToTileUnits, 1]); + const s = mat4.identity([]); + s[0] = pixelsToTileUnits[0]; + s[1] = pixelsToTileUnits[1]; + s[4] = pixelsToTileUnits[2]; + s[5] = pixelsToTileUnits[3]; + mat4.multiply(m, m, s); if (!rotateWithMap) { mat4.rotateZ(m, m, -transform.angle); } diff --git a/src/terrain/terrain.js b/src/terrain/terrain.js index 068eb88d0d0..12a50539a0c 100644 --- a/src/terrain/terrain.js +++ b/src/terrain/terrain.js @@ -4,7 +4,7 @@ import Point from '@mapbox/point-geometry'; import SourceCache from '../source/source_cache.js'; import {OverscaledTileID} from '../source/tile_id.js'; import Tile from '../source/tile.js'; -import rasterBoundsAttributes from '../data/raster_bounds_attributes.js'; +import boundsAttributes from '../data/bounds_attributes.js'; import {RasterBoundsArray, TriangleIndexArray, LineIndexArray} from '../data/array_types.js'; import SegmentVector from '../data/segment.js'; import Texture from '../render/texture.js'; @@ -222,7 +222,7 @@ export class Terrain extends Elevation { // edge vertices from neighboring tiles evaluate to the same 3D point. const [triangleGridArray, triangleGridIndices, skirtIndicesOffset] = createGrid(GRID_DIM + 1); const context = painter.context; - this.gridBuffer = context.createVertexBuffer(triangleGridArray, rasterBoundsAttributes.members); + this.gridBuffer = context.createVertexBuffer(triangleGridArray, boundsAttributes.members); this.gridIndexBuffer = context.createIndexBuffer(triangleGridIndices); this.gridSegments = SegmentVector.simpleSegment(0, 0, triangleGridArray.length, triangleGridIndices.length); this.gridNoSkirtSegments = SegmentVector.simpleSegment(0, 0, triangleGridArray.length, skirtIndicesOffset); diff --git a/src/ui/camera.js b/src/ui/camera.js index f00dda5ef32..363fd7a4262 100644 --- a/src/ui/camera.js +++ b/src/ui/camera.js @@ -353,7 +353,9 @@ class Camera extends Evented { * const bearing = map.getBearing(); * @see [Example: Navigate the map with game-like controls](https://www.mapbox.com/mapbox-gl-js/example/game-controls/) */ - getBearing(): number { return this.transform.bearing; } + getBearing(): number { + return this.transform.bearing; + } /** * Sets the map's bearing (rotation). The bearing is the compass direction that is "up"; for example, a bearing @@ -1564,7 +1566,7 @@ class Camera extends Evented { // interpolating between the two endpoints will cross it. _normalizeCenter(center: LngLat) { const tr = this.transform; - if (!tr.renderWorldCopies || tr.lngRange) return; + if (!tr.renderWorldCopies || tr.maxBounds) return; const delta = center.lng - tr.center.lng; center.lng += diff --git a/src/ui/free_camera.js b/src/ui/free_camera.js index 925f209720c..d4d4c02b4aa 100644 --- a/src/ui/free_camera.js +++ b/src/ui/free_camera.js @@ -306,6 +306,7 @@ class FreeCamera { vec3.scale(invPosition, invPosition, -worldSize); mat4.fromQuat(matrix, invOrientation); + mat4.translate(matrix, matrix, invPosition); // Pre-multiply y (2nd row) diff --git a/src/ui/map.js b/src/ui/map.js index 2f7bf56cbee..7d6eec2e83b 100755 --- a/src/ui/map.js +++ b/src/ui/map.js @@ -62,7 +62,8 @@ import type { LightSpecification, TerrainSpecification, FogSpecification, - SourceSpecification + SourceSpecification, + ProjectionSpecification } from '../style-spec/types.js'; import type {ElevationQueryOptions} from '../terrain/elevation.js'; @@ -118,7 +119,8 @@ type MapOptions = { transformRequest?: RequestTransformFunction, accessToken: string, testMode: ?boolean, - locale?: Object + locale?: Object, + projection?: ProjectionSpecification | string }; const defaultMinZoom = -2; @@ -267,6 +269,8 @@ const defaultOptions = { * @param {Object} [options.locale=null] A patch to apply to the default localization table for UI strings such as control tooltips. The `locale` object maps namespaced UI string IDs to translated strings in the target language; * see `src/ui/default_locale.js` for an example with all supported string IDs. The object may specify all UI strings (thereby adding support for a new translation) or only a subset of strings (thereby patching the default translation table). * @param {boolean} [options.testMode=false] Silences errors and warnings generated due to an invalid accessToken, useful when using the library to write unit tests. + * @param {ProjectionSpecification} [options.projection='mercator'] The projection the map should be rendered in. Available projections are Albers ('albers'), Equal Earth ('equalEarth'), Equirectangular/Plate Carrée/WGS84 ('equirectangular'), Lambert ('lambertConformalConic'), Mercator ('mercator'), Natural Earth ('naturalEarth'), and Winkel Tripel ('winkelTripel'). + * Conical projections such as Albers and Lambert have configurable `center` and `parallels` properties that allow developers to define the region in which the projection has minimal distortion; see the example for how to configure these properties. * @example * const map = new mapboxgl.Map({ * container: 'map', // container ID @@ -497,6 +501,17 @@ class Map extends Camera { this.handlers = new HandlerManager(this, options); + this._localFontFamily = options.localFontFamily; + this._localIdeographFontFamily = options.localIdeographFontFamily; + + if (options.style) { + this.setStyle(options.style, {localFontFamily: this._localFontFamily, localIdeographFontFamily: this._localIdeographFontFamily}); + } + + if (options.projection) { + this.setProjection(options.projection); + } + const hashName = (typeof options.hash === 'string' && options.hash) || undefined; this._hash = options.hash && (new Hash(hashName)).addTo(this); // don't set position from options if set through hash @@ -516,11 +531,6 @@ class Map extends Camera { this.resize(); - this._localFontFamily = options.localFontFamily; - this._localIdeographFontFamily = options.localIdeographFontFamily; - - if (options.style) this.setStyle(options.style, {localFontFamily: this._localFontFamily, localIdeographFontFamily: this._localIdeographFontFamily}); - if (options.attributionControl) this.addControl(new AttributionControl({customAttribution: options.customAttribution})); @@ -741,7 +751,7 @@ class Map extends Camera { * const maxBounds = map.getMaxBounds(); */ getMaxBounds(): LngLatBounds | null { - return this.transform.getMaxBounds(); + return this.transform.getMaxBounds() || null; } /** @@ -982,6 +992,38 @@ class Map extends Camera { /** @section {Point conversion} */ + /** + * Returns a {@link ProjectionSpecification} object that defines the current map projection. + * + * @returns {ProjectionSpecification} The {@link ProjectionSpecification} defining the current map projection. + * @example + * const projection = map.getProjection(); + */ + getProjection() { + return this.transform.getProjection(); + } + + /** + * Sets the map's projection. If called with `null` or `undefined`, the map will reset to Mercator. + * + * @param {ProjectionSpecification | string | null | undefined} projection The projection that the map should be rendered in. + * This can be a {@link ProjectionSpecification} object or a string of the projection's name. + * @example + * map.setProjection('albers'); + * map.setProjection({ + * name: 'albers', + * center: [35, 55], + * parallels: [20, 60] + * }); + */ + setProjection(projection?: ?ProjectionSpecification | string) { + this._lazyInitEmptyStyle(); + if (typeof projection === 'string') { + projection = (({name: projection}: any): ProjectionSpecification); + } + this.style.setProjection(projection); + } + /** * Returns a {@link Point} representing pixel coordinates, relative to the map's `container`, * that correspond to the specified geographical location. @@ -2844,20 +2886,22 @@ class Map extends Camera { this._placementDirty = this.style && this.style._updatePlacement(this.painter.transform, this.showCollisionBoxes, fadeDuration, this._crossSourceCollisions); // Actually draw - this.painter.render(this.style, { - showTileBoundaries: this.showTileBoundaries, - showTerrainWireframe: this.showTerrainWireframe, - showOverdrawInspector: this._showOverdrawInspector, - showQueryGeometry: !!this._showQueryGeometry, - rotating: this.isRotating(), - zooming: this.isZooming(), - moving: this.isMoving(), - fadeDuration, - isInitialLoad: this._isInitialLoad, - showPadding: this.showPadding, - gpuTiming: !!this.listens('gpu-timing-layer'), - speedIndexTiming: this.speedIndexTiming, - }); + if (this.style) { + this.painter.render(this.style, { + showTileBoundaries: this.showTileBoundaries, + showTerrainWireframe: this.showTerrainWireframe, + showOverdrawInspector: this._showOverdrawInspector, + showQueryGeometry: !!this._showQueryGeometry, + rotating: this.isRotating(), + zooming: this.isZooming(), + moving: this.isMoving(), + fadeDuration, + isInitialLoad: this._isInitialLoad, + showPadding: this.showPadding, + gpuTiming: !!this.listens('gpu-timing-layer'), + speedIndexTiming: this.speedIndexTiming, + }); + } this.fire(new Event('render')); diff --git a/test/expression.test.js b/test/expression.test.js index 2c4155d43f6..db741f604e2 100644 --- a/test/expression.test.js +++ b/test/expression.test.js @@ -6,12 +6,16 @@ import {toString} from '../src/style-spec/expression/types.js'; import ignores from './ignores.json'; import {CanonicalTileID} from '../src/source/tile_id.js'; import MercatorCoordinate from '../src/geo/mercator_coordinate.js'; +import tileTransform, {getTilePoint} from '../src/geo/projection/tile_transform.js'; +import {getProjection} from '../src/geo/projection/index.js'; import {fileURLToPath} from 'url'; const __filename = fileURLToPath(import.meta.url); +const projection = getProjection({name: 'mercator'}); function getPoint(coord, canonical) { - const p = canonical.getTilePoint(MercatorCoordinate.fromLngLat({lng: coord[0], lat: coord[1]}, 0)); + const tileTr = tileTransform(canonical, projection); + const p = getTilePoint(tileTr, MercatorCoordinate.fromLngLat({lng: coord[0], lat: coord[1]}, 0)); p.x = Math.round(p.x); p.y = Math.round(p.y); return p; diff --git a/test/integration/lib/render.js b/test/integration/lib/render.js index 623fed8abf7..ed2e590e7e0 100644 --- a/test/integration/lib/render.js +++ b/test/integration/lib/render.js @@ -145,6 +145,7 @@ async function runTest(t) { fadeDuration: options.fadeDuration || 0, optimizeForTerrain: options.optimizeForTerrain || false, localIdeographFontFamily: options.localIdeographFontFamily || false, + projection: options.projection, crossSourceCollisions: typeof options.crossSourceCollisions === "undefined" ? true : options.crossSourceCollisions, transformRequest: (url, resourceType) => { // some tests have the port hardcoded to 2900 diff --git a/test/integration/render-tests/map-projections/albers-configured/expected.png b/test/integration/render-tests/map-projections/albers-configured/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..703a596ad697cb61eec273a0222d022ec6655b16 GIT binary patch literal 25356 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⪼~aJa%fQJBt2Q8$5wWnEdf35z?Cr!(KZZ`tTimPnfWD6%&sfgj~~<2 zD(-VX%Lk|@PH9gPTkd`bf^$S+^y0ioQry(_^#jwjRXWCW3N-qRoxmv;vD8Bzm?~hO zVu4EHpZ8||)1o^d9=-MaTbQ;pe7J1MiJL#JAhl4c4GjkZZ9Sm`z6Is>7tXGRjShd# zh^@n+x;VzX?t=HCm%DLixY2!_lbp$;#EP1@f0r^%18@#TG*{G=WP%o35(=bykHciC zB!7>~dfy)xd)4?@UIe*rMug(D?%;5G*B%Ke$o(N#I|}T!v%`9Z2)xd&&YYWMJlz^h z%~o+p7MMkUx-~y5ROEPfa>Fu$%7}p;!Ue@6`O82du{~YxycNO4o#=yahbOXHMrj?&O+O8} zApUs%EmPry$ZiTiW{4Y)aH(GL(&H?KH)Qt3_8NAhSruJ0}S72`JlmFX3cOABfnX% zJ3WA?)1!IXr21MWY#|zp*vB{ITL+oPtM!w-$#TG2GwTyAH#iAZMx?yfTT`)zvqdcJ zwBzkO7qteaKx-k|lWN2Fm>lYk3|?Mz0SQOQ9|KD%yi7tg%FNelWl@^}v}04D1312N zKUfa+}dS}CGw3ORG0AdZkw1|3$2{-%Kff_4W+XGS!h z)@4arz-p(P8jdO}ESMbLf9`;*KIyIstZ9wdeA62jO$|{! zW>dLiZD9Ox|Kt{xc}$H+3K7n62`+WPTQnmuxmnP~gzlpOZw)JEL$>5l zxF8BOxKakMzxHY66Z9mNU${4Ozd4cGI(}vs^3%p$9{vSDz^}|79Iqx(uAP1p?C4hN z2cZV%m3UNNcbWnwBaV>=ocR~IG1qFlK(ep4+ov{D+kQ21;38=A0#GC{2alpU{2Vqd z-6Z?fa4=oo5m-DZIAAv)e{rsZ&A|Kxyha!&kr5!oHl=4ipKt6 zh&kY|8sT7gT6g+szs^2WG*-bomzP6}Hu=T|bBRWR*#~#-8Cb6bd6Dlq=TZ?F6FBFm zIdl_{a7zs35a$p%yjnl1@n;reA|$6wC+Q1q6VsZxZ+{*~u2-(Y9j+nuSB*3!zR=}1UYiOn>K~5YfdE2qD$L;RS>(-<@ z-8u;82W6n%iKW~?dspH!3BlKyJS;&=O{wujc;?b4C@xLD_LNUC(hPkq>5jlGrhqrS%<>N#Ouh` z7c%KQa8Uf0NwLpU{MU%e?k=;$lxO?Y?F6(063Z}Q@gDk>u*D`5 zY7Mu(<@lqNq{dD$AJrTQ2>c-TFrv(TZ}V-1`xUCL2Q=nQoIXp-OQ4)Ua6tZ-EeaJr zA|4irx7@;kkFB+VhhyV6fI7#wYcc@tY|)9f-G#Bq`)%Mvf2717KA-rhSN8hTizQEb z_)0iHL&>L=u|7S`d}z!Xg}s!o^qcBE-UufN!s|^9n{@N%p%Wqqk$_o92`?|aTWovk z^pS}7JF5rjx5j`2E&AKK40cH-hNz}RVbfAVYH}#Az$DY_sl2OHz#4AVME6v*Q|NAx z_V_5HvbIe564U=2C4s{K5zxE=vDp^SX^%id+Y-E(9WB(d4q&hLPrfpYweEC3d#@OmK~ zYjcw-&mY?#Lx=0-`g7;(r1@17lg+Z$t`@U{S<7MLhf_gk$0Ubk6HXVF7mI&i99X0e zqeqA}(K~xClDTqdlcoI)S&;o1aDP8%-;$1`IgP!5qT?m0y*0$=?SWN5&HE&k-&YZ~ zX3zN=IqS9^<$U>-I5{*BjtCaWvt0R=HdG_hjezM$z2~$JRqkmPcQB~67%jqS8b#SY z8Iic^SB3>jC}+f8@sunuse=j^syKEB8mW=gDhgN2N8^%llooY20Jn!O9Qjoe`yH?I zzK@}wI?7{H;EN}*65Ml9(06&ZR2-loHy{1r3iIJUKxBaoyrqi9g+F6e`GQ-LDUTIXdd>`PO$P|$>bJh!;ql*yfO;B^ z?JW65YvVOm(v>qgfsPJi`0eSJnE2BL` zdEZ`c4Jd5S@+q1 zJ@?0dKg;~9%C+FBcZq-rdhX_A_!-)BEKE{r6|MbPyA+kR5 zo3!emuF-`cW#A~O5c=aG(-?JmvyzS`xxN=JL^~+ww^OX5leSv ztyU|22_};JnGyOtkNeosc1K@`yBL^yPbulykOxO`G0zE3ZH-vPX6C~g(;CB&*zN7o zz2XaOuc%i-yhN!(gj{G*kkNb1zS#3+eWpy3Ee+4Q!n|W8QV$`HHzN^?c1qfQQ-pgE9lN^_Cq0O zw>gl;wWhJeWW_w9@tl0NQuS^XB2fF~m&qequES%Z86E&v-dY|;o4h{Vio|G@U(m*0 z4)X5#VTALWbPX_4`&IjpK6>}wN^jd+rK6)Uu^;XE?)%qgf9A)ZA5c;K@(f#MF`x*H zGdA-NWDb4Kr_!BTeIq^(iVo&J5y^?9Y5@~?pjfU7R(jwbtmyUB^G}3ED2Bicep%c3 zG-W~!dW(S{Nh$4?6cK3bqMBIHpio#iV~NYg`}yDG;bDIiAsq&Fwg~S#hu0C2QH*X} zPX*&&N0Xeig^sHbY3QG=24y4knvFm60{P@30$`*JjA3@B&nEMje>l#OKG{g%7W_4(S9ig_W9O|)kKC7HXJ>NTql$97UL;8l3exSpzAVqrU9tTw_AjZv=zGS z+dOuS4oF!W=-=H@a?(6obZ`$|=t0K{I72(hwBnq%`nV$(`6f(_Lkj|=m1Z{g`zWc6 zOma3yOs$<L^fg7FTN_mafd0MCUAVn)- z;BFFtu5_mJ;TJtQTD^c>;~V{SOe&ou!e}b~C$?oiD^&W{(u3ek&C1*EL(|@Qp)RCo z3wTfv>Zv4P3S-!Yc(#rYzaBMBQr=nRw<`974orn~2lpZ*QC(hg?^gWj*beqT&34%DkRY`_0D%FxMEi=JAO>vJ`3KWF)RAa(L0PD}AfPNgtHy{wp7T3AQUD5-!e!T~9Oo}QW> z2TVnZ9DXPJ(%UU@qp4;;({OgL~#>oif#NvUP~~i$_+}+Phg@Vi-!6jfsCrwugRwuKMT+A>1eI{+AR@ zQUdEG6<`&J@)95Eg`!`*BEup?dLO5)?I9m9<%(a?RQj+HGXwPZ=s+Xw`SOWRSk#)G00J1H>Ne*$#SC6;#yc#2#ry;utL{|6!m-Qv zC{6*e1x0|9dxU7?i@{=N(+`WP08dJuvVBxZZ%okFEydVgHinEUBkWlrfA=FhdWn0- znrpuUunFLaqq~|MOyv;-Dep-<@3h5<0=)-M73*k@f_7IjKY2JMBRPq-(fY8Oa%!gbic)lrN%|HUeOev)B1f9;dBUqnjdET6TUtu8C{iVUU$-%<# zbT*MrnFz@1m5KV*t^=O@0e>`ySxrd>;|`~M6^OUVAAB!o+OFA|Y0I&X5qrxkAP^_; zzGSJ^NaU{fF1WYwbb?LtWdz0!V3UW+?|RaSaasetKaTE#!W)s#v9Y5BFGQ>RSIDuj*hQZbM zuYuxIz@g+jI*trc{nzqfY1Kq;+fmodc?31o^TYV{hsfuDspCeferlR7-d)e6-i^fE z?M}61ysQT7Rmfyv?-?DR4ygYad_nOE>8vdco!xE#VcEdxeGHUD<q30=YghzJ=O7;ZJ z_yipybgI|vHFK8{GbR~~^A;E4)(Vi4wQ4QCVBimQ3*g5G7QA<92piqVH{nv{Tp%{~~)JTcZMKvf8 zI2!J=9^zmKvo@ZGV<);NT+ayerc z&0?d_>TAqWpL!-jQeWMV{Z)S?rajRHd4GW59m_v8OFs;z@O7;W6GJ4u-i+Xl6llsD z?uk(K^}Iuqfjx*Qo`3j2S1&Jlz-~h{_+KJ& zD=dT~XD@lgs7$pZ05R3k{Wp$vahlhjU2Ub`>t?tf>Joy1Z*hA%X$7a%-SBtc7+%A8 zO5ZTiA@lhvI;b)_fVxwuuJ#`4bwwi;1o-PLojHu4;=deO_(T8cV*jNhu=Onv3?MK0 zTUhP!K}3TX#`|339}nG*=CUUozaBW+I-q zT+g*cenzfr%Zp!7qjQFFG_IG!-Mk7P+ORFDuMBy4?miSCem5*3qI~hM5;%3t+HV>+ z0Ar}J@o9@mLcV5>Jp8W7VOnan*W8fcR{zgfkr?nm@gy|n={tjH)OX#UbA3#;+x5bB zaBlT*HkbM*Qxtr$N)5_biO3V6+I{rmICOCE){|bqH*}y4?>AcO()FX=YEy29P`nLo zz*GPYrD$UGOM!EMNZtcDW964LFQPj>hxqRq85_5Eo)A*`duLAjd<41uosF+>o~0En zGx&t}`G*z?{HUsUoczV7l4%p%H#lnhVpz7+lNy!3Mu^@4lB=gG-iu^@<;~Boulx9S z_738Qrb;*ZIa^$OCUx*RS|Ke|R?<}qD1%kzD zd7aa?M*5aTIu-n}79M zAUuA)6mb@};)Bb^Y0$_e#d(1?=X?20iJ_NF`GC`%v|0`!+86l*368w9H)!AO&q|Ht zxNvjs5xhkLT9vY1CwES(j_p*P>x+b`)$bUaXhmv+I2i#+$ERS6TOPbJYCSrnW}$?^ ziu9ijq%b5b0j~}O;q}eI)N*fh-Ndy?0Bqdj7$JJ`Zde_?hY2)-v#z8paR}H@ zrn1pw8KU~5;1R;+Uq@=Y{SB*hP**1NFF?VjOC@xXlB3x+(-mCAuX-dwsQq&Wadr4 z*|E7R|D*r1Asw%qdPoYiFKunVgZY3-4-lW`;ZIzg&>2GO-4Ex#RP9ZYnU^**D` zRL5AOK{d$|&?~c@mj1}>LiXc8`h`ogoakW=iUU4~6t@@7MRetX00a~{C7LCUo8f3m znDn*)Ay1xMy84>nLXA*g<acAjj`hwLu@NaHtJ;{QOVsimN zsx$e)u_@kqyRt#!d$FHdDO~}$0WfD%LW2 zLIS~;MhX~#U+NMb0ikb-J|zy)KN15$4j21cS}i{J>~_9s56$l@%n~kWFpyxEQhBC| zl}^PNpa}wrA}}mx?mY#TWNY*GhpR_JDZryvLL>OYHK068mqQ%~Qqen9ZEbBcm(zS~@=rcH3Am~NsW1Tx&`fO19V>`CbiNoMi+elrU*!-7+qm1ANc2v=Vh2c+kC3tqyP3wLL!toakL5Yy(Z33R z7l%?L$vJDPM32X%-5KX0vamtMa~b}_N`wFz9-z9`Z{$)z5hq(=zXO0!Gx|*vYe`U2Qrg#C*{GgqD1tc{hdP7N z1CxTPAPb;1cpNSJ@&3KhW=t_l@o&$VYSDZFu3`s?koWb3uk>~5qrm%g6H_ST1@2iF zZ-Lm0lNT^3a1G$xWH=t5^E&19$9=*%s;Y>H z2z2PQe|J~c6MHY9tQAC%;LxhOfiRSLC7W|maK1)2qRQk{<~`PVPUDm_7hfEuqcW^|gpJlYQ2+}-;Dr@%A| zzn^XNHHI+OB0oPiCeyk4i7p!+fP6q()6sL}pij}_i-{hN9=3?5H26o^2rGTW!Ac7Y zxBx~XRVwwnB4qhejNe}M?^1*L^gSl+UnIY_HgQR!2yCIEyXjQmdX>8=BiHl8Ub^P6lVfl6;{2ZjpG=S*e%PM?glS zkB2IFpDySq(LDd_vF@5$Q!LTmiAkO(W`lS1%16d;-M9H+aorC#5^&)G&=)oxMelO6 z-s`zqhvG~}d*%Pt0W!2bs_(O-C6>fm+>1=lk!EXreZ@~d-d&aRj!&hMo}d8KDvese z?sd@W-Dy1u#Mv0PyJgmg<>PWy0=DQ&lOJR`vN4wkVVjz~(0gho$Y(-UHpWfKur8)C>=E{Z-)l#2)k5y_v+8V7YqTVzAhi0n->U7wfXw)q&!iY zlsj`x0qhWnf12j~90uVWC1CPrUip>_z3LO4U&^CllF@N04v zTYF;g#pg$5AFZ2Q&fSrZ8mfWF*U)Tn%eiXKP{u0ke>WjL4}Bf@ruIHAzJlrb4Gaae za3n3=%J!D9S$20SA)(#=;L-AdPkTJudJVY5CB_)CY6bS$?GJp`m=BLX4#uDZ_9tTo z)%jrW&>n=WDk=9hgL*r^yXw7#@ZlSq;CM zi0L9iJV=KVGmJeXXGBCWY?a3KBvs-A11sc!=zfOFN|NnRk*rO>(l%OR*n|h1Nwoq- z)`i9Q+A0;6Jt1DA8`s$1gs>B^NT1 z1grbtpcTmf#XI1B!5|iL@FZF*ItUy4%fW-^E$8f*MaSd95I|}J^$vzplJ8}>j5-hIyt4VyN(&H4uT35Sflp0H8%GNnkq{X5_&!WS7LoiE`9;krj z45>fSULr$Es)`y+{R*G~{Rzc7!1j}JxIm^|TnOA+Wh&L0Sy`w$5TB>F#JzF06{`f4 zuej}Uv=7OZv{aq=7sS|PqiRjJ-}z^1FA=?hN@v~R(^Ml`)k1hGzC)bzp><#SlYlix zG`%0?S(d&wUapFWjz%*(I>kY#xpz4@TC4n9pD}z`l_GFs78#4le#=Cq=dlyuO9klM z@(+KpQd9eY#R-A6mR@^8hIxxnHxguTC#`xmLlvjLV5X8=E5 zAV}Z=C6bO}OQFvfaXripxPYVKQpNrjl0f3TFmoDHXKe=-@$pu!O#Gu?MYBs?b+GTC ztcD-V=pXan**!cup#zMipI z*D3{b%$sx?etWC=Zz{Uzyk=5SiYi4UPPbcHM4-N^FuwUx-+)a*P|j?T6)Asu%D=7| zqya))Y_S^q$O3oa{x=Ub(4*d@m2P|%uLyJmh}b;E zC=~*Vc8A+M-8wI=YMU9l*xuLH)_W0tJA*BEdwKN0ov3~;^gt-ApK7tFki|NxuXu-w zie~!Z~Tk!o9KoZA@FI~a(qh)3G53M zL=}P_6C&Pd|>#6XGa^%**^N{rWkcIn@Ev&o6gJXs} z2oe}F%R&RHtl*R{SHHJL;ujDw0j4yO8LU*Zdb}0A+NI=M_tcfuAA|(fdx{6DpRS6s zIX$lmIW!QucDUE1UWz`S%Uz(WrQeuU07KAS-oQZHY7O-@2u7 zJDY|F`^yxoa16Znm`F&5EVI)Hx{_iUFNbqiydKceO1f|`h0lW);jl0Pgg@o?;%&oy zdi7_ZMQNbLH{TLI2s@*BTJo)q`abKLjl4|AV>QL2fn|LHgJGARWl`8jym51rh}P|L4a}pIXqZj=kyBkhOcpt3BZ>UU*yLZ zZ#o~`=r3^SG*TB^?Ei8YvlXA_0NqP(+|8?@{I~pPlHTHmKjw+~a~_|MxkRPR{w3eh zN}q2v1dg?*L##MBbTZx~wp=06J+4=kE%pNCb=1N3Q%%!{#qLMPLsp%*K|WItjT4=@ ziEBk0SI#_vA4ti38fzARLLVNiq`b}#1TxPW%-@PEQ7@SODz=$Y!U7%a$|e{0Qu#ca zYpELh>o3L1u3rz! zO{EC;W>V`3=k}iBZ{M_qg19n;$`g1X5YXC7Yd;ZBFY|-*D4)r_hV7GE;jin4xNtJx5@B_y+2NDn&5kGvU5GIQ7~=eOVZ znYx);*rjcv>rLl^U;2qbbxH?)_BkWn63-w>qsU$LHDMQ)YFF{rVBDjRt!V`0q219bm0O8+R}I_wbie z+CTj`Mf~124mjzl_5JPs5Vmz^e|>ppj<`-qe@&ueor;CI&P316eCg|Zn$u%x;KdAj zN?GI)pC+6eUErb;3vy_*-tu;F()X@@28L{M#!wqjip{9i_m5YpDrnpLDJzs9e(EVl$M*y2!TfWA_xyh0&0?4!s zSjHQ2M6Jq$iR`tQt&h;_X7kL$iKx?U-ywcZt6qChf2-pd_fSKh@3^bJOOLFck4{G7 zl*&4N=`*oIVS?FTgVg~bzu)Lj44%Il0)}H^p(o~PG*sG7>1-g>r7h!Y_3Zw^MutQv z{Q}#(&iUq;lv?y=OVN2hwMM4&=$wab|Lz;n*B7e*5ed(trPX}y?cJ^EVQ!Gea)P;c zx2OX}kt&F^e5*rKDEh?2WBvYP%_Y^0$2h{J)SYeaCma5Q=nc++N`mvGGwVJtqJE;Y z1EYn}MRm*a{_ebLie!DmX8p6M*sv&vUO#PF8rXv~NQ=@X;R(oNJ&i4SILtYn6gO1dF^ayG|*53eH;nZUU{Cezqz1HSFLC6f=*Dic=&SXmpzJ zNiL_(D}J^Pf%HN#1-(*eOPny2{7<$0_^W=tC8565zK_tBy+7u+7z0X%&(NUhSfDk1 zkU)!@)}I{6$*Ta7^bB_z;T=1}@Yxbw`wZJYokD~~#2zDYUDM=SI7}D_UfWFuDVjw} zd#CFM7RAL$`LM;2jbr`Ji^V(6$${Ivhogu&^5I{0{fsa}4~Ut^ZcAxp84oCGJ<(jb zLAke*GpDyE!>&ZAcZ!hGeefv%^rjgs>s6fU3?tUBRtB1~BV-!1X zUNH4w02*%8{T9@YztqR@Xh+@Xlq!)h^#6b9zIP!2 literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/map-projections/equirectangular/style.json b/test/integration/render-tests/map-projections/equirectangular/style.json new file mode 100644 index 00000000000..06855d57996 --- /dev/null +++ b/test/integration/render-tests/map-projections/equirectangular/style.json @@ -0,0 +1,17 @@ +{ + "version": 8, + "metadata": { + "test": { + "width": 512, + "height": 512, + "operations": [ + ["setStyle", "local://mapbox-gl-styles/styles/basic-v9.json"], + ["wait"], + ["setProjection", "equirectangular"], + ["wait"] + ] + } + }, + "sources": {}, + "layers": [] + } \ No newline at end of file diff --git a/test/integration/render-tests/map-projections/lambert/expected.png b/test/integration/render-tests/map-projections/lambert/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..1b13608ea4d86f6dec65a182317108980509f576 GIT binary patch literal 32116 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%0D*XXH+O4mt8YFY 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 literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/map-projections/natural-earth/style.json b/test/integration/render-tests/map-projections/natural-earth/style.json new file mode 100644 index 00000000000..0e1eb24811f --- /dev/null +++ b/test/integration/render-tests/map-projections/natural-earth/style.json @@ -0,0 +1,17 @@ +{ + "version": 8, + "metadata": { + "test": { + "width": 512, + "height": 512, + "operations": [ + ["setStyle", "local://mapbox-gl-styles/styles/basic-v9.json"], + ["wait"], + ["setProjection", "naturalEarth"], + ["wait"] + ] + } + }, + "sources": {}, + "layers": [] + } \ No newline at end of file diff --git a/test/integration/render-tests/map-projections/winkel-tripel/expected.png b/test/integration/render-tests/map-projections/winkel-tripel/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..e63c90ea9057c22ee6abc787e0ea2bb2d13c9c7a GIT binary patch literal 38955 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
dMagYZ6I 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 { const placement = new Placement(transform, 0, true); const tileID = new OverscaledTileID(0, 0, 0, 0, 0); const crossTileSymbolIndex = new CrossTileSymbolIndex(); + const painter = {transform: {projection: getProjection({name: 'mercator'})}}; // add feature from bucket A bucketA.populate([{feature}], options); performSymbolLayout(bucketA, stacks, glyphPositions); - const tileA = new Tile(tileID, 512); + const tileA = new Tile(tileID, 512, 0, painter); tileA.latestFeatureIndex = new FeatureIndex(tileID); tileA.buckets = {test: bucketA}; tileA.collisionBoxArray = collisionBoxArray; @@ -59,7 +61,7 @@ test('SymbolBucket', (t) => { // add same feature from bucket B bucketB.populate([{feature}], options); performSymbolLayout(bucketB, stacks, glyphPositions); - const tileB = new Tile(tileID, 512); + const tileB = new Tile(tileID, 512, 0, painter); tileB.buckets = {test: bucketB}; tileB.collisionBoxArray = collisionBoxArray; diff --git a/test/unit/geo/transform.test.js b/test/unit/geo/transform.test.js index ba2928e45db..93cd7d8dd09 100644 --- a/test/unit/geo/transform.test.js +++ b/test/unit/geo/transform.test.js @@ -5,7 +5,7 @@ import LngLat from '../../../src/geo/lng_lat.js'; import {OverscaledTileID, CanonicalTileID} from '../../../src/source/tile_id.js'; import {fixedNum, fixedLngLat, fixedCoord, fixedPoint, fixedVec3, fixedVec4} from '../../util/fixed.js'; import {FreeCameraOptions} from '../../../src/ui/free_camera.js'; -import MercatorCoordinate, {mercatorZfromAltitude} from '../../../src/geo/mercator_coordinate.js'; +import MercatorCoordinate, {mercatorZfromAltitude, MAX_MERCATOR_LATITUDE} from '../../../src/geo/mercator_coordinate.js'; import {vec3, quat} from 'gl-matrix'; import LngLatBounds from '../../../src/geo/lng_lat_bounds.js'; import {degToRad} from '../../../src/util/util.js'; @@ -16,7 +16,6 @@ test('transform', (t) => { const transform = new Transform(); transform.resize(500, 500); t.equal(transform.unmodified, true); - t.equal(transform.maxValidLatitude, 85.051129); t.equal(transform.tileSize, 512, 'tileSize'); t.equal(transform.worldSize, 512, 'worldSize'); t.equal(transform.width, 500, 'width'); @@ -95,15 +94,12 @@ test('transform', (t) => { t.end(); }); - t.test('lngRange & latRange constrain zoom and center', (t) => { + t.test('maxBounds constrain zoom and center', (t) => { const transform = new Transform(); transform.center = new LngLat(0, 0); transform.zoom = 10; transform.resize(500, 500); - - transform.lngRange = [-5, 5]; - transform.latRange = [-5, 5]; - + transform.setMaxBounds(LngLatBounds.convert([-5, -5, 5, 5])); transform.zoom = 0; t.equal(transform.zoom, 5.135709286104402); @@ -122,8 +118,7 @@ test('transform', (t) => { const transform = new Transform(); transform.zoom = 6; transform.resize(500, 500); - transform.lngRange = [160, 190]; - transform.latRange = [-55, -23]; + transform.setMaxBounds(LngLatBounds.convert([160, -55, 190, -23])); transform.center = new LngLat(-170, -40); @@ -137,8 +132,7 @@ test('transform', (t) => { const transform = new Transform(); transform.zoom = 6; transform.resize(500, 500); - transform.lngRange = [-190, -160]; - transform.latRange = [-55, -23]; + transform.setMaxBounds(LngLatBounds.convert([-190, -55, -160, -23])); transform.center = new LngLat(170, -40); @@ -152,8 +146,7 @@ test('transform', (t) => { const transform = new Transform(); transform.zoom = 6; transform.resize(500, 500); - transform.lngRange = [0, 360]; - transform.latRange = [-90, 90]; + transform.setMaxBounds(LngLatBounds.convert([0, -90, 360, 90])); transform.center = new LngLat(-155, 0); @@ -166,8 +159,7 @@ test('transform', (t) => { const transform = new Transform(); transform.zoom = 6; transform.resize(500, 500); - transform.lngRange = [-360, 0]; - transform.latRange = [-90, 90]; + transform.setMaxBounds(LngLatBounds.convert([-360, -90, 0, 90])); transform.center = new LngLat(160, 0); t.same(transform.center.lng.toFixed(10), -200); @@ -223,8 +215,8 @@ test('transform', (t) => { t.end(); }); - t.test('_minZoomForBounds respects latRange and lngRange', (t) => { - t.test('it returns 0 when latRange and lngRange are undefined', (t) => { + t.test('_minZoomForBounds respects maxBounds', (t) => { + t.test('it returns 0 when lngRange is undefined', (t) => { const transform = new Transform(); transform.center = new LngLat(0, 0); transform.zoom = 10; @@ -239,8 +231,7 @@ test('transform', (t) => { transform.center = new LngLat(0, 0); transform.zoom = 10; transform.resize(500, 500); - transform.lngRange = [-5, 5]; - transform.latRange = [-5, 5]; + transform.setMaxBounds(LngLatBounds.convert([-5, -5, 5, 5])); const preComputedMinZoom = transform._minZoomForBounds(); transform.zoom = 0; @@ -349,7 +340,7 @@ test('transform', (t) => { const bounds = transform.getBounds(); // Bounds stops at the edge of the map - t.same(bounds.getNorth().toFixed(6), transform.maxValidLatitude); + t.same(bounds.getNorth().toFixed(6), MAX_MERCATOR_LATITUDE); // Top corners of bounds line up with side of view t.same(transform.locationPoint(bounds.getNorthWest()).x.toFixed(10), 0); t.same(transform.locationPoint(bounds.getNorthEast()).x.toFixed(10), transform.width); @@ -369,7 +360,7 @@ test('transform', (t) => { const bounds = transform.getBounds(); // Bounds stops at the edge of the map - t.same(bounds.getSouth().toFixed(6), -transform.maxValidLatitude); + t.same(bounds.getSouth().toFixed(6), -MAX_MERCATOR_LATITUDE); // Top corners of bounds line up with side of view t.same(transform.locationPoint(bounds.getSouthEast()).x.toFixed(10), 0); t.same(transform.locationPoint(bounds.getSouthWest()).x.toFixed(10), transform.width); @@ -1067,8 +1058,8 @@ test('transform', (t) => { t.test('clamps latitude', (t) => { const transform = new Transform(); - t.deepEqual(transform.project(new LngLat(0, -90)), transform.project(new LngLat(0, -transform.maxValidLatitude))); - t.deepEqual(transform.project(new LngLat(0, 90)), transform.project(new LngLat(0, transform.maxValidLatitude))); + t.deepEqual(transform.project(new LngLat(0, -90)), transform.project(new LngLat(0, -MAX_MERCATOR_LATITUDE))); + t.deepEqual(transform.project(new LngLat(0, 90)), transform.project(new LngLat(0, MAX_MERCATOR_LATITUDE))); t.end(); }); @@ -1359,7 +1350,7 @@ test('transform', (t) => { t.test('clamp to bounds', (t) => { const transform = new Transform(); transform.resize(100, 100); - transform.setMaxBounds(new LngLatBounds(new LngLat(-180, -transform.maxValidLatitude), new LngLat(180, transform.maxValidLatitude))); + transform.setMaxBounds(new LngLatBounds(new LngLat(-180, -MAX_MERCATOR_LATITUDE), new LngLat(180, MAX_MERCATOR_LATITUDE))); transform.zoom = 8.56; const options = new FreeCameraOptions(); @@ -1490,7 +1481,7 @@ test('transform', (t) => { }); t.test('_translateCameraConstrained', (t) => { - t.test('it clamps at zoom 0 when lngRange and latRange are not defined', (t) => { + t.test('it clamps at zoom 0 when maxBounds are not defined', (t) => { const transform = new Transform(); transform.center = new LngLat(0, 0); transform.zoom = 10; @@ -1525,8 +1516,7 @@ test('transform', (t) => { transform.center = new LngLat(0, 0); transform.zoom = 20; transform.resize(500, 500); - transform.lngRange = [-5, 5]; - transform.latRange = [-5, 5]; + transform.setMaxBounds(LngLatBounds.convert([-5, -5, 5, 5])); //record constrained zoom transform.zoom = 0; diff --git a/test/unit/source/geojson_worker_source.test.js b/test/unit/source/geojson_worker_source.test.js index e7b4a466a90..6bf3076b691 100644 --- a/test/unit/source/geojson_worker_source.test.js +++ b/test/unit/source/geojson_worker_source.test.js @@ -3,6 +3,7 @@ import GeoJSONWorkerSource from '../../../src/source/geojson_worker_source.js'; import StyleLayerIndex from '../../../src/style/style_layer_index.js'; import {OverscaledTileID} from '../../../src/source/tile_id.js'; import perf from '../../../src/util/performance.js'; +import {getProjection} from '../../../src/geo/projection/index.js'; const actor = {send: () => {}}; @@ -34,7 +35,8 @@ test('reloadTile', (t) => { source: 'sourceId', uid: 0, tileID: new OverscaledTileID(0, 0, 0, 0, 0), - maxZoom: 10 + maxZoom: 10, + projection: getProjection({name: 'mercator'}) }; function addData(callback) { diff --git a/test/unit/source/source_cache.test.js b/test/unit/source/source_cache.test.js index f97a55b40a4..52b2749fbf1 100644 --- a/test/unit/source/source_cache.test.js +++ b/test/unit/source/source_cache.test.js @@ -68,7 +68,8 @@ function createSourceCache(options, used) { type: 'mock-source-type' }, spec), /* dispatcher */ {}, eventedParent)); sc.used = typeof used === 'boolean' ? used : true; - sc.transform = {tileZoom: 0}; + sc.transform = new Transform(); + sc.map = {painter: {transform: sc.transform}}; return {sourceCache: sc, eventedParent}; } @@ -334,7 +335,10 @@ test('SourceCache#removeTile', (t) => { callback(); } }); - sourceCache.map = {painter: {crossTileSymbolIndex: "", tileExtentVAO: {}}}; + sourceCache.map = {painter: {transform: new Transform(), crossTileSymbolIndex: "", tileExtentVAO: {}, context: { + createIndexBuffer: () => {}, + createVertexBuffer: () => {} + }}}; sourceCache._addTile(tileID); diff --git a/test/unit/source/vector_tile_worker_source.test.js b/test/unit/source/vector_tile_worker_source.test.js index 6aa005f14ff..9b90edea628 100644 --- a/test/unit/source/vector_tile_worker_source.test.js +++ b/test/unit/source/vector_tile_worker_source.test.js @@ -6,6 +6,7 @@ import {test} from '../../util/test.js'; import VectorTileWorkerSource from '../../../src/source/vector_tile_worker_source.js'; import StyleLayerIndex from '../../../src/style/style_layer_index.js'; import perf from '../../../src/util/performance.js'; +import {getProjection} from '../../../src/geo/projection/index.js'; import {fileURLToPath} from 'url'; const __dirname = fileURLToPath(new URL('.', import.meta.url)); @@ -19,6 +20,7 @@ test('VectorTileWorkerSource#abortTile aborts pending request', (t) => { source: 'source', uid: 0, tileID: {overscaledZ: 0, wrap: 0, canonical: {x: 0, y: 0, z: 0, w: 0}}, + projection: getProjection({name: 'mercator'}), request: {url: 'http://localhost:2900/abort'} }, (err, res) => { t.false(err); @@ -46,7 +48,8 @@ test('VectorTileWorkerSource#abortTile aborts pending async request', (t) => { source.loadTile({ uid: 0, - tileID: {overscaledZ: 0, wrap: 0, canonical: {x: 0, y: 0, z: 0, w: 0}} + tileID: {overscaledZ: 0, wrap: 0, canonical: {x: 0, y: 0, z: 0, w: 0}}, + projection: getProjection({name: 'mercator'}) }, (err, res) => { t.false(err); t.false(res); @@ -246,6 +249,7 @@ test('VectorTileWorkerSource provides resource timing information', (t) => { source: 'source', uid: 0, tileID: {overscaledZ: 0, wrap: 0, canonical: {x: 0, y: 0, z: 0, w: 0}}, + projection: getProjection({name: 'mercator'}), request: {url: 'http://localhost:2900/faketile.pbf', collectResourceTiming: true} }, (err, res) => { t.false(err); diff --git a/test/unit/source/worker.test.js b/test/unit/source/worker.test.js index 927e4ae0773..3fcaba05458 100644 --- a/test/unit/source/worker.test.js +++ b/test/unit/source/worker.test.js @@ -10,6 +10,7 @@ test('load tile', (t) => { t.test('calls callback on error', (t) => { window.useFakeXMLHttpRequest(); const worker = new Worker(_self); + worker.setProjection(0, {name: 'mercator'}); worker.loadTile(0, { type: 'vector', source: 'source', diff --git a/test/unit/source/worker_tile.test.js b/test/unit/source/worker_tile.test.js index 04375c7826e..9d3b1751daa 100644 --- a/test/unit/source/worker_tile.test.js +++ b/test/unit/source/worker_tile.test.js @@ -3,6 +3,7 @@ import WorkerTile from '../../../src/source/worker_tile.js'; import Wrapper from '../../../src/source/geojson_wrapper.js'; import {OverscaledTileID} from '../../../src/source/tile_id.js'; import StyleLayerIndex from '../../../src/style/style_layer_index.js'; +import {getProjection} from '../../../src/geo/projection/index.js'; function createWorkerTile() { return new WorkerTile({ @@ -12,7 +13,8 @@ function createWorkerTile() { tileSize: 512, source: 'source', tileID: new OverscaledTileID(1, 0, 1, 1, 1), - overscaling: 1 + overscaling: 1, + projection: getProjection({name: 'mercator'}) }); } diff --git a/test/unit/terrain/terrain.test.js b/test/unit/terrain/terrain.test.js index d246283f05a..40dacb0b274 100644 --- a/test/unit/terrain/terrain.test.js +++ b/test/unit/terrain/terrain.test.js @@ -3,7 +3,7 @@ import {extend} from '../../../src/util/util.js'; import {createMap} from '../../util/index.js'; import DEMData from '../../../src/data/dem_data.js'; import {RGBAImage} from '../../../src/util/image.js'; -import MercatorCoordinate from '../../../src/geo/mercator_coordinate.js'; +import MercatorCoordinate, {MAX_MERCATOR_LATITUDE} from '../../../src/geo/mercator_coordinate.js'; import window from '../../../src/util/window.js'; import {OverscaledTileID} from '../../../src/source/tile_id.js'; import styleSpec from '../../../src/style-spec/reference/latest.js'; @@ -369,6 +369,9 @@ test('Elevation', (t) => { }; const map = createMap(t, { style: extend(createStyle(), { + projection: { + name: 'mercator' + }, sources: { trace: { type: 'geojson', @@ -1511,7 +1514,7 @@ test('terrain getBounds', (t) => { map.once('render', () => { t.ok(map.transform.elevation); const bounds = map.getBounds(); - t.same(bounds.getNorth().toFixed(6), map.transform.maxValidLatitude); + t.same(bounds.getNorth().toFixed(6), MAX_MERCATOR_LATITUDE); t.same( toFixed(bounds.toArray()), toFixed([[ -23.3484820899, 77.6464759596 ], [ 23.3484820899, 85.0511287798 ]]) @@ -1521,7 +1524,7 @@ test('terrain getBounds', (t) => { map.setCenter({lng: 0, lat: -90}); const sBounds = map.getBounds(); - t.same(sBounds.getSouth().toFixed(6), -map.transform.maxValidLatitude); + t.same(sBounds.getSouth().toFixed(6), -MAX_MERCATOR_LATITUDE); t.same( toFixed(sBounds.toArray()), toFixed([[ -23.3484820899, -85.0511287798 ], [ 23.3484820899, -77.6464759596]]) diff --git a/test/unit/ui/map.test.js b/test/unit/ui/map.test.js index deec79c18e9..e38a29b03fb 100755 --- a/test/unit/ui/map.test.js +++ b/test/unit/ui/map.test.js @@ -4,6 +4,7 @@ import window from '../../../src/util/window.js'; import Map from '../../../src/ui/map.js'; import {createMap} from '../../util/index.js'; import LngLat from '../../../src/geo/lng_lat.js'; +import LngLatBounds from '../../../src/geo/lng_lat_bounds.js'; import Tile from '../../../src/source/tile.js'; import {OverscaledTileID} from '../../../src/source/tile_id.js'; import {Event, ErrorEvent} from '../../../src/util/evented.js'; @@ -11,6 +12,7 @@ import simulate from '../../util/simulate_interaction.js'; import {fixedLngLat, fixedNum} from '../../util/fixed.js'; import Fog from '../../../src/style/fog.js'; import Color from '../../../src/style-spec/util/color.js'; +import {MAX_MERCATOR_LATITUDE} from '../../../src/geo/mercator_coordinate.js'; function createStyleSource() { return { @@ -234,10 +236,10 @@ test('Map', (t) => { t.stub(Map.prototype, '_detectMissingCSS'); t.stub(Map.prototype, '_authenticate'); const map = new Map({container: window.document.createElement('div'), testMode: true}); - map.transform.lngRange = [-120, 140]; - map.transform.latRange = [-60, 80]; + + map.transform.setMaxBounds(LngLatBounds.convert([-120, -60, 140, 80])); map.transform.resize(600, 400); - t.equal(map.transform.zoom, 0.6983039737971012, 'map transform is constrained'); + t.ok(map.transform.zoom, 0.698303973797101, 'map transform is constrained'); t.ok(map.transform.unmodified, 'map transform is not modified'); map.setStyle(createStyle()); map.on('style.load', () => { @@ -905,7 +907,7 @@ test('Map', (t) => { const map = createMap(t, {zoom: 2, center: [0, 90], pitch: 80, skipCSSStub: true}); const bounds = map.getBounds(); - t.same(bounds.getNorth().toFixed(6), map.transform.maxValidLatitude); + t.same(bounds.getNorth().toFixed(6), MAX_MERCATOR_LATITUDE); t.same( toFixed(bounds.toArray()), toFixed([[ -23.3484820899, 77.6464759596 ], [ 23.3484820899, 85.0511287798 ]]) @@ -915,7 +917,7 @@ test('Map', (t) => { map.setCenter({lng: 0, lat: -90}); const sBounds = map.getBounds(); - t.same(sBounds.getSouth().toFixed(6), -map.transform.maxValidLatitude); + t.same(sBounds.getSouth().toFixed(6), -MAX_MERCATOR_LATITUDE); t.same( toFixed(sBounds.toArray()), toFixed([[ -23.3484820899, -85.0511287798 ], [ 23.3484820899, -77.6464759596]]) @@ -1310,6 +1312,119 @@ test('Map', (t) => { t.end(); }); + t.test('#getProjection', (t) => { + t.test('map defaults to Mercator', (t) => { + const map = createMap(t); + t.deepEqual(map.getProjection(), {name: 'mercator', center: [0, 0]}); + t.end(); + }); + + t.test('respects projection options object', (t) => { + const options = { + name: 'albers', + center: [12, 34], + parallels: [10, 42] + }; + const map = createMap(t, {projection: options}); + t.deepEqual(map.getProjection(), options); + t.end(); + }); + + t.test('respects projection options string', (t) => { + const map = createMap(t, {projection: 'albers'}); + t.deepEqual(map.getProjection(), { + name: 'albers', + center: [-96, 37.5], + parallels: [29.5, 45.5] + }); + t.end(); + }); + + t.test('composites user and default projection options', (t) => { + const options = { + name: 'albers', + center: [12, 34] + }; + const map = createMap(t, {projection: options}); + t.deepEqual(map.getProjection(), { + name: 'albers', + center: [12, 34], + parallels: [29.5, 45.5] + }); + t.end(); + }); + + t.test('does not composite user and default projection options for non-conical projections', (t) => { + const options = { + name: 'naturalEarth', + center: [12, 34] + }; + const map = createMap(t, {projection: options}); + t.deepEqual(map.getProjection(), { + name: 'naturalEarth', + center: [0, 0] + }); + t.end(); + }); + t.end(); + }); + + t.test('#setProjection', (t) => { + t.test('sets projection by string', (t) => { + const map = createMap(t); + map.setProjection('albers'); + t.deepEqual(map.getProjection(), { + name: 'albers', + center: [-96, 37.5], + parallels: [29.5, 45.5] + }); + t.end(); + }); + + t.test('throws error if invalid projection name is supplied', (t) => { + const map = createMap(t); + map.on('error', ({error}) => { + t.match(error.message, /Invalid projection name: fakeProj/); + t.end(); + }); + t.end(); + }); + + t.test('sets projection by options object', (t) => { + const options = { + name: 'albers', + center: [12, 34], + parallels: [10, 42] + }; + const map = createMap(t); + map.setProjection(options); + t.deepEqual(map.getProjection(), options); + t.end(); + }); + + t.test('sets projection by options object with just name', (t) => { + const map = createMap(t); + map.setProjection({name: 'albers'}); + t.deepEqual(map.getProjection(), { + name: 'albers', + center: [-96, 37.5], + parallels: [29.5, 45.5] + }); + t.end(); + }); + + t.test('setProjection with no argument defaults to Mercator', (t) => { + const map = createMap(t); + map.setProjection({name: 'albers'}); + t.equal(map.transform._unmodifiedProjection, false); + map.setProjection(); + t.deepEqual(map.getProjection(), {name: 'mercator', center: [0, 0]}); + t.equal(map.transform._unmodifiedProjection, true); + t.end(); + }); + t.end(); + }); + t.test('#remove', (t) => { const map = createMap(t); t.equal(map.getContainer().childNodes.length, 3); diff --git a/test/unit/ui/marker.test.js b/test/unit/ui/marker.test.js index aa19db9a91f..72742a8abf0 100644 --- a/test/unit/ui/marker.test.js +++ b/test/unit/ui/marker.test.js @@ -830,7 +830,7 @@ test('Drag above horizon clamps', (t) => { }); test('Drag below / behind camera', (t) => { - const map = createMap(t); + const map = createMap(t, {zoom: 3}); map.setPitch(85); const marker = new Marker({draggable: true}) .setLngLat(map.unproject([map.transform.width / 2, map.transform.height - 20])) From ab6203af5858e0d666db5305944a563165848397 Mon Sep 17 00:00:00 2001 From: Anna Peery <42715836+avpeery@users.noreply.github.com> Date: Tue, 19 Oct 2021 15:23:34 -0700 Subject: [PATCH 19/20] Address accessibility issues (#11064) * added aria-expanded and set role to list item for accessibility milestone * in progress adding aria-expanded to marker when toggling popup attached * added aria-expanded true, but not setting to false when marker popup is closed * add listitem role * removed additional title if aria-label is present and set aria-expanded on markers with popups * add role attribute to interactive markers * fixed unit test fail * reverted back to role=list * toggling aria-expanded works, added into unit tests * formatting * Added title for native tooltips in controls --- src/ui/control/attribution_control.js | 7 ++++--- src/ui/control/fullscreen_control.js | 2 +- src/ui/control/geolocate_control.js | 7 ++++--- src/ui/control/navigation_control.js | 2 +- src/ui/marker.js | 16 ++++++++++++---- test/unit/ui/marker.test.js | 2 ++ 6 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/ui/control/attribution_control.js b/src/ui/control/attribution_control.js index deee0c535ae..ffa989d0b0f 100644 --- a/src/ui/control/attribution_control.js +++ b/src/ui/control/attribution_control.js @@ -57,6 +57,7 @@ class AttributionControl { this._map = map; this._container = DOM.create('div', 'mapboxgl-ctrl mapboxgl-ctrl-attrib'); this._compactButton = DOM.create('button', 'mapboxgl-ctrl-attrib-button', this._container); + DOM.create('span', `mapboxgl-ctrl-icon`, this._compactButton).setAttribute('aria-hidden', true); this._compactButton.type = 'button'; this._compactButton.addEventListener('click', this._toggleAttribution); this._setElementTitle(this._compactButton, 'ToggleAttribution'); @@ -96,17 +97,17 @@ class AttributionControl { _setElementTitle(element: HTMLElement, title: string) { const str = this._map._getUIString(`AttributionControl.${title}`); - element.title = str; element.setAttribute('aria-label', str); + if (element.firstElementChild) element.firstElementChild.setAttribute('title', str); } _toggleAttribution() { if (this._container.classList.contains('mapboxgl-compact-show')) { this._container.classList.remove('mapboxgl-compact-show'); - this._compactButton.setAttribute('aria-pressed', 'false'); + this._compactButton.setAttribute('aria-expanded', 'false'); } else { this._container.classList.add('mapboxgl-compact-show'); - this._compactButton.setAttribute('aria-pressed', 'true'); + this._compactButton.setAttribute('aria-expanded', 'true'); } } diff --git a/src/ui/control/fullscreen_control.js b/src/ui/control/fullscreen_control.js index c7be9eaf0c9..9ce26342468 100644 --- a/src/ui/control/fullscreen_control.js +++ b/src/ui/control/fullscreen_control.js @@ -90,7 +90,7 @@ class FullscreenControl { _updateTitle() { const title = this._getTitle(); this._fullscreenButton.setAttribute("aria-label", title); - this._fullscreenButton.title = title; + if (this._fullscreenButton.firstElementChild) this._fullscreenButton.firstElementChild.setAttribute('title', title); } _getTitle() { diff --git a/src/ui/control/geolocate_control.js b/src/ui/control/geolocate_control.js index 0cefc4795cd..6d5164f67e8 100644 --- a/src/ui/control/geolocate_control.js +++ b/src/ui/control/geolocate_control.js @@ -379,8 +379,8 @@ class GeolocateControl extends Evented { this._geolocateButton.classList.remove('mapboxgl-ctrl-geolocate-background-error'); this._geolocateButton.disabled = true; const title = this._map._getUIString('GeolocateControl.LocationNotAvailable'); - this._geolocateButton.title = title; this._geolocateButton.setAttribute('aria-label', title); + if (this._geolocateButton.firstElementChild) this._geolocateButton.firstElementChild.setAttribute('title', title); if (this._geolocationWatchID !== undefined) { this._clearWatch(); @@ -414,18 +414,19 @@ class GeolocateControl extends Evented { this._container.addEventListener('contextmenu', (e: MouseEvent) => e.preventDefault()); this._geolocateButton = DOM.create('button', `mapboxgl-ctrl-geolocate`, this._container); DOM.create('span', `mapboxgl-ctrl-icon`, this._geolocateButton).setAttribute('aria-hidden', true); + this._geolocateButton.type = 'button'; if (supported === false) { warnOnce('Geolocation support is not available so the GeolocateControl will be disabled.'); const title = this._map._getUIString('GeolocateControl.LocationNotAvailable'); this._geolocateButton.disabled = true; - this._geolocateButton.title = title; this._geolocateButton.setAttribute('aria-label', title); + if (this._geolocateButton.firstElementChild) this._geolocateButton.firstElementChild.setAttribute('title', title); } else { const title = this._map._getUIString('GeolocateControl.FindMyLocation'); - this._geolocateButton.title = title; this._geolocateButton.setAttribute('aria-label', title); + if (this._geolocateButton.firstElementChild) this._geolocateButton.firstElementChild.setAttribute('title', title); } if (this.options.trackUserLocation) { diff --git a/src/ui/control/navigation_control.js b/src/ui/control/navigation_control.js index 49c6f00a077..faf046d8b93 100644 --- a/src/ui/control/navigation_control.js +++ b/src/ui/control/navigation_control.js @@ -149,8 +149,8 @@ class NavigationControl { _setButtonTitle(button: HTMLButtonElement, title: string) { const str = this._map._getUIString(`NavigationControl.${title}`); - button.title = str; button.setAttribute('aria-label', str); + if (button.firstElementChild) button.firstElementChild.setAttribute('title', str); } } diff --git a/src/ui/marker.js b/src/ui/marker.js index c4e234e57f4..16053ee0758 100644 --- a/src/ui/marker.js +++ b/src/ui/marker.js @@ -369,6 +369,7 @@ export default class Marker extends Evented { if (this._popup) { this._popup.remove(); this._popup = null; + this._element.removeAttribute('role'); this._element.removeEventListener('keypress', this._onKeyPress); if (!this._originalTabIndex) { @@ -395,11 +396,13 @@ export default class Marker extends Evented { this._popup = popup; if (this._lngLat) this._popup.setLngLat(this._lngLat); + this._element.setAttribute('role', 'button'); this._originalTabIndex = this._element.getAttribute('tabindex'); if (!this._originalTabIndex) { this._element.setAttribute('tabindex', '0'); } this._element.addEventListener('keypress', this._onKeyPress); + this._element.setAttribute('aria-expanded', 'false'); } return this; @@ -456,10 +459,15 @@ export default class Marker extends Evented { */ togglePopup() { const popup = this._popup; - - if (!popup) return this; - else if (popup.isOpen()) popup.remove(); - else popup.addTo(this._map); + if (!popup) { + return this; + } else if (popup.isOpen()) { + popup.remove(); + this._element.setAttribute('aria-expanded', 'false'); + } else { + popup.addTo(this._map); + this._element.setAttribute('aria-expanded', 'true'); + } return this; } diff --git a/test/unit/ui/marker.test.js b/test/unit/ui/marker.test.js index 72742a8abf0..688e2a73260 100644 --- a/test/unit/ui/marker.test.js +++ b/test/unit/ui/marker.test.js @@ -135,6 +135,7 @@ test('Marker#togglePopup opens a popup that was closed', (t) => { .togglePopup(); t.ok(marker.getPopup().isOpen()); + t.equal(marker.getElement().getAttribute('aria-expanded'), 'true'); map.remove(); t.end(); @@ -150,6 +151,7 @@ test('Marker#togglePopup closes a popup that was open', (t) => { .togglePopup(); t.ok(!marker.getPopup().isOpen()); + t.equal(marker.getElement().getAttribute('aria-expanded'), 'false'); map.remove(); t.end(); From 18b8a5f56fb485add41a130f8109ce7efdb3c11b Mon Sep 17 00:00:00 2001 From: Anna Peery <42715836+avpeery@users.noreply.github.com> Date: Tue, 19 Oct 2021 15:30:53 -0700 Subject: [PATCH 20/20] Add touch pan blocker to gesture handling for touch devices (#11116) * initial implementation of touch pan blocker of gesture handler * add default locale to touch pan message -- needs refactoring (some repetitive code between scroll zoom blocker and touch pan blocker) * allow tap zoom with gesture handler implemented, fix flickering alert * Removed unneeded tap references in touch pan * added touch_pan gesture handling unit tests * increased timeout for less flickering * added release testing page for gesture handling * updated debug page for gesture handling * updated documentation for gesture handling to incoporate touch pan * git removed file name change not using * fix scrollable page issue by toggling touch-action css property * override touch-action with specificity, next step - not showing alert until long press on screen * added in removing extra class * use mapTouches and add comments * add comments * fixed touch pitch handler to require three fingers if gesture handling is enabled * remove removing override class while gesture handler still active * fixed typos in unit test * Switched term from gestureHandling to cooperativeGestures * forgot this name change * added clearTimeout to disable methods * addressed issue with css override class when touch zoom rotate is enabled * changed override css class to pan-x pan-y * add cooperative to comment Co-authored-by: Ricky Reusser Co-authored-by: Ricky Reusser --- debug/scroll_zoom_blocker.html | 6 +-- src/css/mapbox-gl.css | 7 +++ src/ui/default_locale.js | 3 +- src/ui/handler/scroll_zoom.js | 9 ++-- src/ui/handler/touch_pan.js | 60 +++++++++++++++++++++- src/ui/handler/touch_zoom_rotate.js | 11 ++++ src/ui/handler_manager.js | 5 +- src/ui/map.js | 10 ++-- test/release/scroll_zoom_blocker.html | 1 + test/unit/ui/handler/scroll_zoom.test.js | 22 ++++---- test/unit/ui/handler/touch_pan.test.js | 64 ++++++++++++++++++++++++ 11 files changed, 172 insertions(+), 26 deletions(-) create mode 120000 test/release/scroll_zoom_blocker.html create mode 100644 test/unit/ui/handler/touch_pan.test.js diff --git a/debug/scroll_zoom_blocker.html b/debug/scroll_zoom_blocker.html index 5bb785705db..af73a356817 100644 --- a/debug/scroll_zoom_blocker.html +++ b/debug/scroll_zoom_blocker.html @@ -1,7 +1,7 @@ - Scroll Zoom Blocker Control + Cooperative Gestures @@ -12,7 +12,7 @@ -
+
@@ -24,7 +24,7 @@ zoom: 12.5, center: [-77.01866, 38.888], style: 'mapbox://styles/mapbox/streets-v10', - gestureHandling: true + cooperativeGestures: true }); map.addControl(new mapboxgl.FullscreenControl()); diff --git a/src/css/mapbox-gl.css b/src/css/mapbox-gl.css index 62dbfd5142d..6a964f77476 100644 --- a/src/css/mapbox-gl.css +++ b/src/css/mapbox-gl.css @@ -770,6 +770,7 @@ a.mapboxgl-ctrl-logo.mapboxgl-compact { } } +.mapboxgl-touch-pan-blocker, .mapboxgl-scroll-zoom-blocker { color: #fff; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif; @@ -789,7 +790,13 @@ a.mapboxgl-ctrl-logo.mapboxgl-compact { transition-delay: 1s; } +.mapboxgl-touch-pan-blocker-show, .mapboxgl-scroll-zoom-blocker-show { opacity: 1; transition: opacity 0.1s ease-in-out; } + +.mapboxgl-canvas-container.mapboxgl-touch-pan-blocker-override.mapboxgl-scrollable-page, +.mapboxgl-canvas-container.mapboxgl-touch-pan-blocker-override.mapboxgl-scrollable-page .mapboxgl-canvas { + touch-action: pan-x pan-y; +} diff --git a/src/ui/default_locale.js b/src/ui/default_locale.js index 520109bf1a0..bc7d47c600b 100644 --- a/src/ui/default_locale.js +++ b/src/ui/default_locale.js @@ -17,7 +17,8 @@ const defaultLocale = { 'ScaleControl.Miles': 'mi', 'ScaleControl.NauticalMiles': 'nm', 'ScrollZoomBlocker.CtrlMessage': 'Use ctrl + scroll to zoom the map', - 'ScrollZoomBlocker.CmdMessage': 'Use ⌘ + scroll to zoom the map' + 'ScrollZoomBlocker.CmdMessage': 'Use ⌘ + scroll to zoom the map', + 'TouchPanBlocker.Message': 'Use two fingers to move the map' }; export default defaultLocale; diff --git a/src/ui/handler/scroll_zoom.js b/src/ui/handler/scroll_zoom.js index b5257576c69..7a815207089 100644 --- a/src/ui/handler/scroll_zoom.js +++ b/src/ui/handler/scroll_zoom.js @@ -143,7 +143,7 @@ class ScrollZoomHandler { if (this.isEnabled()) return; this._enabled = true; this._aroundCenter = options && options.around === 'center'; - if (this._map._gestureHandling) this._addScrollZoomBlocker(); + if (this._map._cooperativeGestures) this._addScrollZoomBlocker(); } /** @@ -155,13 +155,16 @@ class ScrollZoomHandler { disable() { if (!this.isEnabled()) return; this._enabled = false; - if (this._map._gestureHandling) this._alertContainer.remove(); + if (this._map._cooperativeGestures) { + clearTimeout(this._alertTimer); + this._alertContainer.remove(); + } } wheel(e: WheelEvent) { if (!this.isEnabled()) return; - if (this._map._gestureHandling) { + if (this._map._cooperativeGestures) { if (!e.ctrlKey && !e.metaKey && !this.isZooming() && !this._isFullscreen()) { this._showBlockerAlert(); return; diff --git a/src/ui/handler/touch_pan.js b/src/ui/handler/touch_pan.js index c435bb246e2..59b478001e1 100644 --- a/src/ui/handler/touch_pan.js +++ b/src/ui/handler/touch_pan.js @@ -1,21 +1,31 @@ // @flow import Point from '@mapbox/point-geometry'; +import type Map from '../map.js'; import {indexTouches} from './handler_util.js'; +import {bindAll} from '../../util/util.js'; +import DOM from '../../util/dom.js'; export default class TouchPanHandler { + _map: Map; + _el: HTMLElement; _enabled: boolean; _active: boolean; _touches: { [string | number]: Point }; _minTouches: number; _clickTolerance: number; _sum: Point; + _alertContainer: HTMLElement; + _alertTimer: TimeoutID; - constructor(options: { clickTolerance: number }) { + constructor(map: Map, options: { clickTolerance: number }) { + this._map = map; + this._el = map.getCanvasContainer(); this._minTouches = 1; this._clickTolerance = options.clickTolerance || 1; this.reset(); + bindAll(['_addTouchPanBlocker', '_showTouchPanBlockerAlert'], this); } reset() { @@ -30,7 +40,21 @@ export default class TouchPanHandler { touchmove(e: TouchEvent, points: Array, mapTouches: Array) { if (!this._active || mapTouches.length < this._minTouches) return; + + // if cooperative gesture handling is set to true, require two fingers to touch pan + if (this._map._cooperativeGestures && !this._map.isMoving()) { + if (mapTouches.length === 1) { + this._showTouchPanBlockerAlert(); + return; + } else if (this._alertContainer.style.visibility !== 'hidden') { + // immediately hide alert if it is visible when two fingers are used to pan. + this._alertContainer.style.visibility = 'hidden'; + clearTimeout(this._alertTimer); + } + } + e.preventDefault(); + return this._calculateTransform(e, points, mapTouches); } @@ -84,10 +108,20 @@ export default class TouchPanHandler { enable() { this._enabled = true; + if (this._map._cooperativeGestures) { + this._addTouchPanBlocker(); + // override touch-action css property to enable scrolling page over map + this._el.classList.add('mapboxgl-touch-pan-blocker-override', 'mapboxgl-scrollable-page'); + } } disable() { this._enabled = false; + if (this._map._cooperativeGestures) { + clearTimeout(this._alertTimer); + this._alertContainer.remove(); + this._el.classList.remove('mapboxgl-touch-pan-blocker-override', 'mapboxgl-scrollable-page'); + } this.reset(); } @@ -98,4 +132,28 @@ export default class TouchPanHandler { isActive() { return this._active; } + + _addTouchPanBlocker() { + if (this._map && !this._alertContainer) { + this._alertContainer = DOM.create('div', 'mapboxgl-touch-pan-blocker', this._map._container); + + this._alertContainer.textContent = this._map._getUIString('TouchPanBlocker.Message'); + + // dynamically set the font size of the touch pan blocker alert message + this._alertContainer.style.fontSize = `${Math.max(10, Math.min(24, Math.floor(this._el.clientWidth * 0.05)))}px`; + } + } + + _showTouchPanBlockerAlert() { + if (this._alertContainer.style.visibility === 'hidden') this._alertContainer.style.visibility = 'visible'; + + this._alertContainer.classList.add('mapboxgl-touch-pan-blocker-show'); + + clearTimeout(this._alertTimer); + + this._alertTimer = setTimeout(() => { + this._alertContainer.classList.remove('mapboxgl-touch-pan-blocker-show'); + }, 500); + } + } diff --git a/src/ui/handler/touch_zoom_rotate.js b/src/ui/handler/touch_zoom_rotate.js index 199fd6cec89..628ed3695aa 100644 --- a/src/ui/handler/touch_zoom_rotate.js +++ b/src/ui/handler/touch_zoom_rotate.js @@ -2,6 +2,7 @@ import Point from '@mapbox/point-geometry'; import DOM from '../../util/dom.js'; +import type Map from '../map.js'; class TwoTouchHandler { @@ -205,6 +206,12 @@ export class TouchPitchHandler extends TwoTouchHandler { _valid: boolean | void; _firstMove: number; _lastPoints: [Point, Point]; + _map: Map; + + constructor(map: Map) { + super(); + this._map = map; + } reset() { super.reset(); @@ -220,13 +227,17 @@ export class TouchPitchHandler extends TwoTouchHandler { this._valid = false; } + } _move(points: [Point, Point], center: Point, e: TouchEvent) { const vectorA = points[0].sub(this._lastPoints[0]); const vectorB = points[1].sub(this._lastPoints[1]); + if (this._map._cooperativeGestures && e.touches.length < 3) return; + this._valid = this.gestureBeginsVertically(vectorA, vectorB, e.timeStamp); + if (!this._valid) return; this._lastPoints = points; diff --git a/src/ui/handler_manager.js b/src/ui/handler_manager.js index a3fa767706c..238f2078445 100644 --- a/src/ui/handler_manager.js +++ b/src/ui/handler_manager.js @@ -246,7 +246,7 @@ class HandlerManager { const tapDragZoom = new TapDragZoomHandler(); this._add('tapDragZoom', tapDragZoom); - const touchPitch = map.touchPitch = new TouchPitchHandler(); + const touchPitch = map.touchPitch = new TouchPitchHandler(map); this._add('touchPitch', touchPitch); const mouseRotate = new MouseRotateHandler(options); @@ -256,7 +256,7 @@ class HandlerManager { this._add('mousePitch', mousePitch, ['mouseRotate']); const mousePan = new MousePanHandler(options); - const touchPan = new TouchPanHandler(options); + const touchPan = new TouchPanHandler(map, options); map.dragPan = new DragPanHandler(el, mousePan, touchPan); this._add('mousePan', mousePan); this._add('touchPan', touchPan, ['touchZoom', 'touchRotate']); @@ -309,6 +309,7 @@ class HandlerManager { isZooming() { return !!this._eventsInProgress.zoom || this._map.scrollZoom.isZooming(); } + isRotating() { return !!this._eventsInProgress.rotate; } diff --git a/src/ui/map.js b/src/ui/map.js index 7d6eec2e83b..51b93b8431c 100755 --- a/src/ui/map.js +++ b/src/ui/map.js @@ -107,7 +107,7 @@ type MapOptions = { doubleClickZoom?: boolean, touchZoomRotate?: boolean, touchPitch?: boolean, - gestureHandling?: boolean, + cooperativeGestures?: boolean, trackResize?: boolean, center?: LngLatLike, zoom?: number, @@ -151,7 +151,7 @@ const defaultOptions = { doubleClickZoom: true, touchZoomRotate: true, touchPitch: true, - gestureHandling: false, + cooperativeGestures: false, bearingSnap: 7, clickTolerance: 3, @@ -238,7 +238,7 @@ const defaultOptions = { * @param {boolean} [options.doubleClickZoom=true] If `true`, the "double click to zoom" interaction is enabled (see {@link DoubleClickZoomHandler}). * @param {boolean | Object} [options.touchZoomRotate=true] If `true`, the "pinch to rotate and zoom" interaction is enabled. An `Object` value is passed as options to {@link TouchZoomRotateHandler#enable}. * @param {boolean | Object} [options.touchPitch=true] If `true`, the "drag to pitch" interaction is enabled. An `Object` value is passed as options to {@link TouchPitchHandler#enable}. - * @param {boolean} [options.gestureHandling=false] If `true`, scroll zoom will require pressing the ctrl or ⌘ key while scrolling to zoom map. + * @param {boolean} [options.cooperativeGestures] If `true`, scroll zoom will require pressing the ctrl or ⌘ key while scrolling to zoom map, and touch pan will require using two fingers while panning to move the map. Touch pitch will require three fingers to activate if enabled. * @param {boolean} [options.trackResize=true] If `true`, the map will automatically resize when the browser window resizes. * @param {LngLatLike} [options.center=[0, 0]] The inital geographical centerpoint of the map. If `center` is not specified in the constructor options, Mapbox GL JS will look for it in the map's style object. If it is not specified in the style, either, it will default to `[0, 0]` Note: Mapbox GL uses longitude, latitude coordinate order (as opposed to latitude, longitude) to match GeoJSON. * @param {number} [options.zoom=0] The initial zoom level of the map. If `zoom` is not specified in the constructor options, Mapbox GL JS will look for it in the map's style object. If it is not specified in the style, either, it will default to `0`. @@ -349,7 +349,7 @@ class Map extends Camera { _removed: boolean; _speedIndexTiming: boolean; _clickTolerance: number; - _gestureHandling: boolean; + _cooperativeGestures: boolean; _silenceAuthErrors: boolean; _averageElevationLastSampledAt: number; _averageElevation: EasedVariable; @@ -450,7 +450,7 @@ class Map extends Camera { this._mapId = uniqueId(); this._locale = extend({}, defaultLocale, options.locale); this._clickTolerance = options.clickTolerance; - this._gestureHandling = options.gestureHandling; + this._cooperativeGestures = options.cooperativeGestures; this._averageElevationLastSampledAt = -Infinity; this._averageElevation = new EasedVariable(0); diff --git a/test/release/scroll_zoom_blocker.html b/test/release/scroll_zoom_blocker.html new file mode 120000 index 00000000000..9d1fff0af99 --- /dev/null +++ b/test/release/scroll_zoom_blocker.html @@ -0,0 +1 @@ +../../debug/scroll_zoom_blocker.html \ No newline at end of file diff --git a/test/unit/ui/handler/scroll_zoom.test.js b/test/unit/ui/handler/scroll_zoom.test.js index 3fabc22e563..bad0a6afa2b 100644 --- a/test/unit/ui/handler/scroll_zoom.test.js +++ b/test/unit/ui/handler/scroll_zoom.test.js @@ -24,12 +24,12 @@ function createMap(t) { }); } -function createMapWithGestureHandling(t) { +function createMapWithCooperativeGestures(t) { t.stub(Map.prototype, '_detectMissingCSS'); t.stub(Map.prototype, '_authenticate'); return new Map({ container: DOM.create('div', '', window.document.body), - gestureHandling: true + cooperativeGestures: true }); } @@ -376,15 +376,15 @@ test('ScrollZoomHandler', (t) => { t.end(); }); -test('When gestureHandling option is set to true, a .mapboxgl-scroll-zoom-blocker element is added to map', (t) => { - const map = createMapWithGestureHandling(t); +test('When cooperativeGestures option is set to true, a .mapboxgl-scroll-zoom-blocker element is added to map', (t) => { + const map = createMapWithCooperativeGestures(t); t.equal(map.getContainer().querySelectorAll('.mapboxgl-scroll-zoom-blocker').length, 1); t.end(); }); -test('When gestureHandling option is set to true, scroll zoom is prevented when the ctrl key or meta key is not pressed during wheel event', (t) => { - const map = createMapWithGestureHandling(t); +test('When cooperativeGestures option is set to true, scroll zoom is prevented when the ctrl key or meta key is not pressed during wheel event', (t) => { + const map = createMapWithCooperativeGestures(t); const zoomSpy = t.spy(); map.on('zoom', zoomSpy); @@ -395,8 +395,8 @@ test('When gestureHandling option is set to true, scroll zoom is prevented when t.end(); }); -test('When gestureHandling option is set to true, scroll zoom is activated when ctrl key is pressed during wheel event', (t) => { - const map = createMapWithGestureHandling(t); +test('When cooperativeGestures option is set to true, scroll zoom is activated when ctrl key is pressed during wheel event', (t) => { + const map = createMapWithCooperativeGestures(t); const zoomSpy = t.spy(); map.on('zoom', zoomSpy); @@ -409,8 +409,8 @@ test('When gestureHandling option is set to true, scroll zoom is activated when t.end(); }); -test('When gestureHandling option is set to true, scroll zoom is activated when meta key is pressed during wheel event', (t) => { - const map = createMapWithGestureHandling(t); +test('When cooperativeGestures option is set to true, scroll zoom is activated when meta key is pressed during wheel event', (t) => { + const map = createMapWithCooperativeGestures(t); const zoomSpy = t.spy(); map.on('zoom', zoomSpy); @@ -424,7 +424,7 @@ test('When gestureHandling option is set to true, scroll zoom is activated when }); test('Disabling scrollZoom removes scroll zoom blocker container', (t) => { - const map = createMapWithGestureHandling(t); + const map = createMapWithCooperativeGestures(t); map.scrollZoom.disable(); diff --git a/test/unit/ui/handler/touch_pan.test.js b/test/unit/ui/handler/touch_pan.test.js new file mode 100644 index 00000000000..cd579261fac --- /dev/null +++ b/test/unit/ui/handler/touch_pan.test.js @@ -0,0 +1,64 @@ +import {test} from '../../../util/test.js'; +import window from '../../../../src/util/window.js'; +import Map from '../../../../src/ui/map.js'; +import DOM from '../../../../src/util/dom.js'; +import simulate from '../../../util/simulate_interaction.js'; + +function createMapWithCooperativeGestures(t) { + t.stub(Map.prototype, '_detectMissingCSS'); + t.stub(Map.prototype, '_authenticate'); + return new Map({ + container: DOM.create('div', '', window.document.body), + cooperativeGestures: true + }); +} + +test('If cooperativeGestures option is set to true, a `.mapboxgl-touch-pan-blocker` element is added to map', (t) => { + const map = createMapWithCooperativeGestures(t); + + t.equal(map.getContainer().querySelectorAll('.mapboxgl-touch-pan-blocker').length, 1); + t.end(); +}); + +test('If cooperativeGestures option is set to true, touch pan is prevented when one finger is used to pan', (t) => { + const map = createMapWithCooperativeGestures(t); + const target = map.getCanvas(); + + const moveSpy = t.spy(); + map.on('move', moveSpy); + + simulate.touchstart(map.getCanvas(), {touches: [{target, identifier: 1, clientX: 0, clientY: -50}]}); + map._renderTaskQueue.run(); + + simulate.touchmove(map.getCanvas(), {touches: [{target, identifier: 1, clientX: 0, clientY: -40}]}); + map._renderTaskQueue.run(); + + t.equal(moveSpy.callCount, 0); + t.end(); +}); + +test('If cooperativeGestures option is set to true, touch pan is triggered when two fingers are used to pan', (t) => { + const map = createMapWithCooperativeGestures(t); + const target = map.getCanvas(); + + const moveSpy = t.spy(); + map.on('move', moveSpy); + + simulate.touchstart(map.getCanvas(), {touches: [{target, identifier: 1, clientX: 0, clientY: -40}, {target, identifier: 2, clientX: 0, clientY: -30}]}); + map._renderTaskQueue.run(); + + simulate.touchmove(map.getCanvas(), {touches: [{target, identifier: 1, clientX: 0, clientY: -50}, {target, identifier: 2, clientX: 0, clientY: -40}]}); + map._renderTaskQueue.run(); + + t.equal(moveSpy.callCount, 1); + t.end(); +}); + +test('Disabling touch pan removes the `.mapboxgl-touch-pan-blocker` element', (t) => { + const map = createMapWithCooperativeGestures(t); + + map.handlers._handlersById.touchPan.disable(); + + t.equal(map.getContainer().querySelectorAll('.mapboxgl-touch-pan-blocker').length, 0); + t.end(); +});