ó
J~‰Pc           @   sé   d  d l  Z  d  d l m Z y d  d l m Z Wn e k
 rO d  d l Z n Xd  d l m Z m	 Z	 m
 Z
 m Z m Z m Z m Z d  d l m Z d  d l m Z d  d l m Z d e j e f d	 „  ƒ  YZ d
 „  Z d d „ Z d S(   iÿÿÿÿN(   t   b2a_hex(   t   cPickle(   t   OGRGeometryt   OGRGeomTypet   OGRExceptiont   OGRIndexErrort   SpatialReferencet   CoordTransformt   GDAL_VERSION(   t   TestDataMixin(   t   xrange(   t   unittestt   OGRGeomTestc           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 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(   s   This tests the OGR Geometry.c         C   s  yL t  d ƒ } t  d ƒ } t  d ƒ } t  d ƒ } t  d ƒ } t  d ƒ } Wn |  j d ƒ n X|  j t t  d ƒ |  j t t  d	 ƒ |  j t t  d
 ƒ |  j t t  d ƒ t  d ƒ k ƒ |  j t t  d ƒ d k ƒ |  j t t  d ƒ d k ƒ |  j t t  d ƒ d k ƒ |  j t t  d ƒ d k ƒ |  j t t  d ƒ d k ƒ |  j t t  d ƒ t  d ƒ k ƒ |  j t t  d ƒ t  d ƒ k ƒ |  j d t  d ƒ j ƒ |  j d t  d ƒ j ƒ |  j d t  d ƒ j ƒ t  d ƒ } |  j d | j	 ƒ |  j d | j
 ƒ d S(   s   Testing OGRGeomType object.i   i   t   pointt   GeometrycollectioNt
   LINearrINGt   Unknowns'   Could not create an OGRGeomType object!i   t   fooDi	   t   GeometryCollectiont   POINTi   t   unknowni    i   t   MULtiPolyGONt
   PointFieldt   Pointt   GeometryFieldt   nonet   GeometryN(   R   t   failt   assertRaisesR   t   assertEqualt   Truet   Falset   djangot   Nonet   numt   name(   t   selft   gt   gt(    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test00a_geomtype   s4    """c         C   s`   t  j } |  j t  | d ƒ d k ƒ |  j t  d ƒ d | k ƒ |  j d t  d ƒ j ƒ d S(   s*   Testing OGRGeomType object with 25D types.i   t   Point25Dt   MultiLineString25Di   t   GeometryCollectionFieldt   GeometryCollection25DN(   R   t   wkb25bitt
   assertTrueR   R    (   R$   R,   (    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test00b_geomtype_25d8   s    	c         C   s@   x9 |  j  j D]+ } t | j ƒ } |  j | j | j ƒ q Wd S(   s   Testing WKT output.N(   t
   geometriest   wkt_outR   t   wktR   (   R$   R%   t   geom(    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test01a_wkt?   s    c         C   sm   xf d D]^ } |  j  | t | ƒ j ƒ d | } t | ƒ } |  j  | | j ƒ |  j  d | j j ƒ q Wd S(   s   Testing EWKT input/output.s   POINT (1 2 3)s   LINEARRING (0 0,1 1,2 1,0 0)s   SRID=4326;%siæ  N(   s   POINT (1 2 3)s   LINEARRING (0 0,1 1,2 1,0 0)(   R   R   t   ewktt   srst   srid(   R$   t   ewkt_valR2   (    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test01a_ewktE   s    
c         C   sg   x` |  j  j D]R } t | j ƒ } | j } t d k rL | j d d ƒ } n  |  j | | j ƒ q Wd S(   s   Testing GML output.i   i   R   t   MultiGeometryN(   i   i   (   R/   R0   R   R1   t   gmlR   t   replaceR   (   R$   R%   R2   t   exp_gml(    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test01b_gmlP   s    	c         C   se   x^ |  j  j D]P } t | j ƒ } |  j | j j ƒ  | j ƒ t | j ƒ } |  j | | ƒ q Wd S(   s   Testing HEX input/output.N(   R/   t   hex_wktR   R1   R   t   hext   encode(   R$   R%   t   geom1t   geom2(    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test01c_hex[   s
    c         C   st   xm |  j  j D]_ } t | j ƒ } | j } |  j t | ƒ j ƒ  | j j	 ƒ  ƒ t | ƒ } |  j | | ƒ q Wd S(   s   Testing WKB input/output.N(
   R/   R>   R   R1   t   wkbR   R    t   upperR?   R@   (   R$   R%   RA   RD   RB   (    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test01d_wkbd   s    	%c         C   s®   x§ |  j  j D]™ } t | j ƒ } t | d ƒ s„ |  j t j | j ƒ t j | j ƒ ƒ |  j t j | j ƒ t j | j ƒ ƒ n  |  j t | j ƒ t | j ƒ ƒ q Wd S(   s   Testing GeoJSON input/output.t	   not_equalN(	   R/   t
   json_geomsR   R1   t   hasattrR   t   jsont   loadst   geojson(   R$   R%   R2   (    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test01e_jsonn   s    (+c         C   s¹   t  d ƒ } x¦ |  j j D]˜ } t | d ƒ s t  | j ƒ } |  j d | j ƒ |  j d | j ƒ |  j | j | j ƒ |  j | j	 | j	 ƒ |  j | j | j	 f | j
 ƒ q q Wd S(   s   Testing Point objects.s
   POINT(0 0)t   zi   R   N(   R   R/   t   pointsRI   R1   R   t	   geom_typet	   geom_namet   xt   yt   tuple(   R$   t   prevt   pt   pnt(    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test02_pointsx   s    c         C   sâ   xÛ |  j  j D]Í } t | j ƒ } |  j d | j ƒ |  j d | j ƒ t d ƒ } t d ƒ } x+ | D]# } | j | ƒ | j | j ƒ qg W|  j | | ƒ |  j | | ƒ |  j | j | j ƒ |  j | j	 | j
 ƒ q Wd S(   s   Testing MultiPoint objects.i   t
   MULTIPOINTN(   R/   t   multipointsR   R1   R   RP   RQ   t   addt   coordst   n_pt   point_count(   R$   t   mpt   mgeom1t   mgeom2t   mgeom3R%   (    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test03_multipoints…   s    c         C   sI  t  d ƒ } x6|  j j D](} t  | j ƒ } |  j d | j ƒ |  j d | j ƒ |  j | j | j ƒ |  j | j	 | j
 ƒ |  j t | t  | j ƒ k ƒ |  j t | | k ƒ |  j t | j t | ƒ ƒ | } g  | j	 D] \ } } | ^ qá } g  | j	 D] \ } } | ^ q} |  j | | j ƒ |  j | | j ƒ q Wd S(   s   Testing LineString objects.s
   POINT(0 0)i   t
   LINESTRINGN(   R   R/   t   linestringsR1   R   RP   RQ   R]   R^   R\   RT   R   R   R   t   __getitem__t   lenRR   RS   (   R$   RU   t   lst   linestrt   tmpxt   tmpyRR   RS   (    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test04_linestring•   s    ""c         C   s  t  d ƒ } x|  j j D]õ } t  | j ƒ } |  j d | j ƒ |  j d | j ƒ |  j | j | j ƒ |  j | j	 | j
 ƒ |  j t | t  | j ƒ k ƒ |  j t | | k ƒ | } x4 | D], } |  j d | j ƒ |  j d | j ƒ qÂ W|  j t | j t | ƒ ƒ q Wd S(   s    Testing MultiLineString objects.s
   POINT(0 0)i   t   MULTILINESTRINGi   Rd   N(   R   R/   t   multilinestringsR1   R   RP   RQ   R]   R^   R\   RT   R   R   R   Rf   Rg   (   R$   RU   t   mlst   mlinestrRh   (    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test05_multilinestring©   s    c         C   s   t  d ƒ } xŠ |  j j D]| } t  | j ƒ } |  j d | j ƒ |  j | j t | ƒ ƒ |  j t | t  | j ƒ k ƒ |  j t | | k ƒ | } q Wd S(   s   Testing LinearRing objects.s
   POINT(0 0)t
   LINEARRINGN(	   R   R/   t   linearringsR1   R   RQ   R]   Rg   R   (   R$   RU   t   rrt   lr(    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test06_linearringº   s    c   	      C   sÑ  d } t  j | ƒ } |  j | | j ƒ t  d ƒ } x–|  j j D]ˆ} t  | j ƒ } |  j d | j ƒ |  j d | j ƒ |  j | j	 | j
 ƒ |  j | j d t | ƒ ƒ |  j | j | j d	 ƒ | j j \ } } |  j | j d
 | d	 ƒ |  j | j d | d	 ƒ |  j t | t  | j ƒ k ƒ |  j t | | k ƒ | j r¥| d
 } |  j | j | j ƒ |  j | j | d
 j ƒ |  j t | j ƒ | j
 ƒ n  x! | D] } |  j d | j ƒ q¬WqA Wd S(   s   Testing Polygon objects.iLÿÿÿi¦ÿÿÿi´   iZ   s
   POINT(0 0)i   t   POLYGONi   i	   i    Rr   N(   iLÿÿÿi¦ÿÿÿi´   iZ   (   R   t	   from_bboxR   t   extentR/   t   polygonsR1   RP   RQ   R]   R^   t   n_iRg   t   assertAlmostEqualt   areat   centroidRT   R   t   ext_ring_cs(	   R$   t   bboxRV   RU   t   polyRR   RS   t   ringt   r(    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test07a_polygonsÆ   s.    	
c         C   sx   t  d ƒ } |  j d | j ƒ |  j t ƒ  | j } Wd QX| j ƒ  |  j d | j ƒ |  j t  d ƒ | j ƒ d S(   s    Testing closing Polygon objects.s3   POLYGON((0 0, 5 0, 5 5, 0 5), (1 1, 2 1, 2 2, 2 1))i   Ni
   s   POINT(2.5 2.5)(   R   R   R^   R   R   R~   t   close_rings(   R$   R   t   _(    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test07b_closepolygonsé   s    
c         C   s	  t  d ƒ } xö |  j j D]è } t  | j ƒ } |  j d | j ƒ |  j d | j ƒ | j râ |  j | j | j	 ƒ |  j | j
 t | ƒ ƒ |  j t | j t | ƒ ƒ x7 | D], } |  j d | j ƒ |  j d | j ƒ q¯ Wn  |  j | j t  | j ƒ j ƒ q Wd S(   s   Testing MultiPolygon objects.s
   POINT(0 0)i   t   MULTIPOLYGONRw   i   N(   R   R/   t   multipolygonsR1   R   RP   RQ   t   validR]   R^   t   num_geomRg   R   R   Rf   (   R$   RU   R_   t   mpolyRV   (    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test08_multipolygonsõ   s    	c         C   s€  xy|  j  j D]k} t d ƒ } t | j | ƒ } |  j | j | j j ƒ | j ƒ  } |  j | j | j j ƒ xQ | D]I } |  j | j | j j ƒ x' | D] } |  j | j | j j ƒ qœ Wqv Wt |  j  j d j	 | ƒ } t |  j  j d j
 | ƒ } | j | ƒ }	 | j | ƒ }
 |  j | j |	 j j ƒ |  j | j |
 j j ƒ t | j d ƒ } |  j d | j ƒ t d ƒ | _ |  j d | j ƒ |  j d | j j ƒ xÍ | D]Å } |  j | j j | j j ƒ d | _ x— | D] } |  j d | j j ƒ |  j d | j j ƒ t t d ƒ ƒ | _ |  j d | j j ƒ d | _ |  j d	 | j j ƒ |  j d | j ƒ qáWq¯Wq Wd
 S(   s6   Testing OGR Geometries with Spatial Reference objects.t   WGS84i    iæ  i­  t   NAD83iŒ}  s   NAD83 / Texas South Centraliâ  s   WGS 72N(   R/   R‰   R   R   R1   R   R5   t   clonet   topology_geomst   wkt_at   wkt_bt
   differencet   unionR6   R#   t   str(   R$   R_   t   srRŒ   t   kloneR   R‚   t   at   bt   diffR•   (    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test09a_srs  s@    !		c         C   s,  t  d d ƒ } t  d d ƒ } | j ƒ  | j ƒ  | j ƒ  } } } | j | j ƒ | j t d ƒ ƒ t t d ƒ t d ƒ ƒ } | j | ƒ | j ƒ  } | j | j d t ƒ} |  j | | ƒ |  j | | ƒ d }	 xL | | | | f D]8 }
 |  j	 | j
 |
 j
 |	 ƒ |  j	 | j |
 j |	 ƒ qì Wd	 S(
   s   Testing transform().s   POINT (-104.609 38.255)iæ  s%   POINT (992385.4472045 481455.4944650)iÖ
  s	   EPSG:2774RŽ   R   i   N(   R   R   t	   transformR6   R   R   R   R   t   assertNotEqualR|   RR   RS   (   R$   t   origt   transt   t1t   t2t   t3t   ctt   k1t   k2t   precRV   (    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test09b_srs_transform8  s    &c         C   s   t  d d ƒ } t  d d ƒ } d } | j | j ƒ |  j d | j ƒ |  j | j d | j d | ƒ |  j | j d | j d | ƒ d S(	   sC   Testing coordinate dimension is the same on transformed geometries.s   LINESTRING(-104.609 38.255)iæ  s)   LINESTRING(992385.4472045 481455.4944650)iÖ
  i   i   i    N(   R   R   R5   R   t	   coord_dimR|   RR   RS   (   R$   t   ls_origt   ls_transR§   (    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test09c_transform_dimP  s    !c         C   s¿   x¸ t  t |  j j ƒ ƒ D]ž } t |  j j | j ƒ } t |  j j | j ƒ } t |  j j | j ƒ } | j	 | ƒ } |  j
 | | ƒ |  j
 | | | ƒ | | 8} |  j
 | | ƒ q Wd S(   s   Testing difference().N(   R
   Rg   R/   R‘   R   R’   R“   t
   diff_geomsR1   R”   R   (   R$   t   iR™   Rš   t   d1t   d2(    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test10_difference\  s    
c         C   sØ   xÑ t  t |  j j ƒ ƒ D]· } t |  j j | j ƒ } t |  j j | j ƒ } t |  j j | j ƒ } |  j	 t
 | j | ƒ ƒ | j | ƒ } |  j	 | | ƒ |  j	 | | | @ƒ | | M} |  j	 | | ƒ q Wd S(   s(   Testing intersects() and intersection().N(   R
   Rg   R/   R‘   R   R’   R“   t   intersect_geomsR1   R   R   t
   intersectst   intersection(   R$   R®   R™   Rš   t   i1t   i2(    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test11_intersectionh  s    
c         C   s¿   x¸ t  t |  j j ƒ ƒ D]ž } t |  j j | j ƒ } t |  j j | j ƒ } t |  j j | j ƒ } | j	 | ƒ } |  j
 | | ƒ |  j
 | | | Aƒ | | N} |  j
 | | ƒ q Wd S(   s   Testing sym_difference().N(   R
   Rg   R/   R‘   R   R’   R“   t   sdiff_geomsR1   t   sym_differenceR   (   R$   R®   R™   Rš   R¯   R°   (    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test12_symdifferenceu  s    
c         C   s¿   x¸ t  t |  j j ƒ ƒ D]ž } t |  j j | j ƒ } t |  j j | j ƒ } t |  j j | j ƒ } | j	 | ƒ } |  j
 | | ƒ |  j
 | | | Bƒ | | O} |  j
 | | ƒ q Wd S(   s   Testing union().N(   R
   Rg   R/   R‘   R   R’   R“   t   union_geomsR1   R•   R   (   R$   R®   R™   Rš   t   u1t   u2(    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test13_union  s    
c   	      C   sá   t  d ƒ } t  d ƒ } |  j t | j | ƒ x¬ |  j j D]ž } t  | j ƒ } t  d ƒ } t  d ƒ } t  d ƒ } x+ | D]# } | j | ƒ | j | j ƒ q{ W| j | ƒ x' | | | f D] } |  j | | ƒ q¿ Wq; Wd S(   s!   Testing GeometryCollection.add().t   MultiPolygons   POINT(5 23)N(   R   R   R   R[   R/   R‰   R1   R   (	   R$   R_   RW   RŒ   t   mp1t   mp2t   mp3R   t   tmp(    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt
   test14_add  s     c   
      C   s©   t  d ƒ } |  j d | j ƒ t  |  j j d j ƒ } | j } | j | j } } t	 | ƒ t	 | ƒ } } t
 | ƒ t
 | ƒ } }	 |  j | | | |	 f | j ƒ d S(   s   Testing `extent` property.s   MULTIPOINT(5 23, 0 0, 10 50)g        g      $@g      I@i   N(   g        g        g      $@g      I@(   R   R   Ry   R/   Rz   R1   t   shellRR   RS   t   mint   max(
   R$   R_   R   R‚   RR   RS   t   xmint   ymint   xmaxt   ymax(    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test15_extent¢  s    	c         C   s   t  d ƒ } |  j d | j j ƒ |  j d | j ƒ |  j d | j ƒ t  d ƒ } |  j d | j j ƒ |  j d d d g | j ƒ |  j d | j ƒ d	 S(
   s   Testing 2.5D geometries.s   POINT(1 2 3)R(   g      @i   s   LINESTRING(1 1 1,2 2 2,3 3 3)t   LineString25Dg      ð?g       @N(   R   R   RP   R#   RN   R©   (   R$   t   pnt_25dt   ls_25d(    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt
   test16_25D¯  s    c         C   sm   t  d d ƒ } t j t j | ƒ ƒ } |  j | | ƒ |  j d | j j ƒ |  j | j j | j j ƒ d S(   s   Testing pickle support.s   LINESTRING(1 1 1,2 2 2,3 3 3)RŽ   iæ  N(   R   t   pickleRK   t   dumpsR   R5   R6   R1   (   R$   t   g1t   g2(    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test17_pickleº  s
    c         C   sÈ   d } d } d } t  | | ƒ } | j | ƒ |  j d | j ƒ |  j d | d j ƒ |  j | | j ƒ t  | | ƒ } | j | ƒ |  j d | j ƒ |  j d | d j ƒ |  j | | j ƒ d S(   sA   Testing coordinate dimensions on geometries after transformation.s   MULTILINESTRING ((0 0,1 1,2 2))s%   MULTILINESTRING ((0 0 0,1 1 1,2 2 2))iæ  i   i    i   N(   R   R   R   R©   R1   (   R$   t   wkt_2dt   wkt_3dR6   R2   (    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt'   test18_ogrgeometry_transform_workaroundÂ  s    c         C   s6   |  j  d t d ƒ ƒ |  j t t d ƒ d k ƒ d S(   s;   Testing equivalence methods with non-OGRGeometry instances.s
   POINT(0 0)s   LINESTRING(0 0, 1 1)i   N(   Rž   R!   R   R   R   (   R$   (    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   test19_equivalence_regressionÛ  s    (    t   __name__t
   __module__t   __doc__R'   R.   R3   R8   R=   RC   RF   RM   RX   Rc   Rl   Rq   Rv   R„   R‡   R   Rœ   R¨   R¬   R±   R·   Rº   R¾   RÄ   RÌ   RÐ   RÕ   RØ   RÙ   (    (    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyR      s<   	'							
	
						#			3											c          C   s&   t  j ƒ  }  |  j t  j t ƒ ƒ |  S(   N(   R   t	   TestSuitet   addTestt	   makeSuiteR   (   t   s(    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   suiteà  s    i   c         C   s    t  j d |  ƒ j t ƒ  ƒ d  S(   Nt	   verbosity(   R   t   TextTestRunnert   runRá   (   Râ   (    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyRä   å  s    (   RJ   t   binasciiR    t   django.utils.six.movesR   RÑ   t   ImportErrort   django.contrib.gis.gdalR   R   R   R   R   R   R   t%   django.contrib.gis.geometry.test_dataR	   R
   t   django.utilsR   t   TestCaseR   Rá   Rä   (    (    (    s@   ../Django//lib/python/django/contrib/gis/gdal/tests/test_geom.pyt   <module>   s   4ÿ Ó	