I am using the GEOS/OGR library in Python. I have files full of geometries that overlap, and I want to convert these to files of geometries that don't overlap.
The way I have been approaching this is to just read in all of the geometries from a file, and then looping over each geometry and taking the Union() of that with all of the previous geometries. So something like:
def dedup(geometries): """Return a geometry that is the union of all geometries.""" if not geometries: return None current_union = geometries[0].Clone() for g in geometries: current_union = current_union.Union(g).Clone() return current_union Most of the time this appears to work, but occasionally Union() will return None. My debugging reveals that under these cases:
Thanks much in advance!
أكثر...
The way I have been approaching this is to just read in all of the geometries from a file, and then looping over each geometry and taking the Union() of that with all of the previous geometries. So something like:
def dedup(geometries): """Return a geometry that is the union of all geometries.""" if not geometries: return None current_union = geometries[0].Clone() for g in geometries: current_union = current_union.Union(g).Clone() return current_union Most of the time this appears to work, but occasionally Union() will return None. My debugging reveals that under these cases:
- IsValid() returns true for both g and current_union
- Intersects() return true between g and current_union
- GetGeometryCount() for current_union typically returns a number over 100.
- I suspect the error might be some kind of memory issue because it seems like the error "moves" depending on context. Ie if I say run this on files 1-100, it might crash on file 20, but if I say run it on files 20-100, it might crash on file 40. I never use Destroy() on any geometries. Task Manager does not show me running out of memory though.
Thanks much in advance!
أكثر...