a `e@s~ddlZddlZddlmZddlZddlmZmZddl m Z ddl m Z ddl m Z ddl mZddlZidfdd ZdS) N)ndimage)Affinerowcol)system)compute_euclidean_map)log)ioc0 Csg}d}d}g}|D](}t|s2td|q||qt|dkrXtddSt|d0} | jd} | j } | j d} | j } Wdn1s0Y|D]:}t |tj |d|ddd }|rt|r|||fqtd t|d d |D}|r|\}}}}ng}g}|D]\\}}|j\}}}}|||g|||g|j d dksx|j d dkr&tdq&t|t|t|t|f\}}}}td||||ft||}|t| d| d 9}tt||| d}tt||| d}|||f\}}td||ftd||||f|| d<|| d<|| d<|dddk| d<|dd| d<|dd| d<|dd| d <| | d!<| |tj|d"fi| }|D]\} }!||!\}}}}|!j}"|!j|!j}#}$| j }%|%|#|$f}&t!j"|&| d#}'t!j"|&| d#}(d$})|D]\}}|jd}*t#t$t%|j&||t'|d%t%|j&||t'|d%}+t#t$t%|j&||t'|d%t%|j&||t'|d%},t!j"|&| d#}-|j(|-|+d&dd'}-t!j"|&| d#}.|j(|.|,d&dd'}.|)|.|.dk<d|.|-|*k<t!j)|-|.|-d(t!j*|'|-|'d(t!j*|(|.|(d(qBt!j+|'|(|'|(dd)kd*t,j-t!.|(dk|(|)kdd&d+}/|'t#|/}'| |'|'d)k<|j/|'|!d,qWdn1s0Y|S)-aT Based on https://github.com/mapbox/rio-merge-rgba and ideas from Anna Petrasova implementation by Piero Toffanin Computes a merged DEM by computing/using a euclidean distance to NODATA cells map for all DEMs and then blending all overlapping DEM cells by a weighted average based on such euclidean distance. Nz-%s does not exist. Will skip from merged DEM.rz(No input DEMs, skipping euclidean merge.z .euclideand)postfix replace_baseF) overwritez%s valid DEM rasters to mergecSs$g|]\}}t|t|fqS)rasterioopen).0der r /code/opendm/dem/merge.py 2z(euclidean_merge_dems..countzInputs must be 1-band rasterszOutput bounds: %r %r %r %rzOutput width: %d, height: %dzAdjusted bounds: %r %r %r %r transformheightwidthTILEDYEStiled BLOCKXSIZEi blockxsize BLOCKYSIZE blockysizeCOMPRESSLZWcompressnodataw)dtypeg`?)op precisionT)outwindow boundlessmasked)r*g)r*where)return_distancesreturn_indices)r+)0r file_existsr ODM_WARNINGappendlenrr nodatavalsresdtypesprofilerrelated_file_pathODM_INFOboundsextend ValueErrorminmaxr translationscaleintmathceilgetupdate block_windows window_boundsrrrnpzerostupleziprrroundreadmultiplyadddividerdistance_transform_edt logical_andwrite)0Z input_demsZ output_demcreation_optionseuclidean_map_sourceinputsr;r)Z existing_demsdemfirst src_nodatar6r'r8Zeumapsourcesdst_wdst_sdst_edst_nxsysZsrc_dZsrc_eleftbottomrighttopoutput_transform output_width output_heightdstrastidx dst_window blocksizedst_rowsdst_cols dst_count dst_shapedstarrZdistsumZsmall_distancer%Z src_window_dZ src_window_eZtemp_dZtemp_eindicesr r reuclidean_merge_dems s       $   $            2rs)rCnumpyrIscipyrrrasterio.transformrropendmrZopendm.dem.commandsrrrosrsr r r rs