
    h7                        S SK JrJr  S SKJrJr  S SKJr  S SKJ	r	  S SK
JrJrJrJrJrJrJrJrJr  S SKJr  S SKJr  S SKJr  \" \5      q\" S	/ S
Q5      rS r " S S\5      r " S S\5      r  " S S\ 5      r! " S S\ 5      r" " S S\ 5      r# " S S\ 5      r$ " S S\ 5      r% " S S\ 5      r& " S S\ 5      r' " S S\5      r( " S  S!\5      r)g")#    )defaultdict
namedtuple)formsgdal)SpatialProxy)GDALException)	GeometryCollectionGEOSExceptionGEOSGeometry
LineStringMultiLineString
MultiPointMultiPolygonPointPolygon)ImproperlyConfigured)Field)gettext_lazySRIDCacheEntryunits
units_namespheroidgeodeticc                   ^^ SSK Jn   TR                  R                  5       mT(       a  TR
                  UU4S j4OSU4u  p4U [        U   ;  aZ  U" U 5      nUR                  u  pg[        UUSUS   < SUR                  < SUR                  < S	3UR                  S
9[        U   U '   [        U   U    $ ! [         a    Sm Nf = f)z
Return the units, unit name, and spheroid WKT associated with the
given SRID from the `spatial_ref_sys` (or equivalent) spatial database
table for the given database connection.  These results are cached.
r   )SpatialReferenceNc                 |   > TR                   R                  TR                  5      R                  U S9R                  $ )Nsrid)objectsusingaliasgetsrs)r   SpatialRefSys
connections    U/var/www/html/env/lib/python3.13/site-packages/django/contrib/gis/db/models/fields.py<lambda>get_srid_info.<locals>.<lambda>3   s1    ..44Z5E5EFSdS^S    z
SPHEROID["r   z",,]r   )django.contrib.gis.gdalr   opsspatial_ref_sysNotImplementedErrorr"   _srid_cacher   r   
semi_majorinverse_flattening
geographic)	r   r&   r   r"   get_srsr$   r   r   r%   s	    `      @r'   get_srid_infor6       s     9"668  	
 $% E ;u%%dmII#1!:0F0FH^^$
E4  ud##1  s   B7 7CCc                      ^  \ rS rSrSr\" S5      rSrSU 4S jjrU 4S jr	S r
S rS	 rS
 rS rS rS rU 4S jrS rU 4S jrSrU =r$ )BaseSpatialFieldH   z
The Base GIS Field.

It's used as a base class for GeometryField and RasterField. Defines
properties that are common to all GIS fields such as the characteristics
of the spatial reference system of the field.
zThe base GIS field.Fc                 F   > X0l         X l        XS'   [        TU ]  " S0 UD6  g)a}  
The initialization function for base spatial fields. Takes the following
as keyword arguments:

srid:
 The spatial reference system identifier, an OGC standard.
 Defaults to 4326 (WGS84).

spatial_index:
 Indicates whether to create a spatial index.  Defaults to True.
 Set this instead of 'db_index' for geographic fields since index
 creation is different for geometry columns.
verbose_nameN )spatial_indexr   super__init__)selfr;   r   r=   kwargs	__class__s        r'   r?   BaseSpatialField.__init__T   s,      + 	 ".~"6"r*   c                    > [         TU ]  5       u  pp4U R                  US'   U R                  SLa  U R                  US'   XX44$ )Nr   Tr=   )r>   deconstructr   r=   r@   namepathargsrA   rB   s        r'   rE   BaseSpatialField.deconstructp   sM    #(7#6#8 D vT)&*&8&8F?#4''r*   c                 8    UR                   R                  U 5      $ N)r.   geo_db_typer@   r&   s     r'   db_typeBaseSpatialField.db_typey   s    ~~))$//r*   c                 B    [        U R                  U5      R                  $ rL   )r6   r   r   rN   s     r'   r   BaseSpatialField.spheroid|   s    TYY
3<<<r*   c                 B    [        U R                  U5      R                  $ rL   )r6   r   r   rN   s     r'   r   BaseSpatialField.units   s    TYY
3999r*   c                 B    [        U R                  U5      R                  $ rL   )r6   r   r   rN   s     r'   r   BaseSpatialField.units_name   s    TYY
3>>>r*   c                 B    [        U R                  U5      R                  $ )z
Return true if this field's SRID corresponds with a coordinate
system that uses non-projected units (e.g., latitude/longitude).
)r6   r   r   rN   s     r'   r   BaseSpatialField.geodetic   s    
 TYY
3<<<r*   c                 :    UR                   R                  XU5      $ )zD
Return the placeholder for the spatial column for the
given value.
)r.   get_geom_placeholder)r@   valuecompilerr&   s       r'   get_placeholder BaseSpatialField.get_placeholder   s    
 ~~224IIr*   c                     UR                   nUb&  U R                   S:X  d  US:X  a  U R                   S:w  a  U R                   $ U$ )z
Return the default SRID for the given geometry or raster, taking into
account the SRID set for the field. For example, if the input geometry
or raster doesn't have an SRID, then the SRID of the field will be
returned.
r   )r@   objr   s      r'   get_sridBaseSpatialField.get_srid   s;     xx<499?trzdii2o99Kr*   c                    > Uc  g UR                   R                  " [        TU ]  " X/UQ70 UD640 U R                  (       a!  UR
                  R                  (       a  SS0D6$ 0 D6$ )N	geographyT)r.   Adapterr>   get_db_prep_valuere   featuressupports_geography)r@   r[   r&   rI   rA   rB   s        r'   rg   "BaseSpatialField.get_db_prep_value   sn    =~~%%G%eI$I&I
 >>j&9&9&L&L d#
 	

 
 	
r*   c                 2   [        U[        R                  5      (       a  U$ U(       a   [        R                  " U5      $ [        U[        5      (       a   [        R                  " U5      $ g! [         a     gf = f! [         a    [        SU-  5      ef = f)zI
Return a GDALRaster if conversion is successful, otherwise return None.
6Couldn't create spatial object from lookup value '%s'.N)
isinstancer   
GDALRasterr   dict
ValueError)r@   r[   is_candidates      r'   get_raster_prep_value&BaseSpatialField.get_raster_prep_value   s     eT__--Lu-- t$$u-- % ! 
 !  LuT s   A- A= -
A:9A:=Bc                   > [         TU ]  U5      nUc  g [        U[        5      (       a  Oy[        U[        [
        45      =(       d    [        US5      nU R                  X#5      nU(       a  UnO5U(       a   [        U5      nO![        S[        U5      R                  -  5      eU R                  U5      Ul        U$ ! [        [        4 a    [        SU-  5      ef = f)N__geo_interface__rl   z>Cannot use object with type %s for a spatial lookup parameter.)r>   get_prep_valuerm   r   bytesstrhasattrrr   r
   r   rp   type__name__rb   r   )r@   r[   ra   rq   rasterrB   s        r'   rv   BaseSpatialField.get_prep_value   s    g$U+; c<(( &cE3<8 G(=L //BF&s+C !T3i(()  ==%
 &}5 $PSVV s   7B< <C)r=   r   )Ni  T)r{   
__module____qualname____firstlineno____doc___descriptionempty_strings_allowedr?   rE   rO   r   r   r   r   r]   rb   rg   rr   rv   __static_attributes____classcell__rB   s   @r'   r8   r8   H   s]     )*K!#8(0=:?=J

&! !r*   r8   c                      ^  \ rS rSrSr\" S5      r\R                  r	Sr
Sr   SSSS.U 4S	 jjjrU 4S
 jrU 4S jrU 4S jrS rSrU =r$ )GeometryField   zM
The base Geometry field -- maps to the OpenGIS Specification Geometry type.
uL   The base Geometry field — maps to the OpenGIS Specification Geometry type.GEOMETRYNg     fg     Vg     f@g     V@皙?)extent	tolerancec                Z   > X l         X0l        X@l        XPl        [        TU ]  " SSU0UD6  g)a  
The initialization function for geometry fields. In addition to the
parameters from BaseSpatialField, it takes the following as keyword
arguments:

dim:
 The number of dimensions for this geometry.  Defaults to 2.

extent:
 Customize the extent, in a 4-tuple of WGS 84 coordinates, for the
 geometry field entry in the `USER_SDO_GEOM_METADATA` table.  Defaults
 to (-180.0, -90.0, 180.0, 90.0).

tolerance:
 Define the tolerance, in meters, to use for the geometry field
 entry in the `USER_SDO_GEOM_METADATA` table.  Defaults to 0.05.
r;   Nr<   )dimre   _extent
_tolerancer>   r?   )r@   r;   r   re   r   r   rA   rB   s          r'   r?   GeometryField.__init__   s2    8  # #=l=f=r*   c                 $  > [         TU ]  5       u  pp4U R                  S:w  a  U R                  US'   U R                  SLa  U R                  US'   U R                  S:w  a  U R                  US'   U R
                  S:w  a  U R
                  US'   XX44$ )	N   r   Fre   r   r   r   r   )r>   rE   r   re   r   r   rF   s        r'   rE   GeometryField.deconstruct  s    #(7#6#8 D88q= HHF5M>>&"&..F;<<77#||F8??d""&//F;4''r*   c           
         > [         TU ]  " X40 UD6  [        UU R                  [	        U R
                  =(       d    [        U [        S95        g )N)	load_func)r>   contribute_to_classsetattrattnamer   
geom_classr   r@   clsrG   rA   rB   s       r'   r   !GeometryField.contribute_to_class%  s>    #C88 	LL8L$,W	
r*   c                   > U R                   U R                  U R                  S.UEnU R                  S:  a?  [	        US   R
                  SS5      (       d   UR                  S[        R                  5        [        TU ](  " S0 UD6$ )N)
form_class	geom_typer   r   r   supports_3dFwidgetr<   )r   r   r   r   getattrr   
setdefaultr   Textarear>   	formfield)r@   rA   defaultsrB   s      r'   r   GeometryField.formfield/  s}    //II
 	
 88a<\"))=%!
 !
 %..9w ,8,,r*   c                     UR                   R                  (       d%  UR                  R                  R                  U-  U4$ X#4$ )z
Return the selection format string, depending on the requirements
of the spatial backend. For example, Oracle and MySQL require custom
selection formats in order to retrieve geometries in OGC WKB.
)querysubqueryr&   r.   select)r@   r\   sqlparamss       r'   select_formatGeometryField.select_format<  s;     ~~&&&&**11C7??{r*   )r   r   r   re   )Nr   F)r{   r~   r   r   r   r   r   r   r   r   r   r   r?   rE   r   r   r   r   r   r   s   @r'   r   r      sj     VK $$JIJ 	&> ,&> &>P(
- r*   r   c                   D    \ rS rSrSr\r\R                  r	\
" S5      rSrg)
PointFieldiH  POINTr   r<   N)r{   r~   r   r   r   r   r   r   r   r   r   r   r   r<   r*   r'   r   r   H  s     IJ!!JG*Kr*   r   c                   D    \ rS rSrSr\r\R                  r	\
" S5      rSrg)LineStringFieldiO  
LINESTRINGzLine stringr<   N)r{   r~   r   r   r   r   r   r   r   r   r   r   r   r<   r*   r'   r   r   O  !    IJ&&JM"Kr*   r   c                   D    \ rS rSrSr\r\R                  r	\
" S5      rSrg)PolygonFieldiV  POLYGONr   r<   N)r{   r~   r   r   r   r   r   r   r   r   r   r   r   r<   r*   r'   r   r   V  s     IJ##JI,Kr*   r   c                   D    \ rS rSrSr\r\R                  r	\
" S5      rSrg)MultiPointFieldi]  
MULTIPOINTzMulti-pointr<   N)r{   r~   r   r   r   r   r   r   r   r   r   r   r   r<   r*   r'   r   r   ]  r   r*   r   c                   D    \ rS rSrSr\r\R                  r	\
" S5      rSrg)MultiLineStringFieldid  MULTILINESTRINGzMulti-line stringr<   N)r{   r~   r   r   r   r   r   r   r   r   r   r   r   r<   r*   r'   r   r   d  s"    !I J++J'(Kr*   r   c                   D    \ rS rSrSr\r\R                  r	\
" S5      rSrg)MultiPolygonFieldik  MULTIPOLYGONzMulti polygonr<   N)r{   r~   r   r   r   r   r   r   r   r   r   r   r   r<   r*   r'   r   r   k  s!    IJ((JO$Kr*   r   c                   D    \ rS rSrSr\r\R                  r	\
" S5      rSrg)GeometryCollectionFieldir  GEOMETRYCOLLECTIONzGeometry collectionr<   N)r{   r~   r   r   r   r	   r   r   r   r   r   r   r   r<   r*   r'   r   r   r  s"    $I#J..J)*Kr*   r   c                   4    \ rS rSrSr\" S5      rS rS rSr	g)ExtentFieldiy  z/Used as a return value from an extent aggregatezExtent Aggregate Fieldc                     g)Nr   r<   )r@   s    r'   get_internal_typeExtentField.get_internal_type~  s    r*   c                 d    UR                   R                  R                  nU(       a  XB-  U4$ UU4$ rL   )r&   r.   select_extent)r@   r\   r   r   r   s        r'   r   ExtentField.select_format  s2    $$((66%v|66366r*   r<   N)
r{   r~   r   r   r   r   r   r   r   r   r<   r*   r'   r   r   y  s    5,-K7r*   r   c                   h   ^  \ rS rSrSr\" S5      rSrSrS r	U 4S jr
S rU 4S	 jrU 4S
 jrSrU =r$ )RasterFieldi  zB
Raster field for GeoDjango -- evaluates into GDALRaster objects.
zRaster FieldRASTERFc                     UR                   R                  (       a  UR                   R                  (       d  [        S5      eg )Nz3Raster fields require backends with raster support.)rh   gis_enabledsupports_rasterr   rN   s     r'   _check_connectionRasterField._check_connection  s7     ##//&&66&E  7r*   c                 D   > U R                  U5        [        TU ]	  U5      $ rL   )r   r>   rO   )r@   r&   rB   s     r'   rO   RasterField.db_type  s     z*wz**r*   c                 8    UR                   R                  U5      $ rL   )r.   parse_raster)r@   r[   
expressionr&   s       r'   from_db_valueRasterField.from_db_value  s    ~~**511r*   c                    > [         TU ]  " X40 UD6  [        XR                  [	        [
        R                  U 5      5        g rL   )r>   r   r   r   r   r   rn   r   s       r'   r   RasterField.contribute_to_class  s0    #C88
 	\\<#FGr*   c                    > SSK Jn   [        U5      n[        SU4SU05      $ ! [         a     Of = f[
        TU ]  U5      $ )Nr   )RasterBandTransformSpecificRasterBandTransform
band_index)$django.contrib.gis.db.models.lookupsr   intrz   rp   r>   get_transform)r@   rG   r   r   rB   s       r'   r   RasterField.get_transform  sV    L	TJ-$&z* 
  		w$T**s   $ 
11r<   )r{   r~   r   r   r   r   r   r   re   r   rO   r   r   r   r   r   r   s   @r'   r   r     s=     N#KII+2H+ +r*   r   N)*collectionsr   r   django.contrib.gisr   r   "django.contrib.gis.db.models.proxyr   django.contrib.gis.gdal.errorr   django.contrib.gis.geosr	   r
   r   r   r   r   r   r   r   django.core.exceptionsr   django.db.modelsr   django.utils.translationr   r   ro   r1   r   r6   r8   r   r   r   r   r   r   r   r   r   r   r<   r*   r'   <module>r      s    / * ; 7
 
 
 8 " 6
 $ E
%$PXu Xva$ aJ #m #= #m #)= )% %+m +
7% 
7.+" .+r*   