簡體   English   中英

根據條件計算python中兩點之間最近的鄰居的距離

[英]Calculate distance of nearest neighbor in python between two points based on criteria

我有一個數據集,其中包含小學和高中水平的學校的GPS坐標。 為了弄清楚在哪里建新學校,我需要計算每所初等小學到高等小學之間的距離以及高等小學到最近的中學之間的距離。

我正在使用python,可以就如何最好地執行此計算使用建議。 輸出應在csv中添加兩個額外的兩列。 1)應標明最近的高中,2)應標明與該高中的距離(以千米為單位)。

我有一個有效的距離函數,但是在比較一個特定行與所有其他指定行的距離時遇到問題,例如,比較一個較低的主要行1-4與所有其他主要的1-8行的距離,以及將輸出保存到新列中。

感謝這里的任何建議。

謝謝

CSV數據集的圖像

到目前為止,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

計算起來確實很復雜。 最好使用Spatialite之類的數據庫中的geos函數或本機函數。 如果使用笛卡爾空間進行計算,則會看到結果有誤,這是因為地球不是平坦的,因為使用地理空間模型很常見。 另外,如果您需要到達目標的實際距離,則必須記住,這不是直線。 您也可以使用Google Maps的api

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM