Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
"""Computes all of the nonempty intersections between two sets of geometries.
The returned `~geopandas.GeoSeries` will have a MultiIndex, where the geometry
at index *(i, j)* is the intersection of ``sources[i]`` and ``targets[j]``
(if it is not empty).
:param sources: geometries
:type sources: :class:`~geopandas.GeoSeries` or :class:`~geopandas.GeoDataFrame`
:param targets: geometries
:type targets: :class:`~geopandas.GeoSeries` or :class:`~geopandas.GeoDataFrame`
:rtype: :class:`~geopandas.GeoSeries`
:param area_cutoff: (optional) if provided, only return intersections with
area greater than ``area_cutoff``
:type area_cutoff: Number or None
"""
reindexed_sources = get_geometries_with_range_index(sources)
reindexed_targets = get_geometries_with_range_index(targets)
spatially_indexed_sources = IndexedGeometries(reindexed_sources)
records = [
# Flip i, j to j, i so that the index is ["source", "target"]
(sources.index[j], targets.index[i], geometry)
for i, j, geometry in spatially_indexed_sources.enumerate_intersections(
reindexed_targets
)
]
df = GeoDataFrame.from_records(records, columns=["source", "target", "geometry"])
geometries = df.set_index(["source", "target"]).geometry
geometries.sort_index(inplace=True)
geometries.crs = sources.crs
if area_cutoff is not None:
geometries = geometries[geometries.area > area_cutoff]
def intersections(sources, targets, area_cutoff=None):
"""Computes all of the nonempty intersections between two sets of geometries.
The returned `~geopandas.GeoSeries` will have a MultiIndex, where the geometry
at index *(i, j)* is the intersection of ``sources[i]`` and ``targets[j]``
(if it is not empty).
:param sources: geometries
:type sources: :class:`~geopandas.GeoSeries` or :class:`~geopandas.GeoDataFrame`
:param targets: geometries
:type targets: :class:`~geopandas.GeoSeries` or :class:`~geopandas.GeoDataFrame`
:rtype: :class:`~geopandas.GeoSeries`
:param area_cutoff: (optional) if provided, only return intersections with
area greater than ``area_cutoff``
:type area_cutoff: Number or None
"""
reindexed_sources = get_geometries_with_range_index(sources)
reindexed_targets = get_geometries_with_range_index(targets)
spatially_indexed_sources = IndexedGeometries(reindexed_sources)
records = [
# Flip i, j to j, i so that the index is ["source", "target"]
(sources.index[j], targets.index[i], geometry)
for i, j, geometry in spatially_indexed_sources.enumerate_intersections(
reindexed_targets
)
]
df = GeoDataFrame.from_records(records, columns=["source", "target", "geometry"])
geometries = df.set_index(["source", "target"]).geometry
geometries.sort_index(inplace=True)
geometries.crs = sources.crs
if area_cutoff is not None: