#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.sridisNonedoes nothing.transform(clone=True)called on a geometry where.sridisNonereturnsNone
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
FutureWarningif the srid of the geometry isNoneor <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 , 15 years ago
| Attachment: | 13788_geos_transform.diff added |
|---|
comment:1 by , 15 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 , 15 years ago
| Owner: | changed from to |
|---|---|
| Status: | new → assigned |
comment:3 by , 15 years ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
initial patch