У меня есть DataFrame, который содержит два столбца (широта, долгота) для 30000 точек следующим образом:
Мне нужно получить начальный узел и конецузел ближайшего ребра к каждой точке.
Я использовал следующий код для образца (содержащий только 5 точек), используя метод из библиотеки osmnx (https://osmnx.readthedocs.io/en/stable/search.html?q=get_nearest_edge&check_keywords=yes&area=default#):
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)
Несмотря на то, что я получил результирующий фрейм данных, потребовалось много времени для вычисления 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)
Я применил предыдущую функцию, но это занимает много времени без какого-либо результата.