~ubuntu-branches/ubuntu/quantal/python-django/quantal

« back to all changes in this revision

Viewing changes to django/contrib/gis/gdal/tests/test_srs.py

  • Committer: Bazaar Package Importer
  • Author(s): Chris Lamb
  • Date: 2009-07-29 11:26:28 UTC
  • mfrom: (1.1.8 upstream) (4.1.5 sid)
  • Revision ID: james.westby@ubuntu.com-20090729112628-pg09ino8sz0sj21t
Tags: 1.1-1
* New upstream release.
* Merge from experimental:
  - Ship FastCGI initscript and /etc/default file in python-django's examples
    directory (Closes: #538863)
  - Drop "05_10539-sphinx06-compatibility.diff"; it has been applied
    upstream.
  - Bump Standards-Version to 3.8.2.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import unittest
 
2
from django.contrib.gis.gdal import SpatialReference, CoordTransform, OGRException, SRSException
 
3
 
 
4
class TestSRS:
 
5
    def __init__(self, wkt, **kwargs):
 
6
        self.wkt = wkt
 
7
        for key, value in kwargs.items():
 
8
            setattr(self, key, value)
 
9
 
 
10
# Some Spatial Reference examples
 
11
srlist = (TestSRS('GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]',
 
12
                  proj='+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs ',
 
13
                  epsg=4326, projected=False, geographic=True, local=False,
 
14
                  lin_name='unknown', ang_name='degree', lin_units=1.0, ang_units=0.0174532925199,
 
15
                  auth={'GEOGCS' : ('EPSG', '4326'), 'spheroid' : ('EPSG', '7030')},
 
16
                  attr=(('DATUM', 'WGS_1984'), (('SPHEROID', 1), '6378137'),('primem|authority', 'EPSG'),),
 
17
                  ),
 
18
          TestSRS('PROJCS["NAD83 / Texas South Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",600000],PARAMETER["false_northing",4000000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","32140"]]',
 
19
                  proj='+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs ',
 
20
                  epsg=32140, projected=True, geographic=False, local=False,
 
21
                  lin_name='metre', ang_name='degree', lin_units=1.0, ang_units=0.0174532925199,
 
22
                  auth={'PROJCS' : ('EPSG', '32140'), 'spheroid' : ('EPSG', '7019'), 'unit' : ('EPSG', '9001'),},
 
23
                  attr=(('DATUM', 'North_American_Datum_1983'),(('SPHEROID', 2), '298.257222101'),('PROJECTION','Lambert_Conformal_Conic_2SP'),),
 
24
                  ),
 
25
          TestSRS('PROJCS["NAD_1983_StatePlane_Texas_South_Central_FIPS_4204_Feet",GEOGCS["GCS_North_American_1983",DATUM["North_American_Datum_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["False_Easting",1968500.0],PARAMETER["False_Northing",13123333.33333333],PARAMETER["Central_Meridian",-99.0],PARAMETER["Standard_Parallel_1",28.38333333333333],PARAMETER["Standard_Parallel_2",30.28333333333334],PARAMETER["Latitude_Of_Origin",27.83333333333333],UNIT["Foot_US",0.3048006096012192]]',
 
26
                  proj='+proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333334 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.999999999 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs ',
 
27
                  epsg=None, projected=True, geographic=False, local=False,
 
28
                  lin_name='Foot_US', ang_name='Degree', lin_units=0.3048006096012192, ang_units=0.0174532925199,
 
29
                  auth={'PROJCS' : (None, None),},
 
30
                  attr=(('PROJCS|GeOgCs|spheroid', 'GRS_1980'),(('projcs', 9), 'UNIT'), (('projcs', 11), None),),
 
31
                  ),
 
32
          # This is really ESRI format, not WKT -- but the import should work the same
 
33
          TestSRS('LOCAL_CS["Non-Earth (Meter)",LOCAL_DATUM["Local Datum",0],UNIT["Meter",1.0],AXIS["X",EAST],AXIS["Y",NORTH]]',
 
34
                  esri=True, proj=None, epsg=None, projected=False, geographic=False, local=True,
 
35
                  lin_name='Meter', ang_name='degree', lin_units=1.0, ang_units=0.0174532925199,
 
36
                  attr=(('LOCAL_DATUM', 'Local Datum'), ('unit', 'Meter')),
 
37
                  ),
 
38
          )
 
39
 
 
40
# Well-Known Names
 
41
well_known = (TestSRS('GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]', wk='WGS84', name='WGS 84', attrs=(('GEOGCS|AUTHORITY', 1, '4326'), ('SPHEROID', 'WGS 84'))),
 
42
              TestSRS('GEOGCS["WGS 72",DATUM["WGS_1972",SPHEROID["WGS 72",6378135,298.26,AUTHORITY["EPSG","7043"]],AUTHORITY["EPSG","6322"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4322"]]', wk='WGS72', name='WGS 72', attrs=(('GEOGCS|AUTHORITY', 1, '4322'), ('SPHEROID', 'WGS 72'))),
 
43
              TestSRS('GEOGCS["NAD27",DATUM["North_American_Datum_1927",SPHEROID["Clarke 1866",6378206.4,294.9786982138982,AUTHORITY["EPSG","7008"]],AUTHORITY["EPSG","6267"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4267"]]', wk='NAD27', name='NAD27', attrs=(('GEOGCS|AUTHORITY', 1, '4267'), ('SPHEROID', 'Clarke 1866'))),
 
44
              TestSRS('GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]]', wk='NAD83', name='NAD83', attrs=(('GEOGCS|AUTHORITY', 1, '4269'), ('SPHEROID', 'GRS 1980'))),
 
45
              TestSRS('PROJCS["NZGD49 / Karamea Circuit",GEOGCS["NZGD49",DATUM["New_Zealand_Geodetic_Datum_1949",SPHEROID["International 1924",6378388,297,AUTHORITY["EPSG","7022"]],TOWGS84[59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993],AUTHORITY["EPSG","6272"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4272"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",-41.28991152777778],PARAMETER["central_meridian",172.1090281944444],PARAMETER["scale_factor",1],PARAMETER["false_easting",300000],PARAMETER["false_northing",700000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","27216"]]', wk='EPSG:27216', name='NZGD49 / Karamea Circuit', attrs=(('PROJECTION','Transverse_Mercator'), ('SPHEROID', 'International 1924'))),
 
46
              )
 
47
 
 
48
bad_srlist = ('Foobar', 'OOJCS["NAD83 / Texas South Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",600000],PARAMETER["false_northing",4000000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","32140"]]',)
 
49
 
 
50
class SpatialRefTest(unittest.TestCase):
 
51
 
 
52
    def test01_wkt(self):
 
53
        "Testing initialization on valid OGC WKT."
 
54
        for s in srlist:
 
55
            srs = SpatialReference(s.wkt)
 
56
 
 
57
    def test02_bad_wkt(self):
 
58
        "Testing initialization on invalid WKT."
 
59
        for bad in bad_srlist:
 
60
            try:
 
61
                srs = SpatialReference(bad)
 
62
                srs.validate()
 
63
            except (SRSException, OGRException):
 
64
                pass
 
65
            else:
 
66
                self.fail('Should not have initialized on bad WKT "%s"!')
 
67
 
 
68
    def test03_get_wkt(self):
 
69
        "Testing getting the WKT."
 
70
        for s in srlist:
 
71
            srs = SpatialReference(s.wkt)
 
72
            self.assertEqual(s.wkt, srs.wkt)
 
73
 
 
74
    def test04_proj(self):
 
75
        "Test PROJ.4 import and export."
 
76
 
 
77
        for s in srlist:
 
78
            if s.proj:
 
79
                srs1 = SpatialReference(s.wkt)
 
80
                srs2 = SpatialReference(s.proj)
 
81
                self.assertEqual(srs1.proj, srs2.proj)
 
82
        
 
83
    def test05_epsg(self):
 
84
        "Test EPSG import."
 
85
        for s in srlist:
 
86
            if s.epsg:
 
87
                srs1 = SpatialReference(s.wkt)
 
88
                srs2 = SpatialReference(s.epsg)
 
89
                srs3 = SpatialReference(str(s.epsg))
 
90
                srs4 = SpatialReference('EPSG:%d' % s.epsg)
 
91
                #self.assertEqual(srs1.wkt, srs2.wkt)
 
92
                for srs in (srs1, srs2, srs3, srs4):
 
93
                    for attr, expected in s.attr:
 
94
                        self.assertEqual(expected, srs[attr])
 
95
 
 
96
    def test07_boolean_props(self):
 
97
        "Testing the boolean properties."
 
98
        for s in srlist:
 
99
            srs = SpatialReference(s.wkt)
 
100
            self.assertEqual(s.projected, srs.projected)
 
101
            self.assertEqual(s.geographic, srs.geographic)
 
102
 
 
103
    def test08_angular_linear(self):
 
104
        "Testing the linear and angular units routines."
 
105
        for s in srlist:
 
106
            srs = SpatialReference(s.wkt)
 
107
            self.assertEqual(s.ang_name, srs.angular_name)
 
108
            self.assertEqual(s.lin_name, srs.linear_name)
 
109
            self.assertAlmostEqual(s.ang_units, srs.angular_units, 9)
 
110
            self.assertAlmostEqual(s.lin_units, srs.linear_units, 9)
 
111
 
 
112
    def test09_authority(self):
 
113
        "Testing the authority name & code routines."
 
114
        for s in srlist:
 
115
            if hasattr(s, 'auth'):
 
116
                srs = SpatialReference(s.wkt)
 
117
                for target, tup in s.auth.items():
 
118
                    self.assertEqual(tup[0], srs.auth_name(target))
 
119
                    self.assertEqual(tup[1], srs.auth_code(target))
 
120
 
 
121
    def test10_attributes(self):
 
122
        "Testing the attribute retrieval routines."
 
123
        for s in srlist:
 
124
            srs = SpatialReference(s.wkt)
 
125
            for tup in s.attr:
 
126
                att = tup[0] # Attribute to test
 
127
                exp = tup[1] # Expected result
 
128
                self.assertEqual(exp, srs[att])
 
129
 
 
130
    def test11_wellknown(self):
 
131
        "Testing Well Known Names of Spatial References."
 
132
        for s in well_known:
 
133
            srs = SpatialReference(s.wk)
 
134
            self.assertEqual(s.name, srs.name)
 
135
            for tup in s.attrs:
 
136
                if len(tup) == 2:
 
137
                    key = tup[0]
 
138
                    exp = tup[1]
 
139
                elif len(tup) == 3:
 
140
                    key = tup[:2]
 
141
                    exp = tup[2]
 
142
                self.assertEqual(srs[key], exp)
 
143
 
 
144
    def test12_coordtransform(self):
 
145
        "Testing initialization of a CoordTransform."
 
146
        target = SpatialReference('WGS84')
 
147
        for s in srlist:
 
148
            if s.proj:
 
149
                ct = CoordTransform(SpatialReference(s.wkt), target)
 
150
 
 
151
    def test13_attr_value(self):
 
152
        "Testing the attr_value() method."
 
153
        s1 = SpatialReference('WGS84')
 
154
        self.assertRaises(TypeError, s1.__getitem__, 0)
 
155
        self.assertRaises(TypeError, s1.__getitem__, ('GEOGCS', 'foo'))
 
156
        self.assertEqual('WGS 84', s1['GEOGCS'])
 
157
        self.assertEqual('WGS_1984', s1['DATUM'])
 
158
        self.assertEqual('EPSG', s1['AUTHORITY'])
 
159
        self.assertEqual(4326, int(s1['AUTHORITY', 1]))
 
160
        #for i in range(7): self.assertEqual(0, int(s1['TOWGS84', i]))
 
161
        self.assertEqual(None, s1['FOOBAR'])
 
162
    
 
163
def suite():
 
164
    s = unittest.TestSuite()
 
165
    s.addTest(unittest.makeSuite(SpatialRefTest))
 
166
    return s
 
167
 
 
168
def run(verbosity=2):
 
169
    unittest.TextTestRunner(verbosity=verbosity).run(suite())