Commit a7bb5af5 authored by Sergey Fedoseev's avatar Sergey Fedoseev Committed by Tim Graham
Browse files

Fixed #25583 -- Allowed calling `transform` with `CoordTransform` even if SRID is invalid.

parent 02ef96c5
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -494,14 +494,18 @@ class GEOSGeometry(GEOSBase, ListMixin):
            else:
                return

        if (srid is None) or (srid < 0):
        if isinstance(ct, gdal.CoordTransform):
            # We don't care about SRID because CoordTransform presupposes
            # source SRS.
            srid = None
        elif srid is None or srid < 0:
            raise GEOSException("Calling transform() with no SRID set is not supported")

        if not gdal.HAS_GDAL:
            raise GEOSException("GDAL library is not available to transform() geometry.")

        # Creating an OGR Geometry, which is then transformed.
        g = self.ogr
        g = gdal.OGRGeometry(self.wkb, srid)
        g.transform(ct)
        # Getting a new GEOS pointer
        ptr = wkb_r().read(g.wkb)
+8 −0
Original line number Diff line number Diff line
@@ -553,6 +553,14 @@ is returned instead.

    Requires GDAL. Raises :class:`~django.contrib.gis.geos.GEOSException` if
    GDAL is not available or if the geometry's SRID is ``None`` or less than 0.
    It doesn't impose any constraints on the geometry's SRID if called with a
    :class:`~django.contrib.gis.gdal.CoordTransform` object.

    .. versionchanged:: 1.10

        In previous versions, it required the geometry's SRID to be a positive
        integer even if it was called with a
        :class:`~django.contrib.gis.gdal.CoordTransform` object.

``Point``
---------
+18 −17
Original line number Diff line number Diff line
@@ -656,9 +656,10 @@ class GEOSTest(unittest.TestCase, TestDataMixin):

    @skipUnless(HAS_GDAL, "GDAL is required.")
    def test_custom_srid(self):
        """ Test with a srid unknown from GDAL """
        pnt = Point(111200, 220900, srid=999999)
        self.assertTrue(pnt.ewkt.startswith("SRID=999999;POINT (111200.0"))
        """Test with a null srid and a srid unknown to GDAL."""
        for srid in [None, 999999]:
            pnt = Point(111200, 220900, srid=srid)
            self.assertTrue(pnt.ewkt.startswith(("SRID=%s;" % srid if srid else '') + "POINT (111200.0"))
            self.assertIsInstance(pnt.ogr, gdal.OGRGeometry)
            self.assertIsNone(pnt.srs)