根据条件计算python中两点之间最近的邻居的距离

时间:2019-02-25 10:25:39

标签: python gps distance

我有一个数据集,该数据集具有小学和中学级别学校的GPS坐标。为了弄清楚在哪里建新学校,我需要计算每所初等学校到高等学校之间的距离以及高等小学到最近的中学之间的距离。

我正在使用python,可以就如何最好地进行此计算使用建议。输出应在csv中添加两个额外的两列。 1)应标明最近的高中,2)应标明与该高中的距离,以公里为单位。

我有一个有效的距离函数,但是在比较一个特定行与所有其他指定行的距离时遇到问题,例如比较一个较低的主要行1-4与所有其他主要的1-8行的距离,并将输出保存到新列中。

在这里感谢任何建议。

谢谢

Image of csv dataset

到目前为止,

EDIT2-工作代码:

该算法使用一些较小的样本数据运行,但是扩展性不好。我尝试使用的60,000个数据点遇到内存错误

    # Algorithm for calculating the closest upper primary school for lower primary schools. 

for i, row in df.iterrows():
    listy = 0
    school = []
    if row['LS_Type'] == 'Primary (1-4)':
        a = row['Northing']
        b = row['Easting']
        LS_ID = row['LS_ID']
        for j, row2 in df.iterrows():
            if row2['LS_Type'] == 'Primary (1-8)':
                dist_km = distance(a,b, df.Northing[j], df.Easting[j])
                if (listy == 0):
                    listy = dist_km
                    school.append([df.LS_Name[j], df.LS_ID[j]])
                else:
                    if dist_km < listy:
                        listy = dist_km
                        school[0] = [df.LS_Name[j], int(df.LS_ID[j])]
        df['dist_up_prim'][i] = listy
        df["closest_up_prim"][i] = school[0]

    else:
        df['dist_up_prim'][i] = 0

1 个答案:

答案 0 :(得分:0)

计算起来确实很复杂。最好使用Spatialite之类的数据库中的geos函数或本机函数。如果使用笛卡尔空间进行计算,则会看到结果有误,这是因为地球不是平坦的,因为使用地理空间模型很常见。另外,如果您需要到达目标的实际距离,则必须记住,这不是直线。您也可以使用Google Maps的API