2016-04-13 21 views
0

Quellschicht ist Schicht, Ausgabeschicht wird ausgegeben. Das Skript aktualisiert die Quellschicht mit den neuen Feldern und deren Tally zusammen mit der Ausgabeschicht. Ich habe versucht, am Ende Felder aus der Ebene zu löschen. Setzen von fc als eine andere Ausgabe, Kopieren von fc zum Ausgeben am Ende und danach Löschen der Felder von fc/layer; und kopiere die Quellschicht rechts von der Fledermaus (konzeptionell macht das für mich am meisten Sinn ... vielleicht habe ich es falsch gemacht) ... keine Würfel.Quellschicht wird zusammen mit der Ausgabeschicht aktualisiert

Irgendwelche Ideen, die die Quellschicht erhalten würden, wie es ist, aber dieses Skript dazu bringen, auf der Ausgabe zu laufen und zu zählen? Danke für jede Eingabe !!

#workspace 
arcpy.env.workspace = wspace = arcpy.GetParameterAsText(0) 

#buildings 
layer = arcpy.GetParameterAsText(1) 

#trees 
trees = arcpy.GetParameterAsText(2) 

#buffer building to search 
buffer = arcpy.GetParameterAsText(3) 

#tree field interested in - tree condition, tree location, or tree pit 
tf = arcpy.GetParameterAsText(4) 

#output file 
output = arcpy.GetParameterAsText(5) 

#make feature layers to reference 
treelayer = arcpy.MakeFeatureLayer_management(trees, trees + ".shp") 
fc = arcpy.MakeFeatureLayer_management(layer, output) 

pit = ["Sidewalk", "Continuous", "Lawn"] 


if tf == "Tree Pit": 
for a in pit: 
    arcpy.AddField_management(fc, a, "SHORT") 

with arcpy.da.SearchCursor(fc, ["OBJECTID"]) as fcrows: 
    for a in fcrows: 

     arcpy.SelectLayerByAttribute_management(fc, "NEW_SELECTION", "OBJECTID={}".format(a[0])) 
     arcpy.SelectLayerByLocation_management(treelayer, "WITHIN_A_DISTANCE", fc, buffer, "NEW_SELECTION") 

     tlrows = arcpy.da.SearchCursor(treelayer, "SITE") 
     list1 = [] 
     for tlrow in tlrows: 

      list1.append(int(tlrow[0]))  

     fcrows1 = arcpy.da.UpdateCursor(fc, pit) 
     for fcrow1 in fcrows1: 
      if list1.count(1) > 0: 
       fcrow1[0] = list1.count(1) 
      else: 
       fcrow1[0] = 0 
      if list1.count(2) > 0: 
       fcrow1[1] = list1.count(2) 
      else: 
       fcrow1[1] = 0 
      if list1.count(3) > 0: 
       fcrow1[2] = list1.count(3) 
      else: 
       fcrow1[2] = 0 
      fcrows1.updateRow(fcrow1) 

Antwort

0

Sie möchten keine Variable, die der Funktion entspricht - erstellen Sie einfach den Feature-Layer.

arcpy.MakeFeatureLayer_management(layer, output) 

Dann sollten die nachfolgenden Schritte nur die output Schicht beeinflussen und ignorieren die Quelle layer, z.B .:

for a in pit: 
    arcpy.AddField_management(output, a, "SHORT") 

with arcpy.da.SearchCursor(output, ["OBJECTID"]) as fcrows: