app/django/contrib/gis/gdal/geomtype.py
changeset 323 ff1a9aa48cfd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/app/django/contrib/gis/gdal/geomtype.py	Tue Oct 14 16:00:59 2008 +0000
@@ -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'