
    .h                     n    S SK Jr  S SKJrJr  S SKJrJr  S SKJ	r	  S SK
Jr  S SKJr  Sr " S S	\5      rg
)    )partial)quote	urlencode)DEFAULT_SENTINELGeocoderLocation)Point)logger)MapTilerc                   v   ^  \ rS rSrSrSrS\\S\SSS.U 4S jjrSS	 jrS\SSSS
.S jr	S\SS.S jr
SrU =r$ )r      zqGeocoder 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          	         > [         T	U ]  UUUUUUS9  Xl        UR                  S5      U l        U R
                  < SU R                  < U R                  < 3U l        g)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://N)super__init__api_keystripr   r   api_pathapi)
selfr   r   r   r   r   r   r   r   	__class__s
            kC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\geopy/geocoders/maptiler.pyr   MapTiler.__init__   s[    P 	!#+ 	 	
 ll3'"&++t{{DMMJ    Tc                     US   nU(       d  g S nU(       a  U" US   5      $ U Vs/ s H
  oT" U5      PM     sn$ s  snf )Nfeaturesc                 H    U S   nU S   S   nU S   S   n[        XU4U 5      $ )N
place_namecenterr      r   )featurelocation	longitudelatitudes       r    parse_feature+MapTiler._parse_json.<locals>.parse_featureO   s<    |,H)!,Ix(+HH&;WEEr"   r    )r   jsonexactly_oner$   r-   r)   s         r    _parse_jsonMapTiler._parse_jsonI   sI    
#	F  !--:BC(wM'*(CCCs   ;)r1   r   	proximitylanguagebboxc                X   SU R                   0nUnU(       a  U R                  US5      US'   [        U[        5      (       a  U/nU(       a  SR	                  U5      US'   U(       a+  [        U5      nUR                  < SUR                  < 3US'   [        UR                  S5      5      n	SR	                  U R                  [        U	S	9-  [        U5      45      n
[        R                  " S
U R                  R                   U
5        [#        U R$                  US9nU R'                  XUS9$ )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)sr6   ,r5   r4   utf-8?queryz%s.geocode: %sr1   r   )r   _format_bounding_box
isinstancestrjoinr
   r+   r,   r   encoder   dictr   r   debugr   __name__r   r2   _call_geocoder)r   r=   r1   r   r4   r5   r6   paramspquoted_queryurlcallbacks               r    geocodeMapTiler.geocodeZ   s   R &!66;=F6N h$$ zH!$(!3F:i A-.[[!**"EF;U\\'23hh4l#;;!&)+ ,%t~~'>'>D4++E""3'"BBr"   )r1   r   r5   c                   SU R                   0n[        U[        5      (       a  U/nU(       a  SR                  U5      US'   U R	                  US5      n[        UR                  S5      5      nSR                  U R                  [        US9-  [        U5      45      n[        R                  " SU R                  R                  U5        [        U R                  US	9n	U R!                  XUS
9$ )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``.
r8   r9   r5   z%(lon)s,%(lat)sr:   r;   r<   z%s.reverse: %sr>   r?   )r   rA   rB   rC   _coerce_point_to_stringr   rD   r   rE   r   r   rF   r   rG   r   r2   rH   )
r   r=   r1   r   r5   rI   pointrK   rL   rM   s
             r    reverseMapTiler.reverse   s    > &h$$ zH!$(!3F:,,U4EFU\\'23hh4l#;;!&)+ ,%t~~'>'>D4++E""3'"BBr"   )r   r   r   )T)rG   
__module____qualname____firstlineno____doc__r   r   r   r2   rN   rS   __static_attributes____classcell__)r   s   @r    r   r      sh     +H $$( %2K 2KhD* $>CH $,C ,Cr"   r   N)	functoolsr   urllib.parser   r   geopy.geocoders.baser   r   geopy.locationr	   geopy.pointr
   
geopy.utilr   __all__r   r/   r"   r    <module>rb      s,     ) ; #  
zCx zCr"   