Trying to run an arcpy.sa.WeightedOverlay on 3 datasets derived from multiple ring buffered point features and rasterized on the way, but am getting an error. I have tried everything in my power and listed online to mitigate this issue: same extent, cell size, projection, works fine when manually running in Pro with same datasets. Their pixel type: 16-bit signed integer
Short workflow on what I did with datasets: OSM data -> Multiple Ring Buffer -> Clip -> Polygon to Raster (this resulted in rasters with Short pixel type and produced same error). Next attempt was to convert to .tif format (as seen in the code the file extension) with Raster To Other Format (as it suggests on official Arcgis tool description). After that I've tried to reclassify the values, but results in Unsigned char pixel type.
Nevertheless, all these rasters I've tried in ArcPy actually work within the manual use of the tool.
I receive:
RuntimeError: Failed to apply Raster Function: 'WeightedOverlay' (Type mismatch. )
Code sample:
import arcpy
arcpy.env.workspace = r'..\\Application Development\\Suitability Analysis'
directory = r'..\\Application Development\\Suitability Analysis'
park_raster = arcpy.Raster(directory + r"\\data\\osm\\osm_final_tiff\\park_raster.tif") # don't add extensions as .tif, does not recognize layer
bus_raster = arcpy.Raster(directory + r"\\data\\osm\\osm_final_tiff\\bus_raster.tif")
economic_raster = arcpy.Raster(directory + r"\\data\\osm\\osm_final_tiff\\economic_raster.tif")
describe1 = arcpy.Raster(park_raster)
#checking if it fetches the raster, works fine
check_park = arcpy.management.GetRasterProperties(park_raster, "VALUETYPE")
wotable = arcpy.sa.WOTable([[park_raster, 50, "VALUE", ([[250, 5], [500, 4], [750, 3], [1000, 2], [5000, 1], ["NODATA", "NODATA"]])],
[bus_raster, 30, "VALUE", ([[100, 5], [250, 4], [500, 3], [1000, 2], [5000, 1], ["NODATA", "NODATA"]])],
[economic_raster, 20, "VALUE", ([[250, 5], [500, 4], [1000, 3], [2000, 2], [5000, 1], ["NODATA", "NODATA"]])]], [1, 5, 1])
outWeightedOverlay = arcpy.sa.WeightedOverlay(wotable)
outWeightedOverlay.save(r"..\\Application Development\\Suitability Analysis")
I have done everything in my power and what I've encountered so far: same projection, cell size, data type
One noticeable thing is that here RemapValue is defined within the WOTable but in mine code it doesn't exist as it is an unrecognized parameter and throws an error, if this can serve as a clue..
Any help would be appretiable. Thank you
Solved! Go to Solution.
from arcpy.sa import *
wotable = WOTable([
[park_raster, 50, "VALUE", ([[250, 5], [500, 4], [750, 3], [1000, 2], [5000, 1], ["NODATA", "NODATA"]])],
[bus_raster, 30, "VALUE", ([[100, 5], [250, 4], [500, 3], [1000, 2], [5000, 1], ["NODATA", "NODATA"]])],
[economic_raster, 20, "VALUE", ([[250, 5], [500, 4], [1000, 3], [2000, 2], [5000, 1], ["NODATA", "NODATA"]])]],
[1, 5, 1]
)
out_ = WeightedOverlay(wotable)
out_.save(...etc)
Did you try with the * import as in the help topics?
WOTable—ArcGIS Pro | Documentation
from arcpy.sa import *
wotable = WOTable([
[park_raster, 50, "VALUE", ([[250, 5], [500, 4], [750, 3], [1000, 2], [5000, 1], ["NODATA", "NODATA"]])],
[bus_raster, 30, "VALUE", ([[100, 5], [250, 4], [500, 3], [1000, 2], [5000, 1], ["NODATA", "NODATA"]])],
[economic_raster, 20, "VALUE", ([[250, 5], [500, 4], [1000, 3], [2000, 2], [5000, 1], ["NODATA", "NODATA"]])]],
[1, 5, 1]
)
out_ = WeightedOverlay(wotable)
out_.save(...etc)
Did you try with the * import as in the help topics?
WOTable—ArcGIS Pro | Documentation
Wow, this actually worked! Thank you!
What I had seen just as a module 'shortcutting' acutally did the trick. The RemapValue is now glowing as a parameter as it should after all!