Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def absorb_by_shared_perimeter(sources, targets, relative_threshold=None):
if len(sources) == 0:
return targets
if len(targets) == 0:
raise IndexError("targets must be nonempty")
inters = intersections(sources, targets, area_cutoff=None).buffer(0)
assignment = assign_to_max(inters.length)
if relative_threshold is not None:
under_threshold = (
sources.area / assignment.map(targets.area)
) < relative_threshold
assignment = assignment[under_threshold]
sources_to_absorb = GeoSeries(
sources.groupby(assignment).apply(unary_union), crs=sources.crs,
)
result = targets.union(sources_to_absorb)
# The .union call only returns the targets who had a corresponding
# source to absorb. Now we fill in all of the unchanged targets.
result = result.reindex(targets.index)