Commit 6febb7ef authored by Justin Bronn's avatar Justin Bronn
Browse files

[1.1.X] Fixed #11827: Can now calculate extent in Oracle on tables with one point.

Backport of r11577 from trunk.


git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@11578 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent ba925def
Loading
Loading
Loading
Loading
+19 −10
Original line number Diff line number Diff line
@@ -32,11 +32,20 @@ elif SpatialBackend.oracle:

    def convert_extent(clob):
        if clob:
            # Oracle returns a polygon for the extent, we construct
            # the 4-tuple from the coordinates in the polygon.
            poly = SpatialBackend.Geometry(clob.read())
            shell = poly.shell
            ll, ur = shell[0], shell[2]
            # Generally, Oracle returns a polygon for the extent -- however,
            # it can return a single point if there's only one Point in the
            # table.
            ext_geom = SpatialBackend.Geometry(clob.read())
            gtype = str(ext_geom.geom_type)
            if gtype == 'Polygon':
                # Construct the 4-tuple from the coordinates in the polygon.
                shell = ext_geom.shell
                ll, ur = shell[0][:2], shell[2][:2]
            elif gtype == 'Point':
                ll = ext_geom.coords[:2]
                ur = ll
            else:
                raise Exception('Unexpected geometry type returned for extent: %s' % gtype)
            xmin, ymin = ll
            xmax, ymax = ur
            return (xmin, ymin, xmax, ymax)
+7 −1
Original line number Diff line number Diff line
import os, unittest
from django.contrib.gis.db.backend import SpatialBackend
from django.contrib.gis.tests.utils import no_mysql, no_oracle, no_postgis
from django.contrib.gis.tests.utils import no_mysql, no_oracle, no_postgis, no_spatialite
from django.contrib.gis.shortcuts import render_to_kmz
from models import City

@@ -27,3 +27,9 @@ class GeoRegressionTests(unittest.TestCase):
                  }]
        kmz = render_to_kmz('gis/kml/placemarks.kml', {'places' : places})

    @no_spatialite
    def test03_extent(self):
        "Testing `extent` on a table with a single point, see #11827."
        pnt = City.objects.get(name='Pueblo').point
        ref_ext = (pnt.x, pnt.y, pnt.x, pnt.y)
        self.assertEqual(ref_ext, City.objects.filter(name='Pueblo').extent())