summaryrefslogtreecommitdiffstats
path: root/webapp/django/contrib/gis/gdal/geomtype.py
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/django/contrib/gis/gdal/geomtype.py')
-rw-r--r--webapp/django/contrib/gis/gdal/geomtype.py73
1 files changed, 73 insertions, 0 deletions
diff --git a/webapp/django/contrib/gis/gdal/geomtype.py b/webapp/django/contrib/gis/gdal/geomtype.py
new file mode 100644
index 0000000000..565326f5a8
--- /dev/null
+++ b/webapp/django/contrib/gis/gdal/geomtype.py
@@ -0,0 +1,73 @@
+from django.contrib.gis.gdal.error import OGRException
+
+#### OGRGeomType ####
+class OGRGeomType(object):
+ "Encapulates OGR Geometry Types."
+
+ # Dictionary of acceptable OGRwkbGeometryType s and their string names.
+ _types = {0 : 'Unknown',
+ 1 : 'Point',
+ 2 : 'LineString',
+ 3 : 'Polygon',
+ 4 : 'MultiPoint',
+ 5 : 'MultiLineString',
+ 6 : 'MultiPolygon',
+ 7 : 'GeometryCollection',
+ 100 : 'None',
+ 101 : 'LinearRing',
+ }
+ # Reverse type dictionary, keyed by lower-case of the name.
+ _str_types = dict([(v.lower(), k) for k, v in _types.items()])
+
+ def __init__(self, type_input):
+ "Figures out the correct OGR Type based upon the input."
+ if isinstance(type_input, OGRGeomType):
+ num = type_input.num
+ elif isinstance(type_input, basestring):
+ num = self._str_types.get(type_input.lower(), None)
+ if num is None:
+ raise OGRException('Invalid OGR String Type "%s"' % type_input)
+ elif isinstance(type_input, int):
+ if not type_input in self._types:
+ raise OGRException('Invalid OGR Integer Type: %d' % type_input)
+ num = type_input
+ else:
+ raise TypeError('Invalid OGR input type given.')
+
+ # Setting the OGR geometry type number.
+ self.num = num
+
+ def __str__(self):
+ "Returns the value of the name property."
+ return self.name
+
+ def __eq__(self, other):
+ """
+ Does an equivalence test on the OGR type with the given
+ other OGRGeomType, the short-hand string, or the integer.
+ """
+ if isinstance(other, OGRGeomType):
+ return self.num == other.num
+ elif isinstance(other, basestring):
+ return self.name.lower() == other.lower()
+ elif isinstance(other, int):
+ return self.num == other
+ else:
+ return False
+
+ def __ne__(self, other):
+ return not (self == other)
+
+ @property
+ def name(self):
+ "Returns a short-hand string form of the OGR Geometry type."
+ return self._types[self.num]
+
+ @property
+ def django(self):
+ "Returns the Django GeometryField for this OGR Type."
+ s = self.name
+ if s in ('Unknown', 'LinearRing', 'None'):
+ return None
+ else:
+ return s + 'Field'