Hi there! I have some raster files in grid format with signed integer pixels in which I want to add some fields in their table then compute values with some formulas in the new fields. I managed to add the fields but I'm struggling with the second part. I tried with arcpy.da.UpdateCursor but it returns a RuntimeError: 'in_table' is not a table or a feature class. It seems clear for me that I can not use this function with raster file. Is there a way to compute the values directly in the raster or do I have to try a different approach? How?
The code is:
<SPAN class="keyword token">import</SPAN> arcpy <SPAN class="keyword token">as</SPAN> ap
<SPAN class="keyword token">import</SPAN> os
<SPAN class="keyword token">import</SPAN> random_function <SPAN class="keyword token">as</SPAN> rf <SPAN class="comment token"># change name after</SPAN>
<SPAN class="keyword token">from</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>sa <SPAN class="keyword token">import</SPAN> <SPAN class="operator token">*</SPAN>
<SPAN class="keyword token">if</SPAN> ap<SPAN class="punctuation token">.</SPAN>CheckExtension<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'Spatial'</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">==</SPAN> <SPAN class="string token">'Available'</SPAN><SPAN class="punctuation token">:</SPAN>
ap<SPAN class="punctuation token">.</SPAN>CheckOutExtension<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'Spatial'</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">print</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">'Spatial Analyst extension is not available'</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># Setting environments & paths</SPAN>
ap<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>workspace <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"D:\\"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"master"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"_thesis_data"</SPAN><SPAN class="punctuation token">)</SPAN>
ap<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>scratchWorkspace <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>ap<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>workspace<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"temp"</SPAN><SPAN class="punctuation token">)</SPAN>
ap<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>overwriteOutput <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">True</SPAN>
inp_ws <SPAN class="operator token">=</SPAN> ap<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>workspace
temp_ws <SPAN class="operator token">=</SPAN> ap<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>scratchWorkspace
lu_folder <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>inp_ws<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"lu"</SPAN><SPAN class="punctuation token">)</SPAN>
lu_scenarios <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">for</SPAN> dirpath<SPAN class="punctuation token">,</SPAN> dirnames<SPAN class="punctuation token">,</SPAN> filenames <SPAN class="keyword token">in</SPAN> ap<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>Walk<SPAN class="punctuation token">(</SPAN>lu_folder<SPAN class="punctuation token">,</SPAN> datatype<SPAN class="operator token">=</SPAN><SPAN class="string token">'RasterDataset'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">for</SPAN> f <SPAN class="keyword token">in</SPAN> filenames<SPAN class="punctuation token">:</SPAN>
lu_scenarios<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN>os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>dirpath<SPAN class="punctuation token">,</SPAN>f<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># Setting input data </SPAN>
climate <SPAN class="operator token">=</SPAN> Raster<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"climate_c"</SPAN><SPAN class="punctuation token">)</SPAN>
clim_soil <SPAN class="operator token">=</SPAN> Raster<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"rc_climsoil_c"</SPAN><SPAN class="punctuation token">)</SPAN>
tbl_uSOCr <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>inp_ws<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"uSOCr.txt"</SPAN><SPAN class="punctuation token">)</SPAN>
tbl_uSOCf <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>inp_ws<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"uSOCf.txt"</SPAN><SPAN class="punctuation token">)</SPAN>
tbl_uBCi <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>inp_ws<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"uBCi.txt"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">for</SPAN> <SPAN class="punctuation token">(</SPAN>sc<SPAN class="punctuation token">,</SPAN> lu_sc<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">in</SPAN> enumerate<SPAN class="punctuation token">(</SPAN>lu_scenarios<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
lu <SPAN class="operator token">=</SPAN> Raster<SPAN class="punctuation token">(</SPAN>lu_sc<SPAN class="punctuation token">)</SPAN>
clim_lu <SPAN class="operator token">=</SPAN> climate <SPAN class="operator token">+</SPAN> lu
soc_f1k <SPAN class="operator token">=</SPAN> ReclassByTable<SPAN class="punctuation token">(</SPAN>clim_lu<SPAN class="punctuation token">,</SPAN> tbl_uSOCf<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"id"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"id"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"soc_factor"</SPAN><SPAN class="punctuation token">)</SPAN>
soc_r1k <SPAN class="operator token">=</SPAN> ReclassByTable<SPAN class="punctuation token">(</SPAN>clim_soil<SPAN class="punctuation token">,</SPAN> tbl_uSOCr<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"id"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"id"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"soc_ref"</SPAN><SPAN class="punctuation token">)</SPAN>
soc_1k <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>soc_f1k<SPAN class="operator token">*</SPAN>soc_r1k<SPAN class="punctuation token">)</SPAN><SPAN class="operator token">/</SPAN><SPAN class="number token">1000</SPAN>
bc_1k <SPAN class="operator token">=</SPAN> ReclassByTable<SPAN class="punctuation token">(</SPAN>clim_lu<SPAN class="punctuation token">,</SPAN> tbl_uBCi<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"id"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"id"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"bcs"</SPAN><SPAN class="punctuation token">)</SPAN>
tc_1k <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>soc_1k <SPAN class="operator token">+</SPAN> bc_1k<SPAN class="punctuation token">)</SPAN>
tc_1k_new_fields <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">"tc"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"tot_ha"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"tot_cs"</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">for</SPAN> field <SPAN class="keyword token">in</SPAN> tc_1k_new_fields<SPAN class="punctuation token">:</SPAN>
ap<SPAN class="punctuation token">.</SPAN>AddField_management<SPAN class="punctuation token">(</SPAN>tc_1k<SPAN class="punctuation token">,</SPAN> field<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"FLOAT"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">12</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">4</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">with</SPAN> ap<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>UpdateCursor<SPAN class="punctuation token">(</SPAN>tc_1k<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"*"</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">as</SPAN> cursor<SPAN class="punctuation token">:</SPAN>
tc_all_fields <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN>f<SPAN class="punctuation token">.</SPAN>name <SPAN class="keyword token">for</SPAN> f <SPAN class="keyword token">in</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>ListFields<SPAN class="punctuation token">(</SPAN>tc_1k<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">]</SPAN>
VALUE<SPAN class="punctuation token">,</SPAN> COUNT<SPAN class="punctuation token">,</SPAN> tc<SPAN class="punctuation token">,</SPAN> tot_ha<SPAN class="punctuation token">,</SPAN> tot_cs <SPAN class="operator token">=</SPAN> row<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> row<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> row<SPAN class="punctuation token">[</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> row<SPAN class="punctuation token">[</SPAN><SPAN class="number token">4</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> row<SPAN class="punctuation token">[</SPAN><SPAN class="number token">5</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">for</SPAN> row <SPAN class="keyword token">in</SPAN> cursor<SPAN class="punctuation token">:</SPAN>
tc <SPAN class="operator token">=</SPAN> VALUE<SPAN class="operator token">/</SPAN><SPAN class="number token">1000</SPAN>
tot_ha <SPAN class="operator token">=</SPAN> COUNT<SPAN class="operator token">*</SPAN><SPAN class="number token">2500</SPAN>
tot_cs <SPAN class="operator token">=</SPAN> tc<SPAN class="operator token">*</SPAN>tot_ha
cursor<SPAN class="punctuation token">.</SPAN>updateRow<SPAN class="punctuation token">(</SPAN>row<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">if</SPAN> ap<SPAN class="punctuation token">.</SPAN>GetRasterProperties_management<SPAN class="punctuation token">(</SPAN>tc_1k<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"ALLNODATA"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
tc_1k<SPAN class="punctuation token">.</SPAN>save<SPAN class="punctuation token">(</SPAN>temp_ws <SPAN class="operator token">+</SPAN> <SPAN class="string token">"\\"</SPAN> <SPAN class="operator token">+</SPAN> <SPAN class="string token">"0sc"</SPAN> <SPAN class="operator token">+</SPAN> str<SPAN class="punctuation token">(</SPAN>sc<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">+</SPAN> <SPAN class="string token">"_tc"</SPAN> <SPAN class="operator token">+</SPAN> str<SPAN class="punctuation token">(</SPAN>mc_counter<SPAN class="operator token">+</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># ==> TESTING DATA!!!</SPAN>
<SPAN class="keyword token">print</SPAN> tc_1k<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></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
Thanks again!