î
ªÍ XÏ  ã               @   sœ   d  d l  Z  d  d l Z d  d l m Z d d l 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 d „  Z d S)é    N)ÚValidationErroré   )ÚGDAL_TO_POSTGISÚGDAL_TO_STRUCTÚPOSTGIS_HEADER_STRUCTUREÚPOSTGIS_TO_GDALÚSTRUCT_SIZEc             C   s#   t  j t j d |  | Œ ƒ j ƒ  S)z>
    Pack data into hex string with little endian format.
    ú<)ÚbinasciiÚhexlifyÚstructÚpackÚupper)Ú	structureÚdata© r   ú]/home/ubuntu/projects/ifolica/build/django/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   Úunpackr
   Ú	unhexlify)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   s+   |  d k r d St  d |  d d … ƒ d S)z8
    Extract the SRID from a PostGIS raster string.
    NÚiéj   ér   r   )r   )r   r   r   r   Úget_pgraster_srid!   s    r   c             C   sé  |  d k r d St  |  d ƒ \ } }  t t | ƒ } g  } g  } x|  rEt  |  d ƒ \ } }  t d | ƒ d } | d k } | r | d 8} n  t | } t | } d t | } t  |  | ƒ \ } }  t | | ƒ d } t  |  | | d | d ƒ \ }	 }  i t j |	 ƒ d	 6}
 | r(| |
 d
 <n  | j |
 ƒ | j | ƒ qC Wt	 t
 | ƒ ƒ d k rmt d ƒ ‚ n  i t | d ƒ d 6| d d 6| d d 6| d d 6| d | d f d 6| d | d f d 6| d | d f d 6| d 6S)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   ÚappendÚlenÚsetr   Úint)r   Úheaderr0   Z
pixeltypesÚ	pixeltypeZ
has_nodataZ	pack_typeZ	pack_sizeZnodataÚbandZband_resultr   r   r   Úfrom_pgraster-   sB    	

%r8   c             C   s9  |  d k s |  d k r d Sd d t  |  j ƒ |  j j |  j j |  j j |  j j |  j j |  j j |  j j |  j	 |  j
 f } t t | ƒ } xž |  j D]“ } d t | j ƒ  } t | j ƒ  } | j d k	 rÞ | d 7} n  t | | | j pó d f ƒ } t j | j d d ƒ ƒ j ƒ  } | | | 7} q˜ W| j ƒ  S)	z:
    Convert a GDALRaster into PostGIS Raster format.
    NÚ r   r   r   r   Zas_memoryviewT)r2   r0   r,   ÚxÚyr)   r/   Zsrsr#   r$   r%   r   r   r   r&   r   r!   r
   r   r   r   Údecode)ZrastZrasterheaderÚresultr7   r   r6   Z
bandheaderZband_data_hexr   r   r   Úto_pgrastero   s    $$!r>   )r
   r   Zdjango.formsr   Úconstr   r   r   r   r   r   r   r   r   r8   r>   r   r   r   r   Ú<module>   s   (B