沿最近的边获取最近的节点

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