î
ªÍ XÇ  ã               @   s¤   d  d l  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 m Z i e j ƒ  d 6Z e  j d ƒ Z Gd	 d
 „  d
 e ƒ Z d S)é    N)ÚGDALException)ÚGEOSExceptionÚGEOSGeometry)ÚTextarea)Úloader)ÚsixÚtranslationZLANGUAGE_BIDIzdjango.contrib.gisc               @   s1   e  Z d  Z d Z d d d „ Z d d „  Z d S)ÚOpenLayersWidgetzB
    Renders an OpenLayers map using the WKT of the geometry.
    Nc       	      C   s  | r- |  j  j | ƒ |  j  d |  j  d <n d |  j  d <d |  j  d <t | t j ƒ r³ y t | ƒ } Wq³ t t f k
 r¯ } z t j	 d | | ƒ d  } WYd  d  } ~ Xq³ Xn  | ré | j
 j ƒ  |  j
 k ré |  j
 d k ré d  } n  |  j ƒ  |  j  d <| |  j  d	 <|  j  d	 j d
 d ƒ } d | |  j  d <| rÛ|  j  d } | j | k rÂy# | j } | j | ƒ | j } WqËt k
 r¾} z$ t j	 d | j | | ƒ d } WYd  d  } ~ XqËXn	 | j } | |  j  d <n  |  j  j t ƒ t j |  j |  j  ƒ S)NZ
modifiableÚeditableTÚ Úwktz,Error creating geometry from value '%s' (%s)ZGEOMETRYÚmap_optionsÚnameú-Ú_zgeodjango_%sÚmoduleÚsridz<Error transforming geometry from srid '%s' to srid '%s' (%s))ÚparamsÚupdateÚ
isinstancer   Ústring_typesr   r   Ú
ValueErrorÚloggerÚerrorZ	geom_typeÚupperr   Úreplacer   ÚogrZ	transformr   r   Úgeo_contextr   Zrender_to_stringÚtemplate)	Úselfr   ÚvalueÚattrsÚerrZjs_safe_namer   r   r   © r#   úN/home/ubuntu/projects/ifolica/build/django/django/contrib/gis/admin/widgets.pyÚrender   sD    			zOpenLayersWidget.renderc       	   
   C   s8  d d „  } d d „  } d d d	 d	 t  f d
 d t f d d d t f d d t f d d t f g } i  } xÈ | D]À \ } } } |  j j | d ƒ rp | d k r¶ | |  j | ƒ } nm | d k rØ | |  j | ƒ } nK | t t f k rú |  j | } n) | t  f k rd |  j | } n t ‚ | | | <qp qp W| S)z8Builds the map options hash for the OpenLayers template.c             S   s   d t  |  ƒ S)Nznew OpenLayers.Bounds(%s))Ústr)Zextentr#   r#   r$   Ú	ol_boundsV   s    z/OpenLayersWidget.map_options.<locals>.ol_boundsc             S   s   d |  S)Nz$new OpenLayers.Projection("EPSG:%s")r#   )r   r#   r#   r$   Úol_projectionY   s    z3OpenLayersWidget.map_options.<locals>.ol_projectionr   Ú
projectionÚdisplay_sridÚdisplayProjectionZunitsZmax_resolutionZmaxResolutionÚ
max_extentÚ	maxExtentÚboundsZnum_zoomZnumZoomLevelsZmax_zoomZmaxZoomLevelsZmin_zoomZminZoomLevelFz"%s")úsridr)   r/   )r*   r+   r/   )r,   r-   r.   )r&   ÚfloatÚintr   ÚgetÚ	TypeError)	r   r'   r(   Z	map_typesr   Z
param_nameZjs_nameZoption_typer    r#   r#   r$   r   R   s0    zOpenLayersWidget.map_options)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r%   r   r#   r#   r#   r$   r	      s   ?r	   )ÚloggingZdjango.contrib.gis.gdalr   Zdjango.contrib.gis.geosr   r   Zdjango.forms.widgetsr   Zdjango.templater   Zdjango.utilsr   r   Zget_language_bidir   Ú	getLoggerr   r	   r#   r#   r#   r$   Ú<module>   s   