Aqui está uma ilustração do fluxo de trabalho que mencionei no comentário acima e, embora eu não conheça nenhuma rotina simples pré-enlatada para fazer isso, anexei uma planilha do Excel que pode importar um conjunto de coordenadas de origem e destino e a folha cria um conjunto ou coordenadas de linha circular (planilha aqui ). Ele possui fórmulas configuradas, por isso é muito fácil importar novas coordenadas de OD e estendê-las para preencher os resultados, mas vou explicar a lógica do processo mais explicitamente, e outros podem dar conselhos sobre como criá-lo inteiramente dentro ArcMap (ou o que for).
Resumidamente, acho que isso é razoável para a visualização de dados OD principalmente pela mesma razão que grandes linhas circulares são populares, elas fornecem mais distinção visual entre linhas. A abordagem que sugiro também tem uma vantagem sobre as grandes linhas circulares, pois a direção do fluxo é codificada no semicírculo. Nesta outra resposta no site, ofereço uma visão geral mais geral das técnicas de visualização para mapeamento de fluxo, e muitas dessas mesmas técnicas podem ser aplicadas além de criar arcos como esse.
Assim, para detalhar como se desenha linhas como a sugestão, essencialmente, só tenho 3 etapas para o processo: 1) encontre a orientação do fluxo, 2) encontre o ponto médio e a distância do fluxo, 3) trate o ponto central como o centro de um círculo e, em seguida, desenhe o arco (um semicírculo da origem ao destino). Para ser claro, estou começando com um par de coordenadas projetadas de origem (x1,y1)
e coordenadas de destino (x2,y2)
.
Então 1) encontre a orientação do fluxo. Um primeiro usa a fórmula ATAN((y2 - y1)/(x2 - x1))
e, em seguida, dependendo da direção, atribui uma orientação, dependendo de a direção ser leste ou oeste. Um exemplo de pseudocódigo abaixo (eu atribuo pontos OD que estão ambos nas mesmas coordenadas e uma orientação de zero). Aqui, o varaible or_rad
deve ser uma abreviação de "orientação em radianos" e pi
se refere ao 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) Encontre o ponto médio e a distância do fluxo. Isso é muito simples, pois apenas um conjunto de coordenadas emparelhadas será o ponto médio em (x, y) (x1+x2/2,y1+y2/2)
. Então vamos definir mid_x = (x1 + x2)/2
e mid_y = (y1 + y2)/2
para a próxima parte. A distância usando o teor de pitágoro é simples distance = SQRT((x1 - x2)^2 + (y1 - y2)^2)
.
3) Em seguida, dadas essas informações, desenhe o círculo dado sobre um número pré-especificado de graus e um raio (que é metade da distância entre os dois pontos). Por exemplo, digamos que começamos com um conjunto de pares de coordenadas OD em (1,3):(3,2)
. A orientação em graus será ~ 116 (e em radianos ~ 2), o ponto médio x, y será (2,2.5)
e a distância entre os dois pontos será de 2,2.
Então, digamos que queremos desenhar o semicírculo em torno de 180 graus. No código pseduo (usando as variáveis que eu já defini), as iterações serão parecidas com;
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.
Abaixo, é inserido um diagrama das coordenadas originais especificadas acima. Começar em zero e terminar em 180 garante que os pontos de existência e de extremidade estejam nos mesmos locais. Ajustar o loop para ter mais etapas (arco mais detalhado) ou menos (arco menos detalhado) deve ser bastante óbvio.
Observe que outros threads no site discutem a criação de linhas a partir de dados pontuais (consulte a tag de criação de polilinha ). Eu tenho um exemplo na planilha xls anexada e utilizei a ferramenta de arcmap ET Geo-wizards para converter as coordenadas da planilha em linhas de shapefile. Os arcos nos dados de exemplo na planilha anexada subsequentemente se parecem com isso;
Uma atualização simples, mas potencialmente útil para esta configuração atual seria atualizar as fórmulas para permitir uma quantidade pré-especificada de excentricidade em arco, embora eu não tenha tido muita certeza de como fazer isso em minhas poucas tentativas até agora. Estou ansioso por sugestões e comentários da comunidade aqui, sob meus conselhos.