Реализуйте метод 'haversine' в функции get_nearest_edge () в OSMNx и возвращайте расстояние в метрах - PullRequest
0 голосов
/ 21 апреля 2020

Я переписал функцию get_nearest_edge (), встроенную в функцию OSMNx. Однако это возвращает расстояние в градусах, а не в метрах. Я мог бы просто умножить его на 111139, но это отклонение от ожидаемого значения 2 метра. Мне нужно быть очень точным. Как я могу реализовать этот метод, чтобы он использовал метод «haversine» для расчета расстояния?

import osmnx as ox

def get_nearest_edge(G, point, return_dist=False):
    start_time = time.time()

    gdf = ox.graph_to_gdfs(G, nodes=False, fill_edge_geometry=True)
    graph_edges = gdf[["geometry", "u", "v"]].values.tolist()

    edges_with_distances = [
        (
            graph_edge,
            ox.Point(tuple(reversed(point))).distance(graph_edge[0])
        )
        for graph_edge in graph_edges
    ]

    edges_with_distances = sorted(edges_with_distances, key=lambda x: x[1])
    closest_edge_to_point, edge_dist = edges_with_distances[0]

    geometry, u, v = closest_edge_to_point

    ox.log('Found nearest edge ({}) to point {} in {:,.2f} seconds'.format((u, v), point, time.time() - start_time))

    if return_dist:
        return geometry, u, v, edge_dist
    else:
        return geometry, u, v
...