Ë
    Ï.fÄ  ã                   ój   — d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ dZ G d„ d	e«      Zy
)é    )Úpartial)Ú	urlencode)ÚGeocoderQueryError)ÚDEFAULT_SENTINELÚGeocoder©ÚLocation)Úlogger)ÚDataBCc                   óX   ‡ — e Zd ZdZdZdeededddœˆ fd„
Zddd	d
edœd„Zd„ Zd„ Z	ˆ xZ
S )r   z­Geocoder using the Physical Address Geocoder from DataBC.

    Documentation at:
        https://github.com/bcgov/ols-geocoder/blob/gh-pages/geocoder-developer-guide.md
    z/addresses.geojsonNzgeocoder.api.gov.bc.ca)ÚschemeÚtimeoutÚproxiesÚ
user_agentÚssl_contextÚadapter_factoryÚdomainc                ót   •— t         ‰| �  ||||||¬«       | j                  ›d|›| j                  ›�| _        y)a   

        :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

            .. versionadded:: 2.4
        )r   r   r   r   r   r   z://N)ÚsuperÚ__init__r   Úgeocode_pathÚapi)	Úselfr   r   r   r   r   r   r   Ú	__class__s	           €úUC:\Users\user\Documents\project_loop\venv\Lib\site-packages\geopy/geocoders/databc.pyr   zDataBC.__init__   sD   ø€ ôL 	‰ÑØØØØ!Ø#Ø+ð 	ô 	
ð #'§+£+©v°t×7HÒ7HÐIˆ�ó    é   r   ÚanyT)Úmax_resultsÚset_backÚlocation_descriptorÚexactly_oner   c                óP  — d|i}|dk7  r||d<   |dvrt        d«      ‚||d<   |rd}||d<   d	j                  | j                  t        |«      f«      }t	        j
                  d
| j                  j                  |«       t        | j                  |¬«      }	| j                  ||	|¬«      S )a~  
        Return a location point by address.

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

        :param int max_results: The maximum number of resutls to request.

        :param float set_back: The distance to move the accessPoint away
            from the curb (in meters) and towards the interior of the parcel.
            location_descriptor must be set to accessPoint for set_back to
            take effect.

        :param str location_descriptor: The type of point requested. It
            can be any, accessPoint, frontDoorPoint, parcelPoint,
            rooftopPoint and routingPoint.

        :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.

        :rtype: ``None``, :class:`geopy.location.Location` or a list of them, if
            ``exactly_one=False``.
        ÚaddressStringr   ÚsetBack)r   ÚaccessPointÚfrontDoorPointÚparcelPointÚrooftopPointÚroutingPointz You did not provided a location_descriptor the webservice can consume. It should be any, accessPoint, frontDoorPoint, parcelPoint, rooftopPoint or routingPoint.ÚlocationDescriptoré   Ú
maxResultsú?z%s.geocode: %s)r"   )r   )r   Újoinr   r   r
   Údebugr   Ú__name__r   Ú_parse_jsonÚ_call_geocoder)
r   Úqueryr   r    r!   r"   r   ÚparamsÚurlÚcallbacks
             r   ÚgeocodezDataBC.geocodeE   sÂ   € ðJ " 5Ð)ˆØ�qŠ=Ø (ˆF�9ÑØð '7ñ 7ô %ðMóð ð
 (;ˆÐ#Ñ$ÙØˆKØ*ˆˆ|Ñà�h‰h˜Ÿ™¤)¨FÓ"3Ð4Ó5ˆÜ�‰Ð% t§~¡~×'>Ñ'>ÀÔDÜ˜4×+Ñ+¸ÔEˆØ×"Ñ" 3¨¸'Ð"ÓBÐBr   c                 óŠ   — t        |d   «      sy g }|d   D ]"  }|j                  | j                  |«      «       Œ$ |r|d   S |S )NÚfeaturesr   )ÚlenÚappendÚ_parse_feature)r   Úresponser"   ÚgeocodedÚfeatures        r   r2   zDataBC._parse_json‚   sT   € ä�8˜JÑ'Ô(ØØˆØ 
Ñ+ò 	:ˆGØ�O‰O˜D×/Ñ/°Ó8Õ9ð	:áØ˜A‘;ÐØˆr   c                 óL   — |d   }|d   d   }t        |d   |d   |d   f|«      S )NÚ
propertiesÚgeometryÚcoordinatesÚfullAddressr,   r   r   )r   r@   rB   rD   s       r   r=   zDataBC._parse_feature�   sB   € Ø˜\Ñ*ˆ
Ø˜jÑ)¨-Ñ8ˆÜØ�}Ñ%¨°A©¸ÀA¹Ð'GØó
ð 	
r   )r1   Ú
__module__Ú__qualname__Ú__doc__r   r   r   r8   r2   r=   Ú__classcell__)r   s   @r   r   r      sO   ø„ ñð (€Lð
 Ø$Ø$ØØ(Ø Ø+ö.Jðh ØØ %ØØ$ô;Còz	ö
r   r   N)Ú	functoolsr   Úurllib.parser   Ú	geopy.excr   Úgeopy.geocoders.baser   r   Úgeopy.locationr	   Ú
geopy.utilr
   Ú__all__r   © r   r   ú<module>rR      s*   ðÝ Ý "å (ß ;Ý #Ý à
€ôG
ˆXõ G
r   