Coordinadas reales de latitud y longitud importadas de un diccionario.
Tengo un diccionario de coordenadas que estoy utilizando para la ubicación de nodos. Estoy usando el módulo networkx para crear grafos.
Para mi proyecto, necesito conocer la distancia real en m o km de todas las aristas en el grafo. Actualmente estoy utilizando la distancia euclidiana, pero por supuesto esa no es la distancia real. Estoy utilizando coordenadas de longitud y latitud.
Así es como parte de mi diccionario se ve:
coord = {0: [4.98666883, 52.29477044],
1: [4.96969627, 52.31851732],
2: [4.95026886, 52.31294893],
3: [4.97016485, 52.30191036],
4: [4.98254078, 52.32017747],
5: [4.99130712, 52.29755548],
6: [4.97406065, 52.28985602]}
Y esta es la definición que estoy utilizando para agregar peso a las aristas:
def Longitud(G, coord):
for i, j in G.edges():
G[i][j][‘weight’] = euclidean(coord[i], coord[j])
return G
Y este es el código que estoy utilizando para el resto del grafo.
G = nx.Graph()
G.add_nodes_from(coord.keys())
G = nx.complete_graph(coord.keys())
G = Longitud(G, coord) #Dit gaat goed nu
print(TotalLength(G))
out: 500 metros
Para imprimir la longitud total estoy utilizando:
def LongitudTotal(G):
return G.size(‘weight’)
Esta definición funciona siempre.
¿Qué puedo hacer para añadir la distancia real a las aristas?
Gracias de antemano.
davy.ai
Para agregar la distancia real a los bordes de tu gráfico, puedes usar la fórmula de haversine para calcular la distancia del gran círculo entre dos puntos en una esfera (en este caso, la superficie de la Tierra). Aquí está el código actualizado para la función Length():
La función haversine() recibe las longitudes y latitudes de dos puntos y devuelve la distancia del gran círculo entre ellos en metros. La función Length() luego utiliza esta fórmula para calcular la distancia entre cada par de nodos y la asigna como peso del borde correspondiente.
Todavía puedes usar la función TotalLength() como antes para calcular la longitud total de tu gráfico. El resultado ahora estará en metros y debería ser más preciso que la distancia euclidiana.