
    k"g                     Z    d dl Z d dlmZ ddlmZmZmZmZmZm	Z	m
Z
 d Zd Zd Zd Zd	 Zy)
    N)ValidationError   )BANDTYPE_FLAG_HASNODATABANDTYPE_PIXTYPE_MASKGDAL_TO_POSTGISGDAL_TO_STRUCTPOSTGIS_HEADER_STRUCTUREPOSTGIS_TO_GDALSTRUCT_SIZEc                 4    t        j                  d| z   g| S )z>
    Pack data into hex string with little endian format.
    <)structpack	structuredatas     h/var/www/html/djangosite/lib/python3.12/site-packages/django/contrib/gis/db/backends/postgis/pgraster.pyr   r      s     ;;sY...    c                 Z    t        j                  d| z   t        j                  |            S )zC
    Unpack little endian hexlified binary string into a list.
    r   )r   unpackbytesfromhexr   s     r   r   r      s"     ==y%--*=>>r   c                     | d| | |d fS )z;
    Split a string into two parts at the input index.
    N )r   indexs     r   chunkr      s     <ef%%r   c           	         | yt        | d      \  }} t        t        |      }g }g }| rt        | d      \  }} t        d|      d   }|t        z  }t        |   }t
        |   }dt        |   z  }t        | |      \  }} t        ||      d   }t        | ||d   z  |d   z        \  }	} dt        j                  |	      i}
|t        z  r||
d	<   |j                  |
       |j                  |       | rt        t        |            d
k7  rt        d      t        |d         |d   |d   |d   |d   |d   f|d   |d   f|d   |d   f|dS )z9
    Convert a PostGIS HEX String into a dictionary.
    Nz      Br   
      r   nodata_valuer   z"Band pixeltypes are not all equal.	                     )sridwidthheightdatatypeoriginscaleskewbands)r   r   r	   r   r
   r   r   r   r   r   appendlensetr   int)r   headerr2   
pixeltypespixeltype_with_flags	pixeltype	pack_type	pack_sizenodatabandband_results              r   from_pgrasterr@   %   s    | s#LFD,f5F EJ
%*4^"d%c+?@C(+@@	 $I.	"9-	I..	
 T9-	6*1- 4VBZ!7&*!DE
du}}T23  "99*0K' 	[! 	)$; D 3z?q BCC F1I*qM!9fQi()VAY'F1I&	 	r   c                    ddt        | j                        | j                  j                  | j                  j                  | j
                  j                  | j
                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  | j                  f}t        t        |      }| j                  D ]|  }dt        |j                            z   }t        |j                            }|j                   	|t"        z  }t        |||j                   xs df      }|||j%                  d      z   z  }~ |S )z:
    Convert a GDALRaster into PostGIS Raster format.
    r   r   r    T)as_memoryview)r4   r2   r0   xyr/   r1   srsr+   r,   r-   r   r	   r   r.   r   r#   r   r   )rastrasterheaderresultr>   r   r:   
bandheaders          r   to_pgrasterrJ   d   s    	
	DJJ



				

L  *L9F

 = .99	 $DMMO4	 (00I )i1B1B1Ga%HI
 	*tyyty<<<3=6 Mr   )r   django.core.exceptionsr   constr   r   r   r   r	   r
   r   r   r   r   r@   rJ   r   r   r   <module>rM      s4     2  /?&<~4r   