a
    1$e                     @   s  d Z ddlZddlmZ ddlmZ ddlmZ G dd deZG dd	 d	eZ	G d
d deZ
G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG d d! d!eZG d"d# d#eZG d$d% d%eZG d&d' d'eZG d(d) d)eZG d*d+ d+eZG d,d- d-eZG d.d/ d/eZG d0d1 d1eZeZG d2d3 d3eZdS )4z[
This module is for building operations to be used when
building a CRS.

:ref:`operations`
    N)Any)CoordinateOperation)CRSErrorc                   @   s*   e Zd ZdZdeeeeeedddZdS )AlbersEqualAreaConversionz{
    .. versionadded:: 2.5.0

    Class for constructing the Albers Equal Area Conversion.

    :ref:`PROJ docs <aea>`
            latitude_first_parallellatitude_second_parallellatitude_false_originlongitude_false_origineasting_false_originnorthing_false_originc                 C   s   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
ddddd|ddddddddd|ddddddddgd}|  |S )aK  
        Parameters
        ----------
        latitude_first_parallel: float
            First standard parallel (lat_1).
        latitude_second_parallel: float
            Second standard parallel (lat_2).
        latitude_false_origin: float, default=0.0
            Latitude of projection center (lat_0).
        longitude_false_origin: float, default=0.0
            Longitude of projection center (lon_0).
        easting_false_origin: float, default=0.0
            False easting (x_0).
        northing_false_origin: float, default=0.0
            False northing (y_0).
        2https://proj.org/schemas/v0.2/projjson.schema.json
ConversionunknownzAlbers Equal AreaEPSGi^&  	authoritycodenameidLatitude of false origindegreeu"  r   valueunitr   Longitude of false originv"  !Latitude of 1st standard parallelw"  !Latitude of 2nd standard parallelx"  Easting at false originZ
LinearUnitZMetre   typer   Zconversion_factorz"  Northing at false origin{"  $schemar'   r   method
parametersfrom_json_dict)clsr   r	   r
   r   r   r   Zaea_json r2   [/var/www/html/django/DPS/env/lib/python3.9/site-packages/pyproj/crs/coordinate_operation.py__new__   sZ    7z!AlbersEqualAreaConversion.__new__N)r   r   r   r   __name__
__module____qualname____doc__floatr4   r2   r2   r2   r3   r      s       r   c                   @   s&   e Zd ZdZdeeeedddZdS )AzimuthalEquidistantConversionz
    .. versionadded:: 2.5.0 AzumuthalEquidistantConversion
    .. versionadded:: 3.2.0 AzimuthalEquidistantConversion

    Class for constructing the Modified Azimuthal Equidistant conversion.

    :ref:`PROJ docs <aeqd>`
    r   latitude_natural_originlongitude_natural_originfalse_eastingfalse_northingc                 C   sn   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ddddgd}|  |S )  
        Parameters
        ----------
        latitude_natural_origin: float, default=0.0
            Latitude of projection center (lat_0).
        longitude_natural_origin: float, default=0.0
            Longitude of projection center (lon_0).
        false_easting: float, default=0.0
            False easting (x_0).
        false_northing: float, default=0.0
            False northing (y_0).

        r   r   r   zModified Azimuthal Equidistantr   ih&  r   r   Latitude of natural originr   a"  r   Longitude of natural originb"  False eastingmetref"  False northingg"  r+   r/   )r1   r=   r>   r?   r@   Z	aeqd_jsonr2   r2   r3   r4   u   s:    #z&AzimuthalEquidistantConversion.__new__N)r   r   r   r   r5   r2   r2   r2   r3   r;   k   s       r;   c                   @   s*   e Zd ZdZdeeeeeedddZdS ) GeostationarySatelliteConversionz
    .. versionadded:: 2.5.0

    Class for constructing the Geostationary Satellite conversion.

    :ref:`PROJ docs <geos>`
    r   )sweep_angle_axissatellite_heightr=   r>   r?   r@   c           	      C   s   |   }d}||vr&td| |dkr8td ddddd	| d
i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gd}| |S )uS  
        Parameters
        ----------
        sweep_angle_axis: str
            Sweep angle axis of the viewing instrument. Valid options are “X” and “Y”.
        satellite_height: float
            Satellite height.
        latitude_natural_origin: float, default=0.0
            Latitude of projection center (lat_0).
        longitude_natural_origin: float, default=0.0
            Longitude of projection center (lon_0).
        false_easting: float, default=0.0
            False easting (x_0).
        false_northing: float, default=0.0
            False northing (y_0).

        )XYzsweep_angle_axis only supports r   zThe latitude of natural origin (lat_0) is not used within PROJ. It is only supported for exporting to the WKT or PROJ JSON formats.r   r   r   r   zGeostationary Satellite (Sweep )zSatellite heightrG   r   r   r   rB   r   r   rC   r   r   rD   rE   rF   rH   rI   rJ   r+   )stripupperr   warningswarnr0   )	r1   rL   rM   r=   r>   r?   r@   Zvalid_sweep_axisZ	geos_jsonr2   r2   r3   r4      sN    %z(GeostationarySatelliteConversion.__new__N)r   r   r   r   )r6   r7   r8   r9   strr:   r4   r2   r2   r2   r3   rK      s       rK   c                   @   s&   e Zd ZdZdeeeedddZdS )#LambertAzimuthalEqualAreaConversionz
    .. versionadded:: 2.5.0 LambertAzumuthalEqualAreaConversion
    .. versionadded:: 3.2.0 LambertAzimuthalEqualAreaConversion

    Class for constructing the Lambert Azimuthal Equal Area conversion.

    :ref:`PROJ docs <laea>`
    r   r<   c                 C   sn   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ddddgd}|  |S )rA   r   r   r   zLambert Azimuthal Equal Arear   i\&  r   r   rB   r   rC   r   rD   rE   rF   rG   rH   rI   rJ   r+   r/   )r1   r=   r>   r?   r@   Z	laea_jsonr2   r2   r3   r4     s:    #z+LambertAzimuthalEqualAreaConversion.__new__N)r   r   r   r   r5   r2   r2   r2   r3   rW     s       rW   c                   @   s*   e Zd ZdZdeeeeeedddZdS )"LambertConformalConic2SPConversionz
    .. versionadded:: 2.5.0

    Class for constructing the Lambert Conformal Conic 2SP conversion.

    :ref:`PROJ docs <lcc>`
    r   r   c                 C   s   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
ddddd|dddddd|dddddgd}|  |S )a_  
        Parameters
        ----------
        latitude_first_parallel: float
            Latitude of 1st standard parallel (lat_1).
        latitude_second_parallel: float
            Latitude of 2nd standard parallel (lat_2).
        latitude_false_origin: float, default=0.0
            Latitude of projection center (lat_0).
        longitude_false_origin: float, default=0.0
            Longitude of projection center (lon_0).
        easting_false_origin: float, default=0.0
            False easting (x_0).
        northing_false_origin: float, default=0.0
            False northing (y_0).

        r   r   r   zLambert Conic Conformal (2SP)r   iJ&  r   r   r    r   r!   r   r"   r#   r   r   r   r   r$   rG   r(   r)   r*   r+   r/   )r1   r   r	   r
   r   r   r   lcc_jsonr2   r2   r3   r4   S  sN    /z*LambertConformalConic2SPConversion.__new__N)r   r   r   r   r5   r2   r2   r2   r3   rX   J  s       rX   c                   @   s(   e Zd ZdZdeeeeedddZdS )	"LambertConformalConic1SPConversionz
    .. versionadded:: 2.5.0

    Class for constructing the Lambert Conformal Conic 1SP conversion.

    :ref:`PROJ docs <lcc>`
    r         ?r=   r>   r?   r@   scale_factor_natural_originc                 C   s   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ddddd|dddddgd}|  |S )a  
        Parameters
        ----------
        latitude_natural_origin: float, default=0.0
            Latitude of projection center (lat_0).
        longitude_natural_origin: float, default=0.0
            Longitude of projection center (lon_0).
        false_easting: float, default=0.0
            False easting (x_0).
        false_northing: float, default=0.0
            False northing (y_0).
        scale_factor_natural_origin: float, default=1.0
            Scale factor at natural origin (k_0).

        r   r   r   zLambert Conic Conformal (1SP)r   iI&  r   r   rB   r   rC   r   rD   rE   Scale factor at natural originunitye"  rF   rG   rH   rI   rJ   r+   r/   )r1   r=   r>   r?   r@   r]   rY   r2   r2   r3   r4     sD    )z*LambertConformalConic1SPConversion.__new__N)r   r   r   r   r[   r5   r2   r2   r2   r3   rZ     s   
     rZ   c                   @   s&   e Zd ZdZdeeeedddZdS )%LambertCylindricalEqualAreaConversionz
    .. versionadded:: 2.5.0

    Class for constructing the Lambert Cylindrical Equal Area conversion.

    :ref:`PROJ docs <cea>`
    r   r   r>   r?   r@   c                 C   sn   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ddddgd}|  |S )  
        Parameters
        ----------
        latitude_first_parallel: float, default=0.0
            Latitude of 1st standard parallel (lat_ts).
        longitude_natural_origin: float, default=0.0
            Longitude of projection center (lon_0).
        false_easting: float, default=0.0
            False easting (x_0).
        false_northing: float, default=0.0
            False northing (y_0).

        r   r   r   zLambert Cylindrical Equal Arear   ik&  r   r   r    r   r!   r   rD   rE   rF   rG   rH   rI   rJ   r+   r/   )r1   r   r>   r?   r@   Zcea_jsonr2   r2   r3   r4     s:    #z-LambertCylindricalEqualAreaConversion.__new__N)r   r   r   r   r5   r2   r2   r2   r3   ra     s   
    ra   c                   @   s&   e Zd ZdZdeeeedddZdS )	*LambertCylindricalEqualAreaScaleConversiona  
    .. versionadded:: 2.5.0

    Class for constructing the Lambert Cylindrical Equal Area conversion.

    This version uses the scale factor and differs from the official version.

    The scale factor will be converted to the Latitude of 1st standard parallel (lat_ts)
    when exporting to WKT in PROJ>=7.0.0. Previous version will export it as a
    PROJ-based coordinate operation in the WKT.

    :ref:`PROJ docs <cea>`
    r   r[   )r>   r?   r@   r]   c                 C   s<   ddl m} d| d| d| d| }| ||j S )a  
        Parameters
        ----------
        longitude_natural_origin: float, default=0.0
            Longitude of projection center (lon_0).
        false_easting: float, default=0.0
            False easting (x_0).
        false_northing: float, default=0.0
            False northing (y_0).
        scale_factor_natural_origin: float, default=1.0
            Scale factor at natural origin (k or k_0).

        r   CRSz+proj=cea +lon_0=z +x_0=z +y_0=z +k_0=)
pyproj.crsrf   	from_jsonZcoordinate_operationto_json)r1   r>   r?   r@   r]   rf   Zproj_stringr2   r2   r3   r4   =  s    z2LambertCylindricalEqualAreaScaleConversion.__new__N)r   r   r   r[   r5   r2   r2   r2   r3   rd   .  s       rd   c                   @   s(   e Zd ZdZdeeeeedddZdS )	MercatorAConversionz
    .. versionadded:: 2.5.0

    Class for constructing the Mercator (variant A) conversion.

    :ref:`PROJ docs <merc>`
    r   r[   r\   c                 C   s   |dkrt 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|dddd	dd|dddd	dgd}| |S )a  
        Parameters
        ----------
        latitude_natural_origin: float, default=0.0
            Latitude of natural origin (lat_0). Must be 0 by `this conversion's
            definition
            <https://epsg.org/coord-operation-method_9804/Mercator-variant-A.html>`_.
        longitude_natural_origin: float, default=0.0
            Longitude of natural origin (lon_0).
        false_easting: float, default=0.0
            False easting (x_0).
        false_northing: float, default=0.0
            False northing (y_0).
        scale_factor_natural_origin: float, default=1.0
            Scale factor at natural origin (k or k_0).

        r   z@This conversion is defined for only latitude_natural_origin = 0.r   r   r   zMercator (variant A)r   iL&  r   r   rB   r   rC   r   rD   rE   r^   r_   r`   rF   rG   rH   rI   rJ   r+   )r   r0   )r1   r=   r>   r?   r@   r]   	merc_jsonr2   r2   r3   r4   j  sL    )zMercatorAConversion.__new__N)r   r   r   r   r[   r5   r2   r2   r2   r3   rj   a  s   
     rj   c                   @   s&   e Zd ZdZdeeeedddZdS )MercatorBConversionz
    .. versionadded:: 2.5.0

    Class for constructing the Mercator (variant B) conversion.

    :ref:`PROJ docs <merc>`
    r   rb   c                 C   sn   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ddddgd}|  |S )rc   r   r   r   zMercator (variant B)r   iM&  r   r   r    r   r!   r   rD   rE   rF   rG   rH   rI   rJ   r+   r/   )r1   r   r>   r?   r@   rk   r2   r2   r3   r4     s:    #zMercatorBConversion.__new__N)r   r   r   r   r5   r2   r2   r2   r3   rl     s   
    rl   c                	   @   s,   e Zd ZdZdeeeeeeedddZdS )	 HotineObliqueMercatorBConversionz
    .. versionadded:: 2.5.0

    Class for constructing the Hotine Oblique Mercator (variant B) conversion.

    :ref:`PROJ docs <omerc>`
    r[   r   )latitude_projection_centrelongitude_projection_centreazimuth_initial_line!angle_from_rectified_to_skew_gridscale_factor_on_initial_lineeasting_projection_centrenorthing_projection_centrec           	      C   s   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
ddddd|dddddd|dddddd|dddddgd}|  |S )a  
        Parameters
        ----------
        latitude_projection_centre: float
            Latitude of projection centre (lat_0).
        longitude_projection_centre: float
            Longitude of projection centre (lonc).
        azimuth_initial_line: float
            Azimuth of initial line (alpha).
        angle_from_rectified_to_skew_grid: float
            Angle from Rectified to Skew Grid (gamma).
        scale_factor_on_initial_line: float, default=1.0
            Scale factor on initial line (k or k_0).
        easting_projection_centre: float, default=0.0
            Easting at projection centre (x_0).
        northing_projection_centre: float, default=0.0
            Northing at projection centre (y_0).
        r   r   r   z#Hotine Oblique Mercator (variant B)r   iW&  r   r   zLatitude of projection centrer   ik"  r   zLongitude of projection centreil"  zAzimuth of initial lineim"  z!Angle from Rectified to Skew Gridin"  zScale factor on initial liner_   io"  zEasting at projection centrerG   ip"  zNorthing at projection centreiq"  r+   r/   )	r1   rn   ro   rp   rq   rr   rs   rt   Z
omerc_jsonr2   r2   r3   r4     sX    5z(HotineObliqueMercatorBConversion.__new__N)r[   r   r   r5   r2   r2   r2   r3   rm     s      rm   c                   @   s&   e Zd ZdZdeeeedddZdS )OrthographicConversionzx
    .. versionadded:: 2.5.0

    Class for constructing the Orthographic conversion.

    :ref:`PROJ docs <ortho>`
    r   r<   c                 C   sn   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ddddgd}|  |S )rA   r   r   r   ZOrthographicr   ip&  r   r   rB   r   rC   r   rD   rE   rF   rG   rH   rI   rJ   r+   r/   )r1   r=   r>   r?   r@   Z
ortho_jsonr2   r2   r3   r4   \  s:    #zOrthographicConversion.__new__N)r   r   r   r   r5   r2   r2   r2   r3   ru   S  s   
    ru   c                   @   s(   e Zd ZdZdeeeeedddZdS )	PolarStereographicAConversionz
    .. versionadded:: 2.5.0

    Class for constructing the Polar Stereographic A conversion.

    :ref:`PROJ docs <stere>`
    r   r[   r\   c                 C   s   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ddddd|dddddgd}|  |S )a  
        Parameters
        ----------
        latitude_natural_origin: float
            Latitude of natural origin (lat_0). Either +90 or -90.
        longitude_natural_origin: float, default=0.0
            Longitude of natural origin (lon_0).
        false_easting: float, default=0.0
            False easting (x_0).
        false_northing: float, default=0.0
            False northing (y_0).
        scale_factor_natural_origin: float, default=0.0
            Scale factor at natural origin (k or k_0).

        r   r   r   zPolar Stereographic (variant A)r   iR&  r   r   rB   r   rC   r   rD   rE   r^   r_   r`   rF   rG   rH   rI   rJ   r+   r/   r1   r=   r>   r?   r@   r]   
stere_jsonr2   r2   r3   r4     sD    )z%PolarStereographicAConversion.__new__N)r   r   r   r[   r5   r2   r2   r2   r3   rv     s       rv   c                   @   s&   e Zd ZdZdeeeedddZdS )PolarStereographicBConversionz
    .. versionadded:: 2.5.0

    Class for constructing the Polar Stereographic B conversion.

    :ref:`PROJ docs <stere>`
    r   )latitude_standard_parallellongitude_originr?   r@   c                 C   sn   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ddddgd}|  |S )a  
        Parameters
        ----------
        latitude_standard_parallel: float, default=0.0
            Latitude of standard parallel (lat_ts).
        longitude_origin: float, default=0.0
            Longitude of origin (lon_0).
        false_easting: float, default=0.0
            False easting (x_0).
        false_northing: float, default=0.0
            False northing (y_0).

        r   r   r   zPolar Stereographic (variant B)r   ie&  r   r   zLatitude of standard parallelr   i"  r   zLongitude of origini"  rF   rG   rH   rI   rJ   r+   r/   )r1   rz   r{   r?   r@   rx   r2   r2   r3   r4     s:    #z%PolarStereographicBConversion.__new__N)r   r   r   r   r5   r2   r2   r2   r3   ry     s   
    ry   c                   @   s$   e Zd ZdZdeeedddZdS )SinusoidalConversionzu
    .. versionadded:: 2.5.0

    Class for constructing the Sinusoidal conversion.

    :ref:`PROJ docs <sinu>`
    r   )r>   r?   r@   c                 C   sT   dddddid|ddd	d
dd|dddd
dd|dddd
dgd}|  |S )a1  
        Parameters
        ----------
        longitude_natural_origin: float, default=0.0
            Longitude of projection center (lon_0).
        false_easting: float, default=0.0
            False easting (x_0).
        false_northing: float, default=0.0
            False northing (y_0).

        r   r   r   r   Z
SinusoidalrD   r   r   rE   r   r   rF   rG   rH   rI   rJ   r+   r/   )r1   r>   r?   r@   Z	sinu_jsonr2   r2   r3   r4   /  s,    zSinusoidalConversion.__new__N)r   r   r   r5   r2   r2   r2   r3   r|   &  s   
   r|   c                   @   s(   e Zd ZdZdeeeeedddZdS )	StereographicConversionzy
    .. versionadded:: 2.5.0

    Class for constructing the Stereographic conversion.

    :ref:`PROJ docs <stere>`
    r   r[   r\   c                 C   sx   dddddi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d
dgd}|  |S )a  
        Parameters
        ----------
        latitude_natural_origin: float, default=0.0
            Latitude of natural origin (lat_0).
        longitude_natural_origin: float, default=0.0
            Longitude of natural origin (lon_0).
        false_easting: float, default=0.0
            False easting (x_0).
        false_northing: float, default=0.0
            False northing (y_0).
        scale_factor_natural_origin: float, default=1.0
            Scale factor at natural origin (k or k_0).

        r   r   r   r   ZStereographicrB   r   r   rC   r   r   rD   rE   r^   r_   r`   rF   rG   rH   rI   rJ   r+   r/   rw   r2   r2   r3   r4   f  s@    &zStereographicConversion.__new__N)r   r   r   r   r[   r5   r2   r2   r2   r3   r}   ]  s   
     r}   c                   @   s"   e Zd ZdZdeedddZdS )UTMConversionzm
    .. versionadded:: 2.5.0

    Class for constructing the UTM conversion.

    :ref:`PROJ docs <utm>`
    N)zone
hemispherec                 C   s   |  d| | S )z
        Parameters
        ----------
        zone: int
            UTM Zone between 1-60.
        hemisphere: str, default="N"
            Either N for North or S for South.
        z	UTM zone )	from_name)r1   r   r   r2   r2   r3   r4     s    	zUTMConversion.__new__N)r   )r6   r7   r8   r9   rV   r4   r2   r2   r2   r3   r~     s   r~   c                   @   s(   e Zd ZdZdeeeeedddZdS )	TransverseMercatorConversionz
    .. versionadded:: 2.5.0

    Class for constructing the Transverse Mercator conversion.

    :ref:`PROJ docs <tmerc>`
    r   r[   r\   c                 C   s   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ddddd|dddddgd}|  |S )a  
        Parameters
        ----------
        latitude_natural_origin: float, default=0.0
            Latitude of projection center (lat_0).
        longitude_natural_origin: float, default=0.0
            Longitude of projection center (lon_0).
        false_easting: float, default=0.0
            False easting (x_0).
        false_northing: float, default=0.0
            False northing (y_0).
        scale_factor_natural_origin: float, default=1.0
            Scale factor at natural origin (k or k_0).

        r   r   r   zTransverse Mercatorr   iO&  r   r   rB   r   rC   r   rD   rE   r^   r_   r`   rF   rG   rH   rI   rJ   r+   r/   )r1   r=   r>   r?   r@   r]   Z
tmerc_jsonr2   r2   r3   r4     sD    )z$TransverseMercatorConversion.__new__N)r   r   r   r   r[   r5   r2   r2   r2   r3   r     s   
     r   c                   @   s*   e Zd ZdZdeeeeeedddZdS )VerticalPerspectiveConversionz
    .. versionadded:: 2.5.0

    Class for constructing the Vetical Perspective conversion.

    :ref:`PROJ docs <nsper>`
    r   )viewpoint_heightlatitude_topocentric_originlongitude_topocentric_origin%ellipsoidal_height_topocentric_originr?   r@   c                 C   s   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ddddd|dddddd|dddddgd}|  |S )a\  
        Parameters
        ----------
        viewpoint_height: float
            Viewpoint height (h).
        latitude_topocentric_origin: float, default=0.0
            Latitude of topocentric origin (lat_0).
        longitude_topocentric_origin: float, default=0.0
            Longitude of topocentric origin (lon_0).
        ellipsoidal_height_topocentric_origin: float, default=0.0
            Ellipsoidal height of topocentric origin.
        false_easting: float, default=0.0
            False easting (x_0).
        false_northing: float, default=0.0
            False northing (y_0).

        r   r   r   zVertical Perspectiver   in&  r   r   zLatitude of topocentric originr   i"  r   zLongitude of topocentric origini"  z(Ellipsoidal height of topocentric originrG   i"  zViewpoint heighti"  rF   rH   rI   rJ   r+   r/   )r1   r   r   r   r   r?   r@   Z
nsper_jsonr2   r2   r3   r4     sN    /z%VerticalPerspectiveConversion.__new__N)r   r   r   r   r   r5   r2   r2   r2   r3   r     s        r   c                   @   s$   e Zd ZdZdeeedddZdS )"RotatedLatitudeLongitudeConversionz
    .. versionadded:: 2.5.0

    Class for constructing the Rotated Latitude Longitude conversion.

    :ref:`PROJ docs <ob_tran>`
    r   )o_lat_po_lon_plon_0c              
   C   s<   dddddid|ddd	|ddd
|ddgd}|  |S )a  
        Parameters
        ----------
        o_lat_p: float
            Latitude of the North pole of the unrotated source CRS,
            expressed in the rotated geographic CRS.
        o_lon_p: float
            Longitude of the North pole of the unrotated source CRS,
            expressed in the rotated geographic CRS.
        lon_0: float, default=0.0
            Longitude of projection center.

        r   r   r   r   zPROJ ob_tran o_proj=longlatr   r   rQ   r   r   r+   r/   )r1   r   r   r   rot_latlon_jsonr2   r2   r3   r4   f  s    


z*RotatedLatitudeLongitudeConversion.__new__N)r   r5   r2   r2   r2   r3   r   ]  s   r   c                   @   s$   e Zd ZdZdeeedddZdS )PoleRotationNetCDFCFConversionz
    .. versionadded:: 3.3.0

    Class for constructing the Pole rotation (netCDF CF convention) conversion.

    http://cfconventions.org/cf-conventions/cf-conventions.html#_rotated_pole

    :ref:`PROJ docs <ob_tran>`
    r   )grid_north_pole_latitudegrid_north_pole_longitudenorth_pole_grid_longitudec              
   C   s<   dddddid|ddd|ddd	|ddgd
}|  |S )a  
        Parameters
        ----------
        grid_north_pole_latitude: float
            Latitude of the North pole of the unrotated source CRS,
            expressed in the rotated geographic CRS (o_lat_p)
        grid_north_pole_longitude: float
            Longitude of projection center (lon_0 - 180).
        north_pole_grid_longitude: float, default=0.0
            Longitude of the North pole of the unrotated source CRS,
            expressed in the rotated geographic CRS (o_lon_p).
        z2https://proj.org/schemas/v0.4/projjson.schema.jsonr   z$Pole rotation (netCDF CF convention)r   z/Grid north pole latitude (netCDF CF convention)r   rQ   z0Grid north pole longitude (netCDF CF convention)z0North pole grid longitude (netCDF CF convention)r+   r/   )r1   r   r   r   r   r2   r2   r3   r4     s&    z&PoleRotationNetCDFCFConversion.__new__N)r   r5   r2   r2   r2   r3   r     s    r   c                   @   s(   e Zd ZdZdeeeeedddZdS ) EquidistantCylindricalConversionu   
    .. versionadded:: 2.5.0

    Class for constructing the Equidistant Cylintrical (Plate Carrée) conversion.

    :ref:`PROJ docs <eqc>`
    r   )r   r=   r>   r?   r@   c                 C   s   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ddddd|dddddgd}|  |S )a  
        Parameters
        ----------
        latitude_first_parallel: float, default=0.0
            Latitude of 1st standard parallel (lat_ts).
        latitude_natural_origin: float, default=0.0
            Longitude of projection center (lon_0).
        longitude_natural_origin: float, default=0.0
            Longitude of projection center (lon_0).
        false_easting: float, default=0.0
            False easting (x_0).
        false_northing: float, default=0.0
            False northing (y_0).
        r   r   r   zEquidistant Cylindricalr   i  r   r   r    r   r!   r   rB   rC   rD   rE   rF   rG   rH   rI   rJ   r+   r/   )r1   r   r=   r>   r?   r@   Zeqc_jsonr2   r2   r3   r4     sD    )z(EquidistantCylindricalConversion.__new__N)r   r   r   r   r   r5   r2   r2   r2   r3   r     s   
     r   c                
   @   s.   e Zd ZdZdeeeeeeeedddZdS )ToWGS84TransformationzY
    .. versionadded:: 2.5.0

    Class for constructing the ToWGS84 Transformation.
    r   )
source_crsx_axis_translationy_axis_translationz_axis_translationx_axis_rotationy_axis_rotationz_axis_rotationscale_differencec	                 C   s  ddl m}	 ddd|	| dddd	dd
ddddddddddddddg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"d'|d(d)d*d+dd,dd"d-|d(d)d*d+dd.dd"d/|d(d)d*d+dd0dd"d1|d2d3d4d+dd5dd"gd6}
| |
S )7a  
        Parameters
        ----------
        source_crs: Any
            Input to create the Source CRS.
        x_axis_translation: float, default=0.0
            X-axis translation.
        y_axis_translation: float, default=0.0
            Y-axis translation.
        z_axis_translation: float, default=0.0
            Z-axis translation.
        x_axis_rotation: float, default=0.0
            X-axis rotation.
        y_axis_rotation: float, default=0.0
            Y-axis rotation.
        z_axis_rotation: float, default=0.0
            Z-axis rotation.
        scale_difference: float, default=0.0
            Scale difference.
        r   re   r   ZTransformationz$Transformation from unknown to WGS84ZGeographicCRSzWGS 84ZGeodeticReferenceFramezWorld Geodetic System 1984iRa gmtr@)r   Zsemi_major_axisZinverse_flattening)r'   r   Z	ellipsoidZellipsoidalZLatitudeZlatZnorthr   )r   Zabbreviation	directionr   Z	LongitudeZlonZeast)subtypeZaxisr   i  r   )r'   r   ZdatumZcoordinate_systemr   z.Position Vector transformation (geog2D domain)i%  r   zX-axis translationrG   i!  r   zY-axis translationi!  zZ-axis translationi!  zX-axis rotationZAngularUnitz
arc-secondgU>r&   i!  zY-axis rotationi!  zZ-axis rotationi!  zScale differenceZ	ScaleUnitzparts per milliongư>i!  )r,   r'   r   r   Z
target_crsr-   r.   )rg   rf   Zfrom_user_inputZto_json_dictr0   )r1   r   r   r   r   r   r   r   r   rf   Ztowgs84_jsonr2   r2   r3   r4     s     
 fzToWGS84Transformation.__new__N)r   r   r   r   r   r   r   )r6   r7   r8   r9   r   r:   r4   r2   r2   r2   r3   r     s$   	       r   ) r9   rT   typingr   Zpyproj._crsr   Zpyproj.exceptionsr   r   r;   rK   rW   rX   rZ   ra   rd   rj   rl   rm   ru   rv   ry   r|   r}   r~   r   r   r   r   r   ZPlateCarreeConversionr   r2   r2   r2   r3   <module>   s8   \DWDULC3RC]CMC7JLU%7L