CostPath: All cells in grid have NODATA value. VAT will not be built.

734
2
07-23-2013 08:33 AM
DominikFechter
New Contributor
Hi guys,
I have a huge problem running my python-script outside of ArcGIS. I'm trying to calculate a series of CostPath analysis and getting errors I can't figure out. Already rzufelt gave me some ideas, but they lead to other error messages. So I open a new thread, since the orignal one might be missleading in its title.

This is the rror message I get:

All cells in grid c:\dokume~1\admin\lokale~1\temp\t_t52108 have NODATA value. VAT will not be built.
Traceback (most recent call last):
  File "E:\My Dropbox\Diss\Python Workspace\GIS Tutorial\src\gis_proj.py", line 229, in <module>
    outCostPathFrankreich = CostPath("E:/CORINE/CP_Paper3/RunP/FPFrankreich_lyr.lyr", outCostDist, outBkLinkRaster, "BEST_SINGLE", "CID")
  File "C:\Programme\ArcGIS\Desktop10.0\arcpy\arcpy\sa\Functions.py", line 693, in CostPath
    destination_field)
  File "C:\Programme\ArcGIS\Desktop10.0\arcpy\arcpy\sa\Utils.py", line 47, in swapper
    result = wrapper(*args, **kwargs)
  File "C:\Programme\ArcGIS\Desktop10.0\arcpy\arcpy\sa\Functions.py", line 686, in wrapper
    destination_field)
  File "C:\Programme\ArcGIS\Desktop10.0\arcpy\arcpy\geoprocessing\_base.py", line 474, in <lambda>
    return lambda *args: val(*gp_fixargs(args))
arcgisscripting.ExecuteError: ERROR 010045: COSTPATH: The number of FROM cells is 0.
ERROR 010067: Error in executing grid expression.
Failed to execute (CostPath).

The corresponding code looks like this (I apologize in advance, since my naming the the variables is a bit weird):

import sys
sys.path.append("C:/Programme/ArcGIS/Desktop10.0/arcpy/arcpy")

import random
import arcpy
from arcpy import env
from arcpy.sa import *
arcpy.env.overwriteOutput = True

arcpy.CheckOutExtension("Spatial")

# Read Raster 
infor = Raster("E:/CORINE/CP_Paper3/RunP/data.gdb/CORINE_Forest_Raster_Aggregate")
inpas = Raster("E:/CORINE/CP_Paper3/RunP/data.gdb/CORINE_Pasture_Raster_Aggregate")
inwet = Raster("E:/CORINE/CP_Paper3/RunP/data.gdb/CORINE_Wetlands_Buffer_Raster_Aggregate")
inroa = Raster("E:/CORINE/CP_Paper3/RunP/data.gdb/LDRoadsproj")
city = Raster("E:/CORINE/CP_Paper3/RunP/data.gdb/CORINE_City_Rec")
water = Raster("E:/CORINE/CP_Paper3/RunP/data.gdb/CORINE_Waterbodies_Rec")

#Read CostDistance analysis data
insourcedata = "E:/CORINE/CP_Paper3/RunP/data.gdb/WG_lyr_lyr"
#insourcedata = arcpy.MakeFeatureLayer_management("E:/CORINE/CP_Paper3/RunP/WG.shp", "E:/CORINE/CP_Paper3/RunP/WG_lyr" )

ZielVogesen = "E:/CORINE/CP_Paper3/RunP/data.gdb/VogPointBuffer_lyr_lyr"
ZielFrankreich = "E:/CORINE/CP_Paper3/RunP/data.gdb/FrancePointBuffer_lyr_lyr"
ZielItalien = "E:/CORINE/CP_Paper3/RunP/data.gdb/ItalPointBuffer_lyr_lyr"
ZielSchweiz = "E:/CORINE/CP_Paper3/RunP/data.gdb/SchweizPointBuffer_lyr_lyr"

PunktFrankreich = Raster("E:/CORINE/CP_Paper3/RunP/data.gdb/FPRaster")
PunktItalien = Raster("E:/CORINE/CP_Paper3/RunP/data.gdb/IPRaster")
PunktSchweiz = Raster("E:/CORINE/CP_Paper3/RunP/data.gdb/SPRaster")
PunktVogesen = Raster("E:/CORINE/CP_Paper3/RunP/data.gdb/VPRaster")

#Determine No of runs (I need to make something around 10.000 runs at the end)
numberofruns = 100

#Create csv for storing randomly selected values
try:
    # This will create a new file or **overwrite an existing file**.
    f = open("E:/CORINE/CP_Paper3/RunP/laufRunPen.csv", "w")
    try:
        f.write("Lauf Nummer; Intercept; Forest; Pastures; Wetlands; Roads; Gruenbruecke; Wirtschaftsweg; Kreisstrasse; Schnellstrasse; Autobahn; Tunnel; Bach; Fluss; Eisenbahn;\n") 
               
    finally:
        f.close()
except IOError:
    pass

#Create csv for storing CostDistance values
try:
    # This will create a new file or **overwrite an existing file**.
    f = open("E:/CORINE/CP_Paper3/RunP/CDWerte_der_Laeufe.csv", "w")
    try:
        f.write("Lauf Nummer; Frankreich; Italien; Schweiz; Vogesen\n") 
               
    finally:
        f.close()
except IOError:
    pass

#Create Featureclass for storing the different CostPath results
arcpy.CreateFeatureclass_management("E:/CORINE/CP_Paper3/RunP/", "CPFrankreich.shp", "POLYLINE", "E:/CORINE/CP_Paper3/RunP/CPPolyFrankreich_dissolve.shp", "DISABLED", "DISABLED", "E:/CORINE/CP_Paper3/RunP/data.gdb/corinepoly_clip")
arcpy.CreateFeatureclass_management("E:/CORINE/CP_Paper3/RunP/", "CPItalien.shp", "POLYLINE", "E:/CORINE/CP_Paper3/RunP/CPPolyFrankreich_dissolve.shp", "DISABLED", "DISABLED", "E:/CORINE/CP_Paper3/RunP/data.gdb/corinepoly_clip")
arcpy.CreateFeatureclass_management("E:/CORINE/CP_Paper3/RunP/", "CPSchweiz.shp", "POLYLINE", "E:/CORINE/CP_Paper3/RunP/CPPolyFrankreich_dissolve.shp", "DISABLED", "DISABLED", "E:/CORINE/CP_Paper3/RunP/data.gdb/corinepoly_clip")
arcpy.CreateFeatureclass_management("E:/CORINE/CP_Paper3/RunP/", "CPVogesen.shp", "POLYLINE", "E:/CORINE/CP_Paper3/RunP/CPPolyFrankreich_dissolve.shp", "DISABLED", "DISABLED", "E:/CORINE/CP_Paper3/RunP/data.gdb/corinepoly_clip")

#Counter for while loop
rnumber = 1

print "No. of runs which will be calculated: " +str(numberofruns)

while rnumber < (numberofruns+1):
    
    print "Durchlauf Nr.: " + str(rnumber)
    
    #Raster with crossing values
    quer = Raster("E:/CORINE/CP_Paper3/RunP/data.gdb/querausw")
    
    #Determine random values for the variables
    rin = random.normalvariate(-16.9479, 3.08)
    rfo = random.normalvariate(0.9425, 0.038)
    rpa = random.normalvariate(0.4744, 0.075)
    rwe = random.normalvariate(0.6794, 0.126)
    rro = random.normalvariate(-19.5362, 9.643)
    
    rqgre = max(min(random.normalvariate(0.95, 0.0125), 1.0),0.0)
    rqwir = max(min(random.normalvariate(0.75, 0.0625), 1.0),0.0)
    rqkre = max(min(random.normalvariate(0.65, 0.0875), 1.0),0.0)
    rqsch = max(min(random.normalvariate(0.25, 0.1875), 1.0),0.0)
    rqaut = max(min(random.normalvariate(0.1, 0.225), 1.0),0.0)
    rqtun = max(min(random.normalvariate(0.95, 0.0125), 1.0),0.0)
    rqbac = max(min(random.normalvariate(0.9, 0.025),1.0),0.0)
    rqflu = max(min(random.normalvariate(0.9, 0.025),1.0),0.0)
    rqeis = max(min(random.normalvariate(0.85, 0.0375),1.0),0.0)
    
    rqgreint = int(rqgre*10000)
    rqwirint = int(rqwir*10000)
    rqkreint = int(rqkre*10000)
    rqschint = int(rqsch*10000)
    rqautint = int(rqaut*10000)
    rqtunint = int(rqtun*10000)
    rqbacint = int(rqbac*10000)
    rqfluint = int(rqflu*10000)
    rqeisint = int(rqeis*10000)
    


I need to divide this in two posts, its getting too long 😞
Tags (2)
0 Kudos
2 Replies
DominikFechter
New Contributor
and here is part two:



    # Store random values in csv-file
    try:
        
        f = open("E:/CORINE/CP_Paper3/RunP/laufRunPen.csv", "a")
        try:
            
            # Write a string to a file
            f.write(str(rnumber)+";"+str(rin)+";"+str(rfo)+";"+str(rpa)+";"+str(rwe)+";"+str(rro)+";"+str(rqgre)+";"+str(rqwir)+";"+str(rqkre)+";"+str(rqsch)+";"+str(rqaut)+";"+str(rqtun)+";"+str(rqbac)+";"+str(rqflu)+";"+str(rqeis)+";\n")
            
        finally:
            f.close()
    except IOError:
        pass
    
    
    #REclassify crossing raster
    querrec = Reclassify(quer, "Value", RemapValue([[0,rqgreint],[1,rqwirint],[2,rqkreint],[3,rqschint],[4,0], [5,rqautint],[6,rqtunint],[7,rqbacint], [8,rqfluint], [9,rqeisint]]))
    
    #Calculate change in Crossingraster in percent
    querrecfloat = 1.0 - (querrec / 10000.0)
    
    #Aggregate crossing raster to 1sqkm
    queragg = Aggregate(querrecfloat, 10, "MINIMUM", "EXPAND", "DATA")
    
    #Use crossing raster to modify the influence of road dataset
    inroab = inroa*queragg
    
    #calculate ressource selection function (rsf) for the habitat model
    rcalcstep2 = rin + (rfo*infor) + (rpa*inpas) + (rwe*inwet) + (rro*inroab)
    
    #Substract cities and waterbodies, because the are not suitable
    citya = city /1.0
    watera = water /1.0
    rcalcstep2a = ((rcalcstep2 * citya) * watera)
    
    #Calculate Min and Max values of the rsf
    min1 = str(arcpy.GetRasterProperties_management(rcalcstep2a, "Minimum"))
    max1 = str(arcpy.GetRasterProperties_management(rcalcstep2a, "Maximum"))
    
    #Change decimal point from "," to "."
    min11 = min1.replace(",", ".")
    max11 = max1.replace(",", ".")
    min111 = float(min11)
    max111 = float(max11)
    
    #scale everything to the range of 0.0 to 1.0
    rcalcstep3 = ((rcalcstep2a - min111)/(max111 - min111))
        
    #Create Cost Raster for CostDistance analysis (and add 0.00001 because the value can't be 0)
    incostraster = 1.00001 - rcalcstep3
        
    #Define Backlinkraster
    outBkLinkRaster = "E:/CORINE/CP_Paper3/RunP/backlink"
    
    #Cost Distance Analysis
    outCostDist = CostDistance(insourcedata, incostraster, "", outBkLinkRaster)
        
    #create random points in the destination area
    
    arcpy.CreateRandomPoints_management("E:/CORINE/CP_Paper3/RunP", "randFrankreich", ZielFrankreich, "", 1)
    arcpy.CreateRandomPoints_management("E:/CORINE/CP_Paper3/RunP", "randItalien", ZielItalien, "", 1)
    arcpy.CreateRandomPoints_management("E:/CORINE/CP_Paper3/RunP", "randSchweiz", ZielSchweiz, "", 1)
    arcpy.CreateRandomPoints_management("E:/CORINE/CP_Paper3/RunP", "randVogesen", ZielVogesen, "", 1)
    
    #Change points to Feature Layer
    arcpy.MakeFeatureLayer_management("E:/CORINE/CP_Paper3/RunP/randFrankreich.shp", "FPFrankreich")
    arcpy.MakeFeatureLayer_management("E:/CORINE/CP_Paper3/RunP/randItalien.shp", "FPItalien")
    arcpy.MakeFeatureLayer_management("E:/CORINE/CP_Paper3/RunP/randSchweiz.shp", "FPSchweiz")
    arcpy.MakeFeatureLayer_management("E:/CORINE/CP_Paper3/RunP/randVogesen.shp", "FPVogesen")
    arcpy.SaveToLayerFile_management("FPFrankreich","E:/CORINE/CP_Paper3/RunP/FPFrankreich_lyr.lyr")
    arcpy.SaveToLayerFile_management("FPItalien","E:/CORINE/CP_Paper3/RunP/FPItalien_lyr.lyr")
    arcpy.SaveToLayerFile_management("FPSchweiz","E:/CORINE/CP_Paper3/RunP/FPSchweiz_lyr.lyr")
    arcpy.SaveToLayerFile_management("FPVogesen","E:/CORINE/CP_Paper3/RunP/FPVogesen_lyr.lyr")
    
    # CostPath Analysis
    outCostPathFrankreich = CostPath("E:/CORINE/CP_Paper3/RunP/FPFrankreich_lyr.lyr", outCostDist, outBkLinkRaster, "BEST_SINGLE", "CID")
    outCostPathItalien= CostPath("E:/CORINE/CP_Paper3/RunP/FPItalien_lyr.lyr", outCostDist, outBkLinkRaster, "BEST_SINGLE", "CID")
    outCostPathschweiz = CostPath("E:/CORINE/CP_Paper3/RunP/FPSchweiz_lyr.lyr", outCostDist, outBkLinkRaster, "BEST_SINGLE", "CID")
    outCostPathVogesen = CostPath("E:/CORINE/CP_Paper3/RunP/FPVogesen_lyr.lyr", outCostDist, outBkLinkRaster, "BEST_SINGLE", "CID")
    
    # Conversion to polyline
    arcpy.RasterToPolyline_conversion(outCostPathFrankreich, "E:/CORINE/CP_Paper3/RunP/CPPolyFrankreich.shp", "NODATA", "", "NO_SIMPLIFY")
    arcpy.RasterToPolyline_conversion(outCostPathItalien, "E:/CORINE/CP_Paper3/RunP/CPPolyItalien.shp", "NODATA", "", "NO_SIMPLIFY")
    arcpy.RasterToPolyline_conversion(outCostPathschweiz, "E:/CORINE/CP_Paper3/RunP/CPPolySchweiz.shp", "NODATA", "", "NO_SIMPLIFY")
    arcpy.RasterToPolyline_conversion(outCostPathVogesen, "E:/CORINE/CP_Paper3/RunP/CPPolyVogesen.shp", "NODATA", "", "NO_SIMPLIFY")
    
    #Dissolve Polylines in one line (because the line is divided in two lines, since the starting cell in the CostPath analysis has a different value
    arcpy.Dissolve_management("E:/CORINE/CP_Paper3/RunP/CPPolyFrankreich.shp", "E:/CORINE/CP_Paper3/RunP/CPPolyFrankreich_dissolve.shp","", "", "SINGLE_PART","DISSOLVE_LINES")
    arcpy.Dissolve_management("E:/CORINE/CP_Paper3/RunP/CPPolyItalien.shp", "E:/CORINE/CP_Paper3/RunP/CPPolyItalien_dissolve.shp","", "", "SINGLE_PART","DISSOLVE_LINES")
    arcpy.Dissolve_management("E:/CORINE/CP_Paper3/RunP/CPPolySchweiz.shp", "E:/CORINE/CP_Paper3/RunP/CPPolySchweiz_dissolve.shp","", "", "SINGLE_PART","DISSOLVE_LINES")
    arcpy.Dissolve_management("E:/CORINE/CP_Paper3/RunP/CPPolyVogesen.shp", "E:/CORINE/CP_Paper3/RunP/CPPolyVogesen_dissolve.shp","", "", "SINGLE_PART","DISSOLVE_LINES")
    
    #Merge with result storage file
    arcpy.Append_management("E:/CORINE/CP_Paper3/RunP/CPPolyFrankreich_dissolve.shp", "E:/CORINE/CP_Paper3/RunP/CPFrankreich.shp", "TEST") 
    arcpy.Append_management("E:/CORINE/CP_Paper3/RunP/CPPolyItalien_dissolve.shp", "E:/CORINE/CP_Paper3/RunP/CPItalien.shp", "TEST", "", "" )
    arcpy.Append_management("E:/CORINE/CP_Paper3/RunP/CPPolySchweiz_dissolve.shp", "E:/CORINE/CP_Paper3/RunP/CPSchweiz.shp", "TEST", "", "" )
    arcpy.Append_management("E:/CORINE/CP_Paper3/RunP/CPPolyVogesen_dissolve.shp", "E:/CORINE/CP_Paper3/RunP/CPVogesen.shp", "TEST", "", "" )
    
    #Extract ans store values of the CostDistance analysis in corresponding csv file
    cdValueFrance = outCostDist * PunktFrankreich
    cdValueFrance1= str(arcpy.GetRasterProperties_management(cdValueFrance, "Maximum"))
    cdValueItaly = outCostDist * PunktItalien
    cdValueItaly1= str(arcpy.GetRasterProperties_management(cdValueItaly, "Maximum"))                    
    cdValueSchweiz = outCostDist * PunktSchweiz
    cdValueSchweiz1= str(arcpy.GetRasterProperties_management(cdValueSchweiz, "Maximum"))
    cdValueVogesen = outCostDist * PunktVogesen
    cdValueVogesen1= str(arcpy.GetRasterProperties_management(cdValueVogesen, "Maximum"))                         
     
    
    try:
        f = open("E:/CORINE/CP_Paper3/RunP/CDWerte_der_Laeufe.csv", "a")
        try:
             f.write(str(rnumber)+";"+str(cdValueFrance1)+";"+str(cdValueItaly1)+";"+str(cdValueSchweiz1)+";"+str(cdValueVogesen1)+";\n")
 
        finally:
            f.close()
    except IOError:
        pass
    
    
    #Reset variables to None
    
    rin = None
    rfo = None
    rpa = None
    rwe = None
    rro = None
    rqgre = None
    rqwir = None
    rqkre = None
    rqsch = None
    rqaut = None
    rqtun = None
    rqbac = None
    rqflu = None
    rqeis = None
    rqgreint = None
    rqwirint = None
    rqkreint = None
    rqschint = None
    rqautint = None
    rqtunint = None
    rqbacint = None
    rqfluint = None
    rqeisint = None
    querrec = None
    querrecfloat = None
    queragg = None
    inroab = None
    rcalcstep2 = None
    citya = None
    watera = None
    rcalcstep2a = None
    min1 = None
    max1 = None
    min11 = None
    max11 = None
    min111 = None
    max111 = None
    rcalcstep3 = None
    incostraster = None
    outBkLinkRaster = None
    outCostDist = None
    PFrankreich = None
    PItalien = None
    PSchweiz = None
    PVogesen = None
    outCostPathFrankreich = None
    outCostPathItalien= None
    outCostPathschweiz = None
    outCostPathVogesen = None
    cdValueFrance = None
    cdValueFrance1= None
    cdValueItaly = None
    cdValueItaly1= None                  
    cdValueSchweiz = None
    cdValueSchweiz1= None
    cdValueVogesen = None
    cdValueVogesen1= None
    rnumber = rnumber + 1

arcpy.CheckInExtension("spatial")

print "End of simulation"


If anyone has any idea that would be great. I am completly lost and dont know what to do and nobody at my faculty has any idea on that subject. I'm trying to find the problem for two weeks now and I'm really close to going completly insane! :mad:

Thanks a lot guys,

maybe there is still hope,

Dominik
0 Kudos
DominikFechter
New Contributor
Problem is solved, look here for the "solution":

http://forums.arcgis.com/threads/88947-CreateRandomPoints_management-creates-empty-feature-class?p=3...

Cheers, thanks to rzufelt,

Dominik
0 Kudos