Pertama-tama, terima kasih atas semua jawaban dan komentar. Sayangnya, alat yang ada tidak sepenuhnya kompatibel dengan versi terbaru QGIS dan ArcGIS. Oleh karena itu saya membuat solusi sendiri menggunakan alat yang ditunjukkan oleh @polygeo, plugin QGIS dari @Alexandre dan nama algoritme (peta empat warna) dari @Jens.
Berikut ini adalah kode saya untuk mereka yang tertarik (untuk ArcGIS tetapi bagian kedua juga dapat digunakan di QGIS).
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)
Perhatikan bahwa algoritme tidak menjamin bahwa hanya 4 warna yang digunakan: meskipun telah terbukti bahwa solusinya ada, "kekuatan kasar" diperlukan untuk mencapainya. Dalam kasus saya, saya mendapat 7 warna yang cukup kecil. Script bisa memiliki loop tambahan hingga solusinya ditemukan, tetapi saya perlu melakukannya untuk ratusan peta dan 7 warna OK.