U
    Ha                     @   sd   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d Zdd Zd	d
 Zdd Zdd ZdS )    N)ValidationError   )BANDTYPE_FLAG_HASNODATABANDTYPE_PIXTYPE_MASKGDAL_TO_POSTGISGDAL_TO_STRUCTPOSTGIS_HEADER_STRUCTUREPOSTGIS_TO_GDALSTRUCT_SIZEc                 C   s   t jd|  f| S )z>
    Pack data into hex string with little endian format.
    <)structpack	structuredata r   S/tmp/pip-unpacked-wheel-3jxiddxt/django/contrib/gis/db/backends/postgis/pgraster.pyr      s    r   c                 C   s   t d|  t|S )zC
    Unpack little endian hexlified binary string into a list.
    r   )r   unpackbytesfromhexr   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   sD  | dkrdS t | d\}} tt|}g }g }| rt | d\}} td|d }|t@ }t| }t| }dt|  }t | |\}} t||d }t | ||d  |d  \}	} dt|	i}
|t	@ r||
d	< |
|
 |
| q,tt|d
krt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   headerr,   Z
pixeltypesZpixeltype_with_flags	pixeltypeZ	pack_typeZ	pack_sizeZnodatabandZband_resultr   r   r   from_pgraster    s@    


 r4   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|}| jD ]Z}dt|   }t|  }|jdk	r|tO }t|||jpdf}|||jdd 7 }qR| S )z:
    Convert a GDALRaster into PostGIS Raster format.
    r   r   r   NT)Zas_memoryview)r.   r,   r*   xyr)   r+   Zsrsr%   r&   r'   r   r   r   r(   r   r   r   r   hex)ZrastZrasterheaderresultr3   r   r2   Z
bandheaderr   r   r   to_pgraster^   s,             


r9   )r   Zdjango.core.exceptionsr   constr   r   r   r   r   r	   r
   r   r   r   r4   r9   r   r   r   r   <module>   s   $>