
    nj                        S SK Jr  S SKrS SKrS SKJrJrJr  \R                  r	 " S S\
5      r " S S\
5      r " S S	\
5      r " S
 S\
5      rS rS!S jrS rS rS rS rS rS rS rS rS rS rS rS rS!S jrS rS rS"S jr  " S S5      r!\"S :X  a#  \RF                  " \ " \RH                  5      5        gg)#    )print_functionN)gdalogrosrc                   $    \ rS rSrSrS rS rSrg)AffineTransformDecorator)   z@A class providing some useful methods for affine Transformationsc                    S U l         S U l        Xl        U R                  S   U l        U R                  S   U l        U R                  S:  a  U =R                  S-  sl        U R                  S   U l        U R                  S   U l        g )N      r      )lrxlrygeotransformscaleXscaleYulxuly)self	transforms     S/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/osgeo_utils/gdal_retile.py__init__!AffineTransformDecorator.__init__,   sw    %''*''*;;?KK2K$$Q'$$Q'    c                    / n/ nU R                   U-  nU R                  U-  nUR                  U R                  5        UR                  U R                  5        UR                  U R                  U-   5        UR                  U R                  5        UR                  U R                  U-   5        UR                  U R                  U-   5        UR                  U R                  5        UR                  U R                  U-   5        X4/$ N)r   r   appendr   r   )r   widthheightxlistylistwhs          r   	pointsFor"AffineTransformDecorator.pointsFor7   s    KK%KK& TXXTXXTXX\"TXXTXX\"TXX\"TXXTXX\"~r   )r   r   r   r   r   r   r   N)__name__
__module____qualname____firstlineno____doc__r   r%   __static_attributes__ r   r   r   r   )   s    J	(r   r   c                   *    \ rS rSrSrS rS rS rSrg)DataSetCacheH   z A class for caching source tilesc                 .    SU l         / U l        0 U l        g )N   )	cacheSizequeuedictr   s    r   r   DataSetCache.__init__K   s    
	r   c                    XR                   ;   a  U R                   U   $ [        R                  " U5      nUc   [        S[        -  [
        R                  S9  g[        U R                  5      U R                  :X  a(  U R                  R                  S5      nU R                   U	 U R                  R                  U5        X R                   U'   U$ )NzError opening: %sfiler   r   )r5   r   Openprint	NameErrorsysstderrlenr4   r3   popr   )r   nameresulttoRemoves       r   getDataSetCache.getP   s    9999T?"4>%	1

Ctzz?dnn,zz~~a(H		(#

$ 		$r   c                 P    U R                   R                  5        H  nAM     U ?U ? g r   )r5   valuesr4   )r   datasets     r   __del__DataSetCache.__del___   s&    yy'')G *JIr   )r3   r5   r4   N)	r'   r(   r)   r*   r+   r   rE   rJ   r,   r-   r   r   r/   r/   H   s    *
r   r/   c                   $    \ rS rSrSrS rS rSrg)	tile_infof   z A class holding info how to tilec                 $   Xl         X l        X0l        X@l        SU l        X:  a-  U =R                  [        X-
  X5-
  -   S-
  X5-
  -  5      -  sl        SU l        X$:  a-  U =R                  [        X$-
  XE-
  -   S-
  XE-
  -  5      -  sl        XPl        g )Nr   )r   r    	tileWidth
tileHeightcountTilesXintcountTilesYoverlap)r   xsizeysizerP   rQ   rU   s         r   r   tile_info.__init__i   s    
"$"i&9:Q>9CVW!  #z';<q@')!  r   c                     [        SU R                  -  5        [        SU R                  -  5        [        SU R                  -  5        [        SU R                  -  5        [        SU R
                  -  5        g )NztileWidth:   %dztileHeight:  %dzcountTilesX: %dzcountTilesY: %dzoverlap:     %d)r<   rP   rQ   rR   rT   rU   r6   s    r   reporttile_info.report{   s`    $..01$//12$"2"223$"2"223$,,./r   )rR   rT   r    rU   rQ   rP   r   N)r'   r(   r)   r*   r+   r   rZ   r,   r-   r   r   rM   rM   f   s    *$0r   rM   c                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
mosaic_info   z?A class holding information about a GDAL file or a GDAL filesetc                    [         R                  " S5      U l        Xl        [	        5       U l        X l        U R                  R                  5       R                  5         U R                  R                  5       R                  5       nUR                  S5      nU R
                  R                  U5      nUR                  U l        UR                  S5      R                  U l        UR#                  5       U l        UR                  S5      R'                  5       U l        [+        UR-                  5       5      nUR.                  U l        UR0                  U l        UR                  S5      R3                  5       nUb  UR5                  5       U l        OSU l        S/U R                  -  U l        [;        U R                  5       H2  nUR                  US-   5      R=                  5       U R8                  U'   M4     U R                  R                  5       R?                  5       n	U	S   U l         U	S   U l!        U	S   U l"        U	S   U l#        [I        [K        U RD                  U R@                  -
  U R.                  -  5      5      U l&        [O        [I        [K        U RB                  U RF                  -
  U R0                  -  5      5      5      U l(        g)z}
Initialize mosaic_info from filename

filename -- Name of file to read.
inputDS -- OGR DataSet representing the tile index

MEMr   r   Nr      ))r   GetDriverByName
TempDriverfilenamer/   cacheogrTileIndexDSGetLayerResetReadingGetNextFeatureGetFieldrE   RasterCountbandsGetRasterBandDataType	band_typeGetProjection
projectionGetNoDataValuenodatar   GetGeoTransformr   r   GetRasterColorTableClonectcirangeGetRasterColorInterpretation	GetExtentr   r   r   r   rS   roundrV   absrW   )
r   rd   inputDSfeatureimgLocationfhInputTiledecrw   ibandextents
             r   r   mosaic_info.__init__   s    ..u5 !^
%$$&335%%..0??A&&q) jjnn[1 ,,
$2215>>%335!//2AAC&{'B'B'DEjjjj&&q)==?>hhjDGDG#

"4::&E(66	**, GGEN '
 $$--/99;!9!9!9!9488 3t{{BCD
UDHHtxx$74;;#FGHI
r   c                     U ? U ?g r   )re   rf   r6   s    r   rJ   mosaic_info.__del__   s    Jr   c                    U R                   R                  5       R                  5         U R                   R                  5       R                  XX45        / nSn U R                   R                  5       R	                  5       nUc  OUR                  U5        Uc  UR                  5       R                  5       nOdUR                  5       R                  5       n[        US   US   5      [        US   US   5      [        US   US   5      [        US   US   5      4nM  Uc  g[        XS   5      [        X6S   5      [        X&S   5      [        XFS   5      4nU R                   R                  5       R                  S5        [        X1-
  U R                  -  S-   5      n	[        X$-
  U R                  -  S-   5      n
U R                  R                  SXU R                   U R"                  / 5      nUR%                  XR                  SUSU R                  /5        ['        SU R                   S-   5       HY  nUR)                  U5      nU R*                  c  M#  UR-                  U R*                  5        UR/                  U R*                  5        M[     U GH  nUR1                  S5      nU R2                  R5                  U5      n[7        UR9                  5       5      nUR:                  UR<                  UR                  -  -   Ul        UR@                  URB                  UR                  -  -   Ul"        [        UR:                  U5      n[        UR>                  U5      nU R                  S:  a-  [        UR@                  U5      n[        URD                  U5      nO,[        UR@                  U5      n[        URD                  U5      n[        UUR:                  -
  UR                  -  S-   5      n[        UUR@                  -
  UR                  -  S-   5      n[        UR<                  [        UUR:                  -
  UR                  -  S-   5      5      U-
  n[        URB                  [        UUR@                  -
  UR                  -  S-   5      5      U-
  nUS::  d  US::  a  GM  [        UU-
  U R                  -  S-   5      n[        UU-
  U R                  -  S-   5      n[        UR<                  [        UU-
  U R                  -  S-   5      5      U-
  n[        URB                  [        UU-
  U R                  -  S-   5      5      U-
  nUS::  d  US::  a  GM  US:  d   eUS:  d   eUS:  d   eUS:  d   e['        SU R                   S-   5       H  nUR)                  U5      nUR)                  U5      nU RF                  b  URI                  U RF                  5        URK                  U RL                  US-
     5        URO                  UUUUUUU R"                  5      nUc  [Q        [R        RT                  " 5       5        URW                  UUUUU5        M     GM     U$ )z
Find a gdal dataset representing a subset of a mosaic, based on a bounding box. Might overlap multiple tiles of the mosaic

returns GDALDataset or None
Nr   r   ra   r   g      ?TEMP),rf   rg   rh   SetSpatialFilterRectri   r   GetGeometryRefGetEnvelopeminmaxSetSpatialFilterrS   r   r   rc   Createrl   ro   SetGeoTransformry   rm   rs   FillSetNoDataValuerj   re   rE   r   rt   r   RasterXSizer   r   RasterYSizer   rw   SetRasterColorTableSetRasterColorInterpretationrx   
ReadRasterr<   r   GetLastErrorMsgWriteRaster)r   minxminymaxxmaxyfeaturesenveloper   
featureEnvresultSizeXresultSizeYresultDSbandNrt_bandfeatureNamesourceDSr   tgw_ulxtgw_lrxtgw_ulytgw_lrysw_xoffsw_yoffsw_xsizesw_ysizetw_xofftw_yofftw_xsizetw_ysizes_banddatas                                  r   
getDataSetmosaic_info.getDataSet   s    	$$&335$$&;;DS))224CCEGOOG$"113??A$335AAC
 
1x{3
1x{3
1x{3
1x{3	 $  qk"qk"qk"qk"	
 	$$&77= 4;$++5;<4;$++5;<??))Kdjj$.."
 	  $Qa!MNAtzzA~.F++F3F{{&DKK(%%dkk2	 /  G!**1-Kzz~~k2H*8+C+C+EFCgg 4 4szz AACGgg 4 4szz AACG #''4(G#''4(G{{Qcggt,cggt,cggt,cggt, 7SWW,

:S@AG7SWW,

:S@AGH((#w/@CJJ.NQT.T*UV 
 H((#w/@CJJ.NQT.T*UV  1}A 7T>T[[83>?G7T>T[[83>?GH((#w~.Ls.R*ST 
 H((#w~.Ls.R*ST  1}Aa<<a<<a<<a<<4::>2!//7!//777&..tww733DGGFQJ4GH((NN <$..01""7GXxN' 3g  P r   c                     Ag r   r-   )r   memDSs     r   closeDataSetmosaic_info.closeDataSetA  s    r   c                 N   [        SU R                  -   5        [        SU R                  U R                  U R                  4-  5        [        SU R
                  U R                  4-  5        [        SU R                  U R                  U R                  U R                  4-  5        g )Nz
Filename: zFile Size: %dx%dx%dzPixel Size: %f x %fzUL:(%f,%f)   LR:(%f,%f))r<   rd   rV   rW   rl   r   r   r   r   r   r   r6   s    r   rZ   mosaic_info.reportE  sv    lT]]*+#tzz4::tzz&JJK#t{{DKK&@@A'488TXXtxx*RRSr   )rc   ro   rl   re   rx   rw   rd   r   r   rs   rf   rq   r   r   r   r   rV   rW   N)r'   r(   r)   r*   r+   r   rJ   r   r   rZ   r,   r-   r   r   r]   r]      s#    I0Jd CJTr   r]   c           	         U R                   (       a   [        S[        U R                  5      -  SS9  [	        U R                   SU R
                  S U R                  5      nU R                   H|  n[        R                  " U5      nUc    g [        UR                  5       5      nUR                  UR                  UR                  5      n[        U R
                  XUS   US   5        AM~     U R                   (       a  [        S5        U$ )Nz*Building internal Index for %d tile(s) ... )end	TileIndexr   r   finished)Verboser<   r@   NamescreateTileIndexTileIndexFieldNameTileIndexDriverTypr   r;   r   rt   r%   r   r   
addFeature)grf   	inputTiler   r   pointss         r   getTileIndexFromFilesr   L  s    yy:S\IsS$			; 4 4dA<P<PN WW	ii	*&{'B'B'DE{668O8OP  .VAYq		
   	yyjr   c                 x    US:X  a  U R                   $ U R                   [        U5      -   [        R                  -   $ )Nr   )	TargetDirstrossep)r   levels     r   getTargetDirr   g  s/    {{{;;U#bff,,r   c                 
   SU l         [        U R                  SU R                  U R                  U R
                  5      n[        [        SUR                  S-   5      5      n[        [        SUR                  S-   5      5      nU R                  (       d5  U R                  (       d$  [        S5        Sn[        U5      [        U5      -  nU GHY  nU GHN  n	US-
  UR                  UR                  -
  -  n
U	S-
  UR                  UR                  -
  -  nUR                  nUR                  nU R                   (       a  [#        XX)US5      nO[#        XX)U5      nX-   UR$                  :  a  UR$                  U-
  nX-   UR&                  :  a  UR&                  U
-
  nU R(                  =(       a    [*        R,                  R/                  U5      n[1        XXXXU5	        U R                  (       a  GM  U R                  (       a  GM2  WS-  n[        U[3        W5      -  5        GMQ     GM\     U R4                  b`  U R                   (       a+  U R6                  (       d  [9        U S5      U R4                  -   nO[9        U 5      U R4                  -   n[;        XU5        U R<                  b`  U R                   (       a+  U R6                  (       d  [9        U S5      U R<                  -   nO[9        U 5      U R<                  -   n[?        XU5        U$ )zW

Tile image in mosaicinfo minfo  based on tileinfo ti

returns list of created tiles

r   TileResult_0r   g        r   ) LastRowIndxr   r   r   
Source_SRSr   listry   rT   rR   Quietprogressr@   rQ   rU   rP   UseDirForEachRowgetTileNamer   r    Resumer   pathexists
createTilefloatTileIndexNamePyramidOnlyr   copyTileIndexToDiskCsvFileNamecopyTileIndexToCSV)r   minfotiOGRDSyRangexRange	processedtotalyIndexxIndexoffsetYoffsetXr    r   tilenamefeature_only	shapeNamecsvNames                     r   	tileImager   m  sK    AM						E %2>>A-./F%2>>A-./F77199	Fc&k)Fzbmmbjj&@AGzbllRZZ&?@G]]FLLE!!&qVQG&qVD)7*"))+W,88@x(@L'E8L 7771999Q	U5\12-  2 	"amm$Q*Q__<I$Q!//9IAi0}} amm"1a(1==8G"1o5G1W-Lr   c                    [        U R                  UU R                  UR                  5       R	                  5       S5      nUR                  5       R                  5          UR                  5       R                  5       nUc  OUR                  5       n[        R                  R                  UR                  S5      5      nU R                  (       aV  [        R                  R                  [        R                  R                  UR                  S5      5      5      nUS   S-   U-   nUR                  SU5        UR                  5       R!                  U5        M  [#        U5        g )NzESRI Shapefiler   r   /)r   r   r   rg   GetSpatialRefrh   ri   rv   r   r   basenamerj   r   splitdirnameSetFieldCreateFeaturecloseTileIndex)r   r   fileNameSHAPEDSr   
newFeaturer   ts           r   r   r     s   				&&(G 
NN!!#
.."113?]]_
77##G$4$4Q$78bggoog.>.>q.ABCAtczH,HAx(((4  7r   c                    [        US5      nUR                  5       R                  5          UR                  5       R                  5       nUc  GO[        R
                  R                  UR                  S5      5      nU R                  (       aV  [        R
                  R                  [        R
                  R                  UR                  S5      5      5      nUS   S-   U-   nUR                  U5        UR                  5       nUR                  5       nU H2  n	UR                  U R                  5        UR                  SU	-  5        M4     UR                  S5        GM5  UR                  5         g )Nr#   r   r   r   z%f
)openrg   rh   ri   r   r   r   rj   r   r   r   writer   r   CsvDelimiterclose)
r   r   r  csvfiler   r   r  geomcoordscoords
             r   r   r     s   8S!G	NN!!#
.."113?77##G$4$4Q$78bggoog.>.>q.ABCAtczH,Hh%%'!!#EMM!..)MM$,'  	d " MMOr   c                     [         R                  S:w  a   U R                  [         R                  S5      n U R                  S5      nUS:  a  SU -   $ U SUS-    S-   XS-   S  -   $ )Nr   r   tmp_r   )r   r   replacerfind)rd   poss     r   _createTempFileNamer    sg    	vv}##BFFC0
..
C
Qw  Aa 6)H1WY,???r   c                    [         R                  R                  U5      (       a  [        R                  " S5        U R
                  R                  U5        [        R                  " 5         [         R                  R                  U5      (       a  [         R                  " U5        U R
                  R                  X!5        g )NCPLQuietErrorHandler)
r   r   r   r   PushErrorHandlerDriverDeletePopErrorHandlerremoveRename)r   oldNamenewNames      r   _renameDatasetr    so    	ww~~g45	 77>>'""IIgHHOOG%r   c	                    [        U5      n	UR                  S-  n
UR                  S-  n[        UR                  X*-  -   U
SUR
                  X;-  -   SU/5      nU(       a0  UR                  XE5      n[        U R                  XvUS   US   5        gUR                  UR                  UR
                  X\R                  -  -   UR                  XLR                  -  -   UR
                  5      nUc  gUR                  XE5      n[        U R                  XvUS   US   5        U R                  c  UR                  nOU R                  nUR                  UR                  SUR
                  SUR                  /nUR                  nU R                  c)  U R                  R                  XUUXR                   5      nOU R                  R                  SXEUU5      nUc  [#        S[$        R&                  S9  gUR)                  U5        UR+                  UR,                  5        [/        SUS-   5       H]  nUR1                  U5      nUR2                  b  UR5                  UR2                  5        UR7                  UR8                  US-
     5        M_     UR:                  b]  [/        SUS-   5       HJ  nUR1                  U5      nUR=                  UR:                  5        UR?                  UR:                  5        ML     [@        RB                  " UUSSU RD                  5      nUS:w  a  [#        SU	U4-  [$        R&                  S9  gURG                  U5        U R                  c  URI                  5         O:U R                  RK                  U	USU R                   5      nURI                  5         SnSn[M        X	U5        U RN                  (       aH  [#        US	-   [Q        U5      -   S
-   [Q        U5      -   S-   [Q        U5      -   S-   [Q        U5      -   5        gg)z
Create an individual tile for the pyramids.

The levelMosaicInfo object contains data about the mosaic at a given pyramid level.

Returns None if successful and return 1 if there is an error
ra   r   r   N 'Creation failed, terminating gdal_tile.r9   z$Reprojection failed for %s, error %d : |-->-))r  r   r   r   r   r   r%   r   r   r   BandTypero   rl   	MemDriverr  r   CreateOptionsr<   r>   r?   r   SetProjectionrq   ry   rm   rw   r   r   rx   rs   r   r   r   ReprojectImageResamplingMethodr   
FlushCache
CreateCopyr  r   r   )r   levelMosaicInfor   r   r   r    tileNamer   r   temp_tilenamesxsyr   r   s_fhbtr   rl   t_fhbandr   restt_fhs                          r   createPyramidTiler:    s    (1M			!	#B			!	#B
"',.',.	
	C u-1''&)VAYO%%6JJ..%**:L0LcggD |]]5)Fq##UfQiKzz&&ZZGGSZZCGGQ

CL!!E 	{{xx}VUBX{{!!"eUB?|7cjjI&112a###D))&&'9'9:++O,>,>tax,HI	 $ )!UQY'D''-FKK../!!/"8"89 ( 

dD$a6H6H
IC
ax2mS5II	
   & 	{{##M4AOOLD1X.yy'l  'l	
  %j  &k
	
 r   c	                    [        U5      n	U R                  c  UR                  n
OU R                  n
[        UR                  UR
                  SUR                  SUR                  /5      nUR                  X+R
                  -  -   UR
                  SUR                  X;R                  -  -   SUR                  /nU(       a;  [        U5      nUR                  XE5      n[        U R                  XvUS   US   5        gUR                  UR                  X+R
                  -  -   UR                  X;R                  -  -   X[R                  -  -   UR                  X+R
                  -  -   XKR
                  -  -   UR                  X;R                  -  -   5      nUc  g[        U5      nUR                  XE5      n[        U R                  XvUS   US   5        UR                  nU R                  c)  U R                  R                  XUUXR                   5      nOU R                  R                  SXEUU
5      nUc  [#        S[$        R&                  S9  gUR)                  U5        U R*                  b)  UR-                  U R*                  R/                  5       5        [1        UR2                  U5      n[1        UR4                  U5      n[7        SUS-   5       H  nUR9                  U5      nUR9                  U5      nUR:                  b  UR=                  UR:                  5        UR>                  b6  URA                  UR>                  5        URC                  UR>                  5        URE                  SSUUUUURF                  5      nURI                  SSUUUUUURF                  5        M     URK                  U5        U R                  c  URM                  5         O:U R                  RO                  U	USU R                   5      nURM                  5         SnSn[Q        X	U5        U RR                  (       aH  [#        US-   [U        U5      -   S-   [U        U5      -   S	-   [U        U5      -   S
-   [U        U5      -   5        gg)a*  
Create add a vector feature representing the tile to the index, then recreate the

Args:
    g (RetileGlobals): object with global script variables
    minfo (mosaic_info): mosiac_info object
    offsetX (int): The offset in the X direction.
    offsetY (int): The offset in the Y direction.
    width (int): The width of the tile.
    height (int): The height of the tile.
    tilename (str): The name of the tile.
    OGRDS (DataSource): The OGR DataSource object containing the tile index
    feature_only (bool): Whether to only generate features.

Nr   r   r!  r"  r9   r#  r$  r%  r&  )+r  r'  ro   r   r   r   r   r   r%   r   r   r   rl   r(  r  r   r)  r<   r>   r?   r   r   r*  ExportToWktr   r   r   ry   rm   rw   r   rs   r   r   r   rn   r   r   r-  r.  r  r   r   )r   r   r   r   r   r    r   r   r   r1  r5  r   r   dec2r   r4  rl   r6  readXreadYr7  r   r   r   r9  s                            r   r   r   d  s   $ (1Mzz__ZZ
"	ELL!UYY5<<@C
 	'JJ&&

	'JJ&&	

L '5.1''&)VAYO'JJ&&'JJ&&**)<<'JJ&&);;'JJ&&	D | $L1D^^E*Fq##UfQiKKKE{{xx}VUBX{{!!"eUB?|7cjjI&||1<<3356  %(E  &)Ea###D)##D)88&&uxx0<<#KK%!!%,,/  AueUE6??S1atUE6??S $ 
t{{##M4AOOLD1X.yy'l  'l	
  %j  &k
	
 r   c                    [         R                  " U5      nUc  [        S[        R                  S9  gUR                  U5      nUb6  UR                  5         UR                  U5        U (       a  [        SU-   5        UR                  U5      nUc  [        SU-   [        R                  S9  gUR                  SU[         R                  5      nUc  [        S[        R                  S9  g[         R                  " U[         R                  5      nUc  [        SU-   [        R                  S9  gUR                  S	5        UR                  U5      S
:w  a  [        SU-   [        R                  S9  gU$ )NzESRI Shapefile driver not foundr9   r   ztruncating index zCould not open datasource indexzCould not create LayerzCould not create FieldDefn for    r   zCould not create Field for )r   rb   r<   r>   r?   r;   DestroyDeleteDataSourceCreateDataSourceCreateLayer
wkbPolygon	FieldDefn	OFTStringSetWidthCreateField)	r   dsName	fieldNamesrs
driverName	OGRDriverOGRDataSourceOGRLayerOGRFieldDefns	            r   r   r     s5   ##J/I/cjjANN6*M ""6*%./..v6M*V3#**E((#s~~FH&SZZ8==CMM:L/);#**M#L)Q.+i7cjjIr   c                    UR                  5       n[        R                  " UR                  5       5      nUc  [	        S[
        R                  S9  gUR                  X5        SUS   US   US   US   US   US   US   US   US   US   4
-  n[        R                  " XuR                  5       5      nUc  [	        S[
        R                  S9  gUR                  U5        UR                  U5        UR                  5         g )	NzCould not create Featurer9   r   z*POLYGON ((%f %f,%f %f,%f %f,%f %f,%f %f ))r   ra   r   zCould not create Geometry)rg   r   FeatureGetLayerDefnr<   r>   r?   r   CreateGeometryFromWktr   SetGeometryDirectlyr   rC  )	r   rQ  locationr!   r"   rR  
OGRFeaturewktOGRGeometrys	            r   r   r     s    %%'HX2245J(szz:*5
6aaaaaaaaaa: C ++C1G1G1IJK)

;"";/:&r   c                 $    U R                  5         g r   )rC  )rQ  s    r   r   r     s    r   c                    Un[        SU R                  S-   5       Hg  nSU l        [        UR                  U5      n[        [        UR                  S-  5      [        UR                  S-  5      UUU5      n	[        XX5      nMi     g )Nr   r   ra   )
ry   Levelsr   r]   rd   rM   rS   rV   rW   buildPyramidLevel)
r   r   createdTileIndexDSrP   rQ   rU   r~   r   r/  levelOutputTileInfos
             r   buildPyramidrc    s     Gq!((Q,'%enng>'%%)*%%)*
 $A8KS (r   c                    [        [        SUR                  S-   5      5      n[        [        SUR                  S-   5      5      n[	        U R
                  S[        U5      -   U R                  U R                  U R                  5      nU H  nU H  nUS-
  UR                  UR                  -
  -  n	US-
  UR                  UR                  -
  -  n
UR                  nUR                  nX-   UR                  :  a  UR                  U
-
  nX-   UR                  :  a  UR                  U	-
  n[        XX(Xs5      nU R                   =(       a    ["        R$                  R'                  U5      n[)        U UU
U	UUUUU5	        M     M     U R*                  b$  [-        X5      U R*                  -   n[/        XU5        U R0                  b$  [-        X5      U R0                  -   n[3        XU5        U$ )zZ
Build the pyramids at level N and returns an OGR dataset of the tile index at that level
r   TileResult_)r   ry   rT   rR   r   r   r   r   r   r   rQ   rU   rP   r   r    r   r   r   r   r   r:  r   r   r   r   r   )r   r/  rb  r   r   r   r   r   r   r   r   r    r   r   r   r   r   s                    r   r`  r`  .  s    %.::Q>?@F%.::Q>?@F			E
"			E Fz#..1D1L1LLG z#--0C0K0KKG )33F'11E!4!:!::+11G;"5"<"<<,33g="$7H 88@x(@L
)  B 	" *Q__<	Ai0}} q(1==81W-Lr   c                    UR                   nUR                  U:  a  UR                  n[        [        U5      5      n[        R
                  R                  [        R
                  R                  UR                  5      5      nUS   S   S:X  a  US   S[        US   5       US   4nS[        U5      -   S-   U4-  n	S[        U5      -   S-   U4-  n
U R                  (       a  [        X5      [        U5      -   [        R                  -   US   -   S-   U	-   S-   U
-   nU R                  U:  aj  X@l        [        R
                  R                  [        X5      [        U5      -   5      (       d+  [        R                  " [        X5      [        U5      -   5        O[        X5      US   -   S-   U	-   S-   U
-   nU R                  c	  XS   -  nU$ USU R                  -   -  nU$ )z
creates the tile file name
r   @r   z%0i_.)rR   rT   r@   r   r   r   splitextr   rd   r   r   r   r   r   mkdir	Extension)r   r   r   r   r   r   maximcountDigitsparts
yIndex_str
xIndex_strfrmts               r   r   r   i  s    NNE	~~c%j/KGGRWW--enn=>EQx{cq!c%(m,eAh7[))C/F9<J[))C/F9<J"&kff Ah 	
    	 ==6!"M77>>,q"83v;"FGGa/#f+=>A%a036CcIJV{{a K 	akk!!Kr   c                      [        S5        [        R                  " 5       n [        U 5       H.  n[        R                  " U5      n[        UR
                  5        M0     g)NzValid formats:r   )r<   r   GetDriverCountry   	GetDriver	ShortName)countrA  drivers      r   UsageFormatrz    sH    	
!Eu&f  r   c                 V   U (       a  [         R                  O[         R                  n[        SUS9  [        SUS9  [        SUS9  [        SUS9  [        SUS9  [        SUS9  [        SUS9  [        S	US9  [        S
US9  [        SUS9  [        SUS9  [        SUS9  U (       a  S$ S$ )Nz/Usage: gdal_retile.py [--help] [--help-general]r9   z<        [-v] [-q] [-co <NAME>=<VALUE>]... [-of <out_format>]z(        [-ps <pixelWidth> <pixelHeight>]z!        [-overlap <val_in_pixel>]zC        [-ot  {Byte|Int8|Int16|UInt16|UInt32|Int32|Float32|Float64|z0               CInt16|CInt32|CFloat32|CFloat64}]zB        [-tileIndex <tileIndexName> [-tileIndexField <fieldName>]]z1        [-csv <fileName> [-csvDelim <delimiter>]]zC        [-s_srs <srs_def>]  [-pyramidOnly] -levels <numberoflevels>z6        [-r {near|bilinear|cubic|cubicspline|lanczos}]z%        [-useDirForEachRow] [-resume]zA        -targetDir <TileDirectory> <input_file> [<input_file>]...ra   r   )r>   r?   stdoutr<   )isErrorfs     r   Usager    s    

3::A	
;!D	
HqQ	
41=	
-A6	
OVWX	
<1E	
NUVW	
=AF	
OVWX	
BK	
1:	
MTUV1Qr   c                    Uc
  [        5       nU c  [        R                  n [        R                  " U 5      nUc  gSnU[        U5      :  Ga  X#   nUS:X  a	  [        SS9$ US:X  d  US:X  a  US-  nX#   Ul        GOpUS:X  a`  US-  n[        R                  " X#   5      Ul	        UR                  [        R                  :X  a  [        S	X#   -  [        R                  S
9  gGO
US:X  a$  US-  nUR                  R                  X#   5        GOUS:X  a	  SUl        GOUS:X  a	  SUl        GOUS:X  a  US-  nX#   Ul        [$        R&                  R)                  UR"                  5      (       d)  [        SUR"                  -   S-   [        R                  S
9  gUR"                  [        UR"                  5      S-
  S  [$        R*                  :w  a"  UR"                  [$        R*                  -   Ul        GOUS:X  a0  US-  n[-        X#   5      Ul        US-  n[-        X#   5      Ul        GOUS:X  a  US-  n[-        X#   5      Ul        GOUS:X  a  US-  nX#   nUS:X  a  [        R4                  Ul        GO{US:X  a  [        R8                  Ul        GO^US:X  a  [        R:                  Ul        GOAUS:X  a  [        R<                  Ul        GO$US:X  a  [        R>                  Ul        GO[        SU-  5        gUS:X  aB  US-  n[-        X#   5      Ul         UR@                  S:  a  [        SUR@                  -  5        gGOUS:X  aS  US-  n[B        RD                  " 5       Ul#        URF                  RI                  X#   5      S:w  a  [        SX#   -   5        gGOWUS:X  a	  SUl%        GOHUS :X  aW  US-  nX#   Ul&        [$        R&                  RO                  URL                  5      nUS   (       d  U=RL                  S!-  sl&        OUS":X  a  US-  nX#   Ul(        OUS#:X  aW  US-  nX#   Ul)        [$        R&                  RO                  URR                  5      nUS   (       d  U=RR                  S$-  sl)        OyUS%:X  a  US-  nX#   Ul*        OdUS&:X  a  SUl+        OVUS':X  a  SUl,        OHUS S S(:X  a$  [        S)U-  [        R                  S
9  [        SS9$ URZ                  R                  U5        US-  nU[        U5      :  a  GM  URZ                  (       d  [        S*5        [        SS9$ UR.                  S:X  d  UR0                  S:X  a2  [        S+UR.                  UR0                  4-  [        R                  S
9  gUR.                  UR2                  -
  S::  d  UR0                  UR2                  -
  S::  a  [        S,[        R                  S
9  gUR"                  c!  [        S-[        R                  S
9  [        SS9$ URV                  (       at  URJ                  (       dc  UR"                  []        S5      -   [$        R*                  -   n[$        R&                  R)                  U5      (       d  [$        R^                  " U5        UR@                  S:  a  Sn[a        XR@                  S-   5       H  n	UR"                  []        U	5      -   [$        R*                  -   n[$        R&                  R)                  U5      (       a  MR  [$        R^                  " U5        [$        R&                  R)                  U5      (       d  [        S.U-  [        R                  S
9    gUR                  (       d  M  [        S/U-  [        R                  S
9  M     [        Rb                  " UR                  5      Ul2        URd                  c/  [        S0UR                  -  [        R                  S
9  [g        5       $ URd                  Ri                  5       n
U
Rk                  [        Rl                  5      Ul7        S1U
;  a  [        Rb                  " S25      Ul8        [s        U5      nUc  [        S3[        R                  S
9  g[u        URZ                  S   U5      n[w        URx                  URz                  UR.                  UR0                  UR2                  5      nURF                  cz  UR|                  (       ai  [B        RD                  " 5       Ul#        URF                  RI                  UR|                  5      S:w  a&  [        S4UR|                  -   [        R                  S
9  gUR                  (       a   UR                  5         UR                  5         URJ                  (       d  [        XU5      nUR                  5         OUnUR@                  S:  a,  [        XXR.                  UR0                  UR2                  5        UR                  (       a  [        S55        g)6Nr   r   z--helpF)r}  z-ofz-fz-otzUnknown GDAL data type: %sr9   z-coz-vTz-qz
-targetDirz
TargetDir z does not existz-psz-overlapz-rnearbilinearcubiccubicsplinelanczoszUnknown resampling method: %sz-levelszInvalid number of levels : %dz-s_srszinvalid -s_srs: z-pyramidOnlyz
-tileIndexz.shpz-tileIndexFieldz-csvz.csvz	-csvDelimz-useDirForEachRowz-resumer&  zUnrecognized command option: %szNo input files selected.zInvalid tile dimension %d,%dz'Overlap too big w.r.t tile height/widthz&Missing Directory for Tiles -targetDirzCannot create level dir: %szCreated level dir: %sz4Format driver %s not found, pick a supported driver.DCAP_CREATEr`   zError building tile indexzinvalid projection  FINISHED)CRetileGlobalsr>   argvr   GeneralCmdLineProcessorr@   r  FormatGetDataTypeByNamer'  GDT_Unknownr<   r?   r)  r   r   r   r   r   r   r   r   rS   	TileWidth
TileHeightOverlapGRA_NearestNeighbourr,  GRA_Bilinear	GRA_CubicGRA_CubicSplineGRA_Lanczosr_  r   SpatialReferencer   SetFromUserInputr   r   rk  r   r   r	  r   r   r   r   rl  ry   rb   r  rz  GetMetadatarE   DMD_EXTENSIONrm  r(  r   r]   rM   rV   rW   rq   rZ   r   rC  rc  )argsr   r  rh  argResamplingMethodStringrp  leveldir	startIndx	levelIndxDriverMDtileIndexDSr   r   dsCreatedTileIndexs                  r   mainr    s   yO|xx''-D| 	
A
c$i-g(?''E\SD[FAwAHE\FA//8AJzzT---2TW<3::N . E\FAOO""47+D[AID[AGL FA'AK77>>!++..lQ[[03DD3::V{{3q{{+a/12bff<kkBFF2E\FAdg,AKFAtw<ALJFADGAID[FA%)W"%/%)%>%>"':5%)%6%6"'72%)^^"'=8%)%9%9"'94%)%5%5"58NNOIFA47|AHxx!|5@A  H_FA//1AL||,,TW5:(4723 ; N" AML FA"gAOGG$$Q__5E86)%%FA#'7A F]FA GAMGG$$Q]]3E8'KFA!WAN''!%AIAH!W^3c9

K&& GGNN3	QO c$i-R 77()T""{{a1<<1,*akk1<<-HH	
 {{QYY!#q||aii'?1'D7cjjI{{6SZZHT"" 	!--;;Q'"&&0ww~~h''HHXxx!|	y((Q,7I{{S^3bff<Hww~~h''HHX77>>(++3h>SZZPyyy-8szzJ 8 ##AHH-AHxxBQXXM	
 }xx##%H,,t112AKH$**51'*K)

;
K0E	5;;Q[[!,,			RB|| 0 0++-<<(()9)9:a?(5+;+;;#**Myy
		==&q4(xx!|Q1;;aiiXyyjr   c                   "    \ rS rSr/ SQrS rSrg)r  iu  )r   r   r)  r   r  r  r  r  r'  r  rm  r(  r   r   r   r	  r   r   r   r,  r_  r   r   r   r   c                 ~   SU l         SU l        / U l        / U l        SU l        SU l        SU l        SU l        SU l        SU l	        SU l
        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        [&        R(                  U l        SU l        SU l        S	U l        SU l        SU l        g)
zOnly used for unit testsFrB  r   GTiffNrY  Memory;r   )r   r   r)  r   r  r  r  r  r'  r  rm  r(  r   r   r   r	  r   r   r   r   r  r,  r_  r   r   r   r   r6   s    r   r   RetileGlobals.__init__  s    

",!"* $ 9 9  %r   )r'  r)  r	  r   r  rm  r  r   r_  r(  r   r  r   r   r,  r   r   r   r  r   r   r   r  r   r   N)r'   r(   r)   r*   	__slots__r   r,   r-   r   r   r  r  u  s    I8r   r  __main__)r   )NN)%
__future__r   r   r>   osgeor   r   r   TermProgress_nocbr   objectr   r/   rM   r]   r   r   r   r   r   r  r  r:  r   r   r   r   rc  r`  r   rz  r  r  r  r'   exitr  r-   r   r   <module>r     s   > & 	 
    !!v >6 <0 0:FT& FTR6-AH..@	&l
^q
h!H>T8v&R"CL8 8v zHHT#((^ r   