I'm trying to streamline contour production with a script tool. Typically we make the contours to bring into AutoCAD Map where we need the "Elevation" and "Layer" fields populated so they import correctly.

Basic steps in the tool:

-create a focal statistics raster

-contour the Focal Stats raster

-add CAD fields

-calculate the contour values to the "Elevation" field that Auto CAD recognized

-Calculate destination CAD Layers (intermediate or index)

I'm throwing an error when I try to do arcpy.SelectLayerByAttribute_management at the end of the script below. the error states that "Parameters are not valid.The value cannot be a feature class".

OK. so if I can't use a Feature Class, what function should I use instead that can accept a FC input?

#Import stuff
import os
from arcpy import env  
from arcpy.sa import *

#where am I saving?
path = (str(arcpy.GetParameterAsText(0)))

#What layer are we using ?
mxd = arcpy.mapping.MapDocument("CURRENT")
ras1= arcpy.GetParameterAsText(1)

#name of contour FC or shp
fc_out= arcpy.GetParameterAsText(2)


#contour interval in units of z factor

#Focal Statistics Raster (hopefully this is just memory and goes away....confirm this later)
focalras=FocalStatistics(ras1, NbrCircle(3, "CELL"),"MEAN", "NODATA")

#do teh contour

#Add CAD Fields

if ".gdb" in path:

        #Add CAD Fields

        # If an error occurs while running a tool print the message
        print arcpy.GetMessages()

#Calculate attributes in new contour FC - still working on this.....

    contours = str(path)+"\\"+str(fc_out)

    #copy "Contour" field to newly added "Elevation" CAD field
    arcpy.CalculateField_management(contours, "Elevation", '!Contour!', "PYTHON_9.3")

#--------------WORKS FINE UP TO HERE------------    

    #Populate Indedx Contour layer name
    arcpy.SelectLayerByAttribute_management (contours, "NEW_SELECTION", "mod(Contour,10)=0")
    arcpy.CalculateField_management ( contours, "Layer", "\"ETOPO-IND\"", "PYTHON_9.3")

    #Populate Intermediate Contour layer name
    arcpy.SelectLayerByAttribute_management (contours, "NEW_SELECTION", "mod(Contour,10)>0")
    arcpy.CalculateField_management( contours , "Layer", "\"ETOPO-INT\"", "PYTHON_9.3")

    print "SHP output - no CAD fields added"

Create a feature layer from contour FC:

arcpy.MakeFeatureLayer_management(contour, "contour_lyr")

Use "contour_lyr" instead of contour in Select by attribute.

You can also create a variable for this line of code and use it as a layer name.

mylyr = arcpy.MakeFeatureLayer_management(contour, "contour_lyr")

arcpy.SelectLayerByAttribute_management (mylyr, "NEW_SELECTION", "mod(Contour,10)=0")

See this link.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.