সবার আগে, সমস্ত উত্তর এবং মন্তব্যের জন্য ধন্যবাদ। দুর্ভাগ্যক্রমে, বিদ্যমান সরঞ্জামগুলি কিউজিআইএস এবং আর্কজিআইএসের সর্বশেষতম সংস্করণগুলির সাথে পুরোপুরি সামঞ্জস্যপূর্ণ নয়। সুতরাং আমি @ পলিজিও দ্বারা নির্দেশিত সরঞ্জামটি ব্যবহার করে আমার নিজস্ব সমাধান তৈরি করেছি, @ অ্যালেক্সানড্রে থেকে কিউজিআইএস প্লাগইন এবং @ জেনস থেকে অ্যালগরিদমের নাম (চার রঙের মানচিত্র)।
আগ্রহীদের জন্য আমার কোডটি এখানে রয়েছে (আর্কজিআইএসের জন্য তবে দ্বিতীয় অংশটি কিউজিআইএসেও ব্যবহৃত হতে পারে)।
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 টি রঙ ঠিক আছে।