Hay 3 escenarios probables para los que estoy tratando de capturar distancias cercanas:
- Una estación de metro de intercambio, que tiene 2 o más estaciones vecinas. Es decir, la estación en cuestión conecta 2 o más rutas principales y tiene 2 o más estaciones vecinas.
- Una estación de metro terminal, que tiene solo 1 estación vecina. Esta es la estación al final de la línea.
- Una estación de metro en línea, que tiene exactamente 2 estaciones vecinas, una de cada aproximación.
Estoy tratando de calcular un valor que se podría llamar "distancia promedio entre estaciones vecinas"
El arcpy.GenerateNearTable_analysis()
puede manejar dos opciones: Distancia a la entidad más cercana, y la distancia entre todas las funciones.
¿Alguien tiene un método inteligente para resolver estos escenarios? Tenga en cuenta que cada estación se designa como "Intercambio", "Terminal" o "En línea" en la tabla de atributos bajo el campo "Tipo de estación".
Adicional:
Aquí hay un código psuedo basado en la sugerencia de @ whuber en los comentarios. Todavía no tengo tiempo para resolver esto, así que si alguien quiere apuñalarlo, ¡se lo recompensará con una marca de verificación! ;)
He echado un vistazo a la biblioteca NetworkX y parece funcionar como quiero.
Dado el gráfico:
A —― B ―― C ―― D
|
E
así como los nodos y enlaces:
Nodes = ["A", "B", "C", "D", "E"]
Links = [("A", "B"), ("B", "C"), ("C", "D"), ("B", "E")]
def myFunction(node):
identify the links that node belongs to
count the number of links
calculate the total link lengths
divide the total link lengths by the number of links
return someValue
Respuestas:
Creo que su problema, como @whuber, sugirió que se representaría mejor en una Matriz de adyacencia . Es decir, si tiene el tiempo y la inclinación para comprender la teoría detrás de esto, en lugar de confiar en un paquete para hacer el trabajo por usted.
Para un gráfico dado G, con vértices de {v 1 , v 2 , ..., v n } donde n es el número de vértices, debe crear una matriz de tamaño M i, j donde i = ny j = norte. Cada vértice se representa en la i- ésima fila por el número de caminos encontrados a las vértices adyacentes en la j- ésima columna.
Ejemplo a continuación:
Dada esta forma ligeramente compleja de representar sus datos relativamente simples, necesitará numerar sus vértices de manera arbitraria, no representativa de ningún orden lógico.
NOTA: Suponiendo que no haya bucles de estación sobre sí misma, una fila k nunca tendrá un valor distinto de 0 en la columna k th Todas las definiciones a continuación suponen que esto es cierto
NOTA: Suponiendo que no hay líneas concurrentes entre la misma estación, todos los ejemplos a continuación suponen que el valor de una celda solo será 1 o 0. El ejemplo anterior también supone que se permite el desplazamiento bidireccional.
Reglas para identificar categorías de estaciones:
1. Terminal
Un terminal se identificaría por una fila k que tiene una sola columna que no tiene un valor de 0, y cuyo valor es 1. Ver vértices 1, 2 y 3 en el ejemplo 1 anterior.
2. Unión
Una unión se identificaría mediante una fila k que tiene más de dos columnas que contienen un valor de 1. Vea el vértice 4 en el ejemplo 1 anterior, alternativamente todos los vértices en el ejemplo 3 anterior.
3. en línea
Una estación en línea se significa teniendo exactamente 2 columnas en una fila número k donde el valor es 1. Vea todas las vértices en el ejemplo 2 anterior. (Ignore el hecho de que {v 1 , v 3 } se cruza {v 2 , v 4 }).
fuente
Puedes intentar usar Shapely . Si convierte sus puntos de arco en puntos bien formados, puede calcular la distancia entre puntos individuales.
fuente