GEOSGeometry.transform() silently no-ops when GDAL isn't available or srid is None
|Reported by:||Robert Coup||Owned by:||Robert Coup|
|Severity:||Keywords:||transform geos gdal|
|Has patch:||yes||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
GEOSGeometry.transform() uses the GDAL library to re-project geometries. If GDAL is not available however, it silently does nothing.
Geodjango-Users discussion thread: http://groups.google.com/group/geodjango/browse_thread/thread/788cafdbd592d617
Current behaviour if GDAL is unavailable:
.transform(clone=False)(the default) does nothing
.transform(clone=False)(the default) called on a geometry where
.transform(clone=True)called on a geometry where
transform(clone=False) (the default) mutates the geometry, it should raise an exception if it can't do what the caller asked.
The attached patch:
- short-circuits re-projection if the source and destination SRIDs match
.transform()raise a GEOSGeometry.Error if GDAL isn't available
- adds tests around the new behaviour
- adds a
FutureWarningif the srid of the geometry is
Noneor <0, pointing out that in 1.5 the behaviour will change an error will be raised.
- adds some docs, including notes to the backwards-incompatibilities for 1.3
The backwards incompatible behaviour change is being introduced because:
.transform()no-op'ing if source & destination SRIDs don't match is NOT what the caller wants - it is in all cases a bug.
- It's unlikely the user was manually checking either the return value (
clone=True) or the geometry's srid (
clone=False) and raising their own exception, the more common case would be to assert on
Change History (6)
comment:1 Changed 6 years ago by
|Patch needs improvement:||unset|
|Triage Stage:||Unreviewed → Accepted|