pandas - 如何更快地获得离大点最近的边的开始和结束节点?
问题描述
我有 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)
我应用了以前的功能,但它需要很多时间而没有任何结果。
解决方案
您可以使用ox.get_nearest_edges
kdtree 快速查找一组 xy 点的最近边:https ://osmnx.readthedocs.io/en/stable/osmnx.html#osmnx.utils.get_nearest_edges
推荐阅读
- arrays - php如何显示今天和未来四天
- python - 如何使用python根据时间对Y轴进行排序?
- android - Android Accessibility Service 未在 oreo 中收到通知
- wso2 - WSO2 APIM 约束违反 CON_APP_KEY
- angular - 突出显示剑道网格的第一行
- java - splunk 检查消息是否包含某些字符串
- javascript - 从java中的base64字符串解码表情符号
- angular - Angular 2+ 中的 $rootScope.new()
- php - php 检索会话变量以限制对页面的访问
- android - React Native:生成发布构建 APK 错误:app:mergeReleaseAssets FAILED