Как можно быстрее получить начальный и конечный узлы от ближайшего ребра до больших точек? - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть DataFrame, который содержит два столбца (широта, долгота) для 30000 точек следующим образом:

enter image description here

Мне нужно получить начальный узел и конецузел ближайшего ребра к каждой точке.

Я использовал следующий код для образца (содержащий только 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 точек:

Результирующий фрейм данных:

enter image description here

Я попытался использовать рекомендацию @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)

Я применил предыдущую функцию, но это занимает много времени без какого-либо результата.

1 Ответ

1 голос
/ 10 апреля 2019

Вы можете использовать ox.get_nearest_edges с kdtree для быстрого поиска ближайших ребер в наборе точек xy: https://osmnx.readthedocs.io/en/stable/osmnx.html#osmnx.utils.get_nearest_edges

...