Index: django/contrib/gis/tests/test_gdal_envelope.py
===================================================================
--- django/contrib/gis/tests/test_gdal_envelope.py	(revision 9822)
+++ django/contrib/gis/tests/test_gdal_envelope.py	(working copy)
@@ -1,7 +1,10 @@
 import unittest
 from django.contrib.gis.gdal import Envelope, OGRException
+from django.contrib.gis.geos import Point
 
 class EnvelopeTest(unittest.TestCase):
+    def setUp(self):
+        self.e = Envelope(0, 0, 5, 5)
 
     def test01_init(self):
         "Testing Envelope initilization."
@@ -36,6 +39,42 @@
         self.assertEqual(e1, e2)
         self.assertEqual((0.523, 0.217, 253.23, 523.69), e1)
 
+    def test04_expand_to_include_pt_2_params(self):
+        "Testing Envelope expand_to_include -- point as two parameters."
+        self.e.expand_to_include(2, 6)
+        self.assertEqual((0, 0, 5, 6), self.e)
+        self.e.expand_to_include(-1, -1)
+        self.assertEqual((-1, -1, 5, 6), self.e)
+
+    def test05_expand_to_include_pt_2_tuple(self):
+        "Testing Envelope expand_to_include -- point as a single 2-tuple parameter."
+        self.e.expand_to_include((10, 10))
+        self.assertEqual((0, 0, 10, 10), self.e)
+        self.e.expand_to_include((-10, -10))
+        self.assertEqual((-10, -10, 10, 10), self.e)
+
+    def test06_expand_to_include_extent_4_params(self):
+        "Testing Envelope expand_to_include -- extent as 4 parameters."
+        self.e.expand_to_include(-1, 1, 3, 7)
+        self.assertEqual((-1, 0, 5, 7), self.e)
+
+    def test06_expand_to_include_extent_4_tuple(self):
+        "Testing Envelope expand_to_include -- extent as a single 4-tuple parameter."
+        self.e.expand_to_include((-1, 1, 3, 7))
+        self.assertEqual((-1, 0, 5, 7), self.e)
+
+    def test07_expand_to_include_envelope(self):
+        "Testing Envelope expand_to_include with Envelope as parameter."
+        self.e.expand_to_include(Envelope(-1, 1, 3, 7))
+        self.assertEqual((-1, 0, 5, 7), self.e)
+
+    def test08_expand_to_include_point(self):
+        "Testing Envelope expand_to_include with Point as parameter."
+        self.e.expand_to_include(Point(-1, 1))
+        self.assertEqual((-1, 0, 5, 5), self.e)
+        self.e.expand_to_include(Point(10, 10))
+        self.assertEqual((-1, 0, 10, 10), self.e)
+
 def suite():
     s = unittest.TestSuite()
     s.addTest(unittest.makeSuite(EnvelopeTest))
Index: django/contrib/gis/gdal/envelope.py
===================================================================
--- django/contrib/gis/gdal/envelope.py	(revision 9822)
+++ django/contrib/gis/gdal/envelope.py	(working copy)
@@ -13,6 +13,7 @@
 from ctypes import Structure, c_double
 from types import TupleType, ListType
 from django.contrib.gis.gdal.error import OGRException
+from django.contrib.gis.geos import Point
 
 # The OGR definition of an Envelope is a C structure containing four doubles.
 #  See the 'ogr_core.h' source file for more information:
@@ -132,3 +133,45 @@
                (self.min_x, self.min_y, self.min_x, self.max_y,
                 self.max_x, self.max_y, self.max_x, self.min_y,
                 self.min_x, self.min_y)
+
+    def expand_to_include(self, *args):
+        """
+        Modifies the envelope to expand to include the boundaries of
+        the passed-in 2-tuple (a point), 4-tuple (an extent) or
+        envelope.
+        """
+        # We provide a number of different signatures for this method,
+        # and the logic here is all about converting them into a
+        # 4-tuple single parameter which does the actual work of
+        # expanding the envelope.
+        if len(args) == 1:
+            if isinstance(args[0], Envelope):
+                return self.expand_to_include(args[0].tuple)
+            elif isinstance(args[0], Point):
+                return self.expand_to_include(args[0].x, args[0].y, args[0].x, args[0].y)
+            elif isinstance(args[0], (TupleType, ListType)):
+                # A tuple was passed in.
+                if len(args[0]) == 2:
+                    return self.expand_to_include((args[0][0], args[0][1], args[0][0], args[0][1]))
+                elif len(args[0]) == 4:
+                    (minx, miny, maxx, maxy) = args[0]
+                    if minx < self._envelope.MinX:
+                        self._envelope.MinX = minx
+                    if miny < self._envelope.MinY:
+                        self._envelope.MinY = miny
+                    if maxx > self._envelope.MaxX:
+                        self._envelope.MaxX = maxx
+                    if maxy > self._envelope.MaxY:
+                        self._envelope.MaxY = maxy
+                else:
+                    raise OGRException('Incorrect number of tuple elements (%d).' % len(args[0]))
+            else:
+                raise TypeError('Incorrect type of argument: %s' % str(type(args[0])))
+        elif len(args) == 2:
+            # An x and an y parameter were passed in
+            return self.expand_to_include((args[0], args[1], args[0], args[1]))
+        elif len(args) == 4:
+            # Individiual parameters passed in.
+            return self.expand_to_include(args)
+        else:
+            raise OGRException('Incorrect number (%d) of arguments.' % len(args[0]))
