
    'Xh{              
           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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sqrtg3333MXA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  }t        |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
       )mapr   r   r   r   r   MEAN_EARTH_RADIUS)r   r	   r
   r   dlondlatacs           A/RAG/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q      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$   A   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   r   floatr   r   tuplelistboolr)   r$    r   r   <module>r>      s    . .  !u !E ! !e ! !2
b5&' Due|,-. 
	(eUl#'eUl(;#<OS	r   