
vÅÏ^V  ã               @   sŒ   d  d l  m Z d  d l m Z d  d l m Z d  d l m Z m Z d  d l	 m
 Z m Z d  d l m Z m Z Gd d „  d e ƒ Z d	 S)
é    )ÚGDALBase)ÚGDALException)ÚField)ÚOGRGeometryÚOGRGeomType)ÚdsÚgeom)Úforce_bytesÚ	force_strc               @   sñ   e  Z d  Z d Z e j Z d d „  Z d d „  Z d d „  Z	 d d	 „  Z
 d
 d „  Z e d d „  ƒ Z e d d „  ƒ Z e d d „  ƒ Z e d d „  ƒ Z e d d „  ƒ Z e d d „  ƒ Z e d d „  ƒ Z d d „  Z d d „  Z d S)ÚFeatureza
    This class that wraps an OGR Feature, needs to be instantiated
    from a Layer object.
    c             C   s(   | s t  d ƒ ‚ | |  _ | |  _ d S)zI
        Initialize Feature from a pointer and its Layer object.
        z1Cannot create OGR Feature, invalid pointer given.N)r   ÚptrÚ_layer)ÚselfZfeatZlayer© r   úA/tmp/pip-build-8lau8j11/django/django/contrib/gis/gdal/feature.pyÚ__init__   s    	zFeature.__init__c             C   sf   t  | t ƒ r! |  j | ƒ } n8 d | k o; |  j k  n rI | } n t d | ƒ ‚ t |  | ƒ S)a.  
        Get the Field object at the specified index, which may be either
        an integer or the Field's string label.  Note that the Field object
        is not the field's _value_ -- use the `get` method instead to
        retrieve the value (e.g. an integer) instead of a Field instance.
        r   z9Index out of range when accessing field in a feature: %s.)Ú
isinstanceÚstrÚindexÚ
num_fieldsÚ
IndexErrorr   )r   r   Úir   r   r   Ú__getitem__   s    	zFeature.__getitem__c             C   s   |  j  S)z+Return the count of fields in this feature.)r   )r   r   r   r   Ú__len__,   s    zFeature.__len__c             C   s   d |  j  |  j f S)zThe string name of the feature.zFeature FID %d in Layer<%s>)ÚfidÚ
layer_name)r   r   r   r   Ú__str__0   s    zFeature.__str__c             C   s   t  t j |  j | j ƒ ƒ S)z'Do equivalence testing on the features.)ÚboolÚcapiZfeature_equalr   Z_ptr)r   Úotherr   r   r   Ú__eq__4   s    zFeature.__eq__c             C   s   |  j  j j S)N)r   Z_dsÚencoding)r   r   r   r   r!   9   s    zFeature.encodingc             C   s   t  j |  j ƒ S)zReturn the feature identifier.)r   Zget_fidr   )r   r   r   r   r   =   s    zFeature.fidc             C   s+   t  j |  j j ƒ } t | |  j d d ƒS)z-Return the name of the layer for the feature.Ústrings_onlyT)r   Zget_feat_namer   Ú_ldefnr
   r!   )r   Únamer   r   r   r   B   s    zFeature.layer_namec             C   s   t  j |  j ƒ S)z+Return the number of fields in the Feature.)r   Zget_feat_field_countr   )r   r   r   r   r   H   s    zFeature.num_fieldsc                s    ‡  f d d †  t  ˆ  j ƒ Dƒ S)z'Return a list of fields in the Feature.c                sC   g  |  ]9 } t  t j t j ˆ  j j | ƒ ƒ ˆ  j d  d ƒ‘ q S)r"   T)r
   r   Zget_field_nameZget_field_defnr   r#   r!   )Ú.0r   )r   r   r   ú
<listcomp>Q   s   	z"Feature.fields.<locals>.<listcomp>)Úranger   )r   r   )r   r   ÚfieldsM   s    zFeature.fieldsc             C   s%   t  j |  j ƒ } t t j | ƒ ƒ S)z)Return the OGR Geometry for this Feature.)r   Zget_feat_geom_refr   r   Úgeom_apiZ
clone_geom)r   Zgeom_ptrr   r   r   r   X   s    zFeature.geomc             C   s   t  t j |  j j ƒ ƒ S)z.Return the OGR Geometry Type for this Feature.)r   r   Zget_fd_geom_typer   r#   )r   r   r   r   Ú	geom_type_   s    zFeature.geom_typec             C   s   t  | d | ƒ } |  | j S)z²
        Return the value of the field, instead of an instance of the Field
        object.  May take a string of the field name or a Field object as
        parameters.
        r$   )ÚgetattrÚvalue)r   ÚfieldÚ
field_namer   r   r   Úgete   s    zFeature.getc             C   s;   t  j |  j t | ƒ ƒ } | d k  r7 t d | ƒ ‚ | S)z)Return the index of the given field name.r   z!Invalid OFT field name given: %s.)r   Zget_field_indexr   r	   r   )r   r.   r   r   r   r   r   n   s    zFeature.indexN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Zdestroy_featureZ
destructorr   r   r   r   r    Úpropertyr!   r   r   r   r(   r   r*   r/   r   r   r   r   r   r      s    			r   N)Zdjango.contrib.gis.gdal.baser   Zdjango.contrib.gis.gdal.errorr   Zdjango.contrib.gis.gdal.fieldr   Z"django.contrib.gis.gdal.geometriesr   r   Z"django.contrib.gis.gdal.prototypesr   r   r   r)   Zdjango.utils.encodingr	   r
   r   r   r   r   r   Ú<module>   s   