a
    }c                     @   sh   d dl mZ d dlmZmZ d dlmZmZ d dlm	Z	 d dl
mZ d dlmZ dZG dd	 d	eZd
S )    )partial)quote	urlencode)DEFAULT_SENTINELGeocoderLocation)Point)logger)MapTilerc                       sh   e Zd ZdZdZdeededdd fdd
Zdd	d
ZdeddddddZdeddddZ	  Z
S )r   z}Geocoder using the MapTiler API.

    Documentation at:
        https://cloud.maptiler.com/geocoding/ (requires sign-up)
    z/geocoding/%(query)s.jsonNzapi.maptiler.com)schemetimeoutproxies
user_agentssl_contextadapter_factorydomainc          	         sD   t  j||||||d || _|d| _d| j| j| jf | _dS )a  
        :param str api_key: The API key required by Maptiler to perform
            geocoding requests. API keys are managed through Maptiler's account
            page (https://cloud.maptiler.com/account/keys).

        :param str scheme:
            See :attr:`geopy.geocoders.options.default_scheme`.

        :param int timeout:
            See :attr:`geopy.geocoders.options.default_timeout`.

        :param dict proxies:
            See :attr:`geopy.geocoders.options.default_proxies`.

        :param str user_agent:
            See :attr:`geopy.geocoders.options.default_user_agent`.

        :type ssl_context: :class:`ssl.SSLContext`
        :param ssl_context:
            See :attr:`geopy.geocoders.options.default_ssl_context`.

        :param callable adapter_factory:
            See :attr:`geopy.geocoders.options.default_adapter_factory`.

            .. versionadded:: 2.0

        :param str domain: base api domain for Maptiler
        )r   r   r   r   r   r   /z	%s://%s%sN)super__init__api_keystripr   r   api_pathapi)	selfr   r   r   r   r   r   r   r   	__class__ T/var/www/html/django/DPS/env/lib/python3.9/site-packages/geopy/geocoders/maptiler.pyr      s    (zMapTiler.__init__Tc                    s>   |d }|sd S dd  |r( |d S  fdd|D S d S )Nfeaturesc                 S   s0   | d }| d d }| d d }t |||f| S )NZ
place_namecenterr      r   )featurelocation	longitudelatituder   r   r   parse_featureO   s    z+MapTiler._parse_json.<locals>.parse_featurer   c                    s   g | ]} |qS r   r   ).0r"   r&   r   r   
<listcomp>X       z(MapTiler._parse_json.<locals>.<listcomp>r   )r   jsonexactly_oner   r   r(   r   _parse_jsonI   s    zMapTiler._parse_json)r,   r   	proximitylanguagebboxc                C   s   d| j i}|}|r"| |d|d< t|tr2|g}|rDd||d< |rdt|}d|j|jf |d< t|	d}	d	| j
t|	d
 t|f}
td| jj|
 t| j|d}| j|
||dS )a  
        Return a location point by address.

        :param str query: The address or query you wish to geocode.

        :param bool exactly_one: Return one result or a list of results, if
            available.

        :param int timeout: Time, in seconds, to wait for the geocoding service
            to respond before raising a :class:`geopy.exc.GeocoderTimedOut`
            exception. Set this only if you wish to override, on this call
            only, the value set during the geocoder's initialization.

        :param proximity: A coordinate to bias local results based on a provided
            location.
        :type proximity: :class:`geopy.point.Point`, list or tuple of ``(latitude,
            longitude)``, or string as ``"%(latitude)s, %(longitude)s"``.

        :param language: Prefer results in specific languages. Accepts
            a single string like ``"en"`` or a list like ``["de", "en"]``.
        :type language: str or list

        :param bbox: The bounding box of the viewport within which
            to bias geocode results more prominently.
            Example: ``[Point(22, 180), Point(-22, -180)]``.
        :type bbox: list or tuple of 2 items of :class:`geopy.point.Point` or
            ``(latitude, longitude)`` or ``"%(latitude)s, %(longitude)s"``.

        :rtype: ``None``, :class:`geopy.location.Location` or a list of them, if
            ``exactly_one=False``.
        keyz#%(lon1)s,%(lat1)s,%(lon2)s,%(lat2)sr0   ,r/   z%s,%sr.   utf-8?queryz%s.geocode: %sr,   r   )r   Z_format_bounding_box
isinstancestrjoinr	   r$   r%   r   encoder   dictr   r
   debugr   __name__r   r-   _call_geocoder)r   r6   r,   r   r.   r/   r0   paramspquoted_queryurlcallbackr   r   r   geocodeZ   s(    )

zMapTiler.geocode)r,   r   r/   c          
      C   s   d| j i}t|tr|g}|r,d||d< | |d}t|d}d| jt|d t	|f}t
d| jj| t| j|d	}	| j||	|d
S )a  
        Return an address by location point.

        :param query: The coordinates for which you wish to obtain the
            closest human-readable addresses.
        :type query: :class:`geopy.point.Point`, list or tuple of ``(latitude,
            longitude)``, or string as ``"%(latitude)s, %(longitude)s"``.

        :param bool exactly_one: Return one result or a list of results, if
            available.

        :param int timeout: Time, in seconds, to wait for the geocoding service
            to respond before raising a :class:`geopy.exc.GeocoderTimedOut`
            exception. Set this only if you wish to override, on this call
            only, the value set during the geocoder's initialization.

        :param language: Prefer results in specific languages. Accepts
            a single string like ``"en"`` or a list like ``["de", "en"]``.
        :type language: str or list

        :rtype: ``None``, :class:`geopy.location.Location` or a list of them, if
            ``exactly_one=False``.
        r1   r2   r/   z%(lon)s,%(lat)sr3   r4   r5   z%s.reverse: %sr7   r8   )r   r9   r:   r;   Z_coerce_point_to_stringr   r<   r   r=   r   r
   r>   r   r?   r   r-   r@   )
r   r6   r,   r   r/   rA   pointrC   rD   rE   r   r   r   reverse   s    

zMapTiler.reverse)T)r?   
__module____qualname____doc__r   r   r   r-   rF   rH   __classcell__r   r   r   r   r      s*   4
Dr   N)	functoolsr   urllib.parser   r   Zgeopy.geocoders.baser   r   Zgeopy.locationr   Zgeopy.pointr	   Z
geopy.utilr
   __all__r   r   r   r   r   <module>   s   