Я переписал функцию 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