From 75690af72478293e94198c2bfa7d54f8e321fc70 Mon Sep 17 00:00:00 2001 From: vincentsarago Date: Sun, 14 Jul 2019 16:05:31 -0400 Subject: [PATCH 1/2] check blocksize and adapt if raster is too small --- rio_cogeo/cogeo.py | 44 ++++++++++++++++++++++----------- rio_cogeo/errors.py | 4 +++ tests/fixtures/image_171px.tif | Bin 0 -> 88284 bytes tests/fixtures/image_51px.tif | Bin 0 -> 8268 bytes tests/test_cogeo.py | 39 +++++++++++++++++++++++++++-- 5 files changed, 71 insertions(+), 16 deletions(-) create mode 100644 tests/fixtures/image_171px.tif create mode 100644 tests/fixtures/image_51px.tif diff --git a/rio_cogeo/cogeo.py b/rio_cogeo/cogeo.py index 584e050..a41bf77 100644 --- a/rio_cogeo/cogeo.py +++ b/rio_cogeo/cogeo.py @@ -2,6 +2,7 @@ import os import sys +import math import warnings import tempfile from contextlib import contextmanager @@ -20,7 +21,7 @@ import mercantile from supermercado.burntiles import tile_extrema -from rio_cogeo.errors import LossyCompression +from rio_cogeo.errors import LossyCompression, IncompatibleBlockRasterSize from rio_cogeo.utils import ( get_maximum_overview_level, has_alpha_band, @@ -122,6 +123,30 @@ def cog_translate( LossyCompression, ) + tilesize = min(int(dst_kwargs["blockxsize"]), int(dst_kwargs["blockysize"])) + + if src_dst.width < tilesize or src_dst.height < tilesize: + tilesize = 2 ** int(math.log(min(src_dst.width, src_dst.height), 2)) + if tilesize < 64: + warnings.warn( + "Raster has dimension < 64px. Output COG cannot be tiled" + " and overviews cannot be added.", + IncompatibleBlockRasterSize, + ) + dst_kwargs.pop("blockxsize", None) + dst_kwargs.pop("blockysize", None) + dst_kwargs.pop("tiled") + overview_level = 0 + + else: + warnings.warn( + "Block Size are bigger than raster sizes. " + "Setting blocksize to {}".format(tilesize), + IncompatibleBlockRasterSize, + ) + dst_kwargs["blockxsize"] = tilesize + dst_kwargs["blockysize"] = tilesize + vrt_params = dict(add_alpha=True) if nodata is not None: @@ -141,9 +166,6 @@ def cog_translate( ) center = [(bounds[0] + bounds[2]) / 2, (bounds[1] + bounds[3]) / 2] - tilesize = min( - int(dst_kwargs["blockxsize"]), int(dst_kwargs["blockysize"]) - ) lat = 0 if latitude_adjustment else center[1] max_zoom = get_max_zoom(src_dst, lat=lat, tilesize=tilesize) @@ -208,17 +230,11 @@ def cog_translate( mask_value = vrt_dst.dataset_mask(window=w) tmp_dst.write_mask(mask_value, window=w) - if not quiet: - click.echo("Adding overviews...", err=True) - if overview_level is None: - overview_level = get_maximum_overview_level( - vrt_dst, - min( - int(dst_kwargs["blockxsize"]), - int(dst_kwargs["blockysize"]), - ), - ) + overview_level = get_maximum_overview_level(vrt_dst, tilesize) + + if not quiet and overview_level: + click.echo("Adding overviews...", err=True) overviews = [2 ** j for j in range(1, overview_level + 1)] tmp_dst.build_overviews( diff --git a/rio_cogeo/errors.py b/rio_cogeo/errors.py index 1f018a0..d5dd2df 100644 --- a/rio_cogeo/errors.py +++ b/rio_cogeo/errors.py @@ -7,3 +7,7 @@ class DeprecationWarning(UserWarning): class LossyCompression(UserWarning): """Rio-cogeo module Lossy compression warning.""" + + +class IncompatibleBlockRasterSize(UserWarning): + """Rio-cogeo module incompatible raster block/size warning.""" diff --git a/tests/fixtures/image_171px.tif b/tests/fixtures/image_171px.tif new file mode 100644 index 0000000000000000000000000000000000000000..07438a281d487cf566b94c062c924db596340ce6 GIT binary patch literal 88284 zcma&v2bgAASugrVee^uua}|_fVyEg*Ip*ybIRV2A!@vZF zG$R9uh=d`_5Jg20L@uZx0-|ya=mGHnB6>I;>i*vKR+lXtJr~yO-nGB|t-aR!|G#0q zYpwn5*ip0QzpPoa=9z2OJmV+VJj2=B{P&D=&VR!BPrCM5|NZ33^|uMa{O6sYzjDtPoL_QIJ@d}v-ZtO;xflG`a{dzM&%gJ-uK8)# z-{}0E_y6RY4bH#d{N4Be#G19vpY6f-yzwX2%sKCIJ^uG!%Kv|U-I_K3fB*Yw&2CoH z(1tZ@b`7jqbNJwzHCNrXX3ZV1UbE)Gr`N1`LUZ5p-8E}I@XTkd`DDX0)_ig58Ke~d z?;9T(o|-;&eB`8Up^ zb!*oA3^?+f;LEk2_^Ef_e_nk4U*3KHË%})dV8EYQe6wp0m&F|d(Q{~_4O?$`Z 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 literal 0 HcmV?d00001 diff --git a/tests/fixtures/image_51px.tif b/tests/fixtures/image_51px.tif new file mode 100644 index 0000000000000000000000000000000000000000..01cff3dc44ef0f6984cf56c60baafddbad464fd7 GIT binary patch literal 8268 zcmaKxdu&{1nZ}*Af-YirL2Brh#*VLZznn8OXYMohTx`$%ez(US-{UxTqA_Na(@2w)m^=uZ*YF$^i^HmoIk_)iGRGRE6@3V@gx4bR{ehmSax*z$D^TCdSPQ` zer97P_>taTe|%$MwRdf1bs^B7trVsUqs34VS{9?;0y-G=y(#0}|g?U+{1ap!;~rIE4>J7~@DEZ-WHg2tNG$yqJuj)GQ7>1{ca zv!u7@b+#-6YUQ-qRW>R40du0?k_OL>LlLI#(Z>KbXie)KMaf&&E9D_M-)BzkHpb2F z3Xn81H^+d%P#P&^4@`hf9L|z5G6jCEoHe>DtA`%oX7B(;EY_MHlrmaY#6?TW;3$B~ z;wtOqtQgapHrlf~Iqe*tuzJeerjat-(^-+uo_B_(3lm2SN=dJjbhiAUHLJDd;Z0*J zFdBpR8e@>ap|xdLnpV!Z!Y$cXW2JgWq0&6UAYi*u6YY~yyEIXkx7>LUczh)}m@&sH zU~Isg?99$}ot)u{*~J3$gpWyC9ZTplC3}sDUSpgY2hBRUR_MAg6P~NPJ<)n%;l-Zf56x7zTjZU6OqhTroRKd~!fL zBbbx|^MZ=SLW|j5g)XbR(rZfYHpDnstV%wT%M(zz;*)Q6jv|l42}cKipJ7Z7`L>+S zmXW>z6vpP!-LhmTR51%{*Hlsa{q8JLs1}zEh z)I*ECz`6#k86b7U(5(kvYDf~f02t&4D)fegSRMBmY?%QmHE2mPh{2v^X@pYpR^cCd z(Ld`2jEJcufNh@mJOet0r^o^V#9>kdT^)_t{S889R*GbS$O{R1LaRAs~9ESsGLvr}N;6Z}lA zu_Omf38OtHe8XPg&a7i0lSXGjuN1AmI*)W~M}g-WnKBS`Yg#-aM3{Ty*KM<$m3&o)zov$=Xppn; z!?1Q=Rj1^4>&8%p8o?}pg~cgF2GQD!2nmsM^cZ3)SBPJb#zZWi16uGs=Hfw6k(DBe zY*|LI1tvKFhWIgx`yaZnuy(spzBQwISAHb9-0v(6kIxU7<8~!YScfdhp8nvFl(M)= zFTVVyUK%&qGS2Xf*_md17&d#VL)O%wl!GXk;j`D20FO>UC3ZMQ0bd1J$6aBd<3IQq z;vbUI0PCn7DRvgZ$8f-RQM!ih4@4`cln5i$aYTuCC-PG%u^fB}Ztg&MJ9Q-V*}=r_kP3POp- zOfHa@xp;kF;O>XMh2D1ckBHG!D;E67*>3$f_cO@q=KaFwZA>SsK)(@fk2a^bZ@=>i zoWvKMWiAe88L}jlKvS<&SQ?NJKdK-i%;gxF!Us4yq#-KA-^rJLGgSuf6=5~Hin6Et z*wa5W;SwTEC{@BJ6mNy`R}bEcXa}t6t*r-$oxzrsocLJU=B-hW2;~h!0i%*e@Ey%? zLYadB7Q&J(-U;FG79k8)YV%adFRQl>X;^`(t{O6fNm7r4i1+BmdX3}#rWmjRVD(h7 zNy>AA6`1qjc#&Y3k?=y`F9|Q7HyTCYRRFUEde{SdTxIUCLEA z+U>T<)#%ZVmK&RhR`yTg%toc;9&S(>86U=o3#>Au>_ez%sVwNC@Tm<0zXFnHO=wT; zMu>%0&JPTQt*#h!!9SV8JvN?^yz!g z+ea6P$Z%|t^r7!^hi8bd#vG&1!I6ZwOBsNP7%9a*V_ZD08aRLncPCQO?3zx>?9z_| z12dsUKk@93oN|J5M9W;zh%7tGwE60tzJiPZ80QmnM_r*NLtWPs5GhPLXrkBkcs{n% zzW>N)a0%Hz;R??JZ%D$Ogf_?mf(0$`Ktxb4=P)T$WKIrPl1z$^kzAaU3&>3NRnI^3 z;&5X5@uyxgn?hP^ii_elwZ5P(Bm`ZcvN#LW-1|QFER<3-`wZAcS?8ddQ!YhCki8|h zw+ak{Qg()Bw6=mf+$5mXCOShfuyC<c=fgUM2x8bhFiP zdX*yn$)Si=SY?iEVlG(fgs;ySgFqmWSqw-hJJ?WopK%;ZXQiCW{@PD}{%4cB0y&P6 z=~U%_60C-k%R`hos3Sw2B`Z--Ln)|pSM2^8jT2!SG$&vTXS4Ym+y+jf23HuDuvSM| zw1tX@Ah`)DFc3jtzz=kxv`#ef*pBJ(6wgw8?ZHWsI$K${dMM(VcP_Pg3OnU1(StDp zi={<(mcDV}2hKp96=7)f1EblsyFUGl2!t^XTGq(T0HcV*mC*%tm^qz!fnFM`AvB0b zXa7Lz;OW+lG8e{$nHU@*zN+3*Tp{8#*bD1-o9vlndB5mF2_lu$-^e!(hZ1`zOe5sR^}fUojJV|jKLB{fuHb6bch8O0X7cK`Q%q*MkqO04w2=v zLm`1Mih$8?eD+%Ms4ooNPG{;NH&>Wm27oCJrd;L5_~4BoAif)@wraU;^D4P z%i^w5IAm|d7N{XVkeFOGbfxxS1#r^ScE}{$WVFB|(M-m8_2UY^5?^j0fU&uxl`ZRll@-?=Mm5OOiQdsqJZf@l)kU+~^ zlDpyvPJH>Xf4kIfo82`S!w*Rfuo+zy`|wo9%{oR3UBKv=1B5^_6_zWoM9)bmfhY1S zFrmk(oaNod1Qqt3_u9T_%N=Ttr1l~t0@Q5XJimO};jW;6GL$@JjRv(n-god`5e3fG z6eEckS@Jhct}4ZaiiyBTF-|(6f#=S80i)vKwVF)H8eLRd@gjgi_?2^XBKjZLpf92Y zb(ZA7WU{)&)ZWMp)1|8iF1OpyKlelW)$L>V-`F4g+v_BYy9}AsYc&`0c7Gk=30W$| z*`?e3v1LdDB>oRVPUuKkGWsFn@!~q_0wKT%D8NMcY+2G!2=6amCn}dqysA$uozl6= zG){D+u3(+$jKr5R)y+W*_Tp_#AKKaDUs}79&X8VCh+n)HGyz6R8c>MZ{wc#v$yJP( zHq4&7#oOSp`X+?HL|#=-F3tp_X9$86rpZe6tBI1Z{FO;k+~QN)F> zs#OeloTRIV9mCW1;FQ(dkONJNw@x(89>Jk6zG%TQc)fLsD#n{Kf#VTA;f*vQh$O=P z?a$JLSUfcv*Ik;>-~7D+191lHcs@-jUV*nGLb?B|F zn-G{%oZfqf?5UIBuy^X7r&$FfxJRY{MqGf+uN;Vt-iC$;Z4h^~#K8?9;VXJbx=l(d zJr6BTvMMI(eiKol3<;c0*|4lMDG z!#gHf4{wArT|0d4)6ahO>6ZzpCpv2jOi)S?n>RM!FVV4Qc&#IRD9RO?A?bGM#*F^P z4FduAfmK3w%bBkk93|1N^RA%=+UBDHZlbZk*gW!PHvlT&hqhTbA-$ivX#f~5irmDn z*px$KHsK^7pIkhho7k?lPDE1s5F4|Takrg&5}CdB;v0kPz&M31ARDgJNE0}C0}n&7 z1iQEP($D|QT#{FG1r~~(w>CUBfB57htd3B24t#(EqSu^$}-U!GhVHYe1 zet5Z{vIt9;GOm$H3d+jH155YXn*8A7R%QwDGC?EUA5lY6^OVM@dMm)eocq7p3O z-q&kl;JneC=$3Mrz>S)SH{7C`r>~>2XD;vP9JRZ(_YB=dr&7ZbJ13>)wy2Uy@xb;& zD5?XDeNom6JTy!+@r{ns2q@jl(oJ_&rjL`GbE|iyDu?Vr(Zs%UvCVFt$y0l;-A4BJ zeeRo=ue9I0+n?Eso8h!M=t_s~U70~3a4#~MAw?2CA zo+sKD1)sD}*n1$c2M#U1h7_nfgH5Jj`EbR)E~HuARiJ9vjbV!nyHn6rE*Rf)UAK=t zSd_;7;K9Ktpu$L%LV4;~bMaJt?$+kg?ViXiGH%SB6m6cT)~gLOSGRe5YFT_m!2%UE zkxg1!2$4r>6V6;P=88;5BIVa!`@Q5VATtDm?1SSAUdD{fDuD^Ez#)?3bqtN+mQY7f zNV;fxnLF_l8Z)sULONKJwV4x{>Y+sGAaM+*RuC$i;mXK#u5qN0Tf2C<{mLt^4w_<^ zq&qrq^)+n4CX9iN?54d06$-%_%JU~K{i*%iKee4B3(@QUvYzO;=QBPV;D0#s}RCgju) zYEB>f{1=|9w~ogP>+VpCElsk|6K&CpvK%vv*$dGna$Dka;AEa zHI}AsNtO??Q|cR?M@!C7i(OE4U22JRmx8ecfO(>G9txtLezHW3aEE7uqcgMzvGmHr zpE=)tpOM<C{HW;0J_q{f4>RM~*#qa$Lkd2wc4?X%ky#cOew`Xx+ zrUsIg_KzfWS24YQQxY|HYE#Ex(V;z1?>CH1EuEU%cXnd_R?Hb}quEv8=o~_l{0-jM zXt&tc^+cw*NM6u9;O(SIAhrj_49-frxXz5fc>T)di|v`YBR_ocr&rz;)HPT-PoKr#4uRNBYJY)*11AJZN8etCAut3CRg7oPTmX^ zw7~#~74}0oFNyRyY`ei2doo-nj*y1Z=ww8LR5`SH?2(O|KP#$Y1diF+VZ*^Vr?Qg{_yd5I-~@OGB?s0=gDv}b z>#U}0Td;)i#&T;2iS(qeKwvOTX~T`_&pF4~VP<{%p=^CCUOY$+x+Aj-%cm+cCk+0H zM(Y+>dg~8wQ&``<)PCuOfB(&|FCM?+tKr0678{8z#tQ3*lZl3tE5oBL%2qhF!`UIF`5HH?wB z7^?H^(y3hi2wP$PNcE`;KN`=ix0cVo^KSd{yX_ZVc>OD1{?0$Y@Qb&8d*$2Dzv}Qe za-ew9~vTazD?KR-yRPgO5B%OnFIRqb4xEG`(=!!pa>uf4;VU z?!Kq@Z`@O;9C-d;UT^LB)R(^g-N5Ml(G!nCH5$OOXzi$;Jm`(ikp Date: Sun, 14 Jul 2019 16:10:26 -0400 Subject: [PATCH 2/2] validate small cog created with rio-cogeo --- tests/test_cogeo.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_cogeo.py b/tests/test_cogeo.py index c9197d7..14d35d4 100644 --- a/tests/test_cogeo.py +++ b/tests/test_cogeo.py @@ -284,6 +284,7 @@ def test_cog_translate_valid_blocksize(): cog_translate( raster_path_toosmall, "cogeo.tif", default_profile, quiet=True ) + assert cog_validate("cogeo.tif") with rasterio.open("cogeo.tif") as src: assert src.height == 51 assert src.width == 51