Colorir milhares de polígonos para que cada um seja distinto de seus vizinhos?

28

Estou usando o ArcGIS 10 e tenho camadas dos blocos do Censo de 2010, grupos de blocos e folhetos. Existem milhares de polígonos nessas camadas.

Quero pintá-los para que cada um seja distinto de seus vizinhos, mas tudo o que consigo descobrir é como dar a cada um uma cor distinta. A cor de cada polígono realmente não importa; Eu só quero distinguir facilmente cada um de seu vizinho pela cor, e não com uma borda.

Ou isso é algo que você só vê em um mapa da escola primária dos 50 Estados Unidos?

Carl Raymond
fonte
9
(+1) Tecnicamente, ArcGIS faz fornecer cores distintas, porque pode selecioná-los aleatoriamente entre (eu acredito) uma paleta de 2 ^ 24 e, portanto, as chances de dois vizinhos recebendo exatamente a mesma cor são baixos. Isso sugere que você realmente deseja corrigir um pequeno número de cores prontamente diferenciáveis ​​e atribuí-las para que nenhum polígono vizinho obtenha a mesma cor. Existe um algoritmo para fazer isso para cinco ou mais cores quando todos os polígonos estão conectados e simplesmente conectados. (Manifold tem incorporado um procedimento de cinco cores qualquer camada polígono :-).)
whuber
6
Há também um plug-in no QGIS chamado "topocolour" que fornece esse recurso. Você pode ver o código deles e criar algo sozinho, se não conseguir encontrar um utilitário enlatado no ArcGIS.
RyanDalton
9
Eu escrevi o plugin topocolour acima mencionado! Eu acho que pode ter dificuldades com milhares de polígonos, para resolver todas as adjacências. Também recentemente escrevi uma versão em R, caso alguém queira colorir mapas em R dessa maneira. Eu não vou tocar no ArcGIS!
precisa saber é o seguinte
2
Agora, o ArcGIS agora possui procedimentos internos eficientes para calcular adjacências de polígonos. Lembro-me de fazer todos os blocos dentro de um estado (cerca de meio milhão deles) em cerca de 30 minutos: 15 para calcs, 15 para escrever o arquivo de adjacência. Com máquinas mais novas, o trabalho seria 5 a 10 vezes mais rápido. Portanto, você pode ter seu código R mastigando um arquivo de adjacência produzido pelo ArcGIS, que soa como uma maneira ideal de usar as duas plataformas para esse problema.
whuber
2
"Quatro cores são suficientes" (alguém tinha que dizer).
22125 barrycarter

Respostas:

1

Você está procurando uma ferramenta que possa atingir o teorema das 4 cores

Eu uso o FME para esse fim, mas esse script também deve existir no arcPy.

Abaixo do radar
fonte
0

Eu codifiquei uma ferramenta ArcPy que atribui um atributo da lista fornecida aos polígonos usando uma tabela de vizinhança para que nenhum vizinho compartilhe a mesma cor. Geralmente, ele usa menos de seis cores usando um gráfico simples de coloração heurística (ou, se necessário, pode atribuir as cores aleatoriamente, ainda respeitando a vizinhança).

A caixa de ferramentas, juntamente com alguma documentação, pode ser baixada em http://geocite.ic.cz/coloring.zip .

Jan Šimbera
fonte
veja também aqui: gis.stackexchange.com/questions/54029/…
radouxju
0

Execute um preenchimento de inundação nos polígonos no Python, adicionando uma quantidade definida de alteração de cor a uma chamada recursiva à função de preenchimento de inundação, alterando a cor à medida que avança.

Peludo
fonte
-2

você pode aplicar a classificação de simbologia em um campo identificador / GWID exclusivo.

GISdork
fonte
9
Isso não vai garantir uma cor exclusiva em polígonos vizinha
Deve ser porque o valor RGB pode variar de 0 a 255 para cada um, o que significa que há uma grande variedade de combinações para os valores R, B e G. portanto, tecnicamente, você não terá o mesmo tom, a menos que tenha mais de um bilhão de registros exclusivos.
GISdork
4
Essa técnica não garante que dois polígonos adjacentes tenham cores diferentes para "distinguir facilmente cada [polígono] do seu vizinho". Mesmo que as combinações RGB sejam únicas, podem parecer muito semelhantes. Portanto, se dois polígonos vizinhos receberem valores semelhantes, não será fácil / possível diferenciá-los. Por favor, veja o primeiro comentário do whuber sobre a pergunta original.