#4322 closed (fixed)
[gis] Lazy-instantiated geometry objects
Reported by: | Owned by: | jbronn | |
---|---|---|---|
Component: | GIS | Version: | dev |
Severity: | Keywords: | gis | |
Cc: | gulopine@…, jdunck@…, jbronn@…, | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | yes |
Needs tests: | yes | Patch needs improvement: | yes |
Easy pickings: | no | UI/UX: | no |
Description
Ok, as discussed on the dev list (earlier discussions here), I've created a patch for lazy-instantiated geometries.
The idea is to use GEOSGeometry objects as the standard representation, but only instantiate it when someone actually reads the geometry value. The patch uses a python descriptor applied to the model class with a setter and a getter.
- The getter checks whether the stored value is a GEOSGeometry (or None), otherwise it tries to create one via the setter.
- The setter (if the new value isn't None) first checks whether its a GEOSGeometry. If so, it sets the internal value. Otherwise it tries to convert it first as hex, then as wkt if it gets an exception. Logic is that the DB returns hex values and reading is probably more likely to happen than writing.
Because both the setter and getter are completely transparent to the rest of Django, it makes all the get_GEOM_xxx redundant, because you can now do model.my_geometry_field.area, etc.
This is a first stab and I'd appreciate comments.
Attachments (3)
Change History (10)
Changed 17 years ago by
Attachment: | gis_lazy_geometries.diff added |
---|
comment:1 Changed 17 years ago by
Needs documentation: | set |
---|---|
Needs tests: | set |
Patch needs improvement: | set |
comment:2 Changed 17 years ago by
Component: | Contrib apps → GIS |
---|---|
Owner: | changed from Adrian Holovaty to Jeremy Dunck |
comment:3 Changed 17 years ago by
gis_lazy_geometries.2.2.diff fixes a bunch of pretty serious issues resulting from the number of different ways i attempted to get this working cleanly. Thanks Gulopine for pointing out the obvious things (like that it wasn't lazy :P). SRIDs should also now be handled consistently (I found an error in there under some uses).
comment:4 Changed 16 years ago by
Cc: | jbronn@… added |
---|---|
Owner: | changed from Jeremy Dunck to jbronn |
Status: | new → assigned |
NULL geometry support added in r5448, combining those parts of Robert's patch with the latest updates (i.e. it was redundant to pass the field around as a parameter). Still reviewing lazy-instantiation components.
comment:5 Changed 16 years ago by
Cc: | gulopine@gamemusic.org, jdunck@gmail.com, jbronn@gmail.com → gulopine@gamemusic.org, jdunck@gmail.com, jbronn@gmail.com, |
---|
Writability enhancement to GEOS geometries added in r5637, as requested in IRC discussion. Will move forward with integrating lazy-geom support using GEOS geometries and Robert's patch.
comment:6 Changed 16 years ago by
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
Triage Stage: | Unreviewed → Accepted |
Added support in #5657. Great job Robert, this is truly an excellent enhancement -- sorry for the delay.
hmm, there is extra code in there to allow creation of NULL fields. That should probably be a separate pre-patch.