
v^l                 @   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 Gd d   d e j  Z Gd	 d
   d
 e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z d S)    )forms)GDALException)GEOSExceptionGEOSGeometry)gettext_lazy   )OpenLayersWidgetc            	       s   e  Z d  Z d Z e Z d Z d e d  d e d  d e d  d	 e d
  i Z d d d d   f d d  Z	 d d   Z
   f d d   Z d d   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.
    GEOMETRYrequiredzNo geometry value provided.invalid_geomzInvalid geometry value.invalid_geom_typezInvalid geometry type.transform_errorzXAn error occurred when transforming the geometry to the SRID of the geometry form field.sridN	geom_typec               sE   | |  _  | d  k	 r | |  _ t   j |   |  j |  j j d <d  S)Nr   )r   r   super__init__widgetattrs)selfr   r   kwargs)	__class__ A/tmp/pip-build-8lau8j11/django/django/contrib/gis/forms/fields.pyr      s
    		zGeometryField.__init__c             C   s  | |  j  k r d St | t  s t |  j d  rh y |  j j |  } Wq t k
 rd d } Yq Xn4 y t |  } Wn! t t t	 f k
 r d } Yn X| d k r t
 j |  j d d d  | j s
y |  j j | _ Wn' t k
 r	|  j r|  j | _ Yn X| S)z)Transform the value to a Geometry object.Ndeserializer   code)Zempty_values
isinstancer   hasattrr   r   r   r   
ValueError	TypeErrorr   ValidationErrorerror_messagesr   Zmap_sridAttributeError)r   valuer   r   r   	to_python!   s*    		zGeometryField.to_pythonc                s   t    j |  } | d k r" | St | j  j   |  j k rl |  j d k rl t j |  j d d d  |  j r |  j d k r |  j | j k r y | j	 |  j  Wn. t
 k
 r t j |  j d d d  Yn X| 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   )r   cleanstrr   upperr   r    r!   r   	transformr   )r   r#   Zgeom)r   r   r   r&   =   s    .*zGeometryField.cleanc             C   s   y" |  j  |  } |  j  |  } Wn t j k
 r= d SYn X| rn | rn | j | j  | j | d d St |  t |  k Sd S)z: Compare geographic value of data with its initial value. TZ	tolerancegư>N)r$   r   r    r)   r   Zequals_exactbool)r   initialdatar   r   r   has_changedV   s    	zGeometryField.has_changed)__name__
__module____qualname____doc__r   r   r   _Zdefault_error_messagesr   r$   r&   r-   r   r   )r   r   r	   	   s   r	   c               @   s   e  Z d  Z d Z d S)GeometryCollectionFieldZGEOMETRYCOLLECTIONN)r.   r/   r0   r   r   r   r   r   r3   k   s   r3   c               @   s   e  Z d  Z d Z d S)
PointFieldZPOINTN)r.   r/   r0   r   r   r   r   r   r4   o   s   r4   c               @   s   e  Z d  Z d Z d S)MultiPointFieldZ
MULTIPOINTN)r.   r/   r0   r   r   r   r   r   r5   s   s   r5   c               @   s   e  Z d  Z d Z d S)LineStringFieldZ
LINESTRINGN)r.   r/   r0   r   r   r   r   r   r6   w   s   r6   c               @   s   e  Z d  Z d Z d S)MultiLineStringFieldZMULTILINESTRINGN)r.   r/   r0   r   r   r   r   r   r7   {   s   r7   c               @   s   e  Z d  Z d Z d S)PolygonFieldZPOLYGONN)r.   r/   r0   r   r   r   r   r   r8      s   r8   c               @   s   e  Z d  Z d Z d S)MultiPolygonFieldZMULTIPOLYGONN)r.   r/   r0   r   r   r   r   r   r9      s   r9   N)Zdjangor   Zdjango.contrib.gis.gdalr   Zdjango.contrib.gis.geosr   r   Zdjango.utils.translationr   r2   Zwidgetsr   ZFieldr	   r3   r4   r5   r6   r7   r8   r9   r   r   r   r   <module>   s   b