numpy 使用两组坐标点,在python中查找彼此最接近的点

zbdgwd5y  于 2022-11-10  发布在  Python
关注(0)|答案(1)|浏览(178)

我有两个DataFrame(df1df2),大小不同,但总体列相同。两者都有时间戳和经纬度点。由于收集数据的频率不同,许多点的时间戳和坐标都是相同的。以下是DataFrame的一个示例:
Time_local|Lat|Long
-|-|
2021-09-08 12:56:32-04:00|37.1455|-85.0555
2021-09-08 12:56:32-04:00|37.1455|-85.0555
2021-09-08 12:56:32-04:00|37.1455|-85.0555
|.....................|.....|.|
第二个DataFrame是相同的;但是,在整个过程中,一些坐标点存在差异。我要选择第一个 Dataframe (df1)中最接近第二个 Dataframe (df2)中的点的点;例如,如果我有以下坐标基点(37.1455, -85.0555),然后选择(37.1454, -85.0555), (37.1454, -85.0556), (37.1453, -85.0556),则选择的最近点将是(37.1455, -85.0555)
在Python中有没有一个函数可以很容易地做到这一点?

qlzsbp2j

qlzsbp2j1#

是的,我们这里需要的是一些数学知识。坐标的distance公式将对我们有所帮助。公式:1

这里,x2表示第二个值,x1表示第一个值。y也是如此。
将其放入代码*(笛卡尔平面)*中:

points = [(37.1454, -85.0555), (37.1454, -85.0556), (37.1453, -85.0556)]
origin = (37.1455, -85.0555)

def distance(cord1,cord2):
    x1, y1 = cord1
    x2, y2 = cord2
    res = ((x2 - x1)**2 + (y2 - y1)**2)**0.5 # Raising to 0.5 is nothing but square root
    return res

def closest_point(origin,points):
    distances = [distance(origin, point) for point in points]
    return points[distances.index(min(distances))] # Fetches the index from points based on smallest value
print(closest_point(origin,points))

对于平面*(其中只有y坐标重要)*:

points = [(37.1454, -85.0555), (37.1454, -85.0556), (37.1453, -85.0556)]
origin = (37.1455, -85.0555)

def closest_point(origin,points):
    distances = [origin[1]-point[1] for point in points]
    return points[distances.index(min(distances))]
print(closest_point(origin,points))

相关问题