有一条折线,其中折线的顶点列表为[[x1,y1),(x2,y2),(x3,y3),…]和一个点(x,y)。在Shapely中,geometry1.distance(geometry2)
返回两个几何之间的最短距离。
>>> from shapely.geometry import LineString, Point
>>> line = LineString([(0, 0), (5, 7), (12, 6)]) # geometry2
>>> list(line.coords)
[(0.0, 0.0), (5.0, 7.0), (12.0, 6.0)]
>>> p = Point(4,8) # geometry1
>>> list(p.coords)
[(4.0, 8.0)]
>>> p.distance(line)
1.4142135623730951
但是我还需要找到最接近点(x,y)的线上的点的坐标。在上面的示例中,这是LineString
距离1.4142135623730951单位的对象上的点的坐标Point(4,8)
。distance()
计算距离时,该方法应具有坐标。有什么方法可以从此方法返回它吗?
您正在描述的GIS术语是线性参考,Shapely拥有这些方法。
# Length along line that is closest to the point
print(line.project(p))
# Now combine with interpolated point on line
np = line.interpolate(line.project(p))
print(np) # POINT (5 7)
另一种方法是使用nearest_points
:
from shapely.ops import nearest_points
np = nearest_points(line, p)[0]
print(np) # POINT (5 7)
它提供与线性参照技术相同的答案,但可以从更复杂的几何输入(例如两个多边形)中确定最接近的点对。
问题内容: 给定两个排序的整数数组和,以及一个整数,我必须找到这样的数组: 并尽可能大。 我能想到的最佳解决方案是 O ( n log n )时间,从第一个数组中取出每个整数,然后找到“ ” 的下限。 有人可以建议我做一个更好的方法(也许是在O( n )时间)吗? 问题答案: 想一想,然后您可能会问自己: “是否有必要每次都在排序的b数组中搜索a []的连续值?”
问题内容: 我有两个2d numpy数组:x_array包含x方向上的位置信息,y_array包含y方向上的位置。 然后,我有一长串x,y点。 对于列表中的每个点,我需要找到最接近该点的位置(在数组中指定)的数组索引。 我已经根据这个问题天真的产生了一些有效的代码: 在numpy数组中找到最接近的值 即 我正在大型数据集上执行此操作,并且真的想加快速度。谁能优化这个? 谢谢。 更新:根据@silv
形状多边形的例子
问题内容: 我有一个由我从Google Maps Directions服务获得的latlng绘制的多义线。现在,我想在折线上找到最接近给定点的点。 (对我而言)最明显的方法是通过折线上的所有点进行循环并找到它们与给定点之间的距离,但是这种方法效率不高,因为折线上的点可能很大。 我很高兴听到这样做的其他选择。提前致谢。 问题答案: 它正在找到直线上最接近鼠标的点。另请注意,这是一个Google Ma
我需要将两个数据集与CLOSE时间戳连接起来。第一个数据集是来自移动应用程序的日记数据集: 在这里: 第二个数据集是来自加速度计日志的数据集,显示移动(=INVH)或空闲(=NIVH): 在这里: 我需要根据时间戳字段之间的时间差连接两个数据帧。例如,在df1上留下join,以查看应用程序日志数据如何与实际加速度计日志一致。简单的左连接在这里不起作用,因为在大多数情况下有一个滞后时间。所以我的问题
问题内容: 我想知道是否有可能找到一个最接近的元素的元素 ,是不是 在那里。 例如,如果我们具有[1,3,6,7]值,并且正在寻找最接近4的元素,则它应返回3,因为3是数组中的最大数字,小于4。 我希望这是有道理的,因为英语不是我的母语。 问题答案: 如果数组已排序,则可以在以下位置进行修改的二进制搜索: