源层随输出层一起更新

source layer updating along with output layer

源层是图层,输出层是输出。该脚本正在使用新字段及其计数更新源层,以及输出层。我试过最后从图层中删除字段;将 fc 设置为不同的输出,最后将 fc 复制到输出,然后从 fc/layer 中删除字段;并复制 bat 的源层(从概念上讲,这对我来说最有意义......也许我做错了)......没有骰子。

有什么想法可以按原样保留源层,但将此脚本添加到 运行 并计算输出?感谢您的任何输入!!

#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)

您不需要一个等于函数的变量 -- 只需制作要素图层即可。

arcpy.MakeFeatureLayer_management(layer, output)

那么,后续步骤应该只影响 output 层并忽略源 layer,例如:

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

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