mirror of
https://github.com/django/django.git
synced 2025-07-04 01:39:20 +00:00
gis: gdal: Added GDAL_LIBRARY_PATH
setting; added tests and extended support geometry transform; added the units
method for spatial reference objects.
git-svn-id: http://code.djangoproject.com/svn/django/branches/gis@6862 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
facc725d21
commit
1c45c6f753
@ -310,6 +310,9 @@ class OGRGeometry(object):
|
||||
geom_transform(self._ptr, coord_trans._ptr)
|
||||
elif isinstance(coord_trans, SpatialReference):
|
||||
geom_transform_to(self._ptr, coord_trans._ptr)
|
||||
elif isinstance(coord_trans, (int, basestring)):
|
||||
sr = SpatialReference(coord_trans)
|
||||
geom_transform_to(self._ptr, sr._ptr)
|
||||
else:
|
||||
raise TypeError('Either a CoordTransform or a SpatialReference object required for transformation.')
|
||||
|
||||
|
@ -3,7 +3,16 @@ from ctypes import CDLL, string_at
|
||||
from ctypes.util import find_library
|
||||
from django.contrib.gis.gdal.error import OGRException
|
||||
|
||||
if os.name == 'nt':
|
||||
# Custom library path set?
|
||||
try:
|
||||
from django.conf import settings
|
||||
lib_name = settings.GDAL_LIBRARY_PATH
|
||||
except (AttributeError, EnvironmentError):
|
||||
lib_name = None
|
||||
|
||||
if lib_name:
|
||||
pass
|
||||
elif os.name == 'nt':
|
||||
# Windows NT shared library
|
||||
lib_name = 'libgdal-1.dll'
|
||||
errcheck_flag = False
|
||||
|
@ -225,6 +225,20 @@ class SpatialReference(object):
|
||||
units, name = angular_units(self._ptr, byref(c_char_p()))
|
||||
return units
|
||||
|
||||
@property
|
||||
def units(self):
|
||||
"""
|
||||
Returns a 2-tuple of the units value and the units name,
|
||||
and will automatically determines whether to return the linear
|
||||
or angular units.
|
||||
"""
|
||||
if self.projected or self.local:
|
||||
return linear_units(self._ptr, byref(c_char_p()))
|
||||
elif self.geographic:
|
||||
return angular_units(self._ptr, byref(c_char_p()))
|
||||
else:
|
||||
return (None, None)
|
||||
|
||||
#### Spheroid/Ellipsoid Properties ####
|
||||
@property
|
||||
def ellipsoid(self):
|
||||
|
@ -1,6 +1,6 @@
|
||||
import unittest
|
||||
from django.contrib.gis.gdal import OGRGeometry, OGRGeomType, \
|
||||
OGRException, OGRIndexError, SpatialReference
|
||||
OGRException, OGRIndexError, SpatialReference, CoordTransform
|
||||
from django.contrib.gis.tests.geometries import *
|
||||
|
||||
class OGRGeomTest(unittest.TestCase):
|
||||
@ -201,7 +201,7 @@ class OGRGeomTest(unittest.TestCase):
|
||||
self.assertEqual(3, p.geom_type)
|
||||
self.assertEqual(mpoly.wkt, OGRGeometry(mp.wkt).wkt)
|
||||
|
||||
def test09_srs(self):
|
||||
def test09a_srs(self):
|
||||
"Testing OGR Geometries with Spatial Reference objects."
|
||||
for mp in multipolygons:
|
||||
# Creating a geometry w/spatial reference
|
||||
@ -252,6 +252,23 @@ class OGRGeomTest(unittest.TestCase):
|
||||
self.assertEqual('WGS 72', ring.srs.name)
|
||||
self.assertEqual(4322, ring.srid)
|
||||
|
||||
def test09b_srs_transform(self):
|
||||
"Testing transform()."
|
||||
orig = OGRGeometry('POINT (-104.609252 38.255001)', 4326)
|
||||
trans = OGRGeometry('POINT(992363.390841912 481455.395105533)', 2774)
|
||||
|
||||
# Using an srid, a SpatialReference object, and a CoordTransform object
|
||||
# or transformations.
|
||||
t1, t2, t3 = orig.clone(), orig.clone(), orig.clone()
|
||||
t1.transform(trans.srid)
|
||||
t2.transform(SpatialReference('EPSG:2774'))
|
||||
ct = CoordTransform(SpatialReference('WGS84'), SpatialReference(2774))
|
||||
t3.transform(ct)
|
||||
|
||||
for p in (t1, t2, t3):
|
||||
self.assertAlmostEqual(trans.x, p.x, 7)
|
||||
self.assertAlmostEqual(trans.y, p.y, 7)
|
||||
|
||||
def test10_difference(self):
|
||||
"Testing difference()."
|
||||
for i in xrange(len(topology_geoms)):
|
||||
|
@ -155,7 +155,7 @@ class SpatialRefTest(unittest.TestCase):
|
||||
self.assertEqual('WGS_1984', s1['DATUM'])
|
||||
self.assertEqual('EPSG', s1['AUTHORITY'])
|
||||
self.assertEqual(4326, int(s1['AUTHORITY', 1]))
|
||||
for i in range(7): self.assertEqual(0, int(s1['TOWGS84', i]))
|
||||
#for i in range(7): self.assertEqual(0, int(s1['TOWGS84', i]))
|
||||
self.assertEqual(None, s1['FOOBAR'])
|
||||
|
||||
def suite():
|
||||
|
Loading…
x
Reference in New Issue
Block a user