o
    Nrf                     @   sL   d dl Z d dlmZ edd Zdd Zdd Zd	d
 Zdd Zdd ZdS )    N)contextmanagerc                 c   s4    |  d zdV  W n   |    |   dS )a  Contextify SQLite transactions. Use with auto-commit mode. E.g.:
    conn = sqlite3.connect("my.db", isolation_level=None)

    Parameters
    ----------
    conn : SQLite connection
        SQLite connection

    Yields
    ------
    None
        Nothing
    ZBEGINN)executerollbackcommit)conn r   Z/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/clodius/cli/utils.pytransaction   s   

r	   c                 C   s4   t | ||\}}t | |d |d \}}||||fS )zbconvert Google-style Mercator tile coordinate to
    (minlat, maxlat, minlng, maxlng) bounding box   )get_lng_lat_from_tile_pos)zoomxyZminlngZminlatZmaxlngZmaxlatr   r   r   get_tile_box    s   r   c                 C   sN   t jdt j | d|    }t|}|d t j }dd| d|    }||fS )zZconvert Google-style Mercator tile coordinate to
    (lng, lat) of top-left corner of tile        f@g     f     v@)mathpigudermannian)r   r   r   lat_radlatlngr   r   r   r   *   s
   r   c                 C   sN   |t j d }t|}d| | d  d }d| t j|  dt j  }||fS )z[convert lng/lat to Google-style Mercator tile coordinate (x, y)
    at the given zoom levelr   r   r   )r   r   inv_gudermannian)r   r   r   r   r   r   r   r   r   get_tile_pos_from_lng_lat:   s
   r   c                 C   s   dt t |  t jd  S Nr   )r   atanexpr   )r   r   r   r   r   H      r   c                 C   s   t t | t jd  d S r   )r   logtanr   )r   r   r   r   r   L   r   r   )	r   
contextlibr   r	   r   r   r   r   r   r   r   r   r   <module>   s    

