Aquí hay una ilustración del flujo de trabajo que mencioné en el comentario anterior, y aunque no conozco ninguna rutina simple predefinida para hacer esto, he adjuntado una hoja de cálculo de Excel para importar un conjunto de coordenadas de origen-destino y la hoja luego hace un conjunto o coordenadas de línea circular (hoja de cálculo aquí ). Tiene fórmulas configuradas, por lo que es bastante fácil importar nuevas coordenadas OD y extender las fórmulas para completar los resultados, pero seguiré la lógica del proceso de manera más explícita, y otros pueden dar consejos sobre cómo escribirlo completamente dentro ArcMap (o lo que sea).
Brevemente, creo que esto es razonable para visualizar datos de OD principalmente por la misma razón por la que las grandes líneas circulares son populares, proporcionan más distinción visual entre líneas. El enfoque que sugiero también tiene una ventaja sobre las grandes líneas circulares, ya que la dirección del flujo está codificada en el semicírculo. En esta otra respuesta en el sitio, proporciono una visión general más general de las técnicas de visualización para el mapeo de flujo, y muchas de esas mismas técnicas se pueden aplicar además de hacer arcos como este.
Entonces, para detallar cómo se dibujan líneas como sugiero, esencialmente solo tengo 3 pasos para el proceso, 1) encontrar la orientación del flujo, 2) encontrar el punto medio y la distancia del flujo, 3) tratar el punto medio como el centro de un círculo, y luego dibuje el arco (un semicírculo desde el origen hasta el destino). Para que quede claro, estoy comenzando con un par de coordenadas de origen (x1,y1)
y de destino proyectadas (x2,y2)
.
Entonces 1) encuentre la orientación del flujo. Primero se usa la fórmula ATAN((y2 - y1)/(x2 - x1))
y luego, dependiendo de la dirección, se asigna una orientación dependiendo de si la dirección es hacia el este o hacia el oeste. Un pseudocódigo de ejemplo a continuación (asigno puntos OD que están en las mismas coordenadas con una orientación de cero). Aquí la varaible or_rad
está destinada a ser la abreviatura de "orientación en radianes" y se pi
refiere al valor de pi.
#tan_or = ATAN((y2 - y1)/(x2 - x1)).
Do If x2 = x1 and y1 <= y2.
compute or_rad = 0.
Else if x2 = x1 and y1 > y2.
compute or_rad = pi.
Else if x1 > x2.
compute or_rad = 270/180*pi - #tan_or.
Else if x1 < x2.
compute or_rad = 90/180*pi - #tan_or.
End If.
2) Encuentre el punto medio y la distancia del flujo. Esto es muy simple, para solo un conjunto de coordenadas emparejadas será el punto medio en las coordenadas (x, y) (x1+x2/2,y1+y2/2)
. Así que definamos mid_x = (x1 + x2)/2
y mid_y = (y1 + y2)/2
para la siguiente parte. La distancia usando el pythagoreum theorum es simplemente distance = SQRT((x1 - x2)^2 + (y1 - y2)^2)
.
3) Luego, dada esa información, dibuje el círculo dado sobre un número predeterminado de grados y un radio (que es la mitad de la distancia entre los dos puntos). Por ejemplo, digamos que comenzamos con un conjunto de pares de coordenadas OD en (1,3):(3,2)
. La orientación en grados será ~ 116 (y en radianes ~ 2), el punto medio x, y será (2,2.5)
y la distancia entre los dos puntos es aproximadamente 2.2.
Entonces, digamos que queremos dibujar el semicírculo alrededor de 180 grados. En pseduo-code (usando las variables que ya definí) las iteraciones se verán algo así;
for i in (0 to 180 degrees)
rad_i = i/180*pi. /*converts i from degrees to radians
step_or = pi - rad_i /*for clarity, this makes the circle go from origin to destination
radius = distance/2
Arc_X = mid_x + sin(or_rad - step_or)*radius.
Arc_Y = mid_y + cos(or_rad - step_or)*radius.
A continuación se inserta un diagrama de las coordenadas originales que especifiqué anteriormente. Comenzar en cero y terminar en 180 asegura que el ser y los puntos finales estén en los mismos lugares. Ajustar el ciclo para tener más pasos (arco más detallado) o menos (arco menos detallado) debería ser bastante obvio.
Para tener en cuenta, otros hilos en el sitio discuten la creación de líneas a partir de datos de puntos (ver la etiqueta de creación de polilíneas ). Tengo un ejemplo en la hoja de cálculo xls adjunta, y utilicé la herramienta arcmap ET Geo-wizards para convertir las coordenadas de la hoja de cálculo en líneas de archivo de forma. Los arcos en los datos de ejemplo en la hoja de cálculo adjunta posteriormente se ven así;
Una actualización simple pero potencialmente útil para esta configuración actual sería actualizar las fórmulas para permitir una cantidad de excentricidad predeterminada en el arco, aunque no he estado muy seguro de cómo hacerlo en mis pocos intentos hasta ahora. Espero recibir sugerencias y comentarios de la comunidad aquí sobre mi consejo.