Search code examples
pythonarcpy

Arcpy - Save NA layer to feature class


I'm in the process of updating some old tools and models from 9.3 to 10.3 and have run into an issue trying to save an in specific layers from a Network Analysis Layer.

Below is copy of my script and the error that it is generating:

arcpy.CheckOutExtension("Network")
arcpy.env.workspace = r"C:\aaa\response profile\test.gdb"

inNetworkDataset = "J:\\projects\\netmodels\\roadnetwork\\Vic_HERE_2014_Q2\\Data\\HERE_COREMAP.gdb\\RoutingApplication\\RoutingApplication_ND"
outNALayerName = "StationOfInterest"
allFacilities = r"C:\aaa\response profile\RMN.gdb\RNM_Statewide_Fire_Stations"
facilitiesQuery = "not occ_type = 'future fire station' and label in ('Springvale')"
arcpy.MakeFeatureLayer_management(allFacilities,"inFacilities", facilitiesQuery)
outLayerFile = r"C:\aaa\response profile" + "\\" + outNALayerName + ".lyr"
timeBreaks = 30
print "varibles set"

SA_result_object  = arcpy.na.MakeServiceAreaLayer(inNetworkDataset, outNALayerName,
                                  "EmergencyServicesTime", "TRAVEL_FROM", timeBreaks,
                                  "NO_POLYS", "NO_MERGE", "RINGS", "TRUE_LINES")
print "Service Area layer created"

#Get the layer object from the result object. The service layer can now be
#referenced using the layer object.
SA_layer_object = SA_result_object.getOutput(0)

#Get the names of all the sublayers within the service area layer.
SAClassesIn = arcpy.na.GetNAClassNames(SA_layer_object,"INPUT")
SAClassesOut = arcpy.na.GetNAClassNames(SA_layer_object,"OUTPUT")
#Stores the layer names to use later
facilitiesLayerName = SAClassesIn["Facilities"]
print "facilitiesLayerName: " + facilitiesLayerName
linesLayerName = SAClassesOut["SALines"]
print "linesLayerName: " + linesLayerName

arcpy.na.AddLocations(SA_layer_object , SAClassesIn["Facilities"], "inFacilities")
print "added locations to layer"
print "solving...."
arcpy.na.Solve(SA_layer_object )
print"solved"

********** these are the lines that is causing me issues **********
linesSublayer = SA_layer_object.listLayers(SAClassesOut["Lines"])[0]
arcpy.CopyFeatures_management(linesSublayer,"StationOfInterestLines")

The error I get is:

linesSublayer = SA_layer_object.listLayers(SAClassesOut["Lines"])[0]
AttributeError: 'Layer' object has no attribute 'listLayers'

Any ideas what is causing it, I'm doing my head in trying to work it. Thanks


Solution

  • Read over the ListLayers documentation -- it calls an MXD as a parameter, and isn't used as an attribute of a Layer object.

    The syntax:

    ListLayers (map_document_or_layer, {wildcard}, {data_frame})
    

    So you probably want something along the lines of:

    linesSublayer = arcpy.mapping.ListLayers(SA_layer_object, "Lines")[0]