
    g                         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	ej                        Z G d
 de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zy)    )forms)GDALException)GEOSExceptionGEOSGeometry)ValidationError)gettext_lazy   )OpenLayersWidgetc                        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

Z	d Z
 fdZd Z x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                    || _         ||| _        t        |   di | | j                  | j                  j
                  d<   y )Nr    )r   r   super__init__widgetattrs)selfr   r   kwargs	__class__s       w/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/contrib/gis/forms/fields.pyr   zGeometryField.__init__   s?    	 &DN"6")-+&    c                    || j                   v ryt        |t              s[t        | j                  d      r	 | j                  j                  |      }n	 t        |      }|t        | j                  d   d      |j                  s	 | j                  j                  |_        |S |S # t        $ r d}Y Uw xY w# t        t        t        f$ r d}Y qw xY w# t        $ r! | j                  r| j                  |_        Y |S w xY w)z)Transform the value to a Geometry object.Ndeserializer   code)empty_values
isinstancer   hasattrr   r    r   r   
ValueError	TypeErrorr   error_messagesr   map_sridAttributeError)r   values     r   	to_pythonzGeometryField.to_python%   s    D%%%%.t{{M2! KK33E:E!(/E }%''7n 
 zz+![[11
 u' % ! E!
 &z9= ! E! " +99!%EJ+s5   B' B8 C 'B54B58CC&C>=C>c                    t         |   |      }||S t        |j                        j	                         | j                  k7  r)| j                  dk7  rt        | j                  d   d      | j                  rF| j                  dk7  r7| j                  |j                  k7  r	 |j                  | j                         |S |S # t        $ r t        | j                  d   d      w xY w)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.
        r   r   r!   r   )
r   cleanstrr   upperr   r(   r   	transformr   )r   r+   geomr   s      r   r/   zGeometryField.cleanC   s     w}U#<K
 %%'4>>9*,!##$78?R 
 99bTYY$))-Ctyy) t ! %''(9:AR s   #C $C&c                     	 | j                  |      }| j                  |      }|r1|r/|j                  |j                         |j	                  |d       S t        |      t        |      k7  S # t        $ r Y yw xY w)z8Compare geographic value of data with its initial value.Tgư>)	tolerance)r,   r   r2   r   equals_exactbool)r   initialdatas      r   has_changedzGeometryField.has_changedb   s~    	>>$'DnnW-G
 tNN7<<( ++DH+EEE =DJ..  		s   "A. .	A:9A:)__name__
__module____qualname____doc__r
   r   r   _default_error_messagesr   r,   r/   r:   __classcell__)r   s   @r   r   r   
   sa     FI 3434786
	  $t 8<>/r   r   c                       e Zd ZdZy)GeometryCollectionFieldGEOMETRYCOLLECTIONNr;   r<   r=   r   r   r   r   rC   rC   w   s    $Ir   rC   c                       e Zd ZdZy)
PointFieldPOINTNrE   r   r   r   rG   rG   {   s    Ir   rG   c                       e Zd ZdZy)MultiPointField
MULTIPOINTNrE   r   r   r   rJ   rJ          Ir   rJ   c                       e Zd ZdZy)LineStringField
LINESTRINGNrE   r   r   r   rN   rN      rL   r   rN   c                       e Zd ZdZy)MultiLineStringFieldMULTILINESTRINGNrE   r   r   r   rQ   rQ      s    !Ir   rQ   c                       e Zd ZdZy)PolygonFieldPOLYGONNrE   r   r   r   rT   rT      s    Ir   rT   c                       e Zd ZdZy)MultiPolygonFieldMULTIPOLYGONNrE   r   r   r   rW   rW      s    Ir   rW   N)djangor   django.contrib.gis.gdalr   django.contrib.gis.geosr   r   django.core.exceptionsr   django.utils.translationr   r?   widgetsr
   Fieldr   rC   rG   rJ   rN   rQ   rT   rW   r   r   r   <module>r`      s~     1 ? 2 6 %j/EKK j/Z%m % m m "= "=  r   