
E()Qc           @@ s  d  d l  m Z m Z d  d l Z d  d l Z d  d l m Z m Z d  d l m	 Z	 m
 Z
 m Z 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 m Z m Z m Z m Z m Z m Z m Z m Z e j j  e j j! e j j" e e#   d
 d   Z$ e j j! e$ d d  Z% e j j! e$ d d  Z& d dP f d dQ f d dR f d dS f d  dT f d$ dU f d( dV f d, dW f f Z' e( d0   e' D  Z) d1 d2 dX f f Z* dI dY f Z+ dN e f dO     YZ, d S(Z   i    (   t   absolute_importt   unicode_literalsN(   t   Uniont   Extent3D(   t   GEOSGeometryt
   LineStringt   Pointt   Polygon(   t   LayerMappingt   LayerMapError(   t   TestCase(   t   upathi   (
   t   City3Dt   Interstate2Dt   Interstate3Dt   InterstateProj2Dt   InterstateProj3Dt   Point2Dt   Point3Dt   MultiPoint3Dt	   Polygon2Dt	   Polygon3Du   ..u   datau   citiesu
   cities.shpu   test_vrtu   test_vrt.vrtu   Houstong =Wg|zl=@i   u   DallasgIG9M3XgMqd@@i   u   Oklahoma Cityg7ZaXg,cy;A@i|  u
   Wellingtong"aKe@gؼZDi   u   Pueblogr&ZgAmߣ C@i  u   LawrencegB&9Wg@1d|C@i   u   ChicagogQkwUg&jjD@i   u   VictoriagT^gU6;H@i   c         c@ s!   |  ] \ } } | | f Vq d  S(   N(    (   t   .0t   namet   coords(    (    s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pys	   <genexpr>"   s    u   I-45u  LINESTRING(-95.3708481 29.7765870 11.339,-95.3694580 29.7787980 4.536,-95.3690305 29.7797359 9.762,-95.3691886 29.7812450 12.448,-95.3696447 29.7850144 10.457,-95.3702511 29.7868518 9.418,-95.3706724 29.7881286 14.858,-95.3711632 29.7896157 15.386,-95.3714525 29.7936267 13.168,-95.3717848 29.7955007 15.104,-95.3717719 29.7969804 16.516,-95.3717305 29.7982117 13.923,-95.3717254 29.8000778 14.385,-95.3719875 29.8013539 15.160,-95.3720575 29.8026785 15.544,-95.3721321 29.8040912 14.975,-95.3722074 29.8050998 15.688,-95.3722779 29.8060430 16.099,-95.3733818 29.8076750 15.197,-95.3741563 29.8103686 17.268,-95.3749458 29.8129927 19.857,-95.3763564 29.8144557 15.435)g!rh&@g/$@g/$#@gL7A`(@gDl$@gt"@gK-@gʡ.@gtV*@gh|?5.@gjt0@gjt+@gQ,@gRQ.@gJ+/@g33333-@gK7A`/@gMbX0@g/d.@gS㥛D1@gZd3@gQ.@us   POLYGON((941527.97 4225693.20,962596.48 4226349.75,963152.57 4209023.95,942051.75 4208366.38,941527.97 4225693.20))g(\µ5@gQk*@g=
ףp="@gffffff0@t	   Geo3DTestc           B@ s   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z RS(   ub  
    Only a subset of the PostGIS routines are 3D-enabled, and this TestCase
    tries to test the features that can handle 3D and that are also
    available within GeoDjango.  For more information, see the PostGIS docs
    on the routines that support 3D:

    http://postgis.refractions.net/documentation/manual-1.4/ch08.html#PostGIS_3D_Functions
    c         C@ s   x t  D] \ } } } t | d d } t g  | j D] } | d  ^ q5 d d } t j j d | d |  t j j d | d |  t j j d | d |  t	 j j d | d |  q Wd  S(   Nt   sridi  i   R   t   line(
   t   interstate_dataR   R   R   R   t   objectst   createR   R   R   (   t   selfR   R   t   exp_zt   line_3dt   lt   line_2d(    (    s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pyt   _load_interstate_dataC   s    ,c      	   C@ s@   x9 t  D]1 \ } } t j j d | d t d d |   q Wd  S(   NR   t   pointR   i  (   t	   city_dataR   R   R   R   (   R   R   t   pnt_data(    (    s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pyt   _load_city_dataP   s    c         C@ s   t  \ } } t | d d } t t d   t | d j |  D  d d } t j j d d d |  t	 j j d d d |  d  S(	   NR   i}  c         s@ s*   |  ]  \ \ } } } | | | f Vq d  S(   N(    (   R   t   xt   yt   z(    (    s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pys	   <genexpr>W   s    i    R   u   2D BBoxt   polyu   3D BBox(
   t	   bbox_dataR   R   t   tuplet   zipR   R   R   R   R   (   R   t   bbox_wktt   bbox_zt   bbox_2dt   bbox_3d(    (    s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pyt   _load_polygon_dataT   s
    2c   
      C@ s  |  j    x t D] \ } } } t j j d |  } t j j d |  } xC | | g D]5 } |  j | j j  |  j	 | t
 | j j   qW Wq W|  j   x\ t D]T \ } } t j j d |  } | d }	 |  j | j j  |  j	 |	 | j j  q Wd S(   uz   
        Make sure data is 3D and has expected Z values -- shouldn't change
        because of coordinate system.
        R   i   N(   R$   R   R   R   t   getR   t
   assertTrueR   t   haszt   assertEqualR.   R+   R(   R&   R   R%   (
   R   R   R   R    t
   interstatet   interstate_projt   iR'   t   cityR+   (    (    s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pyt   test_3d_hasz[   s    
$

c         C@ s_   |  j    t j j d d  } |  j | j j  |  j | j t  |  j	 | j j
 d  d S(   u9   
        Test the creation of polygon 3D models.
        R   u   3D BBoxi}  N(   R4   R   R   R5   R6   R,   R7   t   assertIsInstanceR   R8   R   (   R   t   p3d(    (    s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pyt   test_3d_polygonso   s
    
c         C@ s   i d d 6} i d d 6} t  t t | d t } | j   |  j d t j j    |  j t	 t  t
 t | d t t  t
 t | d t } | j   |  j d t
 j j    t  t t | d t } | j   |  j d t j j    d S(   u4   
        Testing LayerMapping on 3D models.
        u   POINTu   pointu
   MULTIPOINTu   mpointt	   transformi   N(   R   R   t   vrt_filet   Falset   saveR8   R   t   countt   assertRaisesR	   R   t	   city_fileR   (   R   t   point_mappingt   mpoint_mappingt   lm(    (    s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pyt   test_3d_layermappingy   s    


c         C@ sW   |  j    t j j d d  j d d  } t j d  } |  j | j | j   d S(   u7   
        Test GeoQuerySet.kml() with Z values.
        t	   precisioni   R   u   HoustonuC   ^<Point><coordinates>-95.363\d+,29.763\d+,18</coordinates></Point>$N(	   R(   R   R   t   kmlR5   t   ret   compileR6   t   match(   R   t   ht   ref_kml_regex(    (    s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pyt   test_kml   s    
!c         C@ sW   |  j    t j j d d  j d d  } t j d  } |  j | j | j   d S(   u;   
        Test GeoQuerySet.geojson() with Z values.
        RL   i   R   u   HoustonuC   ^{"type":"Point","coordinates":\[-95.363151,29.763374,18(\.0+)?\]}$N(	   R(   R   R   t   geojsonR5   RN   RO   R6   RP   (   R   RQ   t   ref_json_regex(    (    s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pyt   test_geojson   s    
!c         C@ s\   |  j    d } t |  } t j j t d   d } |  j | j  |  j | |  d S(   u;   
        Testing the Union aggregate of 3D models.
        u   SRID=4326;MULTIPOINT(-123.305196 48.462611 15,-104.609252 38.255001 1433,-97.521157 34.464642 380,-96.801611 32.782057 147,-95.363151 29.763374 18,-95.23506 38.971823 251,-87.650175 41.850385 181,174.783117 -41.315268 14)u   pointu   point__unionN(	   R(   R   R   R   t	   aggregateR   R6   R7   R8   (   R   t   ref_ewktt	   ref_uniont   union(    (    s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pyt
   test_union   s    
c         @ su    j    d   t j j t d   d } t j j   } d	    f d
  } x | | g D] } | |  q] Wd S(   u?   
        Testing the Extent3D aggregate for 3D models.
        gT^gؼZDi   g"aKe@gU6;H@i  u   pointu   point__extent3di   c         @ s7   x0 t    |   D] \ } }  j | | |  q Wd  S(   N(   R/   t   assertAlmostEqual(   t   extent3dt   tolt   ref_valt   ext_val(   t   ref_extent3dR   (    s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pyt   check_extent3d   s    N(   gT^gؼZDi   g"aKe@gU6;H@i  (   R(   R   R   RW   R   R]   (   R   t   extent1t   extent2Rb   t   e3d(    (   Ra   R   s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pyt   test_extent   s    
c         C@ s|   |  j    d } d } d } |  j | t j j   j d d  j j |  |  j | t j j   j d d  j j |  d S(   u?   
        Testing GeoQuerySet.perimeter() on 3D fields.
        g3V1@ga<@i   R   u   2D BBoxu   3D BBoxN(   R4   R\   R   R   t	   perimeterR5   t   mR   (   R   t   ref_perim_3dt   ref_perim_2dR^   (    (    s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pyt   test_perimeter   s    
		c         C@ s   |  j    d } d } d } |  j | t j j   j d d  j j |  |  j | t j j   j d d  j j |  d } d } |  j | t j j   j d d  j j |  |  j | t	 j j   j d d  j j |  d S(	   u<   
        Testing GeoQuerySet.length() on 3D fields.
        i   g,@g@R   u   I-45g4@gvA+@N(
   R$   R\   R   R   t   lengthR5   Rh   R   R   R   (   R   R^   t   ref_length_2dt   ref_length_3d(    (    s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pyt   test_length   s$    
				c         C@ sm   |  j    d } xV | D]N } xE t j j d d |  D]+ } |  j t | j d | | j j  q6 Wq Wd S(   u:   
        Testing GeoQuerySet.scale() on Z values.
        ii   i   g      ?i   N(   ii   i   (   R(   R   R   t   scaleR8   t	   city_dictR   R+   (   R   t   zscalest   zscaleR<   (    (    s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pyt
   test_scale   s
    
c         C@ sm   |  j    d } xV | D]N } xE t j j d d |  D]+ } |  j t | j d | | j j  q6 Wq Wd S(   u>   
        Testing GeoQuerySet.translate() on Z values.
        gQ@i   ii    i   N(   gQ@i   i(   R(   R   R   t	   translateR8   Rq   R   R+   (   R   t   ztranslationst   ztransR<   (    (    s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pyt   test_translate  s
    
(   t   __name__t
   __module__t   __doc__R$   R(   R4   R=   R@   RK   RS   RV   R[   Rf   Rk   Ro   Rt   Rx   (    (    (    s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pyR   9   s   					
							 	(   g =Wg|zl=@i   (   gIG9M3XgMqd@@i   (   g7ZaXg,cy;A@i|  (   g"aKe@gؼZDi   (   gr&ZgAmߣ C@i  (   gB&9Wg@1d|C@i   (   gQkwUg&jjD@i   (   gT^gU6;H@i   (   g!rh&@g/$@g/$#@gL7A`(@gDl$@gt"@gK-@gʡ.@gtV*@gh|?5.@gjt0@gjt+@gQ,@gRQ.@gJ+/@g33333-@gK7A`/@gMbX0@g/d.@gS㥛D1@gZd3@gQ.@(   g(\µ5@gQk*@g=
ףp="@gffffff0@g(\µ5@(-   t
   __future__R    R   t   osRN   t   django.contrib.gis.db.modelsR   R   t   django.contrib.gis.geosR   R   R   R   t   django.contrib.gis.utilsR   R	   t   django.testR
   t   django.utils._osR   t   modelsR   R   R   R   R   R   R   R   R   R   t   patht   realpatht   joint   dirnamet   __file__t	   data_pathRG   RB   R&   t   dictRq   R   R-   R   (    (    (    s=   ../Django//lib/python/django/contrib/gis/tests/geo3d/tests.pyt   <module>   s:   "F6							   	