o
    <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|  g|R  S )z>
    Pack data into hex string with little endian format.
    <)structpack	structuredata r   b/var/www/html/venv/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.
    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-   
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   )rastrasterheaderresultr9   r   r5   
bandheaderr   r   r   to_pgrasterd   s,   


rD   )r   django.core.exceptionsr   constr   r   r   r   r   r	   r
   r   r   r   r;   rD   r   r   r   r   <module>   s    $?