@has_gis<EOL><INDENT>def construct_difference(self, parent, excluded, name=None, fp=None):<DEDENT>
assert parent in self.locations, "<STR_LIT>".format(parent)<EOL>for location in excluded:<EOL><INDENT>assert location in self.locations, "<STR_LIT>".format(location)<EOL><DEDENT>included = set(self.data[parent]).difference(<EOL>reduce(set.union, [set(self.data[loc]) for loc in excluded])<EOL>)<EOL>geom = _union(included)<EOL>if fp:<EOL><INDENT>self.write_geoms_to_file(fp, [geom], [name] if name else None)<EOL>return fp<EOL><DEDENT>else:<EOL><INDENT>return geom<EOL><DEDENT>
Construct geometry from ``parent`` without the regions in ``excluded`` and optionally write to filepath ``fp``.

        ``excluded`` must be an iterable of location strings (not face ids).