作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个地理数据框:一个包含许多线串,另一个包含许多多边形。这些直线和多边形彼此相交。我试图实现的输出是一个新的地理数据框,其中包含已在与多边形相交的任何位置处分割的链接。
简化的测试代码如下:
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')
生成下图(添加红色/绿色注释以显示涉及的各种元素):
将两条线在与 polgyon 相交的任何地方分开将产生 6 条线段(如上图中绿色标记的那样)。
理想情况下,我想要实现的输出如下所示,其中“poly_intersect”列列出了发生分割的多边形的 ID。请注意,第 2 项和第 5 项列出了两个多边形 ID,因为它们与多边形相交两次。
最佳答案
您可以通过将线条与多边形“叠加”来获取这些线串(叠加时使用“并集”操作)。但是,它不会给出您为“poly_intersect”列所描述的确切预期结果:
>> geopandas.overlay(gdf_links, gdf_poly, how='union').explode().reset_index(drop=True)
linkID polyID geometry
0 1 100 LINESTRING (2 2, 3 3)
1 2 200 LINESTRING (15 10, 18 10)
2 1 NaN LINESTRING (0 0, 2 2)
3 1 NaN LINESTRING (3 3, 10 10)
4 2 NaN LINESTRING (10 10, 15 10)
5 2 NaN LINESTRING (18 10, 20 10)
一些评论:
explode()
,因为 overlay()
操作会为与多边形相交之前和之后的一个线串部分返回 MultiLineStrings。爆炸将 split 那些“多”几何体。因此,如果您还想需要该信息(完整的“poly_intersect”列),您可以进行一些后续分析,检查哪个线串正在接触哪个多边形。
关于python - Geopandas - 在与多边形相交处分割线,在新链接属性中保留多边形 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60794994/
我是一名优秀的程序员,十分优秀!