0

我有 DataFrame 包含两列(纬度,经度)30000 点,如下所示:

在此处输入图像描述

我需要获取到每个点最近的边的开始节​​点和结束节点。

我使用 osmnx 库中的方法(https://osmnx.readthedocs.io/en/stable/search.html?q=get_nearest_edge&check_keywords=yes&area=default# )将以下代码用于示例(仅包含 5 个点):

def find_nearest_edges(row):
    near_edge=ox.get_nearest_edge(G,(row['LATITUDE'],row['LONGITUDE']))
    start=intr_stp_nodes[1]
    end=intr_stp_nodes[2]
    return pd.Series([start,  end])
sample_df[['start','end']]=sample_df.apply(find_nearest_edges,axis=1)

虽然我得到了 Resulting 数据框,但计算 5 个点还是花了很多时间:

结果数据框:

在此处输入图像描述

我尝试使用@gboeing 推荐并创建下一个函数:

def find_nearest_edges(row): 
    shp,start,end=ox.get_nearest_edges(G,row['LONGITUDE'],row['LATITUDE'],method='kdtree',dist=0.0001) 
    return pd.Series([start, end]) 

sample_df[['start','end']]=sample_df.apply(find_nearest_edges,axis=1)

我应用了以前的功能,但它需要很多时间而没有任何结果。

4

1 回答 1

1

您可以使用ox.get_nearest_edgeskdtree 快速查找一组 xy 点的最近边:https ://osmnx.readthedocs.io/en/stable/osmnx.html#osmnx.utils.get_nearest_edges

于 2019-04-09T21:36:15.500 回答