¿Colorear miles de polígonos para que cada uno sea distinto de sus vecinos?

28

Estoy usando ArcGIS 10 y tengo capas de bloques, grupos de bloques y secciones del Censo de 2010. Hay miles de polígonos en estas capas.

Quiero colorearlos para que cada uno sea distinto de sus vecinos, pero todo lo que puedo entender es cómo darle a cada uno un color distinto. El color de cada polígono realmente no importa; Solo quiero distinguir fácilmente cada uno de su vecino por color, en lugar de con un borde.

¿O es algo que solo se ve en el mapa de una escuela primaria de los 50 Estados Unidos?

Carl Raymond
fuente
9
(1) Técnicamente, ArcGIS hace proporcionar colores distintos, ya que puede seleccionar de forma aleatoria entre los (creo) una paleta de 2 ^ 24 y, por tanto, las posibilidades de que dos vecinos para conseguir exactamente el mismo color son bajos. Esto sugiere que realmente desea corregir una pequeña cantidad de colores fácilmente diferenciables y asignarlos para que ningún polígono vecino obtenga el mismo color. Hay un algoritmo para hacer esto para cinco o más colores cuando todos los polígonos están conectados y simplemente conectados. (El múltiple tiene un procedimiento incorporado para
aplicar
66
También hay un complemento en QGIS llamado "topocolour" que proporciona esta capacidad. Es posible que pueda ver su código y construir algo usted mismo si no puede encontrar una utilidad enlatada en ArcGIS.
RyanDalton
9
¡Escribí el plugin topocolour mencionado anteriormente! Sin embargo, creo que podría tener problemas con miles de polígonos para resolver todas las adyacencias. También he escrito recientemente una versión en R en caso de que alguien quiera colorear mapas en R de esa manera. ¡Aunque no tocaré ArcGIS!
Spacedman
2
Por cierto, ArcGIS tiene procedimientos internos eficientes ahora para calcular adyacencias de polígonos. Recuerdo haber hecho todos los bloques dentro de un estado (aproximadamente medio millón de ellos) en aproximadamente 30 minutos: 15 para cálculos, 15 para escribir el archivo de adyacencia. Con máquinas más nuevas, el trabajo iría entre 5 y 10 veces más rápido. Por lo tanto, puede hacer que su código R mastique un archivo de adyacencia producido por ArcGIS, que parece una forma óptima de utilizar ambas plataformas para este problema.
whuber
2
"Cuatro colores son suficientes" (alguien tenía que decirlo).
barrycarter

Respuestas:

1

Está buscando una herramienta que pueda lograr el teorema de 4 colores.

Yo uso FME para ese propósito, pero ese script también debería existir en arcPy.

Debajo del radar
fuente
0

Codifiqué una herramienta ArcPy que asigna un atributo de la lista proporcionada a los polígonos usando una tabla de vecindario para que ningún vecino comparta el mismo color. Por lo general, se las arregla para usar menos de seis colores usando una heurística de coloración gráfica simple (o, si es necesario, puede asignar los colores al azar, respetando el vecindario).

La caja de herramientas junto con cierta documentación se puede descargar desde http://geocite.ic.cz/coloring.zip .

Jan Šimbera
fuente
ver también aquí: gis.stackexchange.com/questions/54029/…
radouxju
0

Realice un relleno de inundación en los polígonos en Python agregando una cantidad establecida de cambio de color a una llamada recursiva a la función de relleno de inundación, alterando el color a medida que avanza.

Peludo
fuente
-2

puede aplicar la clasificación de simbología en un identificador único / campo GWID.

GISdork
fuente
9
Esto no garantizará un color único en los polígonos vecinos
Debe ser ya que el valor RGB puede variar de 0 a 255 para cada uno, lo que significa que hay una gran variedad de combinaciones para los valores R, B y G. así que técnicamente no tendrá el mismo tono, a menos que tenga más de mil millones de registros únicos.
GISdork
44
Esta técnica no garantizará que dos polígonos adyacentes tengan colores diferentes para "distinguir fácilmente cada [polígono] de su vecino". Aunque las combinaciones RGB son únicas, pueden parecer muy similares. Entonces, si a dos polígonos vecinos se les asignan valores similares, no será fácil / posible distinguirlos. Vea el primer comentario de whuber sobre la pregunta original.