Tausende von Polygonen färben, damit sich jedes von seinen Nachbarn unterscheidet?


28

Ich verwende ArcGIS 10 und habe Layer der 2010 Census-Blöcke, -Blockgruppen und -Traktate. In diesen Schichten befinden sich Tausende von Polygonen.

Ich möchte sie so färben, dass sich jedes von seinen Nachbarn unterscheidet, aber ich kann nur herausfinden, wie ich jedem eine bestimmte Farbe geben kann. Die Farbe jedes Polygons spielt eigentlich keine Rolle. Ich möchte einfach jeden von seinen Nachbarn anhand der Farbe und nicht anhand eines Rahmens unterscheiden.

Oder sehen Sie das nur auf einer Grundschulkarte der 50 Vereinigten Staaten?


9
(1) Technisch ArcGIS hat verschiedene Farben zur Verfügung stellen, weil es sie zufällig unter auswählen kann (glaube ich) eine Palette von 2 ^ 24 und damit die Chancen der beiden Nachbarn immer genau die gleiche Farbe sind niedrig. Dies legt nahe, dass Sie wirklich eine kleine Anzahl von leicht unterscheidbaren Farben festlegen und ihnen zuweisen möchten, damit keine benachbarten Polygone die gleiche Farbe erhalten. Es gibt einen Algorithmus, der dies für fünf oder mehr Farben ausführt, wenn alle Polygone verbunden und einfach verbunden sind. (In Manifold ist ein Verfahren zum
Fünffärben

6
Es gibt auch ein Plugin in QGIS mit dem Namen "topocolour" , das diese Funktion bietet. Möglicherweise können Sie sich ihren Code ansehen und selbst etwas erstellen, wenn Sie in ArcGIS kein vordefiniertes Dienstprogramm finden.
RyanDalton

9
Ich habe das oben erwähnte topocolour Plugin geschrieben! Ich denke, es könnte mit Tausenden von Polygonen zu kämpfen haben, um alle Nachbarschaften herauszufinden. Ich habe kürzlich auch eine Version in R geschrieben, nur für den Fall, dass jemand Maps in R auf diese Weise ausmalen möchte. Ich werde ArcGIS jedoch nicht berühren!
Spacedman

2
Übrigens verfügt ArcGIS nun über effiziente interne Verfahren zum Berechnen von Polygon-Adjazenzen. Ich erinnere mich, dass ich alle Blöcke innerhalb eines Staates (ungefähr eine halbe Million) in ungefähr 30 Minuten erledigt habe: 15 für Calcs, 15 für das Schreiben der Nachbarschaftsdatei. Mit neueren Maschinen würde der Job 5-10 mal schneller gehen. Sie könnten also Ihren R-Code auf einer von ArcGIS erstellten Adjazenzdatei kauen lassen, was nach einer optimalen Methode für die Verwendung beider Plattformen für dieses Problem klingt.
whuber

2
"Vier Farben genügen" (jemand musste es sagen).
Barrycarter

Antworten:




0

Ich habe ein ArcPy-Tool codiert, das den Polygonen mithilfe einer Nachbarschaftstabelle ein Attribut aus der bereitgestellten Liste zuweist, sodass keine Nachbarn dieselbe Farbe haben. In der Regel werden weniger als sechs Farben mithilfe einer einfachen Grafik-Heuristik verwendet (oder, falls erforderlich, die Farben nach dem Zufallsprinzip zugewiesen, wobei die Umgebung weiterhin berücksichtigt wird).

Die Toolbox kann zusammen mit einigen Dokumentationen von http://geocite.ic.cz/coloring.zip heruntergeladen werden .



0

Führen Sie in Python eine Überflutungsfüllung für die Polygone durch, indem Sie einem rekursiven Aufruf der Überflutungsfüllungsfunktion eine festgelegte Menge an Farbänderungen hinzufügen und dabei die Farbe ändern.


-2

Sie können eine Symbologieklassifizierung für ein eindeutiges Bezeichner- / GWID-Feld anwenden.


9
Dies garantiert keine eindeutige Farbe für benachbarte Polygone

Dies sollte der Fall sein, da der RGB-Wert für jeden Wert zwischen 0 und 255 liegen kann, was bedeutet, dass es für die Werte R, B und G eine Vielzahl von Kombinationen gibt. Technisch gesehen haben Sie nicht den gleichen Farbton, es sei denn, Sie haben weit über eine Milliarde eindeutige Datensätze.
GISdork

4
Diese Technik garantiert nicht, dass zwei benachbarte Polygone unterschiedliche Farben haben, um "jedes [Polygon] leicht von seinem Nachbarn zu unterscheiden". Obwohl die RGB-Kombinationen einzigartig sind, sehen sie möglicherweise sehr ähnlich aus. Wenn also zwei benachbarten Polygonen ähnliche Werte zugewiesen werden, ist es nicht einfach / möglich, sie voneinander zu unterscheiden. Bitte beachten Sie Whubers ersten Kommentar zur ursprünglichen Frage.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.