У меня есть два геоданных: один содержит много строк, а другой содержит много полигонов. Эти линии и полигоны пересекаются друг с другом. Вывод, который я пытаюсь получить, - это новый геоданный, содержащий ссылки, которые были разбиты в любом месте, где они пересекаются с полигоном.
Упрощенный тестовый код выглядит следующим образом:
import geopandas
from shapely.geometry import Polygon, LineString
#Create geodataframe containing 2 links:
linkID = ['1','2']
link_geom = [LineString([(0, 0), (10, 10)]),LineString([(10, 10), (20, 10)])]
a = {'linkID':linkID,'geometry':link_geom}
gdf_links = geopandas.GeoDataFrame(a)
#Create geodataframe containing 2 polygons:
polyID = ['100','200']
poly_geom = [Polygon([(2, 1), (2, 3), (4, 3), (4, 1)]),Polygon([(15, 7), (15, 13), (18, 13), (18, 7)])]
b = {'polyID':polyID,'geometry':poly_geom}
gdf_poly = geopandas.GeoDataFrame(b)
Вы можете увидеть, что линии пересекают полигоны, запустив следующий код:
links = gdf_links.unary_union
polys = gdf_poly.unary_union
geopandas.GeoSeries([links,polys]).plot(cmap='tab10')
, который генерирует следующее цифра (аннотация добавлена красным / зеленым цветом для отображения различных элементов):
Разделение двух линий, где бы они ни пересекались с полигоном, приведет к 6 сегменты (как отмечено зеленым цветом на рисунке выше).
В идеале, вывод, который я хотел бы получить, выглядит примерно так, как показано ниже, с колонкой 'poly_intersect', в которой перечислены идентификаторы многоугольника, в котором разделение имеет произошло. Обратите внимание, что пункты 2 и 5 содержат два идентификатора многоугольника, потому что они дважды пересекают многоугольник.