まず第一に、すべての回答とコメントをありがとう。残念ながら、既存のツールはQGISおよびArcGISの最新バージョンと完全に互換性がありませんでした。したがって、@ polygeoで示されるツール、@ AlexandreのQGISプラグイン、および@Jensのアルゴリズム名(4色マップ)を使用して、独自のソリューションを作成しました。
興味のある人向けのコードを次に示します(ArcGIS向けですが、QGISでも2番目の部分を使用できます)。
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)
アルゴリズムは4色のみが使用されることを保証しないことに注意してください。ソリューションが存在することは証明されていますが、それを達成するには「ブルートフォース」が必要です。私の場合、私は十分に小さい7色を得ました。スクリプトには、解決策が見つかるまで追加のループが含まれる場合がありますが、何百ものマップに対してそれを行う必要があり、7色は問題ありません。