获取直线与多边形相交点的坐标

2024-01-03

我想找到一条线与多边形相交的点。我使用凹轮廓计算获得了这个多边形thread https://stackoverflow.com/questions/57260352/python-concave-hull-polygon-of-a-set-of-lines.

import alphashape
from shapely.geometry import LineString
import matplotlib.pyplot as plt
from descartes import PolygonPatch

points = [(17, 158),(15, 135),(38, 183),(43, 19),(93, 88),(96, 140),(149, 163),(128, 248),(216, 265),(248, 210),(223, 167),(256, 151),(331, 214),(340, 187),(316, 53),(298, 35),(182, 0),(121, 42)]
points = np.array(points)

alpha = 0.99 * alphashape.optimizealpha(points)
hull = alphashape.alphashape(points, alpha)
hull_pts = hull.exterior.coords.xy
path = PolygonPatch(hull, fill=False, color='green')
print(path.contains_point([128,248]))

fig, ax = plt.subplots()
ax.scatter(hull_pts[0], hull_pts[1], color='red')
ax.scatter(points[:,0], points[:,1], color='red')

p = np.array([[350, 100],[0, 100]])
ax.plot(p[:, 0], p[:, 1], color='blue')
ax.add_patch(path)

到目前为止,我尝试用以下命令定义一条线:

l = LineString(p)
inters = l.intersection(hull)

but inters.xy返回 NotImplemented 错误,因此我不确定如何获取线与多边形交叉点的坐标。


交集返回一个MultilineString,这是一个奇特的词,表示列表LineStrings。我们可以从每个线串中检索坐标,例如:

import alphashape
from shapely.geometry import LineString
import matplotlib.pyplot as plt
import numpy as np

#replicating your example
fig, ax = plt.subplots()

line_xy = [[350, 100],[0, 120]]
points = np.asarray([(17, 158),(15, 135),(38, 183),(43, 19),(93, 88),(96, 140),(149, 163),(128, 248),(216, 265),(248, 210),(223, 167),(256, 151),(331, 214),(340, 187),(316, 53),(298, 35),(182, 0),(121, 42)])

alpha = 0.99 * alphashape.optimizealpha(points)
hull = alphashape.alphashape(points, alpha)
hull_pts = hull.exterior.coords.xy

p = LineString(line_xy)

ax.plot(*hull_pts, c="green")
ax.scatter(points[:,0], points[:,1], marker="o", color="red")
ax.scatter(*hull_pts, marker="s", color="red")

ax.plot(*p.coords.xy, color='blue')

#retrieving intersection 
inters = hull.intersection(p)

#checking for object type to retrieve all intersection coordinates
if inters.type == "LineString":
    coords = np.asarray([inters.coords.xy])
elif inters.type == "MultiLineString":
    coords = np.asarray([l.coords.xy for l in inters.geoms])
    
#reshaping array point coordinates into a form that does not make my head hurt
coords = coords.transpose(1, 0, 2).reshape(2, -1)
print(coords)

plt.show()

with coords[:, i]返回交点的 x-y 值i.

示例输出:

[[324.67707894 234.24811338 176.4217078   18.88111888]
 [101.44702406 106.61439352 109.91875955 118.92107892]]

奇怪的是,shapely考虑像这样的线点300, 100在船体内作为交叉点。严格来说,必须检查所有已识别的点是否位于船体多边形内。

alphashape(此处使用 1.3.1)应该更新他们的例程,因为alphashape.alphashape(points, alpha)生成错误消息ShapelyDeprecationWarning: Iteration over multi-part geometries is deprecated and will be removed in Shapely 2.0. Use the geoms property to access the constituent parts of a multi-part geometry.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取直线与多边形相交点的坐标 的相关文章

  • 使用Python开发Web应用程序

    我一直在用 python 做一些工作 但这都是针对独立应用程序的 我很想知道 python 的任何分支是否支持 Web 开发 有人还会建议一个好的教程或网站吗 我可以从中学习一些使用 python 进行 Web 开发的基础知识 既然大家都说
  • 下载 PyQt6 的 Qt Designer 并使用 pyuic6 将 .ui 文件转换为 .py 文件

    如何下载 PyQt6 的 QtDesigner 如果没有适用于 PyQt6 的 QtDesigner 我也可以使用 PyQt5 的 QtDesigner 但是如何将此 ui 文件转换为使用 PyQt6 库而不是 PyQt5 的 py 文件
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • keras加载模型错误尝试将包含17层的权重文件加载到0层的模型中

    我目前正在使用 keras 开发 vgg16 模型 我用我的一些图层微调 vgg 模型 拟合我的模型 训练 后 我保存我的模型model save name h5 可以毫无问题地保存 但是 当我尝试使用以下命令重新加载模型时load mod
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • feedparser 在脚本运行期间失败,但无法在交互式 python 控制台中重现

    当我运行 eclipse 或在 iPython 中运行脚本时 它失败了 ascii codec can t decode byte 0xe2 in position 32 ordinal not in range 128 我不知道为什么 但
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望

随机推荐

  • 使用 python panda 按月、年计算出现频率

    假设我有以下数据系列 Date Category 2014 8 Facebook 2014 8 Vimeo 2014 8 Facebook 2014 8 Facebook 2014 9 Facebook 2014 9 Orkut 2014
  • 在 PyQt5 中,我们如何获取焦点小部件的名称/对象名称?

    在我们的 PyQt5 程序中 我们多次使用 Qline Edits QcheckBox QListwidget 如何知道 我们的程序中使用的小部件有哪些小部件名称 如何获取 返回当前具有焦点的小部件的名称 用户指定的名称 正如 Heike所
  • 在 C++ 中将函数模板作为参数传递

    例如 我想从两个序列中获取最大值列表 left and right 并将结果保存在max seq 它们都是先前定义和分配的 std transform left begin left end right begin max seq begi
  • “py.test”与“pytest”命令

    The py test在我的例子中 命令失败了 而pytest运行完全正常 我使用 pytest flask 插件 platform linux Python 3 5 2 pytest 3 0 2 py 1 4 31 pluggy 0 3
  • JavaFX TableView 通过单击和自动插入行进行编辑?

    我在程序中使用了 tableview 来显示几行 这很好 我的程序用于会计 正如你所知 其中插入了大量数据 我使用了表视图 但我遇到了很多问题 问题 1 当用户想要修改值时 他将双击以编辑单元格 我希望我的用户选择任何行并开始输入 问题2
  • 如何检查MySQL中是否存在某行? (即检查 MySQL 中是否存在用户名或电子邮件)

    我需要帮助检查数据库中是否存在行 就我而言 该行包含一个电子邮件地址 我得到结果 email no longer exists email protected cdn cgi l email protection 这是我当前使用的代码 if
  • 如何在 iPhone 的 Objective-C 中本地播放视频?

    我想通过将视频存储在应用程序中来在 iPhone 上本地播放视频 我能怎么做 NSString path NSBundle mainBundle pathForResource myVideo ofType mp4 MPMoviePlaye
  • Cypress - 从 json 响应正文获取值

    我正在使用 Cypress 进行一些 API 测试 但我很难访问 JSON 响应正文中的值 但是我可以对身体进行断言 表明它正确接收了它 下面我尝试分配 JSON 主体 response body 然后从中获取 id 的值 describe
  • Excel 文件的 DictReader

    我有一个当前保存为 csv 的文件 但它最初是一个 Excel 文件 Excel 2010 其内容是这样的 Name Category Address McFood Fast Food Street 1 BurgerEmperor Fast
  • 限制网络请求

    我想执行一堆 WebRequest 但设置了可以同时启动的阈值 我遇到了这个LimitedConcurrencyTaskScheduler 示例 https msdn microsoft com en us library system t
  • WPF 数据网格文本省略号不起作用

    我有一个专栏 里面有很长的用户评论 我使用以下代码加载它
  • TabItem 绑定 WPF

    我刚刚学习 WPF 我需要一些帮助 我有一个使用 TabControl 并动态生成新选项卡的应用程序 在每个选项卡上我有一个 TextBox 现在我想向工具栏添加一个撤消按钮 该工具栏不是选项卡的一部分 类似 VisualStudio 撤消
  • 在 Groovy 中将地图与递归嵌套地图合并

    我想知道是否有人有一种简单的方法将 2 个深层嵌套地图合并在一起 例如 我想得到 a 1 animals cat blue b 2 animals dog red a 1 b 2 animals cat blue dog red 有人有简单
  • 合并重叠的数字范围

    我需要将重叠的数字范围合并为单个范围 所以我有一个包含子列表的列表 例如 83 77 103 97 82 76 101 95 78 72 97 91 72 66 89 83 63 57 78 72 53 47 65 59 41 35 50
  • Cipher 是线程安全的吗?

    很简单 一个实例可以javax crypto Cipher e g Cipher getInstance RSA 可以从多个线程中使用 或者我是否需要将多个线程粘在一个线程中ThreadLocal 就我而言 不 不是 该实例是有状态的 因此
  • 用于二维数组的 ASP.NET MVC 5 编辑器

    我有一个包含二维数组的模型 public class Matrix public ValidInt Data Range 0 8 ErrorMessage public int Width get set Range 0 8 ErrorMe
  • 宏操作符列表

    我知道宏的字符串化运算符 并且我最近了解到 连接运算符 带有字符串文字前缀的预处理器字符串化运算符 https stackoverflow com questions 29850088 preprocessor stringizing op
  • 我可以在垫子扩展行内显示另一个表格吗?

    我有一张带扩展行的垫子桌 如果我单击一行 它会展开并显示硬编码字符串 我想在展开的行内显示另一个表格 是否可以 或者 是否有任何其他技术或方法来实现我想要做的事情 我正在尝试显示给定时间段内已执行作业的列表 在主行上 我只想显示类似 01
  • 在 Spring Boot 中的 application.properties 中使用 Maven 属性

    我正在尝试将 pom xml 中的属性加载到 application properties 中 我想创建两个配置文件 dev 和 prod 以使用不同的数据库 url 我使用 Jenkins 作为 CI 在我的所有应用程序 主要是 Spri
  • 获取直线与多边形相交点的坐标

    我想找到一条线与多边形相交的点 我使用凹轮廓计算获得了这个多边形thread https stackoverflow com questions 57260352 python concave hull polygon of a set o