Ë
    Bêñi{  ã            
       óÂ   — 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Úsqrtg3333°MXAÚ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           úY/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/qdrant_client/local/geo.pyÚgeo_distancer      s‡   € ô !¤¨4°°t¸TÐ*BÓCÑ€Dˆ$��dà�$‰;€DØ�$‰;€DÜˆD�1‰H‹˜ÑœS ›Y¬¨T«Ñ2´S¸À¹³]ÀaÑ5GÑGÑG€AØ	Œ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Úlatgëâ6À[À¿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™ v¨e¡}°f¸U±mÀVÈEÁ]ÓSÐVYÒYÐYÐYä˜˜u™ v¨e¡}°f¸U±mÀVÈEÁ]ÓSÐVaÒaÐaÐaÜ˜˜u™ v¨e¡}°f¸U±mÀVÈEÁ]ÓSÐVaÒaÐaÐaÜ˜˜u™ v¨e¡}°f¸U±mÀVÈEÁ]ÓSÐVaÒaÐaÐaÜ˜˜u™ v¨e¡}°f¸U±mÀVÈEÁ]ÓSÐVaÒ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äˆu�h Ô%ØˆØˆØ”#�i“.Ò ©Ü�u˜i¨™l¨EÔ2Ø�Ø�‰FˆAð ”#�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ØˆA�wˆq�z�Tœ#˜d›) a™-Ñ(¨Ñ+Ò+°°Q±¸±
¸dÄ3ÀtÃ9ÈqÁ=Ñ>QÐRSÑ>TÒ0TØ�Aœ˜D›	 A™Ð&ˆÜˆD‹	�A‰€AÜ�1”c˜$“iÓ ò ˆØ�!‰W�Q‰ZˆØ�!‰W�Q‰ZˆØ�!‰W�Q‰ZˆØ�!‰W�Q‰Zˆà�‰U�b˜2‘gÑ  r¨B¨q©E¡zÑ!2Ñ2°R¸2¸a¹5À2¹:Ñ5FÑFÈ!ÑKò 3Ø�r˜!‘u‘*  b¨¡e¡Ñ,°Ñ1ò3à�r˜!‘u‘*  b¨¡e¡Ñ,°Ñ1ð 	ñ
 Ø&Ð&Ò&Ø˜2˜a™5‘j b¨2¨a©5¡jÑ1ò 
Øˆq‰E�R˜"‘W  A¡¨¡Ñ,°°R±Ñ8¸2Ñ=Ñ=ð 	ñ Ø%˜ˆ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˜˜u e˜|Ñ,Ñ-Ñ.ðð 
ó	ð(Øˆe�UˆlÑðØ#'¨¨e°U¨lÑ(;Ñ#<ðØOSðà	ôr   