沿最近的边获取最近的节点
Get nearest node along nearest edge
我在这个 post https://github.com/gboeing/osmnx/issues/269 中关注 gboeing 的回复并使用 osmnx Docker 图像,但我收到错误 AttributeError: module 'osmnx' has no attribute 'great_circle_vec'
Docker 似乎有最新的 0.16 osmnx 版本,当前的文档没有提到这个函数被弃用或私有。建议的代码已有一年半的历史,所以可能有些地方发生了变化。有没有人有当前的解决方案来沿着最近的边缘获取最近的节点?[=12=]
使用osmnx.distance.great_circle_vec(args)
https://osmnx.readthedocs.io/en/stable/osmnx.html#osmnx.distance.great_circle_vec
如果有人感兴趣,我能够根据原始 github 问题编写一些代码以获得最近边上的最近 lat/lng。它看起来像这样:
def nearest_point_on_edge(G, lat, lng, edge):
''' Return nearest point to lat/lng on edge
'''
orig_point = Point(lng, lat)
a_point = Point(G.nodes[edge[0]]['x'], G.nodes[edge[0]]['y'])
b_point = Point(G.nodes[edge[1]]['x'], G.nodes[edge[1]]['y'])
a_latlng = (G.nodes[edge[0]]['y'], G.nodes[edge[0]]['x'])
b_latlng = (G.nodes[edge[1]]['y'], G.nodes[edge[1]]['x'])
dist_ab = LineString([a_point, b_point]).project(orig_point)
projected_orig_point = list(LineString([a_point, b_point]).interpolate(dist_ab).coords)
nearest_latlng = (projected_orig_point[0][1], projected_orig_point[0][0])
return nearest_latlng
我在这个 post https://github.com/gboeing/osmnx/issues/269 中关注 gboeing 的回复并使用 osmnx Docker 图像,但我收到错误 AttributeError: module 'osmnx' has no attribute 'great_circle_vec'
Docker 似乎有最新的 0.16 osmnx 版本,当前的文档没有提到这个函数被弃用或私有。建议的代码已有一年半的历史,所以可能有些地方发生了变化。有没有人有当前的解决方案来沿着最近的边缘获取最近的节点?[=12=]
使用osmnx.distance.great_circle_vec(args)
https://osmnx.readthedocs.io/en/stable/osmnx.html#osmnx.distance.great_circle_vec
如果有人感兴趣,我能够根据原始 github 问题编写一些代码以获得最近边上的最近 lat/lng。它看起来像这样:
def nearest_point_on_edge(G, lat, lng, edge):
''' Return nearest point to lat/lng on edge
'''
orig_point = Point(lng, lat)
a_point = Point(G.nodes[edge[0]]['x'], G.nodes[edge[0]]['y'])
b_point = Point(G.nodes[edge[1]]['x'], G.nodes[edge[1]]['y'])
a_latlng = (G.nodes[edge[0]]['y'], G.nodes[edge[0]]['x'])
b_latlng = (G.nodes[edge[1]]['y'], G.nodes[edge[1]]['x'])
dist_ab = LineString([a_point, b_point]).project(orig_point)
projected_orig_point = list(LineString([a_point, b_point]).interpolate(dist_ab).coords)
nearest_latlng = (projected_orig_point[0][1], projected_orig_point[0][0])
return nearest_latlng