Zunächst einmal vielen Dank für alle Antworten und Kommentare. Leider waren die vorhandenen Tools nicht vollständig mit den neuesten Versionen von QGIS und ArcGIS kompatibel. Aus diesem Grund habe ich meine eigene Lösung mit dem von @polygeo angegebenen Tool, dem QGIS-Plugin von @Alexandre und dem Namen des Algorithmus (vierfarbige Karte) von @Jens erstellt.
Hier ist mein Code für Interessenten (für ArcGIS, aber der zweite Teil könnte auch in QGIS verwendet werden).
arcpy.MakeFeatureLayer_management(fc, fc[:-4]+ "_lyr" )
try:
arcpy.AddField_management(fc[:-4] + "_lyr", "color", "SHORT")
except:
print "field alread exists"
arcpy.CalculateField_management(fc[:-4] + "_lyr", "color", "10" , "PYTHON")
arcpy.PolygonNeighbors_analysis(fc[:-4] + "_lyr", fc[:-4] + "_tb.dbf" )
graph = []
cursor=arcpy.da.SearchCursor( fc[:-4] + "_tb.dbf" , ("src_FID","nbr_FID") )
for row in cursor:
graph.append(row)
pols = arcpy.da.UpdateCursor(fc[:-4] + "_lyr", ("OID@","color"))
colored = []
for pol in pols:
nbrs = [ second for first, second in graph if first == pol[0]]
usedcolors = []
for nbr in nbrs:
usedcolors += [second for first, second in colored if first == nbr]
pol[1]=[color for color in range(10) if color not in usedcolors][0]
colored.append(pol)
pols.updateRow(pol)
Beachten Sie, dass der Algorithmus nicht garantiert, dass nur 4 Farben verwendet werden: obwohl nachgewiesen wurde, dass die Lösung existiert, ist die "rohe Kraft" erforderlich, um dies zu erreichen. In meinem Fall habe ich 7 Farben, was klein genug ist. Das Skript könnte eine zusätzliche Schleife haben, bis die Lösung gefunden ist, aber ich muss es für Hunderte von Karten und 7 Farben tun, ist OK.