o
    ˜¨Êh2  ã                   @   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   úa/var/www/html/env/lib/python3.10/site-packages/django/contrib/gis/db/backends/postgis/pgraster.pyr      ó   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      r   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   sF  | du rdS t | dƒ\}} tt|ƒ}g }g }| rpt | dƒ\}} td|ƒd }|t@ }t| }t| }dt|  }t | |ƒ\}} t||ƒd }t | ||d  |d  ƒ\}	} dt |	¡i}
|t	@ rd||
d	< | 
|
¡ | 
|¡ | s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-   Ú
pixeltypesÚpixeltype_with_flagsÚ	pixeltypeÚ	pack_typeÚ	pack_sizeÚnodataÚbandÚband_resultr   r   r   Úfrom_pgraster%   sB   


ã"
ør;   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 ]-}dt| ¡   }t| ¡  }|jdurB|tO }t|||jpIdfƒ}|||jdd� 7 }q)| ¡ S )z:
    Convert a GDALRaster into PostGIS Raster format.
    r   r   r   NT)Úas_memoryview)r/   r-   r+   ÚxÚyr*   r,   Úsrsr&   r'   r(   r   r   r   r)   r   r   r   r   Úhex)ÚrastÚrasterheaderÚresultr9   r   r5   Ú
bandheaderr   r   r   Úto_pgrasterd   s,   ô


rE   )r   Údjango.core.exceptionsr   Úconstr   r   r   r   r   r	   r
   r   r   r   r;   rE   r   r   r   r   Ú<module>   s    $?