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

如何用Shapely实现点与多边形包含关系的判断及结果输出

用Shapely检测点是否属于多边形的实现方案

核心逻辑

用Shapely的Point.within()方法(或Polygon.contains())判断点与多边形的包含关系,通过循环遍历所有目标多边形,匹配到符合条件的就输出结果,遍历结束未匹配则输出不属于。

完整可运行代码

from shapely.geometry import Point, Polygon

# 1. 定义测试多边形(替换为你的实际多边形坐标)
polygons = [
    {"name": "多边形A", "coords": [(0, 0), (0, 5), (5, 5), (5, 0)]},
    {"name": "多边形B", "coords": [(6, 6), (6, 10), (10, 10), (10, 6)]}
]

# 2. 定义测试点(替换为你的实际点坐标)
test_point = Point(2, 3)

# 3. 遍历检测逻辑
found = False
for poly in polygons:
    # 构造Shapely多边形对象
    shapely_poly = Polygon(poly["coords"])
    # 判断点是否在多边形内(包含边界)
    if test_point.within(shapely_poly):
        print(f"点属于多边形:{poly['name']}")
        found = True
        # 找到匹配后可选择跳出循环,若允许多重包含则移除break
        break

if not found:
    print("点不属于多边形")

常见问题排查(针对你之前循环嵌套if失败的情况)

  • 多边形坐标格式错误:必须传入闭合的坐标序列(最后一个点可与第一个点重复,Shapely会自动闭合),格式为[(x1,y1), (x2,y2), ..., (xn,yn)]
  • 对象构造错误:必须用Point()和Polygon()构造Shapely的几何对象,不能直接用原始坐标列表判断
  • 循环逻辑问题:要设置标记变量(如上述代码的found),避免遍历所有多边形后重复输出“不属于”的结果
  • 边界判断需求:若需排除边界,可改为test_point.within(shapely_poly) and not test_point.touches(shapely_poly)

内容的提问来源于stack exchange,提问作者Victor Soares

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:45:34