'DRY routine for setting up a GeoQuerySet method that attaches a
Geometry attribute and takes a Geoemtry parameter.  This is used
for geometry set-like operations (e.g., intersection, difference,
union, sym_difference).'

def _geomset_attribute(self, func, geom, tolerance=0.05, **kwargs):

    s = {'geom_args': ('geom',), 'select_field': GeomField(), 'procedure_fmt': '%(geo_col)s,%(geom)s', 'procedure_args': {'geom': geom}}
    if connections[self.db].ops.oracle:
        s['procedure_fmt'] += ',%(tolerance)s'
        s['procedure_args']['tolerance'] = tolerance
    return self._spatial_attribute(func, s, **kwargs)
