You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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)
      
  • 切割目标区域
    用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:28:23