o
    :i{                  
   @   s   d dl mZmZmZmZmZ dZdededededef
dd	ZdddZ	de
eef dee
eef  deee
eef   defddZde
eef dee
eef  dedefddZd
S )    )asincosradianssinsqrtg3333MXAlon1lat1lon2lat2returnc                 C   sr   t t| |||g\} }}}||  }|| }t|d d t|t| t|d d   }dtt| }t| S )a!  
    Calculate distance between two points on Earth using Haversine formula.

    Args:
        lon1: longitude of first point
        lat1: latitude of first point
        lon2: longitude of second point
        lat2: latitude of second point

    Returns:
        distance in meters
       )mapr   r   r   r   r   MEAN_EARTH_RADIUS)r   r   r	   r
   dlondlatac r   d/home/aiteam/pcaa-dev/dashboard-backend/venv/lib/python3.10/site-packages/qdrant_client/local/geo.pygeo_distance   s   0r   Nc                  C   s   ddd} ddd}ddd}t | d | d	 | d | d	 d
k s"J t | d | d	 |d |d	 dks5J t | d | d	 |d |d	 dk sHJ t | d | d	 |d |d	 dks[J t | d | d	 |d |d	 dk snJ d S )Ng鷯B@g(K@)lonlatg6[g{I@g(\*@g(\BJ@r   r   g      ?i $ i@' i j iP- )r   )moscowlondonberlinr   r   r   test_geo_distance    s   


&&&&*r   pointexterior	interiorsc                 C   s`   d}t | |dr.d}d}|t|k r*|s*t | || drd}|d7 }|t|k r*|r|s.d}|S )NFTr      )in_ringlen)r   r   r   inside_polyin_holekr   r   r   boolean_point_in_polygon-   s   r%   ptringignore_boundaryc                 C   st  d}|d d |t |d  d kr,|d d |t |d  d kr,|dt |d  }t |d }tdt |D ]~}|| d }|| d }|| d }|| d }	| d ||  ||| d    |	| d |   dko|| d  || d   dko|| d  |	| d   dk}
|
r|   S || d k|	| d kko| d || | d |  |	|  | k }|r| }|}q9|S )NFr   r   )r!   range)r&   r'   r(   	is_insidejixiyixjyjon_boundary	intersectr   r   r   r    A   s.   @4
&r    )r   N)mathr   r   r   r   r   r   floatr   r   tuplelistboolr%   r    r   r   r   r   <module>   s,    



