3
g                 @   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   m/var/www/tester-filtro-web/env/lib/python3.6/site-packages/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   sH  | dkrdS t | d\}} tt|}g }g }x| rt | d\}} td|d }|t@ }t| }t| }dt|  }t | |\}} t||d }t | ||d  |d  \}	} dtj|	i}
|t	@ r||
d	< |j
|
 |j
| q.W 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<    


r3   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|}xd| jD ]Z}dt|j   }t|j  }|jdk	r|tO }t|||jpdf}|||jdd 7 }qTW |j 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resultr2   r   r1   Z
bandheaderr   r   r   to_pgraster^   s    

r8   )r   Zdjango.core.exceptionsr   constr   r   r   r   r   r	   r
   r   r   r   r3   r8   r   r   r   r   <module>   s   $>