a
    Kcòfì  ã                   @   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|  g|¢R Ž S )z>
    Pack data into hex string with little endian format.
    ú<)ÚstructÚpack©Ú	structureÚdata© r   úl/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/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u rdS t | dƒ\}} tt|ƒ}g }g }| rÞt | 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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.
    Néz   é   Ú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ur„|tO }t|||jp’d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   )ZrastZrasterheaderÚresultr3   r   r2   Z
bandheaderr   r   r   Úto_pgrasterd   s,    ô


r8   )r   Zdjango.core.exceptionsr   Úconstr   r   r   r   r   r	   r
   r   r   r   r4   r8   r   r   r   r   Ú<module>   s   $?