
v^\                 @   s   d  d l  Z  d  d l m Z d d l m Z m Z m Z m Z m Z d d   Z	 d d   Z
 d	 d
   Z d d   Z d d   Z d S)    N)ValidationError   )GDAL_TO_POSTGISGDAL_TO_STRUCTPOSTGIS_HEADER_STRUCTUREPOSTGIS_TO_GDALSTRUCT_SIZEc             C   s   t  j d |  |  S)z>
    Pack data into hex string with little endian format.
    <)structpack)	structuredata r   Q/tmp/pip-build-8lau8j11/django/django/contrib/gis/db/backends/postgis/pgraster.pyr      s    r   c             C   s   t  j d |  t j |   S)zC
    Unpack little endian hexlified binary string into a list.
    r	   )r
   unpackbytesfromhex)r   r   r   r   r   r      s    r   c             C   s   |  d |  |  | d  f S)z;
    Split a string into two parts at the input index.
    Nr   )r   indexr   r   r   chunk   s    r   c             C   s  |  d k r d St  |  d  \ } }  t t |  } g  } g  } x |  r>t  |  d  \ } }  t d |  d } | d k } | r | d 8} t | } t | } d t | } t  |  |  \ } }  t | |  d } t  |  | | d | d  \ }	 }  d	 t j |	  i }
 | r!| |
 d
 <| j |
  | j |  qC Wt	 t
 |   d k rct d   d t | d  d | d d | d d | d d | d | d f d | d | d f d | d | d f d | i 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   appendlensetr   int)r   headerr*   Z
pixeltypes	pixeltypeZ
has_nodataZ	pack_typeZ	pack_sizeZnodatabandZband_resultr   r   r   from_pgraster    s@    	


%

r2   c             C   s  d d t  |  j  |  j j |  j j |  j j |  j j |  j j |  j j |  j j |  j	 |  j
 f } t t |  } x |  j D]{ } d t | j   } t | j   } | j d k	 r | d 7} t | | | j p d f  } | | | j d d  7} q| W| j   S)z:
    Convert a GDALRaster into PostGIS Raster format.
    r   r   r   Nr   Zas_memoryviewT)r,   r*   r$   xyr!   r'   Zsrsr   r   r   r   r   r   r    r   r   r   hex)ZrastZrasterheaderresultr1   r   r0   Z
bandheaderr   r   r   to_pgrasterb   s    $$
r7   )r
   Zdjango.formsr   constr   r   r   r   r   r   r   r   r2   r7   r   r   r   r   <module>   s   (B