U
    J\(d                     @   s   d dl Z G dd dZdd ZG dd dZdd	 Zd
d Zdd Zdd Zdd Zdd Z	dd Z
dd Zdd Zdd Zd ddZd!ddZdS )"    Nc                   @   s   e Zd Zd.ddZddddgZddddgZd	dd
dgZddddgZddddgZddddgZ	ddddgZ
ddddgZddddgZddddgZdddd gZeeeeee	e
eeeed!Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- ZdS )/	EllipsoidNc                 C   s   || _ |d krH|| _| j | j | j  | _| jdkr@d| j | _qtd | _n,|d krt|| _d| j | _| j d| j  | _d| j | jd  | _t| j| _| jd| j  | _t| j| _	|r|| _
nd| _
d S )Nr         Zunknwn)abffinve2mathsqrteep2epname)selfZ	semimajorZ	semiminorZinvflatr    r   /var/www/ahpy/ellip.py__init__   s$    
zEllipsoid.__init__iRa gr@GRS80gmtr@WGS84iSa g     r@HAYFDgLTXAg   ?XAC80FRgGITXAg~jtWr@C80GBg   SXAg
ףp=Js@PLESSg   >XAPLES2g   @SXAgMbXJs@DELAMr   SPH_Ug   CNXAPICARg̬NRXAgq=
ףt@ZC_p_et_m_1799)r   r   r   r   r   r   r   r   r   r   CPMc                 C   s
   |  tS )N)r   r   r   r   r   r   grs80&   s    zEllipsoid.grs80c                 C   s>   t | jd| jd| jd| jd| jd| jd| jd| jd| j	 d S )	NZa_Zb_Zf_z1/f_Ze_Ze2_Zep_Zep2_)
printr   r   r   r   r   r   r	   r   r   r   r   r   r   	print_ell)   s    zEllipsoid.print_ellc                 C   s(   t d| jt | d  }| j| S Nr   r   )r
   r   r   sinr   r   phiwr   r   r   gnormal,   s    zEllipsoid.gnormalc                 C   s6   t d| jt | d  }| jd| j  |d  S Nr   r      )r
   r   r   r$   r   r	   r%   r   r   r   grho0   s    zEllipsoid.grhoc                 C   s   g g g g}|  |d }||d  t|d  t|d  |d< ||d  t|d  t|d  |d< |d| j  |d  t|d  |d< |S )Nr   r   r   )r(   r
   cosr$   r	   )r   gxnr   r   r   geocar4   s    
,,(zEllipsoid.geocarc              
   C   s&  g g g g}|d dkrn|d dkrn|d dkr8d d d gS d|d< t |d d|d< t|d | j |d< |S t |d d |d d  }t |d |d |d< t |d |d| j  }d}tdD ]F}| |}|t | | }t |d |d| jd||     }q||d< ||d< |S )Nr   r   r   
   )	r
   atan2absr   r   r	   ranger(   r,   )r   r.   r-   pr   hiNr   r   r   cargeo<   s&    


(zEllipsoid.cargeo)NNN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r   ZELLSr    r"   r(   r+   r0   r9   r   r   r   r   r      s&   
r   c                 C   s   t | d | d | d | d S )Nr   r   r   r*   )r   )Zaryr   r   r   loadT   s    r=   c                   @   s   e Zd ZdddZdS )PointNc                 C   s  || _ |r|| _|d | _|d | _|d | _||}|d | _|d | _|d | _|| _	| jt
j d | _| jt
j d | _| j| j| jg| _n |r&|| _	|d | _|d | _|d | _| jt
j d | _| jt
j d | _| j| j| jg| _||}|d | _|d | _|d | _|| _n|r|| _|d | _|d | _|d | _| jt
j d | _| jt
j d | _| j| j| jg| _	|| j	}|d | _|d | _|d | _|| _|| j| _|| j| _t
| j| j | _d S )Nr   r   r      )ellcartr.   yzr9   lonlathegeor
   piZlonddZlatddgeoddr0   r+   rhor(   r   Zrct)r   r@   rA   rG   rI   r-   r.   r   r   r   r   Y   sV    



















zPoint.__init__)NNN)r:   r;   r<   r   r   r   r   r   r>   X   s   r>   c                 C   s@   | j }|j }d}tdD ]}||| ||  d 7 }qt|S )Nr   r*   r   )rA   r4   r
   r   )pt1pt2x1x2dr7   r   r   r   spatial_dist   s    rP   c                 C   s  t |}t |}g g g g}| dkrp|d |d< |
 |d  ||d   |d< | |d  ||d   |d< n| dkr||d  ||d   |d< |d |d< ||d  ||d   |d< nP| dkr||d  ||d   |d< | |d  ||d   |d< |d |d< |S )Nr   r   r   r*   )r
   r,   r$   )ZaxisZangleZxincasar.   r   r   r   _rotate   s     


 
rS   c                 C   sj   g g g g}g g g g}t dD ]}|j| | j|  ||< qtdtjd | j tdtjd | j |}|S )Nr*   r   r   )r4   rA   rS   r
   rH   rE   rD   )rK   rL   dxenur7   r   r   r   rU      s    

,rU   c                 C   s:   g g g g}t dtjd | j t dtjd | j |}|S r)   )rS   r
   rH   rE   rD   )ptrT   rU   r   r   r   dx_enu   s    
,rW   c                 C   s    t | |}|d |d |d gS )Nr   r   r   )rU   )rK   rL   Zxenur   r   r   neu   s    
rX   c                 C   sv   t | |}t|d |d dtj  }|d d |d d  }t|d t|}t||d d  }|||gS )Nr   r   r   )rU   r
   r2   rH   r   )rK   rL   Zdxlazr2elrO   r   r   r   az_el_d   s    
r\   c                 C   s4   t | |}|d tj d |d tj d |d gS )Nr   r?   r   r   )r\   r
   rH   )rK   rL   Zaelr   r   r   
az_el_d_dd   s    
r]   c                 C   s0   dt |d | j t |d | j   }|S r#   )r
   r$   r(   r,   rJ   )rV   rY   rr   r   r   raz   s    ,r_   c                 C   s   | j }|j }g }d}tdD ]*}|| ||  }||d 7 }|| qtdtjd | j tdtjd | j |}t|d |d dtj  }	t	| |	}
|
| j
 |
|j
  }}|d |d  | d | | }t|}|
| S )Nr   r*   r   r   )rA   r4   appendrS   r
   rH   rE   rD   r2   r_   rF   acos)p1p2rM   rN   rT   Zdp2r7   ZdcrU   rY   r^   Zr1rZ   cosomomr   r   r   spheroid_dist   s    ,
 
rf   c           	      C   s   t | |}t| |d }td| | j|j|j| j   }}}t|t| t|t| t|  }d}t|dkrt	|}|| S )Nr   ZRRRRRRr   )
r\   r_   r!   rE   rD   r
   r$   r,   r3   ra   )	rb   rc   Zaedr^   f1f2Zdlamrd   re   r   r   r   spheroid_dist_2   s    

2
ri   c                 C   s   g g g g}d}|rd}|d | d |d | d   |d | d   |d | d   |  |d< |d | d |d | d   |d | d   |d | d   |  |d< |d | d |d | d   |d | d   |d | d   |  |d< |S )	Nr   r   r*      r         r   )trM   invrN   sr   r   r   tf7   s    
HHHrq   c                 C   s   t | |j|}t||dS )N)rA   )rq   rA   r>   )rn   rK   Zell2ro   rN   r   r   r   pt_tf7   s    rr   )N)N)r
   r   r=   r>   rP   rS   rU   rW   rX   r\   r]   r_   rf   ri   rq   rr   r   r   r   r   <module>   s   Q0
