Been battling this problem for a long time now, so hoping someone here can shed light on a possible solution. The problem is that I have 100 points and I want to apply a color palette to the points so that no two points within 25 miles have the same color. The issue I'm trying to prevent is having points close to each other being mistaken for similarity.
I think I'm getting somewhere with running the Generate Near Table in ArcGIS Pro 2.3 which will find all near points within 25 miles. Conceptually, I'm thinking this could turn into a Python script or ModelBuilder model where a first point is selected, Color field is given a value, then it moves on to the next record, but it can't be from a list of OIDs found in the Near Table result for that next record.
To recap, I'm trying to apply, for example, 10 colors to 100 points, where no points within 25 miles of each other gets the same color applied. Some code that I've been trying to play around with:
<SPAN class="keyword token">import</SPAN> arcpy
<SPAN class="comment token"># Process: Select Layer By Attribute</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>SelectLayerByAttribute_management<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'InputPoints100'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'NEW_SELECTION'</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"OBJECTID = 1"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># Process: Calculate Field</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>management<SPAN class="punctuation token">.</SPAN>CalculateField<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"InputPoints100"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"Color"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'"ONE"'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"ARCADE"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"ONE"</SPAN><SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>Append_management<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'InputPoints100'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'InputPoints_LIST'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'TEST'</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token">################################################################# ONE ######################################################################</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>SelectLayerByLocation_management<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'InputPoints100'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'WITHIN_A_DISTANCE'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'InputPoints100'</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="string token">"25 Miles"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'NEW_SELECTION'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'INVERT'</SPAN><SPAN class="punctuation token">)</SPAN>
layer <SPAN class="operator token">=</SPAN> <SPAN class="string token">"InputPoints100"</SPAN>
count <SPAN class="operator token">=</SPAN> <SPAN class="number token">1</SPAN>
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">randomColor</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">def</SPAN> SelectRandomByCount <SPAN class="punctuation token">(</SPAN>layer<SPAN class="punctuation token">,</SPAN> count<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">import</SPAN> random
layerCount <SPAN class="operator token">=</SPAN> int <SPAN class="punctuation token">(</SPAN>arcpy<SPAN class="punctuation token">.</SPAN>GetCount_management <SPAN class="punctuation token">(</SPAN>layer<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>getOutput <SPAN class="punctuation token">(</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">if</SPAN> layerCount <SPAN class="operator token"><</SPAN> count<SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"input count is greater than layer count"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">return</SPAN>
oids <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN>oid <SPAN class="keyword token">for</SPAN> oid<SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">in</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>SearchCursor <SPAN class="punctuation token">(</SPAN>layer<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"OID@"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">]</SPAN>
oidFldName <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>Describe <SPAN class="punctuation token">(</SPAN>layer<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>OIDFieldName
delimOidFld <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>AddFieldDelimiters <SPAN class="punctuation token">(</SPAN>layer<SPAN class="punctuation token">,</SPAN> oidFldName<SPAN class="punctuation token">)</SPAN>
randOids <SPAN class="operator token">=</SPAN> random<SPAN class="punctuation token">.</SPAN>sample <SPAN class="punctuation token">(</SPAN>oids<SPAN class="punctuation token">,</SPAN> count<SPAN class="punctuation token">)</SPAN>
oidsStr <SPAN class="operator token">=</SPAN> <SPAN class="string token">", "</SPAN><SPAN class="punctuation token">.</SPAN>join <SPAN class="punctuation token">(</SPAN>map <SPAN class="punctuation token">(</SPAN>str<SPAN class="punctuation token">,</SPAN> randOids<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
sql <SPAN class="operator token">=</SPAN> <SPAN class="string token">"{0} IN ({1})"</SPAN><SPAN class="punctuation token">.</SPAN>format <SPAN class="punctuation token">(</SPAN>delimOidFld<SPAN class="punctuation token">,</SPAN> oidsStr<SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>SelectLayerByAttribute_management <SPAN class="punctuation token">(</SPAN>layer<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> sql<SPAN class="punctuation token">)</SPAN>
SelectRandomByCount<SPAN class="punctuation token">(</SPAN>layer<SPAN class="punctuation token">,</SPAN> count<SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>management<SPAN class="punctuation token">.</SPAN>CalculateField<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"InputPoints100"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"Color"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'"ONE"'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"ARCADE"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"ONE"</SPAN><SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>Append_management<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'InputPoints100'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'InputPoints_LIST'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'TEST'</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">with</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>SearchCursor<SPAN class="punctuation token">(</SPAN>layer<SPAN class="punctuation token">,</SPAN>field_names <SPAN class="operator token">=</SPAN> <SPAN class="string token">"ObjectID"</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">as</SPAN> cursor<SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">for</SPAN> row <SPAN class="keyword token">in</SPAN> cursor<SPAN class="punctuation token">:</SPAN>
randomColor<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Done!"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>