Как раскрасить тысячи полигонов, чтобы каждый отличался от соседей?

28

Я использую ArcGIS 10, и у меня есть слои блоков переписи 2010 года, групп блоков и участков. В этих слоях тысячи полигонов.

Я хочу покрасить их так, чтобы каждый из них отличался от своих соседей, но все, что я могу понять, - это как дать каждому отдельный цвет. Цвет каждого многоугольника на самом деле не имеет значения; Я просто хочу легко отличить каждого от своего соседа по цвету, а не по границе.

Или это то, что вы видите только на карте начальной школы 50 Соединенных Штатов?

Карл Рэймонд
источник
9
(+1) Технически, ArcGIS действительно предоставляет различные цвета, потому что он может выбирать их случайным образом среди (я полагаю) палитры 2 ^ 24, и поэтому шансы двух соседей получить точно такой же цвет невелики. Это говорит о том, что вы действительно хотите исправить небольшое количество легко различимых цветов и назначить их так, чтобы соседние полигоны не получали одинаковый цвет. Существует алгоритм для этого для пяти или более цветов, когда все многоугольники связаны и просто связаны. (В коллектор встроена процедура для пятицветного любого многоугольного слоя :-).)
whuber
6
В QGIS также есть плагин, называемый «topocolour», который предоставляет эту возможность. Возможно, вы сможете посмотреть на их код и создать что-то самостоятельно, если не можете найти в ArcGIS постоянную утилиту.
RyanDalton
9
Я написал вышеупомянутый плагин topocolour! Я думаю, что может возникнуть проблема с тысячами полигонов, чтобы решить все смежные области. Я также недавно написал версию на R на тот случай, если кто-то захочет раскрасить карты на R таким способом. Я не буду касаться ArcGIS!
Spacedman
2
Кстати, ArcGIS имеет эффективные внутренние процедуры для вычисления смежности полигонов. Я помню, как делал все блоки в пределах одного состояния (около полумиллиона из них) примерно за 30 минут: 15 для calcs, 15 для записи файла смежности. На новых машинах работа будет идти в 5-10 раз быстрее. Таким образом, ваш код R мог бы проверить файл смежности, созданный ArcGIS, что звучит как оптимальный способ использования обеих платформ для решения этой проблемы.
whuber
2
«Достаточно четырех цветов» (кто-то должен был это сказать).
Баррикартер

Ответы:

1

Вы ищете инструмент, который может достичь теоремы 4-х цветов

Я использую FME для этой цели, но такой скрипт должен существовать и в arcPy.

Ниже радара
источник
0

Я кодировал инструмент ArcPy, который назначает атрибут из предоставленного списка полигонам, используя таблицу окрестностей, чтобы ни один из соседей не имел одинаковый цвет. Как правило, ему удается использовать менее шести цветов с помощью простой эвристики окраски графа (или, если необходимо, он может назначать цвета случайным образом, по-прежнему соблюдая соседство).

Инструментарий вместе с некоторой документацией можно загрузить по адресу http://geocite.ic.cz/coloring.zip .

Ян Шимбера
источник
см. также здесь: gis.stackexchange.com/questions/54029/…
radouxju
0

Выполните заливку Flood над полигонами в Python, добавив заданную величину изменения цвета к рекурсивному вызову функции заливки, изменяя цвет по мере движения.

волосатый
источник
-2

Вы можете применить классификацию символов к полю уникального идентификатора / GWID.

GISdork
источник
9
Это не гарантирует уникальный цвет для соседних полигонов
Должно быть так, поскольку значение RGB может варьироваться от 0 до 255 для каждого, что означает, что существует множество комбинаций для значений R, B и G. так что технически у вас не будет такого же оттенка, если у вас не будет более миллиарда уникальных записей.
GISdork
4
Этот метод не гарантирует, что два смежных многоугольника будут иметь разные цвета, чтобы «легко отличить каждый [многоугольник] от его соседа». Хотя комбинации RGB уникальны, они могут выглядеть очень похожими. Поэтому, если двум соседним полигонам присвоены одинаковые значения, их будет трудно / невозможно отличить друг от друга. Пожалуйста, смотрите первый комментарий Whuber по первоначальному вопросу.