a #e(@sddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z m Z ddlmZmZddlmZddlmZddlmZddlmZdd lmZmZmZed Zd Z d d Z!ddZ"dS)N) ColorInterp)has_alpha_bandlinear_rescale)cmap apply_cmap)InvalidColorMapName) hsv_blend) LightSource) COGReader)calculate_default_transform reproject Resamplingz app.loggercCsddd}|||S)Ntif)gtiff gtiff-rgb)get) export_format extensionsr/webodm/app/raster_utils.pyextension_for_export_formatsrc/ s|d}|d}|d}|d|d}|d}|d}|dd } |d v} t|z} | jj} d } d}d }d dj}|}d|dk}|rd}d}tj|\}}|d}|dkrd} | j ddd}dd nF|dkrd} d}d n.|dkr&d}| j ddd}d n d}j }|dur`| j |d| j |dkrXdnd d!rdurd}|d"krd#}| j d$d%d&di|d'}|d(d)d*|d(d)d+gj }rH|durHt |dkrHtj|vrHtj|vrHtj|vrHtj|vrH|tjd |tjd |tjd |tjd f}tj|vrl|tjd nd}|rzt|}Wn$tytd,|Yn0dXfd-d. }fd/d0}| j | |d1r| j tjd2| rr| d3dur| j dd4jdur|durj|krd5|tjj j!gj"R\}}| j ||d6fd7d8}nd9d8}|durr| j tj|d:n| j tj#d d;d<d=d>t$t%t&t'(d?|D}|)d@} t$dAd>|D}d}!t*rTz j tjd }!||!f7}Wnt+yRYn0j|t,j#dB}"t-t.||"t,/fdCd>| Dd#}#|!durd;|#|"dDd#k<d;|#|#dEk<d;|#|#dFk<0t,j#tj1|dGfi| }$rT|durTt2|d dH|\}%}d }&|%D]"}'|||'d dI|$|&|&d 7}&qrJ||$|&||$n||d#|$d Wdn1s~0Yn| rtj1|dGfi| "}$d}(|dur&|d#kr&t3d d})jdJd#|)}*jdJd |)}+t4dKdLdM},|,j5d#|*|+|dN}(|(dO}(r|durt2|d dH|\}%}|(dur`t6|%|(}%d }&|%D]"}'|||'d dI|$|&|&d 7}&qhr||$|&||$n||d#|$d Wdn1s0Yntj1|dGfi| }$d }&|D]^}-j |-d }|-|tjkr@rX||$|&|&d 7}&n|||$|&|&d 7}&qfdPd>|D}.sdQd>|.D}.|.|$_ Wdn1s0Y|rt78dRdSdTdUdV| dUdW||g Wdn1s0YdS)YNepsg expressionformatrescale color_map hillshade asset_typenameraster)dsmdtmGTiffi'TFkmzpngiz.pngjpgJPEGZ)qualityrPNGr)Z jpeg_qualityDEFLATE)compress)Z predictor orthophotorg@gX@bins)pminpmax hist_optionsnodata statistics1minmaxzInvalid colormap {}csP|sdurt|d}|s,s,|dk<|sLrL|jtjkrL|tj}|S)N)in_ranger)rdtypenpuint8astype)arr skip_rescale skip_alphaZ skip_type)jpg_backgroundmaskrrgb with_alpharrprocesszs    zexport_raster..processcs2rtjtjtjtjg|_ntjtjtjg|_dSN)rredgreenbluealpha colorinterp)dst)rFrrupdate_rgb_colorinterpsz-export_raster..update_rgb_colorinterp)drivercount)r<r6)r6zEPSG:{})crs transformwidthheightc s(t|t||jjtjddS)N)source destination src_transformsrc_crs dst_transformdst_crs resampling)r rasteriobandrSrRr nearestr@rNband_num)r[srcrSrr write_bands z!export_raster..write_bandcSs|||dSrH)writer`rrrrcs)r<rQi)r<rQr6cSsg|]}d|qS)zb{})r.0brrr z!export_raster..zb(?P[0-9]{1,2}),cSsg|]}t|ddqS)rg)intreplacererrrrhri)indexes out_dtypecs$g|]}ttj|dqS)) local_dict)r= nan_to_numneevaluatestrip)rfbloc)r@rrrhrigꌠ9Y>)Fgꌠ9Y>)w)rB)rArSi;-)ZazdegZaltdeg)dxdyZ vert_exaggo@csg|]}j|dqS)r0)rM)rfidx)rbrrrhricSsg|]}|tjkr|qSr)rrL)rfcirrrrhrigdal_translatez-ofZKMLSUPEROVERLAYz-cozName={}z FORMAT=PNG)FFF)9rr datasetmetacopyrnospathsplitextupdaterQmetadatarMlenrrIrJrKrLindexread dataset_maskcolormaprloggerwarningrr]r>rRto_epsgr rTrUboundsfloat32tuplesortedsetrefindallsplitr ValueErrorr=dictziparrayr?openrZOOM_EXTRA_LEVELSr rr subprocess check_output)/inputoutputoptsrrrrrrrZdemZds_srcprofilerPr.Z max_bandsrnZ output_rasterr%Z path_base_Z band_countr6mdr|rrGrOrTrUrcZ bands_namesZrgb_exprZ alpha_indexdataZ index_bandrNZrgb_datarargZ intensityZ delta_scaleryrzlsr{Znew_cir) r@r[rCrDrrErbrSrFr export_rasters^                      &   "         8       6     &  r)#r]rloggingrrnumpyr=numexprrrrasterio.enumsrZrio_tiler.utilsrrZrio_tiler.colormaprrrZrio_tiler.errorsrZapp.api.hsvblendrZapp.api.hillshader Z rio_tiler.ior Z rasterio.warpr r r getLoggerrrrrrrrrs$