Criando arcos entre dois pontos no ArcPy?


10

Eu tenho trabalhado em um script python automatizando a visualização de dados de ponto ativo. Eu tenho uma tabela com dois pares de coordenadas. Eu gostaria de conectar esses dois pontos com um arco de círculo ou similar (parábola ??).

Consegui conectar os dois pontos com uma linha reta, mas isso me dá um visual chato.

Um dos principais obstáculos é o meu nível de licença: ArcView.

Alguém tem alguma idéia de como eu posso gerar um conjunto de pontos que representam o caminho de uma linha entre esses dois pontos?

Posso então usar o comando points to polyline.


5
Você realmente não fornece informações suficientes: "melhorar um visual chato" não é específico nem é uma boa declaração de problema. Mas talvez você obtenha algumas idéias de um tópico semelhante em gis.stackexchange.com/questions/5204/… .
whuber

1
Você está visualizando simultaneamente muitas linhas ou apenas uma (ou algumas) de cada vez?
Andy W

O número do ponto pode estar entre 2 e cerca de 50.
Pixel

Respostas:


27

Parece que o problema mais comum com esses tipos de "mapas de fluxo" é que, quando muitas linhas são incluídas, elas colidem tanto que dificulta o discernimento de qualquer padrão não óbvio (quando os fluxos recíprocos são considerados, ocorre uma extensão ainda maior). Além disso, as longas filas tendem a dominar o gráfico, embora seja bem possível que a distribuição dos fluxos seja predominantemente em espaços curtos (por exemplo, uma série de diferentes distribuições entre locais tende a ser semelhante aos voos da Levy ). Suponho que isso não seja necessariamente uma coisa ruim (as longas filas podem ser intrinsecamente interessantes que as curtas para muitos fenômenos), mas não acho que queremos perder a floresta para as árvores, por assim dizer.

Embora não duvide que tenha perdido algumas das possíveis "soluções" propostas, tentarei resumir algumas das maneiras pelas quais as pessoas tentaram resolver o problema no trabalho que encontrei.

Distorcendo as linhas

Se você ler alguns dos outros tópicos à vista, verá alguns exemplos de como as pessoas lidaram com esse problema. Em particular, as linhas são distorcidas para que não se sobreponham umas às outras ou a outros objetos no mapa. A resposta de Whuber sobre outra pergunta semelhante (já mencionada em um comentário) é um exemplo disso. Uma apresentação de alguns pesquisadores de Stanford demonstra essa mesma ideia (Phan et al., 2005). Obrigado por essa apresentação, vá para dslamb por esta resposta em outro tópico (e todas as respostas para esse tópico também serão do interesse de sua pergunta). Eu particularmente acho interessante que um dos exemplos principais disso seja o antigo mapa de imigração de Minard, que é um exemplo de resultado desejável (por volta de 1864!).

Dado o seu caso de uso específico (pequeno número de nós e linhas), isso parece suficiente. As outras "soluções" que apresento visam mais a visualizar dados com muitas linhas e muitos destinos de origem (embora eu assuma que eles sejam resumos úteis para a comunidade em geral, continuo independentemente).

Usando Alpha Blending, Cor e Linha Largura / Altura

Os mapas que listei no mesmo encadeamento observado anteriormente, Representação dos fluxos de rede são exemplos deles. Os amigos do Facebook são um bom exemplo de ajuste do nível alfa de linhas, por isso são necessários muito mais fluxos para representar uma conexão mais escura (ou mais brilhante nesse caso) entre os dois locais. Isso também enfatiza as linhas mais longas, porque elas tendem a ocorrer com menos frequência. Lógica semelhante vem dos mapas Value-by-Alpha para áreas de polígonos (Roth et al., 2010) mencionados anteriormente neste fórum .

O outro mapa que apresento nessa mesma resposta usa cores e uma perspectiva 3d não tradicional que forma arcos (Ratti et al., 2010). Os autores usaram um critério de agrupamento para agrupar áreas homogêneas e codificá-las por cores (por definição, as áreas na cor têm padrões de fluxo mais semelhantes do que entre as cores). Os critérios de agrupamento por si só podem ser interessantes para identificar padrões nos dados, embora pareça um provável problema com isso, como Andrew Gelman mencionou , é que ele informa praticamente o que você já sabe, que fica mais próximo um do outro tendem a ter mais conexões.

Por fim, nesta categoria, incluo técnicas que ponderam as linhas (semelhante à mistura alfa) usando a largura da linha ou, no caso da altura da linha da perspectiva 3D, para transmitir o volume do fluxo. Veja a página na página do software de mapeamento de fluxo de Tobler para alguns exemplos em 2d (e o outro artigo que mencionei é um exemplo em 3d usando alturas de linha). Também nessa página, Tobler tem um artigo muito útil que descreve os problemas com o mapeamento de fluxo e sua aplicação histórica (Tobler, 1987).

Outro exemplo em 3d é a resposta de um mankoff neste site. Esta postagem no blog de imagens sociológicas mostra uma maneira útil em um diagrama de fluxo para distinguir entre fluxos de entrada e saída (embora novamente funcione porque o número de nós é relativamente pequeno e os nós da rede podem ser dispostos em uma maneira arbitrária de reduzir a plotagem). Esses mesmos tipos de flechas (e algumas outras usando hashings) também estão em (Tobler, 1987).

No final, embora a largura e a cor da linha não resolvam realmente o problema de plotagem excessiva. Os arcos em 3d ajudam um pouco, embora com padrões de fluxo mais complicados eu acho que eles terão utilidade limitada. A mistura alfa da IMO parece ser a mais útil em uma ampla variedade de situações desses três, mas a cor e a largura da linha podem / devem ser usadas em conjunto com a distorção da linha mencionada acima.

Redução de dados

Eu agrupo dois tipos de técnicas aqui: 1) usando pequenos mapas múltiplos (ou seja, muitos mapas com inerentemente menos objetos para visualizar para reduzir a super-plotagem) ou 2) outras representações gráficas, que não são linhas, mas representam alguns dos fluxos via densidade ou mapas coropléticos. Exemplos disso podem ser encontrados em (Corcoran et al., 2009; Rae, 2009; Wood et al., 2010) (graças a iant para a referência Rae). Elas tendem a reduzir a quantidade de informações visuais apresentadas, apresentando uma série de pequenos mapas múltiplos (ou apenas uma área menor) ou usam um esquema de mapeamento de coropletas para representar algumas estatísticas (exemplos: número de entradas e saídas) , direção dos fluxos, distância média dos fluxos). Se você tiver dados em nível de ponto, poderá representar essas estatísticas por meio de mapas raster de densidade kernal ou agregá-los em quadrats.

Quando as informações são reduzidas dessa forma, a plotagem excessiva não é um problema. Um exemplo on-line interativo muito interessante é esse mapa de migração da revista Forbes . Você pode ver apenas um município de cada vez, mas a redução de informações facilita muito a análise das linhas (e a diferença entre fluxos de entrada e saída). Uma publicação recente no blog de mapeamento da ESRI também usa uma técnica semelhante com os pequenos múltiplos (eles também escolhem uma projeção específica para o mapa do mundo ter linhas "bonitas" e fazem bom uso da cor para destacar ainda mais as diferentes origens internacionais). Nesse exemplo, funciona muito bem porque o destino final é o mesmo para todos os fluxos, mas se os fluxos pudessem ser recíprocos, provavelmente não funcionaria tão bem.

Usando outras representações não-mapeadas de fluxos

Outros neste site sugeriram o uso de diagramas alternativos para o mapa real para representar os fluxos (apenas mapeando as origens e destinos de alguma outra maneira que não a localização geográfica real). Exemplos disso são visualizações específicas (como a produzida por Circos ), diagramas de arco (veja este exemplo no Protovis, também chamados de kriskograms (Xiao & Chun, 2009)) ou mapas de calor de matriz ( aqui está outro exemplo do Protovis). Outra opção seria usar algum tipo de layout de rede automatizado para identificar padrões nos fluxos (como o capaz pelo Graphviz ). Além do Graphviz, parece que o Gephi, a biblioteca python NetworkX e algumas bibliotecas R também são ferramentas populares (consulteesta resposta no site de estatísticas).

As bibliotecas que cito são muito legais porque também desenvolveram visualizações interativas. Aqui está um exemplo com um estilo semelhante aos gráficos circulares (embora não circular!). Aqui está outra visualização interativa usando algumas das técnicas de distorção de linha discutidas anteriormente, posicionamento da rede (que parece semelhante aos cartogramas circulares de Dorling) e outros resumos estatísticos úteis (eu vi esses dois exemplos originalmente no blog de estética da informação ).


Outros recursos que considero úteis são o software e os artigos provenientes do Spatial Data Mining e do Visual Analytics Lab . Além disso, a modelagem da demanda por viagens criminais no programa CrimeStat é uma introdução suave às técnicas de regressão aplicáveis ​​a esses dados de fluxo. Qualquer uma dessas ferramentas pode permitir identificar correlações interessantes nos padrões de fluxo com outras informações geográficas. Outro lugar para talvez receber alguma inspiração útil para exibir graficamente os dados ou a análise estatística seria uma edição recente do Journal of Computational and Graphical Statistics, Volume 20 Issue 2, ao examinar as estatísticas de chegada / partida de vôos para transportadoras comerciais nos EUA de 1987 a 2008 (se você estiver interessado em lidar com big data, também vale a pena examinar). Todos os artigos são gratuitos e têm pôsteres associados a cada artigo.

No final, os dados e o meio ditarão como algumas dessas técnicas funcionam na redução da confusão visual que acompanha os dados de fluxo. Espero que este seja um local útil para encontrar idéias sobre como lidar com esse problema de visualização. Se você refinar ainda mais sua pergunta sobre o que deseja realizar, outros poderão fornecer um feedback útil sobre as implementações programáticas reais (se algo ainda não estiver disponível).


Citações

* note que os links para documentos pdf não incluídos estão incluídos quando eu encontrei um


2
No momento, omiti quaisquer gráficos, mas, se solicitado, posso incluir qualquer um, se as pessoas quiserem ver exemplos sem precisar seguir os links.
Andy W

Uau !! ... Completo com citações! Se eu pudesse votar duas vezes, eu votaria! Resposta impressionante, cara :)
R Thiede 3/11

Atualmente, encontrei outra visualização interativa bastante interessante usando a redução de dados (e grandes linhas circulares). Descubra qual cidade dos EUA é mais popular entre os caçadores de casas internacionais no blog Trulia Insights.
Andy W

5

Há um bom procedimento aqui , por nosso próprio subterrâneo.

Basicamente, o procedimento é o seguinte: - reprojetar os pontos que você deseja que a linha esteja entre, - obter uma linha reta desenhada entre eles, - subdividir essa linha em x quantidade de peças e, finalmente - projetar a linha subdividida de volta ao seu original projeção.

Eu meio que parei de usar o Arc porque custa dinheiro, mas, para que esse procedimento funcione, acho que você não precisa pagar subornos extras à ESRI para fornecer a funcionalidade básica. Quero dizer, não acho que você precise comprar "extensões". No entanto, estou falando sob correção, porque não tenho certeza se a subdivisão de uma linha faz parte do Spatial Analyst. Talvez alguns dos mais inclinados a ESRIcally possam me ajudar aqui? :)


1
Você não conseguia fazer curvas reais com o ArcView, mas o ArcView conseguiu fazer curvas verdadeiras desde a versão 9 agora.
blord-castillo 30/09/11


2

Você pode criar polilinhas visualmente atraentes a partir de dois pontos em um mapa usando o método do grande círculo. Confira http://www.esri.com/software/arcgis/defense-solutions/military-analyst.html - Analista militar. Deve ter o que você está procurando!


Eu não estou mais atualizado sobre o Arc, mas não é possível fazer isso com algumas reprojeções? Porque o analista militar provavelmente vai custar-lhe dinheiro ...
R Thiede

Não acredito que essa solução funcione de qualquer maneira, pois a extensão do meu mapa terá cerca de 64 quilômetros de diâmetro. Eu acredito que isso pode funcionar se estivesse na escala de um continente.
Pixel

Military Analyst is free @RThiede Sim, funcionaria melhor em maior extensão. No entanto, você pode ser capaz de editar as linhas depois que eles são criados para dar-lhe o que você quer (como eles usam curvas bezzier para produzir centenas de pontos ao longo das polilinhas para criar a curva)
Michael Markieta

Eu poderia editar facilmente as linhas para obter os arcos desejados, mas, como indicado na postagem, estou usando o Python para automatizar esse processo. Obrigado pelo feedback!
Pixel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.