mirror of
https://github.com/django/django.git
synced 2025-07-05 10:19:20 +00:00
gis: renamed GEOSGeometryIndexError
to GEOSIndexError
; added GEOS_LIBRARY_PATH settings option.
git-svn-id: http://code.djangoproject.com/svn/django/branches/gis@6861 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
23384af79b
commit
facc725d21
@ -31,7 +31,7 @@
|
|||||||
from django.contrib.gis.geos.base import GEOSGeometry, wkt_regex, hex_regex
|
from django.contrib.gis.geos.base import GEOSGeometry, wkt_regex, hex_regex
|
||||||
from django.contrib.gis.geos.geometries import Point, LineString, LinearRing, Polygon, HAS_NUMPY
|
from django.contrib.gis.geos.geometries import Point, LineString, LinearRing, Polygon, HAS_NUMPY
|
||||||
from django.contrib.gis.geos.collections import GeometryCollection, MultiPoint, MultiLineString, MultiPolygon
|
from django.contrib.gis.geos.collections import GeometryCollection, MultiPoint, MultiLineString, MultiPolygon
|
||||||
from django.contrib.gis.geos.error import GEOSException, GEOSGeometryIndexError
|
from django.contrib.gis.geos.error import GEOSException, GEOSIndexError
|
||||||
from django.contrib.gis.geos.libgeos import geos_version
|
from django.contrib.gis.geos.libgeos import geos_version
|
||||||
|
|
||||||
def fromfile(file_name):
|
def fromfile(file_name):
|
||||||
|
@ -9,7 +9,7 @@ from types import StringType, UnicodeType, IntType, FloatType, BufferType
|
|||||||
|
|
||||||
# GEOS-related dependencies.
|
# GEOS-related dependencies.
|
||||||
from django.contrib.gis.geos.coordseq import GEOSCoordSeq
|
from django.contrib.gis.geos.coordseq import GEOSCoordSeq
|
||||||
from django.contrib.gis.geos.error import GEOSException, GEOSGeometryIndexError
|
from django.contrib.gis.geos.error import GEOSException
|
||||||
from django.contrib.gis.geos.libgeos import GEOM_PTR
|
from django.contrib.gis.geos.libgeos import GEOM_PTR
|
||||||
|
|
||||||
# All other functions in this module come from the ctypes
|
# All other functions in this module come from the ctypes
|
||||||
@ -121,44 +121,21 @@ class GEOSGeometry(object):
|
|||||||
"Returns the union of this Geometry and the other."
|
"Returns the union of this Geometry and the other."
|
||||||
return self.union(other)
|
return self.union(other)
|
||||||
|
|
||||||
# g1 |= g2
|
|
||||||
def __ior__(self, other):
|
|
||||||
"Reassigns this Geometry to the union of this Geometry and the other."
|
|
||||||
return self.union(other)
|
|
||||||
|
|
||||||
# g = g1 & g2
|
# g = g1 & g2
|
||||||
def __and__(self, other):
|
def __and__(self, other):
|
||||||
"Returns the intersection of this Geometry and the other."
|
"Returns the intersection of this Geometry and the other."
|
||||||
return self.intersection(other)
|
return self.intersection(other)
|
||||||
|
|
||||||
# g1 &= g2
|
|
||||||
def __iand__(self, other):
|
|
||||||
"Reassigns this Geometry to the intersection of this Geometry and the other."
|
|
||||||
return self.intersection(other)
|
|
||||||
|
|
||||||
# g = g1 - g2
|
# g = g1 - g2
|
||||||
def __sub__(self, other):
|
def __sub__(self, other):
|
||||||
"Return the difference this Geometry and the other."
|
"Return the difference this Geometry and the other."
|
||||||
return self.difference(other)
|
return self.difference(other)
|
||||||
|
|
||||||
# g1 -= g2
|
|
||||||
def __isub__(self, other):
|
|
||||||
"Reassigns this Geometry to the difference of this Geometry and the other."
|
|
||||||
return self.difference(other)
|
|
||||||
|
|
||||||
# g = g1 ^ g2
|
# g = g1 ^ g2
|
||||||
def __xor__(self, other):
|
def __xor__(self, other):
|
||||||
"Return the symmetric difference of this Geometry and the other."
|
"Return the symmetric difference of this Geometry and the other."
|
||||||
return self.sym_difference(other)
|
return self.sym_difference(other)
|
||||||
|
|
||||||
# g1 ^= g2
|
|
||||||
def __ixor__(self, other):
|
|
||||||
"""
|
|
||||||
Reassigns this Geometry to the symmetric difference of this Geometry
|
|
||||||
and the other.
|
|
||||||
"""
|
|
||||||
return self.sym_difference(other)
|
|
||||||
|
|
||||||
#### Coordinate Sequence Routines ####
|
#### Coordinate Sequence Routines ####
|
||||||
@property
|
@property
|
||||||
def has_cs(self):
|
def has_cs(self):
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
from ctypes import c_int, c_uint, byref
|
from ctypes import c_int, c_uint, byref
|
||||||
from types import TupleType, ListType
|
from types import TupleType, ListType
|
||||||
from django.contrib.gis.geos.base import GEOSGeometry
|
from django.contrib.gis.geos.base import GEOSGeometry
|
||||||
from django.contrib.gis.geos.error import GEOSException, GEOSGeometryIndexError
|
from django.contrib.gis.geos.error import GEOSException, GEOSIndexError
|
||||||
from django.contrib.gis.geos.geometries import Point, LineString, LinearRing, Polygon
|
from django.contrib.gis.geos.geometries import Point, LineString, LinearRing, Polygon
|
||||||
from django.contrib.gis.geos.libgeos import get_pointer_arr, GEOM_PTR
|
from django.contrib.gis.geos.libgeos import get_pointer_arr, GEOM_PTR
|
||||||
from django.contrib.gis.geos.prototypes import create_collection, destroy_geom, geom_clone, geos_typeid, get_cs, get_geomn
|
from django.contrib.gis.geos.prototypes import create_collection, destroy_geom, geom_clone, geos_typeid, get_cs, get_geomn
|
||||||
@ -80,7 +80,7 @@ class GeometryCollection(GEOSGeometry):
|
|||||||
def _checkindex(self, index):
|
def _checkindex(self, index):
|
||||||
"Checks the given geometry index."
|
"Checks the given geometry index."
|
||||||
if index < 0 or index >= self.num_geom:
|
if index < 0 or index >= self.num_geom:
|
||||||
raise GEOSGeometryIndexError('invalid GEOS Geometry index: %s' % str(index))
|
raise GEOSIndexError('invalid GEOS Geometry index: %s' % str(index))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def kml(self):
|
def kml(self):
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
"""
|
"""
|
||||||
from ctypes import c_double, c_uint, byref
|
from ctypes import c_double, c_uint, byref
|
||||||
from types import ListType, TupleType
|
from types import ListType, TupleType
|
||||||
from django.contrib.gis.geos.error import GEOSException, GEOSGeometryIndexError
|
from django.contrib.gis.geos.error import GEOSException, GEOSIndexError
|
||||||
from django.contrib.gis.geos.libgeos import CS_PTR, HAS_NUMPY
|
from django.contrib.gis.geos.libgeos import CS_PTR, HAS_NUMPY
|
||||||
from django.contrib.gis.geos.prototypes import cs_clone, cs_getdims, cs_getordinate, cs_getsize, cs_setordinate
|
from django.contrib.gis.geos.prototypes import cs_clone, cs_getdims, cs_getordinate, cs_getsize, cs_setordinate
|
||||||
if HAS_NUMPY: from numpy import ndarray
|
if HAS_NUMPY: from numpy import ndarray
|
||||||
@ -69,7 +69,7 @@ class GEOSCoordSeq(object):
|
|||||||
"Checks the given index."
|
"Checks the given index."
|
||||||
sz = self.size
|
sz = self.size
|
||||||
if (sz < 1) or (index < 0) or (index >= sz):
|
if (sz < 1) or (index < 0) or (index >= sz):
|
||||||
raise GEOSGeometryIndexError('invalid GEOS Geometry index: %s' % str(index))
|
raise GEOSIndexError('invalid GEOS Geometry index: %s' % str(index))
|
||||||
|
|
||||||
def _checkdim(self, dim):
|
def _checkdim(self, dim):
|
||||||
"Checks the given dimension."
|
"Checks the given dimension."
|
||||||
|
@ -7,7 +7,7 @@ class GEOSException(Exception):
|
|||||||
"The base GEOS exception, indicates a GEOS-related error."
|
"The base GEOS exception, indicates a GEOS-related error."
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class GEOSGeometryIndexError(GEOSException, KeyError):
|
class GEOSIndexError(GEOSException, KeyError):
|
||||||
"""
|
"""
|
||||||
This exception is raised when an invalid index is encountered, and has
|
This exception is raised when an invalid index is encountered, and has
|
||||||
the 'silent_variable_feature' attribute set to true. This ensures that
|
the 'silent_variable_feature' attribute set to true. This ensures that
|
||||||
|
@ -7,7 +7,7 @@ from ctypes import c_uint, byref
|
|||||||
from types import FloatType, IntType, ListType, TupleType
|
from types import FloatType, IntType, ListType, TupleType
|
||||||
from django.contrib.gis.geos.base import GEOSGeometry
|
from django.contrib.gis.geos.base import GEOSGeometry
|
||||||
from django.contrib.gis.geos.coordseq import GEOSCoordSeq
|
from django.contrib.gis.geos.coordseq import GEOSCoordSeq
|
||||||
from django.contrib.gis.geos.error import GEOSException, GEOSGeometryIndexError
|
from django.contrib.gis.geos.error import GEOSException, GEOSIndexError
|
||||||
from django.contrib.gis.geos.libgeos import get_pointer_arr, GEOM_PTR, HAS_NUMPY
|
from django.contrib.gis.geos.libgeos import get_pointer_arr, GEOM_PTR, HAS_NUMPY
|
||||||
from django.contrib.gis.geos.prototypes import *
|
from django.contrib.gis.geos.prototypes import *
|
||||||
if HAS_NUMPY: from numpy import ndarray, array
|
if HAS_NUMPY: from numpy import ndarray, array
|
||||||
@ -328,7 +328,7 @@ class Polygon(GEOSGeometry):
|
|||||||
def _checkindex(self, index):
|
def _checkindex(self, index):
|
||||||
"Internal routine for checking the given ring index."
|
"Internal routine for checking the given ring index."
|
||||||
if index < 0 or index >= len(self):
|
if index < 0 or index >= len(self):
|
||||||
raise GEOSGeometryIndexError('invalid Polygon ring index: %s' % index)
|
raise GEOSIndexError('invalid Polygon ring index: %s' % index)
|
||||||
|
|
||||||
def get_interior_ring(self, ring_i):
|
def get_interior_ring(self, ring_i):
|
||||||
"""
|
"""
|
||||||
|
@ -17,9 +17,18 @@ try:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
HAS_NUMPY = False
|
HAS_NUMPY = False
|
||||||
|
|
||||||
|
# Custom library path set?
|
||||||
|
try:
|
||||||
|
from django.conf import settings
|
||||||
|
lib_name = settings.GEOS_LIBRARY_PATH
|
||||||
|
except (AttributeError, EnvironmentError):
|
||||||
|
lib_name = None
|
||||||
|
|
||||||
# Setting the appropriate name for the GEOS-C library, depending on which
|
# Setting the appropriate name for the GEOS-C library, depending on which
|
||||||
# OS and POSIX platform we're running.
|
# OS and POSIX platform we're running.
|
||||||
if os.name == 'nt':
|
if lib_name:
|
||||||
|
pass
|
||||||
|
elif os.name == 'nt':
|
||||||
# Windows NT library
|
# Windows NT library
|
||||||
lib_name = 'libgeos_c-1.dll'
|
lib_name = 'libgeos_c-1.dll'
|
||||||
elif os.name == 'posix':
|
elif os.name == 'posix':
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import random, unittest, sys
|
import random, unittest, sys
|
||||||
from ctypes import ArgumentError
|
from ctypes import ArgumentError
|
||||||
from django.contrib.gis.geos import \
|
from django.contrib.gis.geos import \
|
||||||
GEOSException, GEOSGeometryIndexError, \
|
GEOSException, GEOSIndexError, \
|
||||||
GEOSGeometry, Point, LineString, LinearRing, Polygon, \
|
GEOSGeometry, Point, LineString, LinearRing, Polygon, \
|
||||||
MultiPoint, MultiLineString, MultiPolygon, GeometryCollection, \
|
MultiPoint, MultiLineString, MultiPolygon, GeometryCollection, \
|
||||||
fromstr, geos_version, HAS_NUMPY
|
fromstr, geos_version, HAS_NUMPY
|
||||||
@ -144,7 +144,7 @@ class GEOSTest(unittest.TestCase):
|
|||||||
self.assertAlmostEqual(mp.centroid[0], mpnt.centroid.tuple[0], 9)
|
self.assertAlmostEqual(mp.centroid[0], mpnt.centroid.tuple[0], 9)
|
||||||
self.assertAlmostEqual(mp.centroid[1], mpnt.centroid.tuple[1], 9)
|
self.assertAlmostEqual(mp.centroid[1], mpnt.centroid.tuple[1], 9)
|
||||||
|
|
||||||
self.assertRaises(GEOSGeometryIndexError, mpnt.__getitem__, len(mpnt))
|
self.assertRaises(GEOSIndexError, mpnt.__getitem__, len(mpnt))
|
||||||
self.assertEqual(mp.centroid, mpnt.centroid.tuple)
|
self.assertEqual(mp.centroid, mpnt.centroid.tuple)
|
||||||
self.assertEqual(mp.points, tuple(m.tuple for m in mpnt))
|
self.assertEqual(mp.points, tuple(m.tuple for m in mpnt))
|
||||||
for p in mpnt:
|
for p in mpnt:
|
||||||
@ -169,7 +169,7 @@ class GEOSTest(unittest.TestCase):
|
|||||||
|
|
||||||
self.assertEqual(True, ls == fromstr(l.wkt))
|
self.assertEqual(True, ls == fromstr(l.wkt))
|
||||||
self.assertEqual(False, ls == prev)
|
self.assertEqual(False, ls == prev)
|
||||||
self.assertRaises(GEOSGeometryIndexError, ls.__getitem__, len(ls))
|
self.assertRaises(GEOSIndexError, ls.__getitem__, len(ls))
|
||||||
prev = ls
|
prev = ls
|
||||||
|
|
||||||
# Creating a LineString from a tuple, list, and numpy array
|
# Creating a LineString from a tuple, list, and numpy array
|
||||||
@ -199,7 +199,7 @@ class GEOSTest(unittest.TestCase):
|
|||||||
self.assertEqual(ls.geom_typeid, 1)
|
self.assertEqual(ls.geom_typeid, 1)
|
||||||
self.assertEqual(ls.empty, False)
|
self.assertEqual(ls.empty, False)
|
||||||
|
|
||||||
self.assertRaises(GEOSGeometryIndexError, ml.__getitem__, len(ml))
|
self.assertRaises(GEOSIndexError, ml.__getitem__, len(ml))
|
||||||
self.assertEqual(ml.wkt, MultiLineString(*tuple(s.clone() for s in ml)).wkt)
|
self.assertEqual(ml.wkt, MultiLineString(*tuple(s.clone() for s in ml)).wkt)
|
||||||
self.assertEqual(ml, MultiLineString(*tuple(LineString(s.tuple) for s in ml)))
|
self.assertEqual(ml, MultiLineString(*tuple(LineString(s.tuple) for s in ml)))
|
||||||
|
|
||||||
@ -252,9 +252,9 @@ class GEOSTest(unittest.TestCase):
|
|||||||
self.assertEqual(p.ext_ring_cs, poly[0].tuple) # Testing __getitem__
|
self.assertEqual(p.ext_ring_cs, poly[0].tuple) # Testing __getitem__
|
||||||
|
|
||||||
# Testing __getitem__ and __setitem__ on invalid indices
|
# Testing __getitem__ and __setitem__ on invalid indices
|
||||||
self.assertRaises(GEOSGeometryIndexError, poly.__getitem__, len(poly))
|
self.assertRaises(GEOSIndexError, poly.__getitem__, len(poly))
|
||||||
#self.assertRaises(GEOSGeometryIndexError, poly.__setitem__, len(poly), False)
|
#self.assertRaises(GEOSIndexError, poly.__setitem__, len(poly), False)
|
||||||
self.assertRaises(GEOSGeometryIndexError, poly.__getitem__, -1)
|
self.assertRaises(GEOSIndexError, poly.__getitem__, -1)
|
||||||
|
|
||||||
# Testing __iter__
|
# Testing __iter__
|
||||||
for r in poly:
|
for r in poly:
|
||||||
@ -283,7 +283,7 @@ class GEOSTest(unittest.TestCase):
|
|||||||
self.assertEqual(mp.num_geom, mpoly.num_geom)
|
self.assertEqual(mp.num_geom, mpoly.num_geom)
|
||||||
self.assertEqual(mp.n_p, mpoly.num_coords)
|
self.assertEqual(mp.n_p, mpoly.num_coords)
|
||||||
self.assertEqual(mp.num_geom, len(mpoly))
|
self.assertEqual(mp.num_geom, len(mpoly))
|
||||||
self.assertRaises(GEOSGeometryIndexError, mpoly.__getitem__, len(mpoly))
|
self.assertRaises(GEOSIndexError, mpoly.__getitem__, len(mpoly))
|
||||||
for p in mpoly:
|
for p in mpoly:
|
||||||
self.assertEqual(p.geom_type, 'Polygon')
|
self.assertEqual(p.geom_type, 'Polygon')
|
||||||
self.assertEqual(p.geom_typeid, 3)
|
self.assertEqual(p.geom_typeid, 3)
|
||||||
@ -618,15 +618,15 @@ class GEOSTest(unittest.TestCase):
|
|||||||
|
|
||||||
# Testing __getitem__ (doesn't work on Point or Polygon)
|
# Testing __getitem__ (doesn't work on Point or Polygon)
|
||||||
if isinstance(g, Point):
|
if isinstance(g, Point):
|
||||||
self.assertRaises(GEOSGeometryIndexError, g.get_x)
|
self.assertRaises(GEOSIndexError, g.get_x)
|
||||||
elif isinstance(g, Polygon):
|
elif isinstance(g, Polygon):
|
||||||
lr = g.shell
|
lr = g.shell
|
||||||
self.assertEqual('LINEARRING EMPTY', lr.wkt)
|
self.assertEqual('LINEARRING EMPTY', lr.wkt)
|
||||||
self.assertEqual(0, len(lr))
|
self.assertEqual(0, len(lr))
|
||||||
self.assertEqual(True, lr.empty)
|
self.assertEqual(True, lr.empty)
|
||||||
self.assertRaises(GEOSGeometryIndexError, lr.__getitem__, 0)
|
self.assertRaises(GEOSIndexError, lr.__getitem__, 0)
|
||||||
else:
|
else:
|
||||||
self.assertRaises(GEOSGeometryIndexError, g.__getitem__, 0)
|
self.assertRaises(GEOSIndexError, g.__getitem__, 0)
|
||||||
|
|
||||||
def test21_test_gdal(self):
|
def test21_test_gdal(self):
|
||||||
"Testing `ogr` and `srs` properties."
|
"Testing `ogr` and `srs` properties."
|
||||||
|
Loading…
x
Reference in New Issue
Block a user