#13788 closed (fixed)
GEOSGeometry.transform() silently no-ops when GDAL isn't available or srid is None
Reported by: | Robert Coup | Owned by: | Robert Coup |
---|---|---|---|
Component: | GIS | Version: | dev |
Severity: | Keywords: | transform geos gdal | |
Cc: | jbronn | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
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=True)
returnsNone
Also related:
.transform(clone=False)
(the default) called on a geometry where.srid
isNone
does nothing.transform(clone=True)
called on a geometry where.srid
isNone
returnsNone
Since 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
- makes
.transform()
raise a GEOSGeometry.Error if GDAL isn't available - adds tests around the new behaviour
- adds a
FutureWarning
if the srid of the geometry isNone
or <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 onHAS_GDAL
.
Attachments (2)
Change History (6)
by , 14 years ago
Attachment: | 13788_geos_transform.diff added |
---|
comment:1 by , 14 years ago
Cc: | added |
---|---|
Has patch: | set |
Triage Stage: | Unreviewed → Accepted |
My documentation/rest-fu isn't strong, so probably worth a look there, and i'm not sure whether the notes for the release are all in the right places :)
comment:2 by , 14 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:3 by , 14 years ago
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
initial patch