¿Realiza un mapa de flujo radial que muestra líneas curvas en distancias cortas (20 km) con ArcGIS for Desktop?

10

Esri ha proporcionado instrucciones sobre cómo hacer un mapa de flujo radial, pero creo que las líneas curvas solo se producirán a larga distancia, como la mitad del globo.

Para distancias cortas (20 km), una línea geodésica probablemente todavía se verá bastante recta. Para seguir usando este proceso para un mapa de flujo radial en distancias cortas, entonces, pensé que podríamos editar la configuración de referencia para que la tierra sea más pequeña, por lo tanto, obtendrás una buena línea curva para una pequeña distancia. Alguien sabe cómo hacer esto?

Alternativamente, ¿hay otra herramienta en ArcGIS Desktop 10.0 para usar para hacer líneas curvas? Tengo 90 puntos que necesito conectar hasta 54 puntos, sería bueno automatizarlo en lugar de tener que dibujar las líneas manualmente.

ndthl
fuente
2
Su pregunta se hizo en gis.stackexchange.com/questions/5204/… en un contexto que no es ArcGIS. Puede encontrar las respuestas de interés.
whuber
1
Tuve una idea diferente a la de Whuber, pero la suya puede ser mejor dados tus objetivos. Simplemente pensé que uno podría agregar una cantidad arbitraria de doblez en el arco, similar a lo que se hace en los diagramas de arco . Entonces se podría cambiar la dirección del vértice dependiendo de la dirección del flujo. Esencialmente, el flujo de trabajo sería el mismo que para los grandes círculos, divida la cadena de línea en muchos segmentos rectos más pequeños. Sin embargo, la curva arbitraria podría acomodar cualquier proyección local.
Andy W
@AndyW, su sugerencia me parece más útil (aunque no ofende a Whuber, quien hace excelentes sugerencias para más usuarios de capaple). No puedo entender ni implementar la sugerencia de Whuber. Busco una solución simple "lista para usar", preferiblemente una extensión ArcGIS. Miré los diagramas de arco, hay algunos ejemplos sorprendentes allí. No veo una solución allí para un mapa estático simple que muestre una relación de muchos a muchos (pero generalmente de uno a muchos) entre, en mi caso, sitios de desalojo y sitios de reubicación.
ndthl

Respuestas:

5

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_radestá destinada a ser la abreviatura de "orientación en radianes" y se pirefiere 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)/2y mid_y = (y1 + y2)/2para 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.

ingrese la descripción de la imagen aquí

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 ). 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í;

ingrese la descripción de la imagen aquí

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.

Andy W
fuente
1
¡Esta es una respuesta realmente fantástica! Aunque no entiendo cómo codificar, creo que tengo algo bueno que puedo discutir con un amigo. Conozco la herramienta et geowizards para unir dos puntos con una línea recta; solo me interesan las líneas curvas para fines cartográficos.
ndthl