找到最近的一条线

时间:2018-04-18 06:20:03

标签: 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((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])

你可以看到我在这里尝试定义一个范围的位置,在这里可以接受值:

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

最佳输出应该有1-500作为第一个数字,没有重复数字。

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

1 个答案:

答案 0 :(得分:0)

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

scipy.spatial.distance可能包含您正在寻找的功能:

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

给你最接近的线索引