Это определенно не самый быстрый способ, так как это простой итератор, но если ваши данные не велики, это может сработать.
import geopandas as gpd
from shapely.geometry import Polygon
b0 = Polygon([(-1,-1), (1,-1), (1,1), (-1,1)])
a1 = Polygon([(1.5,0.2), (2.5,0.2), (2.5,1.2), (1.5,1.2)])
a2 = Polygon([(0,0), (2,0), (2,2), (0,2)])
a3 = Polygon([(1.5,-1), (2.5,-1), (2.5,-0.2), (1.5,-0.2)])
series = gpd.GeoSeries([b0, a1, a2, a3])
results = {}
for poly in series.iteritems():
results[poly[0]] = []
for poly2 in series.drop(poly[0]).iteritems():
if poly[1].overlaps(poly2[1]):
results[poly[0]].append(poly2[0])
Это даст вам контроль над вашими ценностями.
{0: [2], 1: [2], 2: [0, 1], 3: []}
Однако имейте в виду, что он проверяет A-> B, а затем B-> A и что он также проверяет полигоны, даже если они явно находятся далеко. Чтобы ускорить его, вы можете использовать пространственный индекс rtree, чтобы проверять только тех, кто может перекрываться, вместо проверки каждого многоугольника друг на друга (дважды).