如何用Geopandas、Shapely提取LineString分割圆间阴影区域的坐标?
用Geopandas和Shapely提取分割阴影区域坐标
核心思路
目标是提取circle1与另一圆之间被LineString分割出的子区域,步骤为:先确定环形/重叠区域,再用切割线拆分区域,最后提取每个子区域的坐标列表。
具体实现步骤
- 导入依赖库
import geopandas as gpd from shapely.geometry import Polygon, LineString, MultiPolygon from shapely.ops import split, unary_union
预处理几何对象
- 计算circle1与目标圆的目标区域(根据实际阴影位置选择):
# 阴影为circle2内部、circle1外部的环形区域 target_area = circle2.difference(circle1) # 阴影为两圆重叠区域则替换为:target_area = circle1.intersection(circle2) - 合并所有切割线为MultiLineString:
# 把line0到line18放入列表 cut_lines = [line0, line1, line2, line3, line4, line5, line6, line7, line8, line9, line10, line11, line12, line13, line14, line15, line16, line17, line18] merged_lines = unary_union(cut_lines)
- 计算circle1与目标圆的目标区域(根据实际阴影位置选择):
切割目标区域
用Shapely的split工具拆分区域:
split_result = split(target_area, merged_lines) # 拆分MultiPolygon为单个Polygon列表 sub_areas = list(split_result.geoms) if isinstance(split_result, MultiPolygon) else [split_result]
- 提取子区域坐标列表
遍历每个子区域,提取外环坐标(有内环需额外处理):
sub_area_coords = [] for area in sub_areas: # 获取多边形外环的坐标点列表 coords = list(area.exterior.coords) sub_area_coords.append(coords)
关键注意事项
- 确保所有LineString完全贯穿目标区域,否则会出现切割不彻底的情况
- 若LineString存在交叉、断裂,
unary_union会自动合并修复,保证切割线的连续性 - 针对带内环的环形区域,若需要提取内环坐标,可遍历
area.interiors获取
内容的提问来源于stack exchange,提问作者VGB
相关产品推荐
相关产品推荐

