
    IgC              
           d dl mZmZmZmZmZ d dlmZmZ de	de	de	de	de	f
dZ
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Zdee	e	f   deee	e	f      dedefdZy	)    )asincosradianssinsqrt)ListTuplelon1lat1lon2lat2returnc                     t        t        | |||g      \  } }}}|| z
  }||z
  }t        |dz        dz  t        |      t        |      z  t        |dz        dz  z  z   }dt	        t        |            z  }d|z  }|dz  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
       i  i  )mapr   r   r   r   r   )	r
   r   r   r   dlondlatackms	            T/var/www/html/answerous/venv/lib/python3.12/site-packages/qdrant_client/local/geo.pygeo_distancer      s     !4tT*BCD$d$;D$;DD1HSYT2S]a5GGGA	DaMA	B9    Nc                  X   ddd} ddd}ddd}t        | d   | d	   | d   | d	         d
k  sJ t        | d   | d	   |d   |d	         dkD  sJ t        | d   | d	   |d   |d	         dk  sJ t        | d   | d	   |d   |d	         dkD  sJ t        | d   | d	   |d   |d	         dk  sJ y )Ng鷯B@g(K@)lonlatg6[g{I@g(\*@g(\BJ@r   r   g      ?i $ i@' i j iP- )r   )moscowlondonberlins      r   test_geo_distancer       s    W-FW-FW-Fuve}fUmVE]SVYYYYuve}fUmVE]SVaaaauve}fUmVE]SVaaaauve}fUmVE]SVaaaauve}fUmVE]SVaaaar   pointexterior	interiorsc                     d}t        | |d      r@d}d}|t        |      k  r*|s(t        | ||   d      rd}|dz  }|t        |      k  r|s(|sd}|S )NFTr      )in_ringlen)r!   r"   r#   inside_polyin_holeks         r   boolean_point_in_polygonr+   ,   sk    
 Kuh%#i. uilE2FA #i.  Kr   ptringignore_boundaryc                 P   d}|d   d   |t        |      dz
     d   k(  r.|d   d   |t        |      dz
     d   k(  r|dt        |      dz
   }t        |      dz
  }t        dt        |            D ]  }||   d   }||   d   }||   d   }||   d   }	| d   ||z
  z  ||| d   z
  z  z   |	| d   |z
  z  z   dk(  xr* || d   z
  || d   z
  z  dk  xr || d   z
  |	| d   z
  z  dk  }
|
r| c S || d   kD  |	| d   kD  k7  xr | d   ||z
  | d   |z
  z  |	|z
  z  |z   k  }|r| }|} |S )NFr   r%   )r'   range)r,   r-   r.   	is_insidejixiyixjyjon_boundary	intersects               r   r&   r&   @   s    IAwqzT#d)a-(++Q
d3t9q=>QRS>T0TAD	A&D	AA1c$i  !WQZ!WQZ!WQZ!WQZUb2grBqEz!22R2a52:5FF!K 3r!u*be,13r!u*be,1 	
 &&&2a5jb2a5j1 
qER"WA,R82== 	 %I#$ r   )r   N)mathr   r   r   r   r   typingr   r	   floatr   r    boolr+   r&    r   r   <module>r?      s    . . u E  e  4
b5&' Due|,-. 
	(eUl#'eUl(;#<OS	r   