o
    £D®f„  ã                   @   s`   d Z ddlmZmZmZ ddlmZmZmZ G dd„ deƒZ	G dd„ deƒZ
G dd	„ d	eƒZd
S )zD
This module is for building datums to be used when
building a CRS.
é    )ÚAnyÚOptionalÚUnion)ÚDatumÚ	EllipsoidÚPrimeMeridianc                   @   s.   e Zd ZdZ			ddededefdd	„Zd
S )ÚCustomDatumzg
    .. versionadded:: 2.5.0

    Class to build a datum based on an ellipsoid and prime meridian.
    Ú	undefinedúWGS 84Ú	GreenwichÚnameÚ	ellipsoidÚprime_meridianc                 C   s.   dd|t  |¡ ¡ t |¡ ¡ dœ}|  |¡S )a¬  
        Parameters
        ----------
        name: str, default="undefined"
            Name of the datum.
        ellipsoid: Any, default="WGS 84"
            Anything accepted by :meth:`pyproj.crs.Ellipsoid.from_user_input`
            or a :class:`pyproj.crs.datum.CustomEllipsoid`.
        prime_meridian: Any, default="Greenwich"
            Anything accepted by :meth:`pyproj.crs.PrimeMeridian.from_user_input`.
        ú2https://proj.org/schemas/v0.2/projjson.schema.jsonÚGeodeticReferenceFrame)ú$schemaÚtyper   r   r   )r   Úfrom_user_inputÚto_json_dictr   Úfrom_json_dict)Úclsr   r   r   Ú
datum_json© r   úI/home/ubuntu/webapp/venv/lib/python3.10/site-packages/pyproj/crs/datum.pyÚ__new__   s   ÿù
	zCustomDatum.__new__N)r	   r
   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   r   r   r   r   r   r   
   s    üþýür   c                   @   sJ   e Zd ZdZ					ddedee dee dee dee f
d	d
„ZdS )ÚCustomEllipsoidzI
    .. versionadded:: 2.5.0

    Class to build a custom ellipsoid.
    r	   Nr   Úsemi_major_axisÚinverse_flatteningÚsemi_minor_axisÚradiusc                 C   sV   dd|dœ}|dur||d< |dur||d< |dur||d< |dur&||d< |   |¡S )	aŸ  
        Parameters
        ----------
        name: str, default="undefined"
            Name of the ellipsoid.
        semi_major_axis: float, optional
            The semi major axis in meters. Required if missing radius.
        inverse_flattening: float, optional
            The inverse flattening in meters.
            Required if missing semi_minor_axis and radius.
        semi_minor_axis: float, optional
            The semi minor axis in meters.
            Required if missing inverse_flattening and radius.
        radius: float, optional
            The radius in meters. Can only be used alone.
            Cannot be mixed with other parameters.
        r   r   )r   r   r   Nr!   r"   r#   r$   ©r   )r   r   r!   r"   r#   r$   Úellipsoid_jsonr   r   r   r   5   s   ý
zCustomEllipsoid.__new__)r	   NNNN)r   r   r   r   r   r   Úfloatr   r   r   r   r   r    .   s$    úþýüûúr    c                   @   s$   e Zd ZdZddedefdd„ZdS )	ÚCustomPrimeMeridianz\
    .. versionadded:: 2.5.0

    Class to build a prime meridian based on a longitude.
    r	   Ú	longituder   c                 C   s   dd||dœ}|   |¡S )zµ
        Parameters
        ----------
        longitude: float
            Longitude of prime meridian.
        name: str, optional
            Name of the prime meridian.
        r   r   )r   r   r   r)   r%   )r   r)   r   r   r   r   r   r   e   s   
ü
zCustomPrimeMeridian.__new__N)r	   )r   r   r   r   r'   r   r   r   r   r   r   r(   ^   s    r(   N)r   Útypingr   r   r   Úpyproj._crsr   r   r   r   r    r(   r   r   r   r   Ú<module>   s    $0