Koloruje tysiące wielokątów, aby każdy z nich był inny od swoich sąsiadów?


28

Korzystam z ArcGIS 10 i mam warstwy bloków spisu ludności z 2010 r., Grup bloków i traktów. W tych warstwach znajdują się tysiące wielokątów.

Chcę je pokolorować, aby każdy był inny od swoich sąsiadów, ale wszystko, co mogę wymyślić, to jak nadać każdemu odrębny kolor. Kolor każdego wielokąta tak naprawdę nie ma znaczenia; Chcę tylko łatwo odróżnić każdego od sąsiada kolorem, a nie ramką.

Czy jest to coś, co widzisz tylko na mapie szkoły podstawowej 50 Stanów Zjednoczonych?


9
(+1) Technicznie ArcGIS ma zapewniać różne kolory, ponieważ można je wybrać losowo spośród (wierzę) paletę 2 ^ 24, a tym samym szanse na dwóch sąsiadów coraz dokładnie tego samego koloru są niskie. To sugeruje, że naprawdę chcesz naprawić niewielką liczbę łatwo rozróżnialnych kolorów i przypisać je, aby żadne sąsiednie wielokąty nie otrzymały tego samego koloru. Istnieje algorytm do wykonania tego dla pięciu lub więcej kolorów, gdy wszystkie wielokąty są połączone i po prostu połączone. (Kolektor ma wbudowaną procedurę pięciokolorową dowolnej warstwy wielokąta :-).)
whuber

6
Istnieje również wtyczka w QGIS o nazwie „topocolour”, która zapewnia taką możliwość. Być może będziesz w stanie spojrzeć na ich kod i sam zbudować coś, jeśli nie możesz znaleźć konserwowanego narzędzia w ArcGIS.
RyanDalton

9
Napisałem wyżej wspomnianą wtyczkę topocolour! Myślę, że może być problem z tysiącami wielokątów, aby wypracować wszystkie sąsiedztwa. Niedawno napisałem też wersję w języku R na wypadek, gdyby ktoś chciał pokolorować mapy w ten sposób. Nie dotknę jednak ArcGIS!
Spacedman

2
BTW, ArcGIS ma teraz wydajne procedury wewnętrzne do obliczania przyległości wielokątów. Pamiętam, jak robiłem wszystkie bloki w jednym stanie (około pół miliona) w około 30 minut: 15 dla cieląt, 15 dla zapisu pliku przylegania. W przypadku nowszych maszyn zadanie pójdzie 5-10 razy szybciej. Możesz więc sprawić, by Twój kod R przeżuł plik przyległości utworzony przez ArcGIS, co wydaje się optymalnym sposobem wykorzystania obu platform do rozwiązania tego problemu.
whuber

2
„Cztery kolory wystarczą” (ktoś musiał to powiedzieć).
barrycarter

Odpowiedzi:




0

Zakodowałem narzędzie ArcPy, które przypisuje atrybut z podanej listy do wielokątów za pomocą tabeli sąsiedztwa, aby żaden sąsiad nie miał tego samego koloru. Zwykle używa mniej niż sześciu kolorów za pomocą prostej heurystycznej kolorystyki grafów (lub, jeśli to konieczne, może przypisywać kolory losowo, nadal szanując okolicę).

Zestaw narzędzi wraz z dokumentacją można pobrać ze strony http://geocite.ic.cz/coloring.zip .



0

Wykonaj wypełnienie Flood na wielokątach w Pythonie, dodając określoną wartość zmiany koloru do rekurencyjnego wywołania funkcji wypełnienia zalewowego, zmieniając kolor w miarę upływu czasu.


-2

możesz zastosować klasyfikację symboliki do unikalnego pola identyfikatora / GWID.


9
Nie gwarantuje to unikalnego koloru sąsiednich wielokątów

Powinno tak być, ponieważ wartość RGB może wynosić od 0 do 255 dla każdego, co oznacza, że ​​istnieje szeroki wachlarz kombinacji dla wartości R, B i G. więc technicznie nie będziesz miał tego samego odcienia, chyba że masz ponad miliard unikalnych rekordów.
GISdork,

4
Ta technika nie gwarantuje, że dwa sąsiednie wielokąty mają odmienne kolory, aby „łatwo odróżnić każdy [wielokąt] od swojego sąsiada”. Chociaż kombinacje RGB są unikalne, mogą wyglądać bardzo podobnie. Jeśli więc dwóm sąsiednim wielokątom zostaną przypisane podobne wartości, odróżnienie ich nie będzie łatwe / możliwe. Zobacz pierwszy komentarz Whubera do pierwotnego pytania.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.