Colorier des milliers de polygones pour que chacun soit distinct de ses voisins?

28

J'utilise ArcGIS 10 et j'ai des couches de blocs, de groupes de blocs et de secteurs du recensement de 2010. Il y a des milliers de polygones dans ces couches.

Je veux les colorer pour que chacun soit distinct de ses voisins, mais tout ce que je peux comprendre, c'est comment donner à chacun une couleur distincte. La couleur de chaque polygone n'a pas vraiment d'importance; Je veux juste distinguer facilement chacun de son voisin par la couleur, plutôt qu'avec une bordure.

Ou est-ce quelque chose que vous ne voyez que sur une carte d'école élémentaire des 50 États-Unis?

Carl Raymond
la source
9
(1) Techniquement, ArcGIS ne fournir des couleurs distinctes, car il peut les sélectionner au hasard parmi (je crois) une palette de 2 ^ 24 et donc les chances de deux voisins obtenir exactement la même couleur sont faibles. Cela suggère que vous souhaitez vraiment fixer un petit nombre de couleurs facilement différenciables et les affecter afin qu'aucun polygone voisin n'ait la même couleur. Il existe un algorithme pour le faire pour cinq couleurs ou plus lorsque tous les polygones sont connectés et simplement connectés. (Le manifold a une procédure intégrée pour colorier n'importe quelle couche de polygone :-).)
whuber
6
Il existe également un plugin dans QGIS appelé "topocolour" qui fournit cette fonctionnalité. Vous pourrez peut-être consulter leur code et créer quelque chose vous-même si vous ne trouvez pas d'utilitaire prédéfini dans ArcGIS.
RyanDalton
9
J'ai écrit le plugin topocolour susmentionné! Je pense que cela pourrait avoir du mal avec des milliers de polygones, pour déterminer toutes les contiguïtés. J'ai également récemment écrit une version en R au cas où quelqu'un voudrait colorer les cartes de cette façon. Je ne toucherai cependant pas à ArcGIS!
Spacedman
2
BTW, ArcGIS dispose désormais de procédures internes efficaces pour calculer les contiguïtés de polygones. Je me souviens avoir fait tous les blocs dans un état (environ un demi-million d'entre eux) en environ 30 minutes: 15 pour les calculs, 15 pour l'écriture du fichier de contiguïté. Avec des machines plus récentes, le travail serait 5 à 10 fois plus rapide. Ainsi, vous pourriez avoir votre code R à mâcher sur un fichier de contiguïté produit par ArcGIS, ce qui semble être un moyen optimal d'utiliser les deux plates-formes pour ce problème.
whuber
2
"Quatre couleurs suffisent" (quelqu'un devait le dire).
barrycarter

Réponses:

1

Vous recherchez un outil capable de réaliser le théorème des 4 couleurs

J'utilise FME à cet effet, mais un tel script devrait également exister dans arcPy.

Sous le radar
la source
0

J'ai codé un outil ArcPy qui attribue un attribut de la liste fournie aux polygones à l'aide d'une table de voisinage afin qu'aucun voisin ne partage la même couleur. Il parvient généralement à utiliser moins de six couleurs à l'aide d'une simple heuristique de coloration de graphe (ou, le cas échéant, il peut attribuer les couleurs de manière aléatoire, tout en respectant le voisinage).

La boîte à outils ainsi que de la documentation peuvent être téléchargées depuis http://geocite.ic.cz/coloring.zip .

Jan Šimbera
la source
0

Effectuez un remplissage par saturation sur les polygones en Python en ajoutant une quantité définie de changement de couleur à un appel récursif à la fonction de remplissage par saturation, en modifiant la couleur au fur et à mesure.

Poilu
la source
-2

vous pouvez appliquer la classification de symbologie sur un champ identifiant / GWID unique.

GISdork
la source
9
Cela ne garantira pas une couleur unique à travers les polygones voisins
Cela devrait être le cas, car la valeur RVB peut varier de 0 à 255 pour chacun, ce qui signifie qu'il existe un large éventail de combinaisons pour les valeurs R, B et G. donc techniquement, vous n'aurez pas la même teinte, sauf si vous avez bien plus d'un milliard d'enregistrements uniques.
GISdork
4
Cette technique ne garantit pas que deux polygones adjacents ont des couleurs différentes afin de "distinguer facilement chaque [polygone] de son voisin". Même si les combinaisons RVB sont uniques, elles peuvent sembler très similaires. Donc, si deux polygones voisins reçoivent des valeurs similaires, il ne sera pas facile / possible de les différencier. Veuillez consulter le premier commentaire de whuber sur la question d'origine.