Python 查找距离直线最近的点

Python 查找距离直线最近的点,python,pandas,distance,Python,Pandas,Distance,我有一个数据集,我试图找出一个点是否在一条线上,如果不在,离那条线上最近的点是什么 如果点在直线上,则我希望该点与直线的端点匹配,如果不是,则希望最近的点与端点配对 目前,如果点正好位于直线上,我的prorgram将返回,但是,我不确定如何获得与直线稍有不同的点来配对 这是我的密码: def isOnLine(x1,y1,x2,y2,x3,y3): float(x1) float(x2) float(x3) float(y1) float(y2) float(y3) dist = mt.sqrt

我有一个数据集,我试图找出一个点是否在一条线上,如果不在,离那条线上最近的点是什么

如果点在直线上,则我希望该点与直线的端点匹配,如果不是,则希望最近的点与端点配对

目前,如果点正好位于直线上,我的prorgram将返回,但是,我不确定如何获得与直线稍有不同的点来配对

这是我的密码:

def isOnLine(x1,y1,x2,y2,x3,y3):
float(x1)
float(x2)
float(x3)
float(y1)
float(y2)
float(y3)
dist = mt.sqrt((x1-x3)**2+(y1-y3)**2)
betweenDist = mt.sqrt((x1-x2)**2+(y1-y2)**2)+mt.sqrt((x2-x3)**2+(y2-y3)**2)
if(betweenDist == dist):
    return True
elif(dist-.000000000002<= betweenDist<=dist+.000000000002):
    return True
else:
    return False

matches = pd.DataFrame([])

for i in data1.itertuples():
    for j in data2.itertuples():
        for k in data3.itertuples():
            x1 = i.x
            y1 = i.y
            x2 = j.x
            y2 = j.y
            x3 = k.x
            y3 = k.y

            if(isOnLine(x1,y1,x2,y2,x3,y3)==True):
                print('perfect match')
                print(i.Index,j.Index,k.Index)
                currMatches = pd.DataFrame([i.Index,j.Index,k.Index])
                currMatches = currMatches.transpose()
                matches = matches.append([currMatches])
最佳输出的第一位数字应为1-500,无重复数字


Python中是否已经有函数来执行此计算?或者有一个数学公式可以应用吗?

我不确定是否完全理解您的代码 重点是什么,代码中的行是什么

但可能有您正在寻找的功能:

例如:
closest_index=spatial.distance.cdist([point],line.).argmin()

将为您提供距该点最近的直线索引

在代码的最后部分可能会有所帮助…您必须计算出一个点距每条直线上最近点的距离。将值存储在key val的dict中,其中key是点,val是距离。然后对这些值进行排序,使最小距离位于第一位,并获取该值的关键点(也称为点)。您只需获得与该值匹配的第一个键。顺便问一下:您的距离计算正确吗?这可能是你必须自己写的东西。不会有任何python函数来执行这种特定的操作,尽管如果您进行一些搜索,您可能会发现一个可用的库?您能提供一个输入/输出示例吗?
elif(dist-.000000000002<= betweenDist<=dist+.000000000002):
    return True
1,609,1171
2,727,1295
7,571,1064
8,503,1009
11,585,1103
12,680,1395
14,806,1365
15,502,1002
15,502,1152
21,784,1129