a
    Kcòf   ã                   @   sÒ   d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z ddlmZ G dd	„ d	ejƒ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dS )é    )Úforms)ÚGDALException)ÚGEOSExceptionÚGEOSGeometry)ÚValidationError)Úgettext_lazyé   )ÚOpenLayersWidgetc                       sj   e Zd ZdZeZdZedƒedƒedƒedƒdœZddd	œ‡ fd
d„
Z	dd„ Z
‡ fdd„Zdd„ Z‡  ZS )ÚGeometryFieldzÕ
    This is the basic form field for a Geometry.  Any textual input that is
    accepted by GEOSGeometry is accepted by this form.  By default,
    this includes WKT, HEXEWKB, WKB (in a buffer), and GeoJSON.
    ÚGEOMETRYzNo geometry value provided.zInvalid geometry value.zInvalid geometry type.zXAn error occurred when transforming the geometry to the SRID of the geometry form field.)ÚrequiredÚinvalid_geomÚinvalid_geom_typeÚtransform_errorN)ÚsridÚ	geom_typec                   s8   || _ |d ur|| _tƒ jf i |¤Ž | j| jjd< d S )Nr   )r   r   ÚsuperÚ__init__ÚwidgetÚattrs)Úselfr   r   Úkwargs©Ú	__class__© ú\/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/django/contrib/gis/forms/fields.pyr      s
    zGeometryField.__init__c              
   C   sÌ   || j v rdS t|tƒs’t| jdƒrNz| j |¡}W qx tyJ   d}Y qx0 n*zt|ƒ}W n ttt	fyv   d}Y n0 |du r’t
| jd dd�‚|jsÈz| jj|_W n  tyÆ   | jrÂ| j|_Y n0 |S )z)Transform the value to a Geometry object.NÚdeserializer   ©Úcode)Zempty_valuesÚ
isinstancer   Úhasattrr   r   r   r   Ú
ValueErrorÚ	TypeErrorr   Úerror_messagesr   Zmap_sridÚAttributeError)r   Úvaluer   r   r   Ú	to_python%   s.    



ÿzGeometryField.to_pythonc                    sž   t ƒ  |¡}|du r|S t|jƒ ¡ | jkrH| jdkrHt| jd dd�‚| jrš| jdkrš| j|jkršz| | j¡ W n$ t	y˜   t| jd dd�‚Y n0 |S )z¿
        Validate that the input value can be converted to a Geometry object
        and return it. Raise a ValidationError if the value cannot be
        instantiated as a Geometry.
        Nr   r   r   éÿÿÿÿr   )
r   ÚcleanÚstrr   Úupperr   r#   r   Ú	transformr   )r   r%   Zgeomr   r   r   r(   C   s$    ÿþ
ÿ
ÿzGeometryField.cleanc                 C   sf   z|   |¡}|   |¡}W n ty,   Y dS 0 |rR|rR| |j¡ |j|dd� S t|ƒt|ƒkS dS )z8Compare geographic value of data with its initial value.Tg�íµ ÷Æ°>)Z	toleranceN)r&   r   r+   r   Zequals_exactÚbool)r   ÚinitialÚdatar   r   r   Úhas_changedb   s    
zGeometryField.has_changed)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   r   Ú_Zdefault_error_messagesr   r&   r(   r/   Ú__classcell__r   r   r   r   r
   
   s   ÿü
r
   c                   @   s   e Zd ZdZdS )ÚGeometryCollectionFieldZGEOMETRYCOLLECTIONN©r0   r1   r2   r   r   r   r   r   r6   w   s   r6   c                   @   s   e Zd ZdZdS )Ú
PointFieldZPOINTNr7   r   r   r   r   r8   {   s   r8   c                   @   s   e Zd ZdZdS )ÚMultiPointFieldZ
MULTIPOINTNr7   r   r   r   r   r9      s   r9   c                   @   s   e Zd ZdZdS )ÚLineStringFieldZ
LINESTRINGNr7   r   r   r   r   r:   ƒ   s   r:   c                   @   s   e Zd ZdZdS )ÚMultiLineStringFieldZMULTILINESTRINGNr7   r   r   r   r   r;   ‡   s   r;   c                   @   s   e Zd ZdZdS )ÚPolygonFieldZPOLYGONNr7   r   r   r   r   r<   ‹   s   r<   c                   @   s   e Zd ZdZdS )ÚMultiPolygonFieldZMULTIPOLYGONNr7   r   r   r   r   r=   �   s   r=   N)Údjangor   Zdjango.contrib.gis.gdalr   Zdjango.contrib.gis.geosr   r   Zdjango.core.exceptionsr   Zdjango.utils.translationr   r4   Zwidgetsr	   ÚFieldr
   r6   r8   r9   r:   r;   r<   r=   r   r   r   r   Ú<module>   s   m