Adapting esri tech python code for zonal stats for overlapping polygons. Continual error 999999 - not sure if issues transferring from arcmap, as I am working in arcpro.
Have tried many remedies, including changing unique value rendering, arcpro file extensions, building raster attribute table, changing zone feature ID column to integer; all filenames less than 13 chars. Not sure what the root of the issue is, so wanted to ask a wider audience if they'd experienced anything similar.
Usually when I run the code I get to 'print saved layer file', and then the code breaks.
Sometimes it works and then states that the iterated layer file does not exist - it does, its in the folder directory and in the arcpro document.
<SPAN class="keyword token">import</SPAN> arcpy<SPAN class="punctuation token">,</SPAN> os<SPAN class="punctuation token">,</SPAN> sys<SPAN class="punctuation token">,</SPAN> string
<SPAN class="keyword token">from</SPAN> arcpy <SPAN class="keyword token">import</SPAN> env
arcpy<SPAN class="punctuation token">.</SPAN>CheckOutExtension<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"spatial"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># Set the environmental variable to overwrite output</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>overwriteOutput <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">True</SPAN>
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">CreateDirectory</SPAN><SPAN class="punctuation token">(</SPAN>DBF_dir<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">if</SPAN> <SPAN class="operator token">not</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>exists<SPAN class="punctuation token">(</SPAN>DBF_dir<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
os<SPAN class="punctuation token">.</SPAN>mkdir<SPAN class="punctuation token">(</SPAN>DBF_dir<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">"created directory {0}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>DBF_dir<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">ZonalStatsAsTable_OL</SPAN><SPAN class="punctuation token">(</SPAN>fc<SPAN class="punctuation token">,</SPAN>DBF_dir<SPAN class="punctuation token">,</SPAN>raster<SPAN class="punctuation token">,</SPAN>zoneField<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>AddField_management<SPAN class="punctuation token">(</SPAN>fc<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"ID2"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"LONG"</SPAN><SPAN class="punctuation token">,</SPAN> field_is_nullable<SPAN class="operator token">=</SPAN><SPAN class="string token">"NON_NULLABLE"</SPAN><SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>CalculateField_management<SPAN class="punctuation token">(</SPAN>fc<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"ID2"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"!ID!"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">for</SPAN> row <SPAN class="keyword token">in</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>SearchCursor<SPAN class="punctuation token">(</SPAN>fc<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
lyr <SPAN class="operator token">=</SPAN> <SPAN class="string token">"Zone_{0}_lyr"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>row<SPAN class="punctuation token">.</SPAN>ID2<SPAN class="punctuation token">)</SPAN>
tempTable <SPAN class="operator token">=</SPAN> DBF_dir <SPAN class="operator token">+</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>sep <SPAN class="operator token">+</SPAN> <SPAN class="string token">"zone_{0}.dbf"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>row<SPAN class="punctuation token">.</SPAN>ID2<SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>MakeFeatureLayer_management<SPAN class="punctuation token">(</SPAN>fc<SPAN class="punctuation token">,</SPAN> lyr<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"\"ID2\" = {0}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>row<SPAN class="punctuation token">.</SPAN>ID2<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>BuildRasterAttributeTable_management<SPAN class="punctuation token">(</SPAN>raster<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"overwrite"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Creating layer {0}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>lyr<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
out_layer <SPAN class="operator token">=</SPAN> DBF_dir <SPAN class="operator token">+</SPAN> os<SPAN class="punctuation token">.</SPAN>sep <SPAN class="operator token">+</SPAN> lyr <SPAN class="operator token">+</SPAN> <SPAN class="string token">".lyrx"</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>SaveToLayerFile_management<SPAN class="punctuation token">(</SPAN>lyr<SPAN class="punctuation token">,</SPAN> out_layer<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Saved layer file"</SPAN><SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>gp<SPAN class="punctuation token">.</SPAN>ZonalStatisticsAsTable_sa<SPAN class="punctuation token">(</SPAN>out_layer<SPAN class="punctuation token">,</SPAN> zoneField<SPAN class="punctuation token">,</SPAN> raster<SPAN class="punctuation token">,</SPAN> tempTable<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"DATA"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"ALL"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Populating zonal stats for {0}"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>lyr<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">del</SPAN> row<SPAN class="punctuation token">,</SPAN> lyr
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">MergeTables</SPAN><SPAN class="punctuation token">(</SPAN>DBF_dir<SPAN class="punctuation token">,</SPAN>zstat_table<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>workspace <SPAN class="operator token">=</SPAN> DBF_dir
tableList <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>ListTables<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>Merge_management<SPAN class="punctuation token">(</SPAN>tableList<SPAN class="punctuation token">,</SPAN>zstat_table<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Merged tables. Final zonalstat table {0} created. Located at {1}"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>zstat_table<SPAN class="punctuation token">,</SPAN>DBF_dir<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">del</SPAN> tableList
<SPAN class="keyword token">if</SPAN> __name__ <SPAN class="operator token">==</SPAN> <SPAN class="string token">"__main__"</SPAN><SPAN class="punctuation token">:</SPAN>
ws <SPAN class="operator token">=</SPAN> <SPAN class="string token">"D:\TEMP"</SPAN>
DBF_dir <SPAN class="operator token">=</SPAN> ws <SPAN class="operator token">+</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>sep <SPAN class="operator token">+</SPAN> <SPAN class="string token">"DBFile"</SPAN>
fc <SPAN class="operator token">=</SPAN> <SPAN class="string token">"D:\iteratortest\ZoneFeatures.shp"</SPAN>
zoneField <SPAN class="operator token">=</SPAN> <SPAN class="string token">"ID2"</SPAN>
raster <SPAN class="operator token">=</SPAN> r<SPAN class="string token">"D:\iteratortest\Hansen_GFCv16.tif"</SPAN>
zstat_table <SPAN class="operator token">=</SPAN> DBF_dir <SPAN class="operator token">+</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>sep <SPAN class="operator token">+</SPAN> <SPAN class="string token">"Zonalstat.dbf"</SPAN>
CreateDirectory<SPAN class="punctuation token">(</SPAN>DBF_dir<SPAN class="punctuation token">)</SPAN>
ZonalStatsAsTable_OL<SPAN class="punctuation token">(</SPAN>fc<SPAN class="punctuation token">,</SPAN>DBF_dir<SPAN class="punctuation token">,</SPAN>raster<SPAN class="punctuation token">,</SPAN>zoneField<SPAN class="punctuation token">)</SPAN>
MergeTables<SPAN class="punctuation token">(</SPAN>DBF_dir<SPAN class="punctuation token">,</SPAN>zstat_table<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></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>