a
    !h                     @   sJ   d dl mZ d dlmZmZmZmZmZm	Z	m
Z
mZmZ G dd dZdS )    )vector_tile_pb2)	CMD_BITSCMD_LINE_TOCMD_MOVE_TOCMD_SEG_ENDget_decode_options
LINESTRINGPOINTPOLYGONzig_zag_decodec                   @   sV   e Zd ZdddZdd Zedd Zedd	 Zed
d Zedd Z	dd Z
dS )TileDataNc                 C   s4   t  | _| j| || _|d ur(|nt | _d S )N)vector_tiletileZParseFromStringdefault_optionsdictper_layer_options)selfZpbf_datar   r    r   h/var/www/staging/api/virtual_environments/venv/lib/python3.9/site-packages/mapbox_vector_tile/decoder.py__init__   s    
zTileData.__init__c              	   C   sD  i }| j jD ]0}|j}| j|d }t|| jd}|j}|j}g }|j	D ]}|j
}	i }
t|	d dkspJ dt|	d d d |	dd d D ]*\}}|| }|| }| |}||
|< q| j|j|j|j|d |d d}|d	 r||
|jd
d}n||
|j|jd}|| qJ|j|j|d}|d	 r6d|d< |||< q|S )N)layer_optionsr      r   zUnexpected number of tags   y_coord_downtransformer)geomftypeextentr   r   ZgeojsonZFeature)geometry
propertiesidtype)r   versionfeaturesZFeatureCollectionr!   )r   Zlayersnamer   getr   r   keysvaluesr#   tagslenzipparse_valueparse_geometryr   r!   r   r    appendr"   )r   r   layerZ
layer_namer   r&   valsr#   featurer(   propsZkey_idxZval_idxkeyvalvaluer   Znew_featureZ	tile_datar   r   r   get_message   sB    
&



zTileData.get_messagec                 C   s   | d dkrd|  S | S )Nr   b0r   )r3   r   r   r   zero_pad?   s    zTileData.zero_padc                 C   s4   dD ]}|  |rt| |  S qt|  dd S )N)Z
bool_valueZdouble_valuefloat_valueZ	int_valueZ
sint_valueZstring_valueZ
uint_valuez is an unknown value)ZHasFieldgetattr
ValueError)r3   	candidater   r   r   r+   C   s    	
zTileData.parse_valuec                    s@   t  fddtdt d D }|dk r0dS |dkr<dS dS )Nc                 3   sF   | ]>} | d   |d  d   |d  d   | d   V  qdS )r   r   Nr   ).0iringr   r   	<genexpr>T       z&TileData._area_sign.<locals>.<genexpr>r   r   )sumranger)   )r@   ar   r?   r   
_area_signR   s    $zTileData._area_signc                 C   s&   | r"| d | d kr"|  | d  d S )Nr   rC   )r-   )coordsr   r   r   _ensure_polygon_closedW   s    zTileData._ensure_polygon_closedc                 C   s  d}g }d}d}	g }
|t |krzt|| }t |}t| ||t | d}t| |d |t  d}|d }|tkr|tkr| | |
| g }q|t	t
fv r|r|t	kr|ttfv r|tkr| | |
| g }td|D ]}|| }|d }|| }|d }t|}t|}|| }||	 }|}|}	|sH|| }|d u rb|||g q|g ||| qq|tkrt |dkrd|d dS d|dS n|tkr|
r|r|
| t |
dkrd|
d dS d|
dS n
d|dS n|tkr|r|
| g }g }d}|
D ]X}| |}|dkrHq,|dkrV|}||krx|rp|| |g}n
|| q,|r|| t |dkrd	|d dS d
|dS ntd| d S )Nr   r   r   ZPoint)r!   ZcoordinatesZ
MultiPointZ
LineStringZMultiLineStringZPolygonZMultiPolygonzUnknown geometry type: )r)   binintr8   r   r   r
   rI   r-   r   r   r   rE   r   r	   rG   r;   )r   r   r   r   r   r   r>   rH   ZdxZdypartsitemZilencmdZcmd_lenpointxyZpolygonZpolygonsZwindingr@   rF   r   r   r   r,   \   s    















zTileData.parse_geometry)NN)__name__
__module____qualname__r   r5   staticmethodr8   r+   rG   rI   r,   r   r   r   r   r      s   
)



r   N)Zmapbox_vector_tile.Mapboxr   r   Zmapbox_vector_tile.utilsr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   <module>   s   ,